commit ea513131259e183017476cb3177649c804a35af9 Author: Nicola Paolucci Date: Tue Jun 18 15:04:35 2019 -0400 init, thx MrExtremez diff --git a/2006Redone Client/.classpath b/2006Redone Client/.classpath new file mode 100644 index 00000000..d171cd4c --- /dev/null +++ b/2006Redone Client/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/2006Redone Client/.project b/2006Redone Client/.project new file mode 100644 index 00000000..d4d05699 --- /dev/null +++ b/2006Redone Client/.project @@ -0,0 +1,17 @@ + + + RS2006 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/2006Redone Client/.settings/org.eclipse.jdt.core.prefs b/2006Redone Client/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..54e493c0 --- /dev/null +++ b/2006Redone Client/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/2006Redone Client/bin/Animable.class b/2006Redone Client/bin/Animable.class new file mode 100644 index 00000000..f16a1368 Binary files /dev/null and b/2006Redone Client/bin/Animable.class differ diff --git a/2006Redone Client/bin/Animable_Sub3.class b/2006Redone Client/bin/Animable_Sub3.class new file mode 100644 index 00000000..c7a1fad4 Binary files /dev/null and b/2006Redone Client/bin/Animable_Sub3.class differ diff --git a/2006Redone Client/bin/Animable_Sub4.class b/2006Redone Client/bin/Animable_Sub4.class new file mode 100644 index 00000000..35b70529 Binary files /dev/null and b/2006Redone Client/bin/Animable_Sub4.class differ diff --git a/2006Redone Client/bin/Animable_Sub5.class b/2006Redone Client/bin/Animable_Sub5.class new file mode 100644 index 00000000..b329b513 Binary files /dev/null and b/2006Redone Client/bin/Animable_Sub5.class differ diff --git a/2006Redone Client/bin/Animation.class b/2006Redone Client/bin/Animation.class new file mode 100644 index 00000000..f2c2a378 Binary files /dev/null and b/2006Redone Client/bin/Animation.class differ diff --git a/2006Redone Client/bin/Background.class b/2006Redone Client/bin/Background.class new file mode 100644 index 00000000..963d4c40 Binary files /dev/null and b/2006Redone Client/bin/Background.class differ diff --git a/2006Redone Client/bin/Censor.class b/2006Redone Client/bin/Censor.class new file mode 100644 index 00000000..e5b39c02 Binary files /dev/null and b/2006Redone Client/bin/Censor.class differ diff --git a/2006Redone Client/bin/Class11.class b/2006Redone Client/bin/Class11.class new file mode 100644 index 00000000..1450d190 Binary files /dev/null and b/2006Redone Client/bin/Class11.class differ diff --git a/2006Redone Client/bin/Class13.class b/2006Redone Client/bin/Class13.class new file mode 100644 index 00000000..9b14b6ac Binary files /dev/null and b/2006Redone Client/bin/Class13.class differ diff --git a/2006Redone Client/bin/Class18.class b/2006Redone Client/bin/Class18.class new file mode 100644 index 00000000..97cf24ff Binary files /dev/null and b/2006Redone Client/bin/Class18.class differ diff --git a/2006Redone Client/bin/Class21.class b/2006Redone Client/bin/Class21.class new file mode 100644 index 00000000..9369e9c7 Binary files /dev/null and b/2006Redone Client/bin/Class21.class differ diff --git a/2006Redone Client/bin/Class29.class b/2006Redone Client/bin/Class29.class new file mode 100644 index 00000000..5ad0c33d Binary files /dev/null and b/2006Redone Client/bin/Class29.class differ diff --git a/2006Redone Client/bin/Class30_Sub1.class b/2006Redone Client/bin/Class30_Sub1.class new file mode 100644 index 00000000..f3deedb4 Binary files /dev/null and b/2006Redone Client/bin/Class30_Sub1.class differ diff --git a/2006Redone Client/bin/Class32.class b/2006Redone Client/bin/Class32.class new file mode 100644 index 00000000..aacccae4 Binary files /dev/null and b/2006Redone Client/bin/Class32.class differ diff --git a/2006Redone Client/bin/Class33.class b/2006Redone Client/bin/Class33.class new file mode 100644 index 00000000..9572397d Binary files /dev/null and b/2006Redone Client/bin/Class33.class differ diff --git a/2006Redone Client/bin/Class36.class b/2006Redone Client/bin/Class36.class new file mode 100644 index 00000000..ff87931c Binary files /dev/null and b/2006Redone Client/bin/Class36.class differ diff --git a/2006Redone Client/bin/Class39.class b/2006Redone Client/bin/Class39.class new file mode 100644 index 00000000..a5d53514 Binary files /dev/null and b/2006Redone Client/bin/Class39.class differ diff --git a/2006Redone Client/bin/Class4.class b/2006Redone Client/bin/Class4.class new file mode 100644 index 00000000..2bae6c74 Binary files /dev/null and b/2006Redone Client/bin/Class4.class differ diff --git a/2006Redone Client/bin/Class40.class b/2006Redone Client/bin/Class40.class new file mode 100644 index 00000000..c8ca5382 Binary files /dev/null and b/2006Redone Client/bin/Class40.class differ diff --git a/2006Redone Client/bin/Class43.class b/2006Redone Client/bin/Class43.class new file mode 100644 index 00000000..42ce01fa Binary files /dev/null and b/2006Redone Client/bin/Class43.class differ diff --git a/2006Redone Client/bin/Class47.class b/2006Redone Client/bin/Class47.class new file mode 100644 index 00000000..40d28c18 Binary files /dev/null and b/2006Redone Client/bin/Class47.class differ diff --git a/2006Redone Client/bin/Class56.class b/2006Redone Client/bin/Class56.class new file mode 100644 index 00000000..1dba8eab Binary files /dev/null and b/2006Redone Client/bin/Class56.class differ diff --git a/2006Redone Client/bin/Class56_Sub1.class b/2006Redone Client/bin/Class56_Sub1.class new file mode 100644 index 00000000..ea5a0997 Binary files /dev/null and b/2006Redone Client/bin/Class56_Sub1.class differ diff --git a/2006Redone Client/bin/Class56_Sub1_Sub1.class b/2006Redone Client/bin/Class56_Sub1_Sub1.class new file mode 100644 index 00000000..d44c8f35 Binary files /dev/null and b/2006Redone Client/bin/Class56_Sub1_Sub1.class differ diff --git a/2006Redone Client/bin/Class56_Sub1_Sub2.class b/2006Redone Client/bin/Class56_Sub1_Sub2.class new file mode 100644 index 00000000..dff1b8a5 Binary files /dev/null and b/2006Redone Client/bin/Class56_Sub1_Sub2.class differ diff --git a/2006Redone Client/bin/Class6.class b/2006Redone Client/bin/Class6.class new file mode 100644 index 00000000..7face060 Binary files /dev/null and b/2006Redone Client/bin/Class6.class differ diff --git a/2006Redone Client/bin/ClientSettings.class b/2006Redone Client/bin/ClientSettings.class new file mode 100644 index 00000000..610b1581 Binary files /dev/null and b/2006Redone Client/bin/ClientSettings.class differ diff --git a/2006Redone Client/bin/CollisionMap.class b/2006Redone Client/bin/CollisionMap.class new file mode 100644 index 00000000..d569d503 Binary files /dev/null and b/2006Redone Client/bin/CollisionMap.class differ diff --git a/2006Redone Client/bin/Decompressor.class b/2006Redone Client/bin/Decompressor.class new file mode 100644 index 00000000..3b357c94 Binary files /dev/null and b/2006Redone Client/bin/Decompressor.class differ diff --git a/2006Redone Client/bin/DrawingArea.class b/2006Redone Client/bin/DrawingArea.class new file mode 100644 index 00000000..96cad42b Binary files /dev/null and b/2006Redone Client/bin/DrawingArea.class differ diff --git a/2006Redone Client/bin/DummyClass.class b/2006Redone Client/bin/DummyClass.class new file mode 100644 index 00000000..d6c84e86 Binary files /dev/null and b/2006Redone Client/bin/DummyClass.class differ diff --git a/2006Redone Client/bin/Entity.class b/2006Redone Client/bin/Entity.class new file mode 100644 index 00000000..907b428a Binary files /dev/null and b/2006Redone Client/bin/Entity.class differ diff --git a/2006Redone Client/bin/EntityDef.class b/2006Redone Client/bin/EntityDef.class new file mode 100644 index 00000000..9d05bef0 Binary files /dev/null and b/2006Redone Client/bin/EntityDef.class differ diff --git a/2006Redone Client/bin/Flo.class b/2006Redone Client/bin/Flo.class new file mode 100644 index 00000000..44145627 Binary files /dev/null and b/2006Redone Client/bin/Flo.class differ diff --git a/2006Redone Client/bin/Game.class b/2006Redone Client/bin/Game.class new file mode 100644 index 00000000..d9491f86 Binary files /dev/null and b/2006Redone Client/bin/Game.class differ diff --git a/2006Redone Client/bin/Ground.class b/2006Redone Client/bin/Ground.class new file mode 100644 index 00000000..ff9cc4a3 Binary files /dev/null and b/2006Redone Client/bin/Ground.class differ diff --git a/2006Redone Client/bin/IDK.class b/2006Redone Client/bin/IDK.class new file mode 100644 index 00000000..e4e1036b Binary files /dev/null and b/2006Redone Client/bin/IDK.class differ diff --git a/2006Redone Client/bin/ISAACRandomGen.class b/2006Redone Client/bin/ISAACRandomGen.class new file mode 100644 index 00000000..21abace9 Binary files /dev/null and b/2006Redone Client/bin/ISAACRandomGen.class differ diff --git a/2006Redone Client/bin/InputStream_Sub1.class b/2006Redone Client/bin/InputStream_Sub1.class new file mode 100644 index 00000000..e521cf95 Binary files /dev/null and b/2006Redone Client/bin/InputStream_Sub1.class differ diff --git a/2006Redone Client/bin/Item.class b/2006Redone Client/bin/Item.class new file mode 100644 index 00000000..572d9138 Binary files /dev/null and b/2006Redone Client/bin/Item.class differ diff --git a/2006Redone Client/bin/ItemDef.class b/2006Redone Client/bin/ItemDef.class new file mode 100644 index 00000000..5b977129 Binary files /dev/null and b/2006Redone Client/bin/ItemDef.class differ diff --git a/2006Redone Client/bin/MRUNodes.class b/2006Redone Client/bin/MRUNodes.class new file mode 100644 index 00000000..3e1cb3ec Binary files /dev/null and b/2006Redone Client/bin/MRUNodes.class differ diff --git a/2006Redone Client/bin/Main.class b/2006Redone Client/bin/Main.class new file mode 100644 index 00000000..f44db50b Binary files /dev/null and b/2006Redone Client/bin/Main.class differ diff --git a/2006Redone Client/bin/Midi.class b/2006Redone Client/bin/Midi.class new file mode 100644 index 00000000..94eebc67 Binary files /dev/null and b/2006Redone Client/bin/Midi.class differ diff --git a/2006Redone Client/bin/Model.class b/2006Redone Client/bin/Model.class new file mode 100644 index 00000000..e95dd579 Binary files /dev/null and b/2006Redone Client/bin/Model.class differ diff --git a/2006Redone Client/bin/MouseDetection.class b/2006Redone Client/bin/MouseDetection.class new file mode 100644 index 00000000..253caf25 Binary files /dev/null and b/2006Redone Client/bin/MouseDetection.class differ diff --git a/2006Redone Client/bin/NPC.class b/2006Redone Client/bin/NPC.class new file mode 100644 index 00000000..17a57bf6 Binary files /dev/null and b/2006Redone Client/bin/NPC.class differ diff --git a/2006Redone Client/bin/Node.class b/2006Redone Client/bin/Node.class new file mode 100644 index 00000000..ab044f7b Binary files /dev/null and b/2006Redone Client/bin/Node.class differ diff --git a/2006Redone Client/bin/NodeCache.class b/2006Redone Client/bin/NodeCache.class new file mode 100644 index 00000000..7a404acd Binary files /dev/null and b/2006Redone Client/bin/NodeCache.class differ diff --git a/2006Redone Client/bin/NodeList.class b/2006Redone Client/bin/NodeList.class new file mode 100644 index 00000000..5ab6aa4c Binary files /dev/null and b/2006Redone Client/bin/NodeList.class differ diff --git a/2006Redone Client/bin/NodeSub.class b/2006Redone Client/bin/NodeSub.class new file mode 100644 index 00000000..d5c150f8 Binary files /dev/null and b/2006Redone Client/bin/NodeSub.class differ diff --git a/2006Redone Client/bin/NodeSubList.class b/2006Redone Client/bin/NodeSubList.class new file mode 100644 index 00000000..e41379f2 Binary files /dev/null and b/2006Redone Client/bin/NodeSubList.class differ diff --git a/2006Redone Client/bin/Object1.class b/2006Redone Client/bin/Object1.class new file mode 100644 index 00000000..f2aaf08b Binary files /dev/null and b/2006Redone Client/bin/Object1.class differ diff --git a/2006Redone Client/bin/Object2.class b/2006Redone Client/bin/Object2.class new file mode 100644 index 00000000..6f2c2f5d Binary files /dev/null and b/2006Redone Client/bin/Object2.class differ diff --git a/2006Redone Client/bin/Object3.class b/2006Redone Client/bin/Object3.class new file mode 100644 index 00000000..29197a16 Binary files /dev/null and b/2006Redone Client/bin/Object3.class differ diff --git a/2006Redone Client/bin/Object4.class b/2006Redone Client/bin/Object4.class new file mode 100644 index 00000000..758e2237 Binary files /dev/null and b/2006Redone Client/bin/Object4.class differ diff --git a/2006Redone Client/bin/Object5.class b/2006Redone Client/bin/Object5.class new file mode 100644 index 00000000..4039a55a Binary files /dev/null and b/2006Redone Client/bin/Object5.class differ diff --git a/2006Redone Client/bin/ObjectDef.class b/2006Redone Client/bin/ObjectDef.class new file mode 100644 index 00000000..81e6fab5 Binary files /dev/null and b/2006Redone Client/bin/ObjectDef.class differ diff --git a/2006Redone Client/bin/ObjectManager.class b/2006Redone Client/bin/ObjectManager.class new file mode 100644 index 00000000..63faf78a Binary files /dev/null and b/2006Redone Client/bin/ObjectManager.class differ diff --git a/2006Redone Client/bin/OnDemandData.class b/2006Redone Client/bin/OnDemandData.class new file mode 100644 index 00000000..9a2bc17a Binary files /dev/null and b/2006Redone Client/bin/OnDemandData.class differ diff --git a/2006Redone Client/bin/OnDemandFetcher.class b/2006Redone Client/bin/OnDemandFetcher.class new file mode 100644 index 00000000..73a7d771 Binary files /dev/null and b/2006Redone Client/bin/OnDemandFetcher.class differ diff --git a/2006Redone Client/bin/OnDemandFetcherParent.class b/2006Redone Client/bin/OnDemandFetcherParent.class new file mode 100644 index 00000000..912a6a37 Binary files /dev/null and b/2006Redone Client/bin/OnDemandFetcherParent.class differ diff --git a/2006Redone Client/bin/Player.class b/2006Redone Client/bin/Player.class new file mode 100644 index 00000000..353f48a1 Binary files /dev/null and b/2006Redone Client/bin/Player.class differ diff --git a/2006Redone Client/bin/RSApplet.class b/2006Redone Client/bin/RSApplet.class new file mode 100644 index 00000000..315d3c5f Binary files /dev/null and b/2006Redone Client/bin/RSApplet.class differ diff --git a/2006Redone Client/bin/RSFrame.class b/2006Redone Client/bin/RSFrame.class new file mode 100644 index 00000000..2e9c89eb Binary files /dev/null and b/2006Redone Client/bin/RSFrame.class differ diff --git a/2006Redone Client/bin/RSImageProducer.class b/2006Redone Client/bin/RSImageProducer.class new file mode 100644 index 00000000..35323b3a Binary files /dev/null and b/2006Redone Client/bin/RSImageProducer.class differ diff --git a/2006Redone Client/bin/RSInterface.class b/2006Redone Client/bin/RSInterface.class new file mode 100644 index 00000000..7aedcbfa Binary files /dev/null and b/2006Redone Client/bin/RSInterface.class differ diff --git a/2006Redone Client/bin/RSSocket.class b/2006Redone Client/bin/RSSocket.class new file mode 100644 index 00000000..af878468 Binary files /dev/null and b/2006Redone Client/bin/RSSocket.class differ diff --git a/2006Redone Client/bin/Runnable_Impl1.class b/2006Redone Client/bin/Runnable_Impl1.class new file mode 100644 index 00000000..268cfba2 Binary files /dev/null and b/2006Redone Client/bin/Runnable_Impl1.class differ diff --git a/2006Redone Client/bin/Signlink$Position.class b/2006Redone Client/bin/Signlink$Position.class new file mode 100644 index 00000000..a84e7af8 Binary files /dev/null and b/2006Redone Client/bin/Signlink$Position.class differ diff --git a/2006Redone Client/bin/Signlink.class b/2006Redone Client/bin/Signlink.class new file mode 100644 index 00000000..cf0ae42c Binary files /dev/null and b/2006Redone Client/bin/Signlink.class differ diff --git a/2006Redone Client/bin/SizeConstants.class b/2006Redone Client/bin/SizeConstants.class new file mode 100644 index 00000000..cbd50245 Binary files /dev/null and b/2006Redone Client/bin/SizeConstants.class differ diff --git a/2006Redone Client/bin/Skills.class b/2006Redone Client/bin/Skills.class new file mode 100644 index 00000000..e70e7f31 Binary files /dev/null and b/2006Redone Client/bin/Skills.class differ diff --git a/2006Redone Client/bin/SoundPlayer.class b/2006Redone Client/bin/SoundPlayer.class new file mode 100644 index 00000000..f3090fc6 Binary files /dev/null and b/2006Redone Client/bin/SoundPlayer.class differ diff --git a/2006Redone Client/bin/Sounds.class b/2006Redone Client/bin/Sounds.class new file mode 100644 index 00000000..d179f6df Binary files /dev/null and b/2006Redone Client/bin/Sounds.class differ diff --git a/2006Redone Client/bin/SpotAnim.class b/2006Redone Client/bin/SpotAnim.class new file mode 100644 index 00000000..c8a8daf3 Binary files /dev/null and b/2006Redone Client/bin/SpotAnim.class differ diff --git a/2006Redone Client/bin/Sprite.class b/2006Redone Client/bin/Sprite.class new file mode 100644 index 00000000..9fa3f87a Binary files /dev/null and b/2006Redone Client/bin/Sprite.class differ diff --git a/2006Redone Client/bin/Stream.class b/2006Redone Client/bin/Stream.class new file mode 100644 index 00000000..31e137cf Binary files /dev/null and b/2006Redone Client/bin/Stream.class differ diff --git a/2006Redone Client/bin/StreamLoader.class b/2006Redone Client/bin/StreamLoader.class new file mode 100644 index 00000000..d514d8dc Binary files /dev/null and b/2006Redone Client/bin/StreamLoader.class differ diff --git a/2006Redone Client/bin/TextClass.class b/2006Redone Client/bin/TextClass.class new file mode 100644 index 00000000..1e68d8d8 Binary files /dev/null and b/2006Redone Client/bin/TextClass.class differ diff --git a/2006Redone Client/bin/TextDrawingArea.class b/2006Redone Client/bin/TextDrawingArea.class new file mode 100644 index 00000000..8ad89a0e Binary files /dev/null and b/2006Redone Client/bin/TextDrawingArea.class differ diff --git a/2006Redone Client/bin/TextInput.class b/2006Redone Client/bin/TextInput.class new file mode 100644 index 00000000..3fa6c78b Binary files /dev/null and b/2006Redone Client/bin/TextInput.class differ diff --git a/2006Redone Client/bin/Texture.class b/2006Redone Client/bin/Texture.class new file mode 100644 index 00000000..028e9cca Binary files /dev/null and b/2006Redone Client/bin/Texture.class differ diff --git a/2006Redone Client/bin/VarBit.class b/2006Redone Client/bin/VarBit.class new file mode 100644 index 00000000..f1a2015e Binary files /dev/null and b/2006Redone Client/bin/VarBit.class differ diff --git a/2006Redone Client/bin/Varp.class b/2006Redone Client/bin/Varp.class new file mode 100644 index 00000000..86e2abcb Binary files /dev/null and b/2006Redone Client/bin/Varp.class differ diff --git a/2006Redone Client/bin/WorldController.class b/2006Redone Client/bin/WorldController.class new file mode 100644 index 00000000..6dee6e23 Binary files /dev/null and b/2006Redone Client/bin/WorldController.class differ diff --git a/2006Redone Client/compile.bat b/2006Redone Client/compile.bat new file mode 100644 index 00000000..0f1cd68e --- /dev/null +++ b/2006Redone Client/compile.bat @@ -0,0 +1,7 @@ +@echo off + + +cd src + "C:\Program Files\Java\jre7\bin\javac.exe" -cp . -d ../bin/ ./*java + +pause \ No newline at end of file diff --git a/2006Redone Client/release/binary/Main.class b/2006Redone Client/release/binary/Main.class new file mode 100644 index 00000000..5a0c2812 Binary files /dev/null and b/2006Redone Client/release/binary/Main.class differ diff --git a/2006Redone Client/release/binary/a.class b/2006Redone Client/release/binary/a.class new file mode 100644 index 00000000..933abf75 Binary files /dev/null and b/2006Redone Client/release/binary/a.class differ diff --git a/2006Redone Client/release/binary/aa.class b/2006Redone Client/release/binary/aa.class new file mode 100644 index 00000000..b9956840 Binary files /dev/null and b/2006Redone Client/release/binary/aa.class differ diff --git a/2006Redone Client/release/binary/ab.class b/2006Redone Client/release/binary/ab.class new file mode 100644 index 00000000..8201617d Binary files /dev/null and b/2006Redone Client/release/binary/ab.class differ diff --git a/2006Redone Client/release/binary/ac.class b/2006Redone Client/release/binary/ac.class new file mode 100644 index 00000000..e773f4a4 Binary files /dev/null and b/2006Redone Client/release/binary/ac.class differ diff --git a/2006Redone Client/release/binary/ad.class b/2006Redone Client/release/binary/ad.class new file mode 100644 index 00000000..61f021ad Binary files /dev/null and b/2006Redone Client/release/binary/ad.class differ diff --git a/2006Redone Client/release/binary/ae.class b/2006Redone Client/release/binary/ae.class new file mode 100644 index 00000000..b81d50e1 Binary files /dev/null and b/2006Redone Client/release/binary/ae.class differ diff --git a/2006Redone Client/release/binary/af.class b/2006Redone Client/release/binary/af.class new file mode 100644 index 00000000..502122de Binary files /dev/null and b/2006Redone Client/release/binary/af.class differ diff --git a/2006Redone Client/release/binary/ag.class b/2006Redone Client/release/binary/ag.class new file mode 100644 index 00000000..2fd57325 Binary files /dev/null and b/2006Redone Client/release/binary/ag.class differ diff --git a/2006Redone Client/release/binary/ah.class b/2006Redone Client/release/binary/ah.class new file mode 100644 index 00000000..e00ce3a5 Binary files /dev/null and b/2006Redone Client/release/binary/ah.class differ diff --git a/2006Redone Client/release/binary/ai.class b/2006Redone Client/release/binary/ai.class new file mode 100644 index 00000000..686c427a Binary files /dev/null and b/2006Redone Client/release/binary/ai.class differ diff --git a/2006Redone Client/release/binary/aj.class b/2006Redone Client/release/binary/aj.class new file mode 100644 index 00000000..741213ba Binary files /dev/null and b/2006Redone Client/release/binary/aj.class differ diff --git a/2006Redone Client/release/binary/ak.class b/2006Redone Client/release/binary/ak.class new file mode 100644 index 00000000..6e0b2f97 Binary files /dev/null and b/2006Redone Client/release/binary/ak.class differ diff --git a/2006Redone Client/release/binary/al.class b/2006Redone Client/release/binary/al.class new file mode 100644 index 00000000..db54c577 Binary files /dev/null and b/2006Redone Client/release/binary/al.class differ diff --git a/2006Redone Client/release/binary/am.class b/2006Redone Client/release/binary/am.class new file mode 100644 index 00000000..4deae7bd Binary files /dev/null and b/2006Redone Client/release/binary/am.class differ diff --git a/2006Redone Client/release/binary/an.class b/2006Redone Client/release/binary/an.class new file mode 100644 index 00000000..1ea4f223 Binary files /dev/null and b/2006Redone Client/release/binary/an.class differ diff --git a/2006Redone Client/release/binary/ao.class b/2006Redone Client/release/binary/ao.class new file mode 100644 index 00000000..5bda3a89 Binary files /dev/null and b/2006Redone Client/release/binary/ao.class differ diff --git a/2006Redone Client/release/binary/ap.class b/2006Redone Client/release/binary/ap.class new file mode 100644 index 00000000..da501fd6 Binary files /dev/null and b/2006Redone Client/release/binary/ap.class differ diff --git a/2006Redone Client/release/binary/aq.class b/2006Redone Client/release/binary/aq.class new file mode 100644 index 00000000..e6e04b6b Binary files /dev/null and b/2006Redone Client/release/binary/aq.class differ diff --git a/2006Redone Client/release/binary/ar.class b/2006Redone Client/release/binary/ar.class new file mode 100644 index 00000000..e135ce9b Binary files /dev/null and b/2006Redone Client/release/binary/ar.class differ diff --git a/2006Redone Client/release/binary/as.class b/2006Redone Client/release/binary/as.class new file mode 100644 index 00000000..00dc4675 Binary files /dev/null and b/2006Redone Client/release/binary/as.class differ diff --git a/2006Redone Client/release/binary/at.class b/2006Redone Client/release/binary/at.class new file mode 100644 index 00000000..79d5b9a1 Binary files /dev/null and b/2006Redone Client/release/binary/at.class differ diff --git a/2006Redone Client/release/binary/au.class b/2006Redone Client/release/binary/au.class new file mode 100644 index 00000000..aa17d6cf Binary files /dev/null and b/2006Redone Client/release/binary/au.class differ diff --git a/2006Redone Client/release/binary/av.class b/2006Redone Client/release/binary/av.class new file mode 100644 index 00000000..74914669 Binary files /dev/null and b/2006Redone Client/release/binary/av.class differ diff --git a/2006Redone Client/release/binary/aw.class b/2006Redone Client/release/binary/aw.class new file mode 100644 index 00000000..1b359e3e Binary files /dev/null and b/2006Redone Client/release/binary/aw.class differ diff --git a/2006Redone Client/release/binary/ax.class b/2006Redone Client/release/binary/ax.class new file mode 100644 index 00000000..ff03da70 Binary files /dev/null and b/2006Redone Client/release/binary/ax.class differ diff --git a/2006Redone Client/release/binary/ay.class b/2006Redone Client/release/binary/ay.class new file mode 100644 index 00000000..9a80fb96 Binary files /dev/null and b/2006Redone Client/release/binary/ay.class differ diff --git a/2006Redone Client/release/binary/az.class b/2006Redone Client/release/binary/az.class new file mode 100644 index 00000000..a7f80a12 Binary files /dev/null and b/2006Redone Client/release/binary/az.class differ diff --git a/2006Redone Client/release/binary/b.class b/2006Redone Client/release/binary/b.class new file mode 100644 index 00000000..11c22542 Binary files /dev/null and b/2006Redone Client/release/binary/b.class differ diff --git a/2006Redone Client/release/binary/ba.class b/2006Redone Client/release/binary/ba.class new file mode 100644 index 00000000..7db0779d Binary files /dev/null and b/2006Redone Client/release/binary/ba.class differ diff --git a/2006Redone Client/release/binary/bb.class b/2006Redone Client/release/binary/bb.class new file mode 100644 index 00000000..4c0fd045 Binary files /dev/null and b/2006Redone Client/release/binary/bb.class differ diff --git a/2006Redone Client/release/binary/bc.class b/2006Redone Client/release/binary/bc.class new file mode 100644 index 00000000..9d0e756a Binary files /dev/null and b/2006Redone Client/release/binary/bc.class differ diff --git a/2006Redone Client/release/binary/bd.class b/2006Redone Client/release/binary/bd.class new file mode 100644 index 00000000..b540ddae Binary files /dev/null and b/2006Redone Client/release/binary/bd.class differ diff --git a/2006Redone Client/release/binary/be.class b/2006Redone Client/release/binary/be.class new file mode 100644 index 00000000..3d64cbb4 Binary files /dev/null and b/2006Redone Client/release/binary/be.class differ diff --git a/2006Redone Client/release/binary/bf.class b/2006Redone Client/release/binary/bf.class new file mode 100644 index 00000000..f62b6684 Binary files /dev/null and b/2006Redone Client/release/binary/bf.class differ diff --git a/2006Redone Client/release/binary/bg.class b/2006Redone Client/release/binary/bg.class new file mode 100644 index 00000000..f3fcccdd Binary files /dev/null and b/2006Redone Client/release/binary/bg.class differ diff --git a/2006Redone Client/release/binary/bh.class b/2006Redone Client/release/binary/bh.class new file mode 100644 index 00000000..89c311a6 Binary files /dev/null and b/2006Redone Client/release/binary/bh.class differ diff --git a/2006Redone Client/release/binary/bi.class b/2006Redone Client/release/binary/bi.class new file mode 100644 index 00000000..f8893b33 Binary files /dev/null and b/2006Redone Client/release/binary/bi.class differ diff --git a/2006Redone Client/release/binary/bj.class b/2006Redone Client/release/binary/bj.class new file mode 100644 index 00000000..dc5b4d39 Binary files /dev/null and b/2006Redone Client/release/binary/bj.class differ diff --git a/2006Redone Client/release/binary/bk.class b/2006Redone Client/release/binary/bk.class new file mode 100644 index 00000000..05f02a21 Binary files /dev/null and b/2006Redone Client/release/binary/bk.class differ diff --git a/2006Redone Client/release/binary/bl.class b/2006Redone Client/release/binary/bl.class new file mode 100644 index 00000000..3d2ae546 Binary files /dev/null and b/2006Redone Client/release/binary/bl.class differ diff --git a/2006Redone Client/release/binary/bm.class b/2006Redone Client/release/binary/bm.class new file mode 100644 index 00000000..6d11a766 Binary files /dev/null and b/2006Redone Client/release/binary/bm.class differ diff --git a/2006Redone Client/release/binary/bn.class b/2006Redone Client/release/binary/bn.class new file mode 100644 index 00000000..3955fd79 Binary files /dev/null and b/2006Redone Client/release/binary/bn.class differ diff --git a/2006Redone Client/release/binary/bo.class b/2006Redone Client/release/binary/bo.class new file mode 100644 index 00000000..0ebddf24 Binary files /dev/null and b/2006Redone Client/release/binary/bo.class differ diff --git a/2006Redone Client/release/binary/bp.class b/2006Redone Client/release/binary/bp.class new file mode 100644 index 00000000..d545c872 Binary files /dev/null and b/2006Redone Client/release/binary/bp.class differ diff --git a/2006Redone Client/release/binary/bq.class b/2006Redone Client/release/binary/bq.class new file mode 100644 index 00000000..55d861cc Binary files /dev/null and b/2006Redone Client/release/binary/bq.class differ diff --git a/2006Redone Client/release/binary/br.class b/2006Redone Client/release/binary/br.class new file mode 100644 index 00000000..52b19b09 Binary files /dev/null and b/2006Redone Client/release/binary/br.class differ diff --git a/2006Redone Client/release/binary/bs.class b/2006Redone Client/release/binary/bs.class new file mode 100644 index 00000000..7c709bcd Binary files /dev/null and b/2006Redone Client/release/binary/bs.class differ diff --git a/2006Redone Client/release/binary/bt.class b/2006Redone Client/release/binary/bt.class new file mode 100644 index 00000000..0dc4126b Binary files /dev/null and b/2006Redone Client/release/binary/bt.class differ diff --git a/2006Redone Client/release/binary/bu.class b/2006Redone Client/release/binary/bu.class new file mode 100644 index 00000000..c5287c82 Binary files /dev/null and b/2006Redone Client/release/binary/bu.class differ diff --git a/2006Redone Client/release/binary/bv.class b/2006Redone Client/release/binary/bv.class new file mode 100644 index 00000000..7d20e19d Binary files /dev/null and b/2006Redone Client/release/binary/bv.class differ diff --git a/2006Redone Client/release/binary/bw.class b/2006Redone Client/release/binary/bw.class new file mode 100644 index 00000000..63dd3163 Binary files /dev/null and b/2006Redone Client/release/binary/bw.class differ diff --git a/2006Redone Client/release/binary/bx.class b/2006Redone Client/release/binary/bx.class new file mode 100644 index 00000000..2064b9de Binary files /dev/null and b/2006Redone Client/release/binary/bx.class differ diff --git a/2006Redone Client/release/binary/by.class b/2006Redone Client/release/binary/by.class new file mode 100644 index 00000000..4b96d9c6 Binary files /dev/null and b/2006Redone Client/release/binary/by.class differ diff --git a/2006Redone Client/release/binary/c.class b/2006Redone Client/release/binary/c.class new file mode 100644 index 00000000..20360df3 Binary files /dev/null and b/2006Redone Client/release/binary/c.class differ diff --git a/2006Redone Client/release/binary/d.class b/2006Redone Client/release/binary/d.class new file mode 100644 index 00000000..6cc4a808 Binary files /dev/null and b/2006Redone Client/release/binary/d.class differ diff --git a/2006Redone Client/release/binary/e.class b/2006Redone Client/release/binary/e.class new file mode 100644 index 00000000..3123c1d8 Binary files /dev/null and b/2006Redone Client/release/binary/e.class differ diff --git a/2006Redone Client/release/binary/f.class b/2006Redone Client/release/binary/f.class new file mode 100644 index 00000000..75b2dc53 Binary files /dev/null and b/2006Redone Client/release/binary/f.class differ diff --git a/2006Redone Client/release/binary/g.class b/2006Redone Client/release/binary/g.class new file mode 100644 index 00000000..5d39a6b8 Binary files /dev/null and b/2006Redone Client/release/binary/g.class differ diff --git a/2006Redone Client/release/binary/h.class b/2006Redone Client/release/binary/h.class new file mode 100644 index 00000000..e468467c Binary files /dev/null and b/2006Redone Client/release/binary/h.class differ diff --git a/2006Redone Client/release/binary/i.class b/2006Redone Client/release/binary/i.class new file mode 100644 index 00000000..0ad4a48e Binary files /dev/null and b/2006Redone Client/release/binary/i.class differ diff --git a/2006Redone Client/release/binary/j.class b/2006Redone Client/release/binary/j.class new file mode 100644 index 00000000..28648b9a Binary files /dev/null and b/2006Redone Client/release/binary/j.class differ diff --git a/2006Redone Client/release/binary/k.class b/2006Redone Client/release/binary/k.class new file mode 100644 index 00000000..d267ac4e Binary files /dev/null and b/2006Redone Client/release/binary/k.class differ diff --git a/2006Redone Client/release/binary/l.class b/2006Redone Client/release/binary/l.class new file mode 100644 index 00000000..a05cb595 Binary files /dev/null and b/2006Redone Client/release/binary/l.class differ diff --git a/2006Redone Client/release/binary/m.class b/2006Redone Client/release/binary/m.class new file mode 100644 index 00000000..e21d1a75 Binary files /dev/null and b/2006Redone Client/release/binary/m.class differ diff --git a/2006Redone Client/release/binary/n.class b/2006Redone Client/release/binary/n.class new file mode 100644 index 00000000..ce5a0e5e Binary files /dev/null and b/2006Redone Client/release/binary/n.class differ diff --git a/2006Redone Client/release/binary/o.class b/2006Redone Client/release/binary/o.class new file mode 100644 index 00000000..495774a8 Binary files /dev/null and b/2006Redone Client/release/binary/o.class differ diff --git a/2006Redone Client/release/binary/p.class b/2006Redone Client/release/binary/p.class new file mode 100644 index 00000000..19685d82 Binary files /dev/null and b/2006Redone Client/release/binary/p.class differ diff --git a/2006Redone Client/release/binary/q.class b/2006Redone Client/release/binary/q.class new file mode 100644 index 00000000..f0efc1fe Binary files /dev/null and b/2006Redone Client/release/binary/q.class differ diff --git a/2006Redone Client/release/binary/r.class b/2006Redone Client/release/binary/r.class new file mode 100644 index 00000000..6bbc8aec Binary files /dev/null and b/2006Redone Client/release/binary/r.class differ diff --git a/2006Redone Client/release/binary/s.class b/2006Redone Client/release/binary/s.class new file mode 100644 index 00000000..dc5fe49c Binary files /dev/null and b/2006Redone Client/release/binary/s.class differ diff --git a/2006Redone Client/release/binary/t.class b/2006Redone Client/release/binary/t.class new file mode 100644 index 00000000..cb013332 Binary files /dev/null and b/2006Redone Client/release/binary/t.class differ diff --git a/2006Redone Client/release/binary/u.class b/2006Redone Client/release/binary/u.class new file mode 100644 index 00000000..05d2071a Binary files /dev/null and b/2006Redone Client/release/binary/u.class differ diff --git a/2006Redone Client/release/binary/v.class b/2006Redone Client/release/binary/v.class new file mode 100644 index 00000000..cdd89309 Binary files /dev/null and b/2006Redone Client/release/binary/v.class differ diff --git a/2006Redone Client/release/binary/w.class b/2006Redone Client/release/binary/w.class new file mode 100644 index 00000000..1e381224 Binary files /dev/null and b/2006Redone Client/release/binary/w.class differ diff --git a/2006Redone Client/release/binary/x.class b/2006Redone Client/release/binary/x.class new file mode 100644 index 00000000..47a370fd Binary files /dev/null and b/2006Redone Client/release/binary/x.class differ diff --git a/2006Redone Client/release/binary/y.class b/2006Redone Client/release/binary/y.class new file mode 100644 index 00000000..6f5de41a Binary files /dev/null and b/2006Redone Client/release/binary/y.class differ diff --git a/2006Redone Client/release/binary/z.class b/2006Redone Client/release/binary/z.class new file mode 100644 index 00000000..49cefc8f Binary files /dev/null and b/2006Redone Client/release/binary/z.class differ diff --git a/2006Redone Client/release/binary/zd.class b/2006Redone Client/release/binary/zd.class new file mode 100644 index 00000000..ad8609d7 Binary files /dev/null and b/2006Redone Client/release/binary/zd.class differ diff --git a/2006Redone Client/release/client.bat b/2006Redone Client/release/client.bat new file mode 100644 index 00000000..a1078e69 --- /dev/null +++ b/2006Redone Client/release/client.bat @@ -0,0 +1,9 @@ +@ECHO OFF +ECHO THIS BATCH IS FOR DEBUGGING THE EXECUTABLE JAR ONLY +ECHO DOUBLE-CLICK THE "client.jar" TO RUN IT +ECHO - +ECHO Generated by: JAR Maker (http://www.goldenstudios.or.id/) +@ECHO ON +java -jar client.jar +@ECHO OFF +pause diff --git a/2006Redone Client/release/client.jar b/2006Redone Client/release/client.jar new file mode 100644 index 00000000..fc2ff539 Binary files /dev/null and b/2006Redone Client/release/client.jar differ diff --git a/2006Redone Client/release/init-arch.cmd b/2006Redone Client/release/init-arch.cmd new file mode 100644 index 00000000..1cea6671 --- /dev/null +++ b/2006Redone Client/release/init-arch.cmd @@ -0,0 +1 @@ +java -jar client.jar \ No newline at end of file diff --git a/2006Redone Client/release/init-bin.cmd b/2006Redone Client/release/init-bin.cmd new file mode 100644 index 00000000..976fb79d --- /dev/null +++ b/2006Redone Client/release/init-bin.cmd @@ -0,0 +1 @@ +java -cp binary; zd \ No newline at end of file diff --git a/2006Redone Client/release/jms.JMS b/2006Redone Client/release/jms.JMS new file mode 100644 index 00000000..57cf4b44 Binary files /dev/null and b/2006Redone Client/release/jms.JMS differ diff --git a/2006Redone Client/release/keystore b/2006Redone Client/release/keystore new file mode 100644 index 00000000..d89ae299 Binary files /dev/null and b/2006Redone Client/release/keystore differ diff --git a/2006Redone Client/release/obf.pro b/2006Redone Client/release/obf.pro new file mode 100644 index 00000000..9d277c2c --- /dev/null +++ b/2006Redone Client/release/obf.pro @@ -0,0 +1,296 @@ +-injars 'C:\Users\Ryley Kimmel\Dropbox\2006redone\2006Redone (1)\2006scape Client\bin' +-outjars binary + +-libraryjars 'C:\Program Files\Java\jre6\lib\rt.jar' + +-dontusemixedcaseclassnames + + +# Keep - Applications. Keep all application classes, along with their 'main' +# methods. +-keepclasseswithmembers public class * { + public static void main(java.lang.String[]); +} + +# Also keep - Enumerations. Keep the special static methods that are required in +# enumeration classes. +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +# Also keep - Database drivers. Keep all implementations of java.sql.Driver. +-keep class * extends java.sql.Driver + +# Also keep - Swing UI L&F. Keep all extensions of javax.swing.plaf.ComponentUI, +# along with the special 'createUI' method. +-keep class * extends javax.swing.plaf.ComponentUI { + public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent); +} + +# Keep names - Native method names. Keep all native class/method names. +-keepclasseswithmembers,allowshrinking class * { + native ; +} + +# Remove - System method calls. Remove all invocations of System +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.System { + public static long currentTimeMillis(); + static java.lang.Class getCallerClass(); + public static int identityHashCode(java.lang.Object); + public static java.lang.SecurityManager getSecurityManager(); + public static java.util.Properties getProperties(); + public static java.lang.String getProperty(java.lang.String); + public static java.lang.String getenv(java.lang.String); + public static java.lang.String mapLibraryName(java.lang.String); + public static java.lang.String getProperty(java.lang.String,java.lang.String); +} + +# Remove - Math method calls. Remove all invocations of Math +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.Math { + public static double sin(double); + public static double cos(double); + public static double tan(double); + public static double asin(double); + public static double acos(double); + public static double atan(double); + public static double toRadians(double); + public static double toDegrees(double); + public static double exp(double); + public static double log(double); + public static double log10(double); + public static double sqrt(double); + public static double cbrt(double); + public static double IEEEremainder(double,double); + public static double ceil(double); + public static double floor(double); + public static double rint(double); + public static double atan2(double,double); + public static double pow(double,double); + public static int round(float); + public static long round(double); + public static double random(); + public static int abs(int); + public static long abs(long); + public static float abs(float); + public static double abs(double); + public static int max(int,int); + public static long max(long,long); + public static float max(float,float); + public static double max(double,double); + public static int min(int,int); + public static long min(long,long); + public static float min(float,float); + public static double min(double,double); + public static double ulp(double); + public static float ulp(float); + public static double signum(double); + public static float signum(float); + public static double sinh(double); + public static double cosh(double); + public static double tanh(double); + public static double hypot(double,double); + public static double expm1(double); + public static double log1p(double); +} + +# Remove - Number method calls. Remove all invocations of Number +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.* extends java.lang.Number { + public static java.lang.String toString(byte); + public static java.lang.Byte valueOf(byte); + public static byte parseByte(java.lang.String); + public static byte parseByte(java.lang.String,int); + public static java.lang.Byte valueOf(java.lang.String,int); + public static java.lang.Byte valueOf(java.lang.String); + public static java.lang.Byte decode(java.lang.String); + public int compareTo(java.lang.Byte); + public static java.lang.String toString(short); + public static short parseShort(java.lang.String); + public static short parseShort(java.lang.String,int); + public static java.lang.Short valueOf(java.lang.String,int); + public static java.lang.Short valueOf(java.lang.String); + public static java.lang.Short valueOf(short); + public static java.lang.Short decode(java.lang.String); + public static short reverseBytes(short); + public int compareTo(java.lang.Short); + public static java.lang.String toString(int,int); + public static java.lang.String toHexString(int); + public static java.lang.String toOctalString(int); + public static java.lang.String toBinaryString(int); + public static java.lang.String toString(int); + public static int parseInt(java.lang.String,int); + public static int parseInt(java.lang.String); + public static java.lang.Integer valueOf(java.lang.String,int); + public static java.lang.Integer valueOf(java.lang.String); + public static java.lang.Integer valueOf(int); + public static java.lang.Integer getInteger(java.lang.String); + public static java.lang.Integer getInteger(java.lang.String,int); + public static java.lang.Integer getInteger(java.lang.String,java.lang.Integer); + public static java.lang.Integer decode(java.lang.String); + public static int highestOneBit(int); + public static int lowestOneBit(int); + public static int numberOfLeadingZeros(int); + public static int numberOfTrailingZeros(int); + public static int bitCount(int); + public static int rotateLeft(int,int); + public static int rotateRight(int,int); + public static int reverse(int); + public static int signum(int); + public static int reverseBytes(int); + public int compareTo(java.lang.Integer); + public static java.lang.String toString(long,int); + public static java.lang.String toHexString(long); + public static java.lang.String toOctalString(long); + public static java.lang.String toBinaryString(long); + public static java.lang.String toString(long); + public static long parseLong(java.lang.String,int); + public static long parseLong(java.lang.String); + public static java.lang.Long valueOf(java.lang.String,int); + public static java.lang.Long valueOf(java.lang.String); + public static java.lang.Long valueOf(long); + public static java.lang.Long decode(java.lang.String); + public static java.lang.Long getLong(java.lang.String); + public static java.lang.Long getLong(java.lang.String,long); + public static java.lang.Long getLong(java.lang.String,java.lang.Long); + public static long highestOneBit(long); + public static long lowestOneBit(long); + public static int numberOfLeadingZeros(long); + public static int numberOfTrailingZeros(long); + public static int bitCount(long); + public static long rotateLeft(long,int); + public static long rotateRight(long,int); + public static long reverse(long); + public static int signum(long); + public static long reverseBytes(long); + public int compareTo(java.lang.Long); + public static java.lang.String toString(float); + public static java.lang.String toHexString(float); + public static java.lang.Float valueOf(java.lang.String); + public static java.lang.Float valueOf(float); + public static float parseFloat(java.lang.String); + public static boolean isNaN(float); + public static boolean isInfinite(float); + public static int floatToIntBits(float); + public static int floatToRawIntBits(float); + public static float intBitsToFloat(int); + public static int compare(float,float); + public boolean isNaN(); + public boolean isInfinite(); + public int compareTo(java.lang.Float); + public static java.lang.String toString(double); + public static java.lang.String toHexString(double); + public static java.lang.Double valueOf(java.lang.String); + public static java.lang.Double valueOf(double); + public static double parseDouble(java.lang.String); + public static boolean isNaN(double); + public static boolean isInfinite(double); + public static long doubleToLongBits(double); + public static long doubleToRawLongBits(double); + public static double longBitsToDouble(long); + public static int compare(double,double); + public boolean isNaN(); + public boolean isInfinite(); + public int compareTo(java.lang.Double); + public byte byteValue(); + public short shortValue(); + public int intValue(); + public long longValue(); + public float floatValue(); + public double doubleValue(); + public int compareTo(java.lang.Object); + public boolean equals(java.lang.Object); + public int hashCode(); + public java.lang.String toString(); +} + +# Remove - String method calls. Remove all invocations of String +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.String { + public static java.lang.String copyValueOf(char[]); + public static java.lang.String copyValueOf(char[],int,int); + public static java.lang.String valueOf(boolean); + public static java.lang.String valueOf(char); + public static java.lang.String valueOf(char[]); + public static java.lang.String valueOf(char[],int,int); + public static java.lang.String valueOf(double); + public static java.lang.String valueOf(float); + public static java.lang.String valueOf(int); + public static java.lang.String valueOf(java.lang.Object); + public static java.lang.String valueOf(long); + public boolean contentEquals(java.lang.StringBuffer); + public boolean endsWith(java.lang.String); + public boolean equalsIgnoreCase(java.lang.String); + public boolean equals(java.lang.Object); + public boolean matches(java.lang.String); + public boolean regionMatches(boolean,int,java.lang.String,int,int); + public boolean regionMatches(int,java.lang.String,int,int); + public boolean startsWith(java.lang.String); + public boolean startsWith(java.lang.String,int); + public byte[] getBytes(); + public byte[] getBytes(java.lang.String); + public char charAt(int); + public char[] toCharArray(); + public int compareToIgnoreCase(java.lang.String); + public int compareTo(java.lang.Object); + public int compareTo(java.lang.String); + public int hashCode(); + public int indexOf(int); + public int indexOf(int,int); + public int indexOf(java.lang.String); + public int indexOf(java.lang.String,int); + public int lastIndexOf(int); + public int lastIndexOf(int,int); + public int lastIndexOf(java.lang.String); + public int lastIndexOf(java.lang.String,int); + public int length(); + public java.lang.CharSequence subSequence(int,int); + public java.lang.String concat(java.lang.String); + public java.lang.String replaceAll(java.lang.String,java.lang.String); + public java.lang.String replace(char,char); + public java.lang.String replaceFirst(java.lang.String,java.lang.String); + public java.lang.String[] split(java.lang.String); + public java.lang.String[] split(java.lang.String,int); + public java.lang.String substring(int); + public java.lang.String substring(int,int); + public java.lang.String toLowerCase(); + public java.lang.String toLowerCase(java.util.Locale); + public java.lang.String toString(); + public java.lang.String toUpperCase(); + public java.lang.String toUpperCase(java.util.Locale); + public java.lang.String trim(); +} + +# Remove - StringBuffer method calls. Remove all invocations of StringBuffer +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.StringBuffer { + public java.lang.String toString(); + public char charAt(int); + public int capacity(); + public int codePointAt(int); + public int codePointBefore(int); + public int indexOf(java.lang.String,int); + public int lastIndexOf(java.lang.String); + public int lastIndexOf(java.lang.String,int); + public int length(); + public java.lang.String substring(int); + public java.lang.String substring(int,int); +} + +# Remove - StringBuilder method calls. Remove all invocations of StringBuilder +# methods without side effects whose return values are not used. +-assumenosideeffects public class java.lang.StringBuilder { + public java.lang.String toString(); + public char charAt(int); + public int capacity(); + public int codePointAt(int); + public int codePointBefore(int); + public int indexOf(java.lang.String,int); + public int lastIndexOf(java.lang.String); + public int lastIndexOf(java.lang.String,int); + public int length(); + public java.lang.String substring(int); + public java.lang.String substring(int,int); +} diff --git a/2006Redone Client/run.bat b/2006Redone Client/run.bat new file mode 100644 index 00000000..bffae8e3 --- /dev/null +++ b/2006Redone Client/run.bat @@ -0,0 +1,5 @@ +@echo off +title 2006Redone +cd bin +java Main +pause \ No newline at end of file diff --git a/2006Redone Client/src/Animable.java b/2006Redone Client/src/Animable.java new file mode 100644 index 00000000..8b216f63 --- /dev/null +++ b/2006Redone Client/src/Animable.java @@ -0,0 +1,25 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class Animable extends NodeSub { + + public void method443(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2) { + Model model = getRotatedModel(); + if (model != null) { + modelHeight = model.modelHeight; + model.method443(i, j, k, l, i1, j1, k1, l1, i2); + } + } + + Model getRotatedModel() { + return null; + } + + Animable() { + modelHeight = 1000; + } + + Class33 aClass33Array1425[]; + public int modelHeight; +} diff --git a/2006Redone Client/src/Animable_Sub3.java b/2006Redone Client/src/Animable_Sub3.java new file mode 100644 index 00000000..763e7e76 --- /dev/null +++ b/2006Redone Client/src/Animable_Sub3.java @@ -0,0 +1,74 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Animable_Sub3 extends Animable { + + public Animable_Sub3(int i, int j, int l, int i1, int j1, int k1, int l1) { + aBoolean1567 = false; + aSpotAnim_1568 = SpotAnim.cache[i1]; + anInt1560 = i; + anInt1561 = l1; + anInt1562 = k1; + anInt1563 = j1; + anInt1564 = j + l; + aBoolean1567 = false; + } + + @Override + public Model getRotatedModel() { + Model model = aSpotAnim_1568.getModel(); + if (model == null) { + return null; + } + int j = aSpotAnim_1568.aAnimation_407.anIntArray353[anInt1569]; + Model model_1 = new Model(true, Class36.method532(j), false, model); + if (!aBoolean1567) { + model_1.method469(); + model_1.method470(j); + model_1.anIntArrayArray1658 = null; + model_1.anIntArrayArray1657 = null; + } + if (aSpotAnim_1568.anInt410 != 128 || aSpotAnim_1568.anInt411 != 128) { + model_1.method478(aSpotAnim_1568.anInt410, aSpotAnim_1568.anInt410, aSpotAnim_1568.anInt411); + } + if (aSpotAnim_1568.anInt412 != 0) { + if (aSpotAnim_1568.anInt412 == 90) { + model_1.method473(); + } + if (aSpotAnim_1568.anInt412 == 180) { + model_1.method473(); + model_1.method473(); + } + if (aSpotAnim_1568.anInt412 == 270) { + model_1.method473(); + model_1.method473(); + model_1.method473(); + } + } + model_1.method479(64 + aSpotAnim_1568.anInt413, 850 + aSpotAnim_1568.anInt414, -30, -50, -30, true); + return model_1; + } + + public void method454(int i) { + for (anInt1570 += i; anInt1570 > aSpotAnim_1568.aAnimation_407.method258(anInt1569);) { + anInt1570 -= aSpotAnim_1568.aAnimation_407.method258(anInt1569) + 1; + anInt1569++; + if (anInt1569 >= aSpotAnim_1568.aAnimation_407.anInt352 && (anInt1569 < 0 || anInt1569 >= aSpotAnim_1568.aAnimation_407.anInt352)) { + anInt1569 = 0; + aBoolean1567 = true; + } + } + + } + + public final int anInt1560; + public final int anInt1561; + public final int anInt1562; + public final int anInt1563; + public final int anInt1564; + public boolean aBoolean1567; + private final SpotAnim aSpotAnim_1568; + private int anInt1569; + private int anInt1570; +} diff --git a/2006Redone Client/src/Animable_Sub4.java b/2006Redone Client/src/Animable_Sub4.java new file mode 100644 index 00000000..d167eb49 --- /dev/null +++ b/2006Redone Client/src/Animable_Sub4.java @@ -0,0 +1,111 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Animable_Sub4 extends Animable { + + public void method455(int i, int j, int k, int l) { + if (!aBoolean1579) { + double d = l - anInt1580; + double d2 = j - anInt1581; + double d3 = Math.sqrt(d * d + d2 * d2); + aDouble1585 = anInt1580 + d * anInt1589 / d3; + aDouble1586 = anInt1581 + d2 * anInt1589 / d3; + aDouble1587 = anInt1582; + } + double d1 = anInt1572 + 1 - i; + aDouble1574 = (l - aDouble1585) / d1; + aDouble1575 = (j - aDouble1586) / d1; + aDouble1576 = Math.sqrt(aDouble1574 * aDouble1574 + aDouble1575 * aDouble1575); + if (!aBoolean1579) { + aDouble1577 = -aDouble1576 * Math.tan(anInt1588 * 0.02454369D); + } + aDouble1578 = 2D * (k - aDouble1587 - aDouble1577 * d1) / (d1 * d1); + } + + @Override + public Model getRotatedModel() { + Model model = aSpotAnim_1592.getModel(); + if (model == null) { + return null; + } + int j = -1; + if (aSpotAnim_1592.aAnimation_407 != null) { + j = aSpotAnim_1592.aAnimation_407.anIntArray353[anInt1593]; + } + Model model_1 = new Model(true, Class36.method532(j), false, model); + if (j != -1) { + model_1.method469(); + model_1.method470(j); + model_1.anIntArrayArray1658 = null; + model_1.anIntArrayArray1657 = null; + } + if (aSpotAnim_1592.anInt410 != 128 || aSpotAnim_1592.anInt411 != 128) { + model_1.method478(aSpotAnim_1592.anInt410, aSpotAnim_1592.anInt410, aSpotAnim_1592.anInt411); + } + model_1.method474(anInt1596); + model_1.method479(64 + aSpotAnim_1592.anInt413, 850 + aSpotAnim_1592.anInt414, -30, -50, -30, true); + return model_1; + } + + public Animable_Sub4(int i, int j, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2) { + aBoolean1579 = false; + aSpotAnim_1592 = SpotAnim.cache[l2]; + anInt1597 = k1; + anInt1580 = j2; + anInt1581 = i2; + anInt1582 = l1; + anInt1571 = l; + anInt1572 = i1; + anInt1588 = i; + anInt1589 = j1; + anInt1590 = k2; + anInt1583 = j; + aBoolean1579 = false; + } + + public void method456(int i) { + aBoolean1579 = true; + aDouble1585 += aDouble1574 * i; + aDouble1586 += aDouble1575 * i; + aDouble1587 += aDouble1577 * i + 0.5D * aDouble1578 * i * i; + aDouble1577 += aDouble1578 * i; + anInt1595 = (int) (Math.atan2(aDouble1574, aDouble1575) * 325.94900000000001D) + 1024 & 0x7ff; + anInt1596 = (int) (Math.atan2(aDouble1577, aDouble1576) * 325.94900000000001D) & 0x7ff; + if (aSpotAnim_1592.aAnimation_407 != null) { + for (anInt1594 += i; anInt1594 > aSpotAnim_1592.aAnimation_407.method258(anInt1593);) { + anInt1594 -= aSpotAnim_1592.aAnimation_407.method258(anInt1593) + 1; + anInt1593++; + if (anInt1593 >= aSpotAnim_1592.aAnimation_407.anInt352) { + anInt1593 = 0; + } + } + } + + } + + public final int anInt1571; + public final int anInt1572; + private double aDouble1574; + private double aDouble1575; + private double aDouble1576; + private double aDouble1577; + private double aDouble1578; + private boolean aBoolean1579; + private final int anInt1580; + private final int anInt1581; + private final int anInt1582; + public final int anInt1583; + public double aDouble1585; + public double aDouble1586; + public double aDouble1587; + private final int anInt1588; + private final int anInt1589; + public final int anInt1590; + private final SpotAnim aSpotAnim_1592; + private int anInt1593; + private int anInt1594; + public int anInt1595; + private int anInt1596; + public final int anInt1597; +} diff --git a/2006Redone Client/src/Animable_Sub5.java b/2006Redone Client/src/Animable_Sub5.java new file mode 100644 index 00000000..2942a4f3 --- /dev/null +++ b/2006Redone Client/src/Animable_Sub5.java @@ -0,0 +1,102 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Animable_Sub5 extends Animable { + + @Override + public Model getRotatedModel() { + int j = -1; + if (aAnimation_1607 != null) { + int k = Game.loopCycle - anInt1608; + if (k > 100 && aAnimation_1607.anInt356 > 0) { + k = 100; + } + while (k > aAnimation_1607.method258(anInt1599)) { + k -= aAnimation_1607.method258(anInt1599); + anInt1599++; + if (anInt1599 < aAnimation_1607.anInt352) { + continue; + } + anInt1599 -= aAnimation_1607.anInt356; + if (anInt1599 >= 0 && anInt1599 < aAnimation_1607.anInt352) { + continue; + } + aAnimation_1607 = null; + break; + } + anInt1608 = Game.loopCycle - k; + if (aAnimation_1607 != null) { + j = aAnimation_1607.anIntArray353[anInt1599]; + } + } + ObjectDef class46; + if (anIntArray1600 != null) { + class46 = method457(); + } else { + class46 = ObjectDef.forID(anInt1610); + } + if (class46 == null) { + return null; + } else { + return class46.method578(anInt1611, anInt1612, anInt1603, anInt1604, anInt1605, anInt1606, j); + } + } + + private ObjectDef method457() { + int i = -1; + if (anInt1601 != -1) { + VarBit varBit = VarBit.cache[anInt1601]; + int k = varBit.anInt648; + int l = varBit.anInt649; + int i1 = varBit.anInt650; + int j1 = Game.anIntArray1232[i1 - l]; + i = clientInstance.variousSettings[k] >> l & j1; + } else if (anInt1602 != -1) { + i = clientInstance.variousSettings[anInt1602]; + } + if (i < 0 || i >= anIntArray1600.length || anIntArray1600[i] == -1) { + return null; + } else { + return ObjectDef.forID(anIntArray1600[i]); + } + } + + public Animable_Sub5(int i, int j, int k, int l, int i1, int j1, int k1, int l1, boolean flag) { + anInt1610 = i; + anInt1611 = k; + anInt1612 = j; + anInt1603 = j1; + anInt1604 = l; + anInt1605 = i1; + anInt1606 = k1; + if (l1 != -1) { + aAnimation_1607 = Animation.anims[l1]; + anInt1599 = 0; + anInt1608 = Game.loopCycle; + if (flag && aAnimation_1607.anInt356 != -1) { + anInt1599 = (int) (Math.random() * aAnimation_1607.anInt352); + anInt1608 -= (int) (Math.random() * aAnimation_1607.method258(anInt1599)); + } + } + ObjectDef class46 = ObjectDef.forID(anInt1610); + anInt1601 = class46.anInt774; + anInt1602 = class46.anInt749; + anIntArray1600 = class46.childrenIDs; + } + + private int anInt1599; + private final int[] anIntArray1600; + private final int anInt1601; + private final int anInt1602; + private final int anInt1603; + private final int anInt1604; + private final int anInt1605; + private final int anInt1606; + private Animation aAnimation_1607; + private int anInt1608; + public static Game clientInstance; + private final int anInt1610; + private final int anInt1611; + private final int anInt1612; +} diff --git a/2006Redone Client/src/Animation.java b/2006Redone Client/src/Animation.java new file mode 100644 index 00000000..84f6e0be --- /dev/null +++ b/2006Redone Client/src/Animation.java @@ -0,0 +1,140 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Animation { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("seq.dat")); + int length = stream.readUnsignedWord(); + if (anims == null) { + anims = new Animation[length]; + } + for (int j = 0; j < length; j++) { + if (anims[j] == null) { + anims[j] = new Animation(); + } + anims[j].readValues(stream); + } + } + + public int method258(int i) { + int j = anIntArray355[i]; + if (j == 0) { + Class36 class36 = Class36.method531(anIntArray353[i]); + if (class36 != null) { + j = anIntArray355[i] = class36.anInt636; + } + } + if (j == 0) { + j = 1; + } + return j; + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + break; + } + if (i == 1) { + anInt352 = stream.readUnsignedByte(); + anIntArray353 = new int[anInt352]; + anIntArray354 = new int[anInt352]; + anIntArray355 = new int[anInt352]; + for (int j = 0; j < anInt352; j++) { + anIntArray353[j] = stream.readUnsignedWord(); + anIntArray354[j] = stream.readUnsignedWord(); + if (anIntArray354[j] == 65535) { + anIntArray354[j] = -1; + } + anIntArray355[j] = stream.readUnsignedWord(); + } + + } else if (i == 2) { + anInt356 = stream.readUnsignedWord(); + } else if (i == 3) { + int k = stream.readUnsignedByte(); + anIntArray357 = new int[k + 1]; + for (int l = 0; l < k; l++) { + anIntArray357[l] = stream.readUnsignedByte(); + } + + anIntArray357[k] = 0x98967f; + } else if (i == 4) { + aBoolean358 = true; + } else if (i == 5) { + anInt359 = stream.readUnsignedByte(); + } else if (i == 6) { + anInt360 = stream.readUnsignedWord(); + } else if (i == 7) { + anInt361 = stream.readUnsignedWord(); + } else if (i == 8) { + anInt362 = stream.readUnsignedByte(); + } else if (i == 9) { + anInt363 = stream.readUnsignedByte(); + } else if (i == 10) { + anInt364 = stream.readUnsignedByte(); + } else if (i == 11) { + anInt365 = stream.readUnsignedByte(); + } else if (i == 12) { + stream.readDWord(); + } else { + System.out.println("Error unrecognised seq config code: " + i); + } + } while (true); + if (anInt352 == 0) { + anInt352 = 1; + anIntArray353 = new int[1]; + anIntArray353[0] = -1; + anIntArray354 = new int[1]; + anIntArray354[0] = -1; + anIntArray355 = new int[1]; + anIntArray355[0] = -1; + } + if (anInt363 == -1) { + if (anIntArray357 != null) { + anInt363 = 2; + } else { + anInt363 = 0; + } + } + if (anInt364 == -1) { + if (anIntArray357 != null) { + anInt364 = 2; + return; + } + anInt364 = 0; + } + } + + private Animation() { + anInt356 = -1; + aBoolean358 = false; + anInt359 = 5; + anInt360 = -1; + anInt361 = -1; + anInt362 = 99; + anInt363 = -1; + anInt364 = -1; + anInt365 = 2; + } + + public static Animation anims[]; + public int anInt352; + public int anIntArray353[]; + public int anIntArray354[]; + private int[] anIntArray355; + public int anInt356; + public int anIntArray357[]; + public boolean aBoolean358; + public int anInt359; + public int anInt360; + public int anInt361; + public int anInt362; + public int anInt363; + public int anInt364; + public int anInt365; + public static int anInt367; +} diff --git a/2006Redone Client/src/Background.java b/2006Redone Client/src/Background.java new file mode 100644 index 00000000..5a635aed --- /dev/null +++ b/2006Redone Client/src/Background.java @@ -0,0 +1,237 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Background extends DrawingArea { + + public Background(StreamLoader streamLoader, String s, int i) { + Stream stream = new Stream(streamLoader.getDataForName(s + ".dat")); + Stream stream_1 = new Stream(streamLoader.getDataForName("index.dat")); + stream_1.currentOffset = stream.readUnsignedWord(); + anInt1456 = stream_1.readUnsignedWord(); + anInt1457 = stream_1.readUnsignedWord(); + int j = stream_1.readUnsignedByte(); + anIntArray1451 = new int[j]; + for (int k = 0; k < j - 1; k++) { + anIntArray1451[k + 1] = stream_1.read3Bytes(); + } + + for (int l = 0; l < i; l++) { + stream_1.currentOffset += 2; + stream.currentOffset += stream_1.readUnsignedWord() * stream_1.readUnsignedWord(); + stream_1.currentOffset++; + } + + anInt1454 = stream_1.readUnsignedByte(); + anInt1455 = stream_1.readUnsignedByte(); + anInt1452 = stream_1.readUnsignedWord(); + anInt1453 = stream_1.readUnsignedWord(); + int i1 = stream_1.readUnsignedByte(); + int j1 = anInt1452 * anInt1453; + aByteArray1450 = new byte[j1]; + if (i1 == 0) { + for (int k1 = 0; k1 < j1; k1++) { + aByteArray1450[k1] = stream.readSignedByte(); + } + + return; + } + if (i1 == 1) { + for (int l1 = 0; l1 < anInt1452; l1++) { + for (int i2 = 0; i2 < anInt1453; i2++) { + aByteArray1450[l1 + i2 * anInt1452] = stream.readSignedByte(); + } + + } + + } + } + + public void method356() { + anInt1456 /= 2; + anInt1457 /= 2; + byte abyte0[] = new byte[anInt1456 * anInt1457]; + int i = 0; + for (int j = 0; j < anInt1453; j++) { + for (int k = 0; k < anInt1452; k++) { + abyte0[(k + anInt1454 >> 1) + (j + anInt1455 >> 1) * anInt1456] = aByteArray1450[i++]; + } + + } + + aByteArray1450 = abyte0; + anInt1452 = anInt1456; + anInt1453 = anInt1457; + anInt1454 = 0; + anInt1455 = 0; + } + + public void method357() { + if (anInt1452 == anInt1456 && anInt1453 == anInt1457) { + return; + } + byte abyte0[] = new byte[anInt1456 * anInt1457]; + int i = 0; + for (int j = 0; j < anInt1453; j++) { + for (int k = 0; k < anInt1452; k++) { + abyte0[k + anInt1454 + (j + anInt1455) * anInt1456] = aByteArray1450[i++]; + } + + } + + aByteArray1450 = abyte0; + anInt1452 = anInt1456; + anInt1453 = anInt1457; + anInt1454 = 0; + anInt1455 = 0; + } + + public void method358() { + byte abyte0[] = new byte[anInt1452 * anInt1453]; + int j = 0; + for (int k = 0; k < anInt1453; k++) { + for (int l = anInt1452 - 1; l >= 0; l--) { + abyte0[j++] = aByteArray1450[l + k * anInt1452]; + } + + } + + aByteArray1450 = abyte0; + anInt1454 = anInt1456 - anInt1452 - anInt1454; + } + + public void method359() { + byte abyte0[] = new byte[anInt1452 * anInt1453]; + int i = 0; + for (int j = anInt1453 - 1; j >= 0; j--) { + for (int k = 0; k < anInt1452; k++) { + abyte0[i++] = aByteArray1450[k + j * anInt1452]; + } + + } + + aByteArray1450 = abyte0; + anInt1455 = anInt1457 - anInt1453 - anInt1455; + } + + public void method360(int i, int j, int k) { + for (int i1 = 0; i1 < anIntArray1451.length; i1++) { + int j1 = anIntArray1451[i1] >> 16 & 0xff; + j1 += i; + if (j1 < 0) { + j1 = 0; + } else if (j1 > 255) { + j1 = 255; + } + int k1 = anIntArray1451[i1] >> 8 & 0xff; + k1 += j; + if (k1 < 0) { + k1 = 0; + } else if (k1 > 255) { + k1 = 255; + } + int l1 = anIntArray1451[i1] & 0xff; + l1 += k; + if (l1 < 0) { + l1 = 0; + } else if (l1 > 255) { + l1 = 255; + } + anIntArray1451[i1] = (j1 << 16) + (k1 << 8) + l1; + } + } + + public void method361(int i, int k) { + i += anInt1454; + k += anInt1455; + int l = i + k * DrawingArea.width; + int i1 = 0; + int j1 = anInt1453; + int k1 = anInt1452; + int l1 = DrawingArea.width - k1; + int i2 = 0; + if (k < DrawingArea.topY) { + int j2 = DrawingArea.topY - k; + j1 -= j2; + k = DrawingArea.topY; + i1 += j2 * k1; + l += j2 * DrawingArea.width; + } + if (k + j1 > DrawingArea.bottomY) { + j1 -= k + j1 - DrawingArea.bottomY; + } + if (i < DrawingArea.topX) { + int k2 = DrawingArea.topX - i; + k1 -= k2; + i = DrawingArea.topX; + i1 += k2; + l += k2; + i2 += k2; + l1 += k2; + } + if (i + k1 > DrawingArea.bottomX) { + int l2 = i + k1 - DrawingArea.bottomX; + k1 -= l2; + i2 += l2; + l1 += l2; + } + if (!(k1 <= 0 || j1 <= 0)) { + method362(j1, DrawingArea.pixels, aByteArray1450, l1, l, k1, i1, anIntArray1451, i2); + } + } + + private void method362(int i, int ai[], byte abyte0[], int j, int k, int l, int i1, int ai1[], int j1) { + int k1 = -(l >> 2); + l = -(l & 3); + for (int l1 = -i; l1 < 0; l1++) { + for (int i2 = k1; i2 < 0; i2++) { + byte byte1 = abyte0[i1++]; + if (byte1 != 0) { + ai[k++] = ai1[byte1 & 0xff]; + } else { + k++; + } + byte1 = abyte0[i1++]; + if (byte1 != 0) { + ai[k++] = ai1[byte1 & 0xff]; + } else { + k++; + } + byte1 = abyte0[i1++]; + if (byte1 != 0) { + ai[k++] = ai1[byte1 & 0xff]; + } else { + k++; + } + byte1 = abyte0[i1++]; + if (byte1 != 0) { + ai[k++] = ai1[byte1 & 0xff]; + } else { + k++; + } + } + + for (int j2 = l; j2 < 0; j2++) { + byte byte2 = abyte0[i1++]; + if (byte2 != 0) { + ai[k++] = ai1[byte2 & 0xff]; + } else { + k++; + } + } + + k += j; + i1 += j1; + } + + } + + public byte aByteArray1450[]; + public final int[] anIntArray1451; + public int anInt1452; + public int anInt1453; + public int anInt1454; + public int anInt1455; + public int anInt1456; + private int anInt1457; +} diff --git a/2006Redone Client/src/Censor.java b/2006Redone Client/src/Censor.java new file mode 100644 index 00000000..a84e10c0 --- /dev/null +++ b/2006Redone Client/src/Censor.java @@ -0,0 +1,961 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Censor { + + public static void loadConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("fragmentsenc.txt")); + Stream stream_1 = new Stream(streamLoader.getDataForName("badenc.txt")); + Stream stream_2 = new Stream(streamLoader.getDataForName("domainenc.txt")); + Stream stream_3 = new Stream(streamLoader.getDataForName("tldlist.txt")); + readValues(stream, stream_1, stream_2, stream_3); + } + + private static void readValues(Stream stream, Stream stream_1, Stream stream_2, Stream stream_3) { + readBadEnc(stream_1); + readDomainEnc(stream_2); + readFragmentsEnc(stream); + readTldList(stream_3); + } + + private static void readTldList(Stream stream) { + int i = stream.readDWord(); + aCharArrayArray624 = new char[i][]; + anIntArray625 = new int[i]; + for (int j = 0; j < i; j++) { + anIntArray625[j] = stream.readUnsignedByte(); + char ac[] = new char[stream.readUnsignedByte()]; + for (int k = 0; k < ac.length; k++) { + ac[k] = (char) stream.readUnsignedByte(); + } + + aCharArrayArray624[j] = ac; + } + + } + + private static void readBadEnc(Stream stream) { + int j = stream.readDWord(); + aCharArrayArray621 = new char[j][]; + aByteArrayArrayArray622 = new byte[j][][]; + method493(stream, aCharArrayArray621, aByteArrayArrayArray622); + } + + private static void readDomainEnc(Stream stream) { + int i = stream.readDWord(); + aCharArrayArray623 = new char[i][]; + method494(aCharArrayArray623, stream); + } + + private static void readFragmentsEnc(Stream stream) { + anIntArray620 = new int[stream.readDWord()]; + for (int i = 0; i < anIntArray620.length; i++) { + anIntArray620[i] = stream.readUnsignedWord(); + } + } + + private static void method493(Stream stream, char ac[][], byte abyte0[][][]) { + for (int j = 0; j < ac.length; j++) { + char ac1[] = new char[stream.readUnsignedByte()]; + for (int k = 0; k < ac1.length; k++) { + ac1[k] = (char) stream.readUnsignedByte(); + } + + ac[j] = ac1; + byte abyte1[][] = new byte[stream.readUnsignedByte()][2]; + for (int l = 0; l < abyte1.length; l++) { + abyte1[l][0] = (byte) stream.readUnsignedByte(); + abyte1[l][1] = (byte) stream.readUnsignedByte(); + } + + if (abyte1.length > 0) { + abyte0[j] = abyte1; + } + } + + } + + private static void method494(char ac[][], Stream stream) { + for (int j = 0; j < ac.length; j++) { + char ac1[] = new char[stream.readUnsignedByte()]; + for (int k = 0; k < ac1.length; k++) { + ac1[k] = (char) stream.readUnsignedByte(); + } + + ac[j] = ac1; + } + + } + + private static void method495(char ac[]) { + int i = 0; + for (int j = 0; j < ac.length; j++) { + if (method496(ac[j])) { + ac[i] = ac[j]; + } else { + ac[i] = ' '; + } + if (i == 0 || ac[i] != ' ' || ac[i - 1] != ' ') { + i++; + } + } + for (int k = i; k < ac.length; k++) { + ac[k] = ' '; + } + + } + + private static boolean method496(char c) { + return c >= ' ' && c <= '\177' || c == ' ' || c == '\n' || c == '\t' || c == '\243' || c == '\u20AC'; + } + + public static String doCensor(String s) { + System.currentTimeMillis(); + char ac[] = s.toCharArray(); + method495(ac); + String s1 = new String(ac).trim(); + ac = s1.toLowerCase().toCharArray(); + String s2 = s1.toLowerCase(); + method505(ac); + method500(ac); + method501(ac); + method514(ac); + for (String exception : exceptions) { + for (int k = -1; (k = s2.indexOf(exception, k + 1)) != -1;) { + char ac1[] = exception.toCharArray(); + System.arraycopy(ac1, 0, ac, k, ac1.length); + + } + + } + method498(s1.toCharArray(), ac); + method499(ac); + System.currentTimeMillis(); + return s; // xxx chat filter, return s to avoid new String(ac).trim() + } + + private static void method498(char ac[], char ac1[]) { + for (int j = 0; j < ac.length; j++) { + if (ac1[j] != '*' && isUpperCaseLetter(ac[j])) { + ac1[j] = ac[j]; + } + } + } + + private static void method499(char ac[]) { + boolean flag = true; + for (int j = 0; j < ac.length; j++) { + char c = ac[j]; + if (isLetter(c)) { + if (flag) { + if (isLowerCaseLetter(c)) { + flag = false; + } + } else if (isUpperCaseLetter(c)) { + ac[j] = (char) (c + 97 - 65); + } + } else { + flag = true; + } + } + } + + private static void method500(char ac[]) { + for (int i = 0; i < 2; i++) { + for (int j = aCharArrayArray621.length - 1; j >= 0; j--) { + method509(aByteArrayArrayArray622[j], ac, aCharArrayArray621[j]); + } + + } + } + + private static void method501(char ac[]) { + char ac1[] = ac.clone(); + char ac2[] = {'(', 'a', ')'}; + method509(null, ac1, ac2); + char ac3[] = ac.clone(); + char ac4[] = {'d', 'o', 't'}; + method509(null, ac3, ac4); + for (int i = aCharArrayArray623.length - 1; i >= 0; i--) { + method502(ac, aCharArrayArray623[i], ac3, ac1); + } + } + + private static void method502(char ac[], char ac1[], char ac2[], char ac3[]) { + if (ac1.length > ac.length) { + return; + } + int j; + for (int k = 0; k <= ac.length - ac1.length; k += j) { + int l = k; + int i1 = 0; + j = 1; + while (l < ac.length) { + int j1; + char c = ac[l]; + char c1 = '\0'; + if (l + 1 < ac.length) { + c1 = ac[l + 1]; + } + if (i1 < ac1.length && (j1 = method511(c, ac1[i1], c1)) > 0) { + l += j1; + i1++; + continue; + } + if (i1 == 0) { + break; + } + if ((j1 = method511(c, ac1[i1 - 1], c1)) > 0) { + l += j1; + if (i1 == 1) { + j++; + } + continue; + } + if (i1 >= ac1.length || !method517(c)) { + break; + } + l++; + } + if (i1 >= ac1.length) { + boolean flag1 = false; + int k1 = method503(ac, ac3, k); + int l1 = method504(ac2, l - 1, ac); + if (k1 > 2 || l1 > 2) { + flag1 = true; + } + if (flag1) { + for (int i2 = k; i2 < l; i2++) { + ac[i2] = '*'; + } + + } + } + } + + } + + private static int method503(char ac[], char ac1[], int j) { + if (j == 0) { + return 2; + } + for (int k = j - 1; k >= 0; k--) { + if (!method517(ac[k])) { + break; + } + if (ac[k] == '@') { + return 3; + } + } + + int l = 0; + for (int i1 = j - 1; i1 >= 0; i1--) { + if (!method517(ac1[i1])) { + break; + } + if (ac1[i1] == '*') { + l++; + } + } + + if (l >= 3) { + return 4; + } + return !method517(ac[j - 1]) ? 0 : 1; + } + + private static int method504(char ac[], int i, char ac1[]) { + if (i + 1 == ac1.length) { + return 2; + } + for (int j = i + 1; j < ac1.length; j++) { + if (!method517(ac1[j])) { + break; + } + if (ac1[j] == '.' || ac1[j] == ',') { + return 3; + } + } + int k = 0; + for (int l = i + 1; l < ac1.length; l++) { + if (!method517(ac[l])) { + break; + } + if (ac[l] == '*') { + k++; + } + } + + if (k >= 3) { + return 4; + } + return !method517(ac1[i + 1]) ? 0 : 1; + } + + private static void method505(char ac[]) { + char ac1[] = ac.clone(); + char ac2[] = {'d', 'o', 't'}; + method509(null, ac1, ac2); + char ac3[] = ac.clone(); + char ac4[] = {'s', 'l', 'a', 's', 'h'}; + method509(null, ac3, ac4); + for (int i = 0; i < aCharArrayArray624.length; i++) { + method506(ac3, aCharArrayArray624[i], anIntArray625[i], ac1, ac); + } + + } + + private static void method506(char ac[], char ac1[], int i, char ac2[], char ac3[]) { + if (ac1.length > ac3.length) { + return; + } + int j; + for (int k = 0; k <= ac3.length - ac1.length; k += j) { + int l = k; + int i1 = 0; + j = 1; + while (l < ac3.length) { + int j1; + char c = ac3[l]; + char c1 = '\0'; + if (l + 1 < ac3.length) { + c1 = ac3[l + 1]; + } + if (i1 < ac1.length && (j1 = method511(c, ac1[i1], c1)) > 0) { + l += j1; + i1++; + continue; + } + if (i1 == 0) { + break; + } + if ((j1 = method511(c, ac1[i1 - 1], c1)) > 0) { + l += j1; + if (i1 == 1) { + j++; + } + continue; + } + if (i1 >= ac1.length || !method517(c)) { + break; + } + l++; + } + if (i1 >= ac1.length) { + boolean flag1 = false; + int k1 = method507(ac3, k, ac2); + int l1 = method508(ac3, ac, l - 1); + if (i == 1 && k1 > 0 && l1 > 0) { + flag1 = true; + } + if (i == 2 && (k1 > 2 && l1 > 0 || k1 > 0 && l1 > 2)) { + flag1 = true; + } + if (i == 3 && k1 > 0 && l1 > 2) { + flag1 = true; + } + if (flag1) { + int i2 = k; + int j2 = l - 1; + if (k1 > 2) { + if (k1 == 4) { + boolean flag2 = false; + for (int l2 = i2 - 1; l2 >= 0; l2--) { + if (flag2) { + if (ac2[l2] != '*') { + break; + } + i2 = l2; + } else if (ac2[l2] == '*') { + i2 = l2; + flag2 = true; + } + } + + } + boolean flag3 = false; + for (int i3 = i2 - 1; i3 >= 0; i3--) { + if (flag3) { + if (method517(ac3[i3])) { + break; + } + i2 = i3; + } else if (!method517(ac3[i3])) { + flag3 = true; + i2 = i3; + } + } + + } + if (l1 > 2) { + if (l1 == 4) { + boolean flag4 = false; + for (int j3 = j2 + 1; j3 < ac3.length; j3++) { + if (flag4) { + if (ac[j3] != '*') { + break; + } + j2 = j3; + } else if (ac[j3] == '*') { + j2 = j3; + flag4 = true; + } + } + + } + boolean flag5 = false; + for (int k3 = j2 + 1; k3 < ac3.length; k3++) { + if (flag5) { + if (method517(ac3[k3])) { + break; + } + j2 = k3; + } else if (!method517(ac3[k3])) { + flag5 = true; + j2 = k3; + } + } + + } + for (int k2 = i2; k2 <= j2; k2++) { + ac3[k2] = '*'; + } + + } + } + } + } + + private static int method507(char ac[], int j, char ac1[]) { + if (j == 0) { + return 2; + } + for (int k = j - 1; k >= 0; k--) { + if (!method517(ac[k])) { + break; + } + if (ac[k] == ',' || ac[k] == '.') { + return 3; + } + } + + int l = 0; + for (int i1 = j - 1; i1 >= 0; i1--) { + if (!method517(ac1[i1])) { + break; + } + if (ac1[i1] == '*') { + l++; + } + } + if (l >= 3) { + return 4; + } + return !method517(ac[j - 1]) ? 0 : 1; + } + + private static int method508(char ac[], char ac1[], int i) { + if (i + 1 == ac.length) { + return 2; + } + for (int j = i + 1; j < ac.length; j++) { + if (!method517(ac[j])) { + break; + } + if (ac[j] == '\\' || ac[j] == '/') { + return 3; + } + } + + int k = 0; + for (int l = i + 1; l < ac.length; l++) { + if (!method517(ac1[l])) { + break; + } + if (ac1[l] == '*') { + k++; + } + } + + if (k >= 5) { + return 4; + } + return !method517(ac[i + 1]) ? 0 : 1; + } + + private static void method509(byte abyte0[][], char ac[], char ac1[]) { + if (ac1.length > ac.length) { + return; + } + int j; + for (int k = 0; k <= ac.length - ac1.length; k += j) { + int l = k; + int i1 = 0; + int j1 = 0; + j = 1; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + while (l < ac.length && (!flag2 || !flag3)) { + int k1; + char c = ac[l]; + char c2 = '\0'; + if (l + 1 < ac.length) { + c2 = ac[l + 1]; + } + if (i1 < ac1.length && (k1 = method512(c2, c, ac1[i1])) > 0) { + if (k1 == 1 && isDigit(c)) { + flag2 = true; + } + if (k1 == 2 && (isDigit(c) || isDigit(c2))) { + flag2 = true; + } + l += k1; + i1++; + continue; + } + if (i1 == 0) { + break; + } + if ((k1 = method512(c2, c, ac1[i1 - 1])) > 0) { + l += k1; + if (i1 == 1) { + j++; + } + continue; + } + if (i1 >= ac1.length || !method518(c)) { + break; + } + if (method517(c) && c != '\'') { + flag1 = true; + } + if (isDigit(c)) { + flag3 = true; + } + l++; + if (++j1 * 100 / (l - k) > 90) { + break; + } + } + if (i1 >= ac1.length && (!flag2 || !flag3)) { + boolean flag4 = true; + if (!flag1) { + char c1 = ' '; + if (k - 1 >= 0) { + c1 = ac[k - 1]; + } + char c3 = ' '; + if (l < ac.length) { + c3 = ac[l]; + } + byte byte0 = method513(c1); + byte byte1 = method513(c3); + if (abyte0 != null && method510(byte0, abyte0, byte1)) { + flag4 = false; + } + } else { + boolean flag5 = false; + boolean flag6 = false; + if (k - 1 < 0 || method517(ac[k - 1]) && ac[k - 1] != '\'') { + flag5 = true; + } + if (l >= ac.length || method517(ac[l]) && ac[l] != '\'') { + flag6 = true; + } + if (!flag5 || !flag6) { + boolean flag7 = false; + int k2 = k - 2; + if (flag5) { + k2 = k; + } + for (; !flag7 && k2 < l; k2++) { + if (k2 >= 0 && (!method517(ac[k2]) || ac[k2] == '\'')) { + char ac2[] = new char[3]; + int j3; + for (j3 = 0; j3 < 3; j3++) { + if (k2 + j3 >= ac.length || method517(ac[k2 + j3]) && ac[k2 + j3] != '\'') { + break; + } + ac2[j3] = ac[k2 + j3]; + } + + boolean flag8 = true; + if (j3 == 0) { + flag8 = false; + } + if (j3 < 3 && k2 - 1 >= 0 && (!method517(ac[k2 - 1]) || ac[k2 - 1] == '\'')) { + flag8 = false; + } + if (flag8 && !method523(ac2)) { + flag7 = true; + } + } + } + + if (!flag7) { + flag4 = false; + } + } + } + if (flag4) { + int l1 = 0; + int i2 = 0; + int j2 = -1; + for (int l2 = k; l2 < l; l2++) { + if (isDigit(ac[l2])) { + l1++; + } else if (isLetter(ac[l2])) { + i2++; + j2 = l2; + } + } + + if (j2 > -1) { + l1 -= l - 1 - j2; + } + if (l1 <= i2) { + for (int i3 = k; i3 < l; i3++) { + ac[i3] = '*'; + } + + } else { + j = 1; + } + } + } + } + + } + + private static boolean method510(byte byte0, byte abyte0[][], byte byte2) { + int i = 0; + if (abyte0[i][0] == byte0 && abyte0[i][1] == byte2) { + return true; + } + int j = abyte0.length - 1; + if (abyte0[j][0] == byte0 && abyte0[j][1] == byte2) { + return true; + } + do { + int k = (i + j) / 2; + if (abyte0[k][0] == byte0 && abyte0[k][1] == byte2) { + return true; + } + if (byte0 < abyte0[k][0] || byte0 == abyte0[k][0] && byte2 < abyte0[k][1]) { + j = k; + } else { + i = k; + } + } while (i != j && i + 1 != j); + return false; + } + + private static int method511(char c, char c1, char c2) { + if (c1 == c) { + return 1; + } + if (c1 == 'o' && c == '0') { + return 1; + } + if (c1 == 'o' && c == '(' && c2 == ')') { + return 2; + } + if (c1 == 'c' && (c == '(' || c == '<' || c == '[')) { + return 1; + } + if (c1 == 'e' && c == '\u20AC') { + return 1; + } + if (c1 == 's' && c == '$') { + return 1; + } + return c1 != 'l' || c != 'i' ? 0 : 1; + } + + private static int method512(char c, char c1, char c2) { + if (c2 == c1) { + return 1; + } + if (c2 >= 'a' && c2 <= 'm') { + if (c2 == 'a') { + if (c1 == '4' || c1 == '@' || c1 == '^') { + return 1; + } + return c1 != '/' || c != '\\' ? 0 : 2; + } + if (c2 == 'b') { + if (c1 == '6' || c1 == '8') { + return 1; + } + return (c1 != '1' || c != '3') && (c1 != 'i' || c != '3') ? 0 : 2; + } + if (c2 == 'c') { + return c1 != '(' && c1 != '<' && c1 != '{' && c1 != '[' ? 0 : 1; + } + if (c2 == 'd') { + return (c1 != '[' || c != ')') && (c1 != 'i' || c != ')') ? 0 : 2; + } + if (c2 == 'e') { + return c1 != '3' && c1 != '\u20AC' ? 0 : 1; + } + if (c2 == 'f') { + if (c1 == 'p' && c == 'h') { + return 2; + } + return c1 != '\243' ? 0 : 1; + } + if (c2 == 'g') { + return c1 != '9' && c1 != '6' && c1 != 'q' ? 0 : 1; + } + if (c2 == 'h') { + return c1 != '#' ? 0 : 1; + } + if (c2 == 'i') { + return c1 != 'y' && c1 != 'l' && c1 != 'j' && c1 != '1' && c1 != '!' && c1 != ':' && c1 != ';' && c1 != '|' ? 0 : 1; + } + if (c2 == 'j') { + return 0; + } + if (c2 == 'k') { + return 0; + } + if (c2 == 'l') { + return c1 != '1' && c1 != '|' && c1 != 'i' ? 0 : 1; + } + if (c2 == 'm') { + return 0; + } + } + if (c2 >= 'n' && c2 <= 'z') { + if (c2 == 'n') { + return 0; + } + if (c2 == 'o') { + if (c1 == '0' || c1 == '*') { + return 1; + } + return (c1 != '(' || c != ')') && (c1 != '[' || c != ']') && (c1 != '{' || c != '}') && (c1 != '<' || c != '>') ? 0 : 2; + } + if (c2 == 'p') { + return 0; + } + if (c2 == 'q') { + return 0; + } + if (c2 == 'r') { + return 0; + } + if (c2 == 's') { + return c1 != '5' && c1 != 'z' && c1 != '$' && c1 != '2' ? 0 : 1; + } + if (c2 == 't') { + return c1 != '7' && c1 != '+' ? 0 : 1; + } + if (c2 == 'u') { + if (c1 == 'v') { + return 1; + } + return (c1 != '\\' || c != '/') && (c1 != '\\' || c != '|') && (c1 != '|' || c != '/') ? 0 : 2; + } + if (c2 == 'v') { + return (c1 != '\\' || c != '/') && (c1 != '\\' || c != '|') && (c1 != '|' || c != '/') ? 0 : 2; + } + if (c2 == 'w') { + return c1 != 'v' || c != 'v' ? 0 : 2; + } + if (c2 == 'x') { + return (c1 != ')' || c != '(') && (c1 != '}' || c != '{') && (c1 != ']' || c != '[') && (c1 != '>' || c != '<') ? 0 : 2; + } + if (c2 == 'y') { + return 0; + } + if (c2 == 'z') { + return 0; + } + } + if (c2 >= '0' && c2 <= '9') { + if (c2 == '0') { + if (c1 == 'o' || c1 == 'O') { + return 1; + } + return (c1 != '(' || c != ')') && (c1 != '{' || c != '}') && (c1 != '[' || c != ']') ? 0 : 2; + } + if (c2 == '1') { + return c1 != 'l' ? 0 : 1; + } else { + return 0; + } + } + if (c2 == ',') { + return c1 != '.' ? 0 : 1; + } + if (c2 == '.') { + return c1 != ',' ? 0 : 1; + } + if (c2 == '!') { + return c1 != 'i' ? 0 : 1; + } else { + return 0; + } + } + + private static byte method513(char c) { + if (c >= 'a' && c <= 'z') { + return (byte) (c - 97 + 1); + } + if (c == '\'') { + return 28; + } + if (c >= '0' && c <= '9') { + return (byte) (c - 48 + 29); + } else { + return 27; + } + } + + private static void method514(char ac[]) { + int j; + int k = 0; + int l = 0; + int i1 = 0; + while ((j = method515(ac, k)) != -1) { + boolean flag = false; + for (int j1 = k; j1 >= 0 && j1 < j && !flag; j1++) { + if (!method517(ac[j1]) && !method518(ac[j1])) { + flag = true; + } + } + + if (flag) { + l = 0; + } + if (l == 0) { + i1 = j; + } + k = method516(ac, j); + int k1 = 0; + for (int l1 = j; l1 < k; l1++) { + k1 = k1 * 10 + ac[l1] - 48; + } + + if (k1 > 255 || k - j > 8) { + l = 0; + } else { + l++; + } + if (l == 4) { + for (int i2 = i1; i2 < k; i2++) { + ac[i2] = '*'; + } + + l = 0; + } + } + } + + private static int method515(char ac[], int i) { + for (int k = i; k < ac.length && k >= 0; k++) { + if (ac[k] >= '0' && ac[k] <= '9') { + return k; + } + } + + return -1; + } + + private static int method516(char ac[], int j) { + for (int k = j; k < ac.length && k >= 0; k++) { + if (ac[k] < '0' || ac[k] > '9') { + return k; + } + } + return ac.length; + } + + private static boolean method517(char c) { + return !isLetter(c) && !isDigit(c); + } + + private static boolean method518(char c) { + return c < 'a' || c > 'z' || c == 'v' || c == 'x' || c == 'j' || c == 'q' || c == 'z'; + } + + private static boolean isLetter(char c) { + return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'; + } + + private static boolean isDigit(char c) { + return c >= '0' && c <= '9'; + } + + private static boolean isLowerCaseLetter(char c) { + return c >= 'a' && c <= 'z'; + } + + private static boolean isUpperCaseLetter(char c) { + return c >= 'A' && c <= 'Z'; + } + + private static boolean method523(char ac[]) { + boolean flag = true; + for (int i = 0; i < ac.length; i++) { + if (!isDigit(ac[i]) && ac[i] != 0) { + flag = false; + } + } + + if (flag) { + return true; + } + int j = method524(ac); + int k = 0; + int l = anIntArray620.length - 1; + if (j == anIntArray620[k] || j == anIntArray620[l]) { + return true; + } + do { + int i1 = (k + l) / 2; + if (j == anIntArray620[i1]) { + return true; + } + if (j < anIntArray620[i1]) { + l = i1; + } else { + k = i1; + } + } while (k != l && k + 1 != l); + return false; + } + + private static int method524(char ac[]) { + if (ac.length > 6) { + return 0; + } + int k = 0; + for (int l = 0; l < ac.length; l++) { + char c = ac[ac.length - l - 1]; + if (c >= 'a' && c <= 'z') { + k = k * 38 + c - 97 + 1; + } else if (c == '\'') { + k = k * 38 + 27; + } else if (c >= '0' && c <= '9') { + k = k * 38 + c - 48 + 28; + } else if (c != 0) { + return 0; + } + } + + return k; + } + + private static int[] anIntArray620; + private static char[][] aCharArrayArray621; + private static byte[][][] aByteArrayArrayArray622; + private static char[][] aCharArrayArray623; + private static char[][] aCharArrayArray624; + private static int[] anIntArray625; + private static final String[] exceptions = {"cook", "cook's", "cooks", "seeks", "sheet", "woop", "woops", "faq", "noob", "noobs"}; + +} diff --git a/2006Redone Client/src/Class11.java b/2006Redone Client/src/Class11.java new file mode 100644 index 00000000..3b4899f7 --- /dev/null +++ b/2006Redone Client/src/Class11.java @@ -0,0 +1,195 @@ +/* Class11 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ + +final class Class11 +{ + private static byte[] aByteArray210 + = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + private Stream aClass3_Sub12_211 = new Stream(null); + private int[] anIntArray212; + int anInt213; + private int[] anIntArray214; + private long aLong215; + int[] anIntArray216; + private int[] anIntArray217; + private int anInt218; + + final void method520(int i) { + int i_0_ = aClass3_Sub12_211.method428(); + anIntArray216[i] += i_0_; + } + + final boolean method521() { + if (aClass3_Sub12_211.currentOffset >= 0) + return false; + return true; + } + + final void method522(int i) { + anIntArray214[i] = aClass3_Sub12_211.currentOffset; + } + + final void method523() { + aClass3_Sub12_211.buffer = null; + anIntArray217 = null; + anIntArray214 = null; + anIntArray216 = null; + anIntArray212 = null; + } + + private final int method524(int i) { + int i_1_ = (aClass3_Sub12_211.buffer + [aClass3_Sub12_211.currentOffset]); + if (i_1_ < 0) { + i_1_ &= 0xff; + anIntArray212[i] = i_1_; + aClass3_Sub12_211.currentOffset++; + } else + i_1_ = anIntArray212[i]; + if (i_1_ == 240 || i_1_ == 247) { + int i_2_ = aClass3_Sub12_211.method428(); + if (i_1_ == 247 && i_2_ > 0) { + int i_3_ = ((aClass3_Sub12_211.buffer + [aClass3_Sub12_211.currentOffset]) + & 0xff); + if (i_3_ >= 241 && i_3_ <= 243 || i_3_ == 246 || i_3_ == 248 + || i_3_ >= 250 && i_3_ <= 252 || i_3_ == 254) { + aClass3_Sub12_211.currentOffset++; + anIntArray212[i] = i_3_; + return method535(i, i_3_); + } + } + aClass3_Sub12_211.currentOffset += i_2_; + return 0; + } + return method535(i, i_1_); + } + + final void method525(byte[] is) { + aClass3_Sub12_211.buffer = is; + aClass3_Sub12_211.currentOffset = 10; + int i = aClass3_Sub12_211.readUnsignedWord(); + anInt213 = aClass3_Sub12_211.readUnsignedWord(); + anInt218 = 500000; + anIntArray217 = new int[i]; + int i_4_ = 0; + while (i_4_ < i) { + int i_5_ = aClass3_Sub12_211.readDWord(); + int i_6_ = aClass3_Sub12_211.readDWord(); + if (i_5_ == 1297379947) { + anIntArray217[i_4_] + = aClass3_Sub12_211.currentOffset; + i_4_++; + } + aClass3_Sub12_211.currentOffset += i_6_; + } + anIntArray214 = anIntArray217.clone(); + anIntArray216 = new int[i]; + anIntArray212 = new int[i]; + } + + final void method526(int i) { + aClass3_Sub12_211.currentOffset = anIntArray214[i]; + } + + final boolean method527() { + if (aClass3_Sub12_211.buffer == null) + return false; + return true; + } + + final void method528() { + aClass3_Sub12_211.currentOffset = -1; + } + + final int method529(int i) { + int i_7_ = method524(i); + return i_7_; + } + + public static void reset() { + aByteArray210 = null; + } + + final boolean method531() { + int i = anIntArray214.length; + for (int i_8_ = 0; i_8_ < i; i_8_++) { + if (anIntArray214[i_8_] >= 0) + return false; + } + return true; + } + + final long method532(int i) { + return aLong215 + (long) i * (long) anInt218; + } + + final int method533() { + return anIntArray214.length; + } + + final void method534(long l) { + aLong215 = l; + int i = anIntArray214.length; + for (int i_9_ = 0; i_9_ < i; i_9_++) { + anIntArray216[i_9_] = 0; + anIntArray212[i_9_] = 0; + aClass3_Sub12_211.currentOffset = anIntArray217[i_9_]; + method520(i_9_); + anIntArray214[i_9_] = aClass3_Sub12_211.currentOffset; + } + } + + private final int method535(int i, int i_10_) { + if (i_10_ == 255) { + int i_11_ = aClass3_Sub12_211.readUnsignedByte(); + int i_12_ = aClass3_Sub12_211.method428(); + if (i_11_ == 47) { + aClass3_Sub12_211.currentOffset += i_12_; + return 1; + } + if (i_11_ == 81) { + int i_13_ = aClass3_Sub12_211.read3Bytes(); + i_12_ -= 3; + int i_14_ = anIntArray216[i]; + aLong215 += (long) i_14_ * (long) (anInt218 - i_13_); + anInt218 = i_13_; + aClass3_Sub12_211.currentOffset += i_12_; + return 2; + } + aClass3_Sub12_211.currentOffset += i_12_; + return 3; + } + byte i_15_ = aByteArray210[i_10_ - 128]; + int i_16_ = i_10_; + if (i_15_ >= 1) + i_16_ |= aClass3_Sub12_211.readUnsignedByte() << 8; + if (i_15_ >= 2) + i_16_ |= aClass3_Sub12_211.readUnsignedByte() << 16; + return i_16_; + } + + final int method536() { + int i = anIntArray214.length; + int i_17_ = -1; + int i_18_ = 2147483647; + for (int i_19_ = 0; i_19_ < i; i_19_++) { + if (anIntArray214[i_19_] >= 0 + && anIntArray216[i_19_] < i_18_) { + i_17_ = i_19_; + i_18_ = anIntArray216[i_19_]; + } + } + return i_17_; + } + + public Class11() { + /* empty */ + } +} diff --git a/2006Redone Client/src/Class13.java b/2006Redone Client/src/Class13.java new file mode 100644 index 00000000..4ac08c32 --- /dev/null +++ b/2006Redone Client/src/Class13.java @@ -0,0 +1,532 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class13 { + + public static int method225(byte abyte0[], int i, byte abyte1[], int j, int k) { + synchronized (aClass32_305) { + aClass32_305.aByteArray563 = abyte1; + aClass32_305.anInt564 = k; + aClass32_305.aByteArray568 = abyte0; + aClass32_305.anInt569 = 0; + aClass32_305.anInt565 = j; + aClass32_305.anInt570 = i; + aClass32_305.anInt577 = 0; + aClass32_305.anInt576 = 0; + aClass32_305.anInt566 = 0; + aClass32_305.anInt567 = 0; + aClass32_305.anInt571 = 0; + aClass32_305.anInt572 = 0; + aClass32_305.anInt579 = 0; + method227(aClass32_305); + i -= aClass32_305.anInt570; + return i; + } + } + + private static void method226(Class32 class32) { + byte byte4 = class32.aByte573; + int i = class32.anInt574; + int j = class32.anInt584; + int k = class32.anInt582; + int ai[] = Class32.anIntArray587; + int l = class32.anInt581; + byte abyte0[] = class32.aByteArray568; + int i1 = class32.anInt569; + int j1 = class32.anInt570; + int k1 = j1; + int l1 = class32.anInt601 + 1; + label0 : do { + if (i > 0) { + do { + if (j1 == 0) { + break label0; + } + if (i == 1) { + break; + } + abyte0[i1] = byte4; + i--; + i1++; + j1--; + } while (true); + if (j1 == 0) { + i = 1; + break; + } + abyte0[i1] = byte4; + i1++; + j1--; + } + boolean flag = true; + while (flag) { + flag = false; + if (j == l1) { + i = 0; + break label0; + } + byte4 = (byte) k; + l = ai[l]; + byte byte0 = (byte) (l & 0xff); + l >>= 8; + j++; + if (byte0 != k) { + k = byte0; + if (j1 == 0) { + i = 1; + } else { + abyte0[i1] = byte4; + i1++; + j1--; + flag = true; + continue; + } + break label0; + } + if (j != l1) { + continue; + } + if (j1 == 0) { + i = 1; + break label0; + } + abyte0[i1] = byte4; + i1++; + j1--; + flag = true; + } + i = 2; + l = ai[l]; + byte byte1 = (byte) (l & 0xff); + l >>= 8; + if (++j != l1) { + if (byte1 != k) { + k = byte1; + } else { + i = 3; + l = ai[l]; + byte byte2 = (byte) (l & 0xff); + l >>= 8; + if (++j != l1) { + if (byte2 != k) { + k = byte2; + } else { + l = ai[l]; + byte byte3 = (byte) (l & 0xff); + l >>= 8; + j++; + i = (byte3 & 0xff) + 4; + l = ai[l]; + k = (byte) (l & 0xff); + l >>= 8; + j++; + } + } + } + } + } while (true); + int i2 = class32.anInt571; + class32.anInt571 += k1 - j1; + if (class32.anInt571 < i2) { + class32.anInt572++; + } + class32.aByte573 = byte4; + class32.anInt574 = i; + class32.anInt584 = j; + class32.anInt582 = k; + Class32.anIntArray587 = ai; + class32.anInt581 = l; + class32.aByteArray568 = abyte0; + class32.anInt569 = i1; + class32.anInt570 = j1; + } + + private static void method227(Class32 class32) { + int k8 = 0; + int ai[] = null; + int ai1[] = null; + int ai2[] = null; + class32.anInt578 = 1; + if (Class32.anIntArray587 == null) { + Class32.anIntArray587 = new int[class32.anInt578 * 0x186a0]; + } + boolean flag19 = true; + while (flag19) { + byte byte0 = method228(class32); + if (byte0 == 23) { + return; + } + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method228(class32); + class32.anInt579++; + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method228(class32); + byte0 = method229(class32); + class32.aBoolean575 = byte0 != 0; + if (class32.aBoolean575) { + System.out.println("PANIC! RANDOMISED BLOCK!"); + } + class32.anInt580 = 0; + byte0 = method228(class32); + class32.anInt580 = class32.anInt580 << 8 | byte0 & 0xff; + byte0 = method228(class32); + class32.anInt580 = class32.anInt580 << 8 | byte0 & 0xff; + byte0 = method228(class32); + class32.anInt580 = class32.anInt580 << 8 | byte0 & 0xff; + for (int j = 0; j < 16; j++) { + byte byte1 = method229(class32); + class32.aBooleanArray590[j] = byte1 == 1; + } + + for (int k = 0; k < 256; k++) { + class32.aBooleanArray589[k] = false; + } + + for (int l = 0; l < 16; l++) { + if (class32.aBooleanArray590[l]) { + for (int i3 = 0; i3 < 16; i3++) { + byte byte2 = method229(class32); + if (byte2 == 1) { + class32.aBooleanArray589[l * 16 + i3] = true; + } + } + + } + } + + method231(class32); + int i4 = class32.anInt588 + 2; + int j4 = method230(3, class32); + int k4 = method230(15, class32); + for (int i1 = 0; i1 < k4; i1++) { + int j3 = 0; + do { + byte byte3 = method229(class32); + if (byte3 == 0) { + break; + } + j3++; + } while (true); + class32.aByteArray595[i1] = (byte) j3; + } + + byte abyte0[] = new byte[6]; + for (byte byte16 = 0; byte16 < j4; byte16++) { + abyte0[byte16] = byte16; + } + + for (int j1 = 0; j1 < k4; j1++) { + byte byte17 = class32.aByteArray595[j1]; + byte byte15 = abyte0[byte17]; + for (; byte17 > 0; byte17--) { + abyte0[byte17] = abyte0[byte17 - 1]; + } + + abyte0[0] = byte15; + class32.aByteArray594[j1] = byte15; + } + + for (int k3 = 0; k3 < j4; k3++) { + int l6 = method230(5, class32); + for (int k1 = 0; k1 < i4; k1++) { + do { + byte byte4 = method229(class32); + if (byte4 == 0) { + break; + } + byte4 = method229(class32); + if (byte4 == 0) { + l6++; + } else { + l6--; + } + } while (true); + class32.aByteArrayArray596[k3][k1] = (byte) l6; + } + + } + + for (int l3 = 0; l3 < j4; l3++) { + byte byte8 = 32; + int i = 0; + for (int l1 = 0; l1 < i4; l1++) { + if (class32.aByteArrayArray596[l3][l1] > i) { + i = class32.aByteArrayArray596[l3][l1]; + } + if (class32.aByteArrayArray596[l3][l1] < byte8) { + byte8 = class32.aByteArrayArray596[l3][l1]; + } + } + + method232(class32.anIntArrayArray597[l3], class32.anIntArrayArray598[l3], class32.anIntArrayArray599[l3], class32.aByteArrayArray596[l3], byte8, i, i4); + class32.anIntArray600[l3] = byte8; + } + + int l4 = class32.anInt588 + 1; + int i5 = -1; + int j5 = 0; + for (int i2 = 0; i2 <= 255; i2++) { + class32.anIntArray583[i2] = 0; + } + + int j9 = 4095; + for (int l8 = 15; l8 >= 0; l8--) { + for (int i9 = 15; i9 >= 0; i9--) { + class32.aByteArray592[j9] = (byte) (l8 * 16 + i9); + j9--; + } + + class32.anIntArray593[l8] = j9 + 1; + } + + int i6 = 0; + if (j5 == 0) { + i5++; + j5 = 50; + byte byte12 = class32.aByteArray594[i5]; + k8 = class32.anIntArray600[byte12]; + ai = class32.anIntArrayArray597[byte12]; + ai2 = class32.anIntArrayArray599[byte12]; + ai1 = class32.anIntArrayArray598[byte12]; + } + j5--; + int i7 = k8; + int l7; + byte byte9; + for (l7 = method230(i7, class32); l7 > ai[i7]; l7 = l7 << 1 | byte9) { + i7++; + byte9 = method229(class32); + } + + for (int k5 = ai2[l7 - ai1[i7]]; k5 != l4;) { + if (k5 == 0 || k5 == 1) { + int j6 = -1; + int k6 = 1; + do { + if (k5 == 0) { + j6 += k6; + } else if (k5 == 1) { + j6 += 2 * k6; + } + k6 *= 2; + if (j5 == 0) { + i5++; + j5 = 50; + byte byte13 = class32.aByteArray594[i5]; + k8 = class32.anIntArray600[byte13]; + ai = class32.anIntArrayArray597[byte13]; + ai2 = class32.anIntArrayArray599[byte13]; + ai1 = class32.anIntArrayArray598[byte13]; + } + j5--; + int j7 = k8; + int i8; + byte byte10; + for (i8 = method230(j7, class32); i8 > ai[j7]; i8 = i8 << 1 | byte10) { + j7++; + byte10 = method229(class32); + } + + k5 = ai2[i8 - ai1[j7]]; + } while (k5 == 0 || k5 == 1); + j6++; + byte byte5 = class32.aByteArray591[class32.aByteArray592[class32.anIntArray593[0]] & 0xff]; + class32.anIntArray583[byte5 & 0xff] += j6; + for (; j6 > 0; j6--) { + Class32.anIntArray587[i6] = byte5 & 0xff; + i6++; + } + + } else { + int j11 = k5 - 1; + byte byte6; + if (j11 < 16) { + int j10 = class32.anIntArray593[0]; + byte6 = class32.aByteArray592[j10 + j11]; + for (; j11 > 3; j11 -= 4) { + int k11 = j10 + j11; + class32.aByteArray592[k11] = class32.aByteArray592[k11 - 1]; + class32.aByteArray592[k11 - 1] = class32.aByteArray592[k11 - 2]; + class32.aByteArray592[k11 - 2] = class32.aByteArray592[k11 - 3]; + class32.aByteArray592[k11 - 3] = class32.aByteArray592[k11 - 4]; + } + + for (; j11 > 0; j11--) { + class32.aByteArray592[j10 + j11] = class32.aByteArray592[j10 + j11 - 1]; + } + + class32.aByteArray592[j10] = byte6; + } else { + int l10 = j11 / 16; + int i11 = j11 % 16; + int k10 = class32.anIntArray593[l10] + i11; + byte6 = class32.aByteArray592[k10]; + for (; k10 > class32.anIntArray593[l10]; k10--) { + class32.aByteArray592[k10] = class32.aByteArray592[k10 - 1]; + } + + class32.anIntArray593[l10]++; + for (; l10 > 0; l10--) { + class32.anIntArray593[l10]--; + class32.aByteArray592[class32.anIntArray593[l10]] = class32.aByteArray592[class32.anIntArray593[l10 - 1] + 16 - 1]; + } + + class32.anIntArray593[0]--; + class32.aByteArray592[class32.anIntArray593[0]] = byte6; + if (class32.anIntArray593[0] == 0) { + int i10 = 4095; + for (int k9 = 15; k9 >= 0; k9--) { + for (int l9 = 15; l9 >= 0; l9--) { + class32.aByteArray592[i10] = class32.aByteArray592[class32.anIntArray593[k9] + l9]; + i10--; + } + + class32.anIntArray593[k9] = i10 + 1; + } + + } + } + class32.anIntArray583[class32.aByteArray591[byte6 & 0xff] & 0xff]++; + Class32.anIntArray587[i6] = class32.aByteArray591[byte6 & 0xff] & 0xff; + i6++; + if (j5 == 0) { + i5++; + j5 = 50; + byte byte14 = class32.aByteArray594[i5]; + k8 = class32.anIntArray600[byte14]; + ai = class32.anIntArrayArray597[byte14]; + ai2 = class32.anIntArrayArray599[byte14]; + ai1 = class32.anIntArrayArray598[byte14]; + } + j5--; + int k7 = k8; + int j8; + byte byte11; + for (j8 = method230(k7, class32); j8 > ai[k7]; j8 = j8 << 1 | byte11) { + k7++; + byte11 = method229(class32); + } + + k5 = ai2[j8 - ai1[k7]]; + } + } + + class32.anInt574 = 0; + class32.aByte573 = 0; + class32.anIntArray585[0] = 0; + for (int j2 = 1; j2 <= 256; j2++) { + class32.anIntArray585[j2] = class32.anIntArray583[j2 - 1]; + } + + for (int k2 = 1; k2 <= 256; k2++) { + class32.anIntArray585[k2] += class32.anIntArray585[k2 - 1]; + } + + for (int l2 = 0; l2 < i6; l2++) { + byte byte7 = (byte) (Class32.anIntArray587[l2] & 0xff); + Class32.anIntArray587[class32.anIntArray585[byte7 & 0xff]] |= l2 << 8; + class32.anIntArray585[byte7 & 0xff]++; + } + + class32.anInt581 = Class32.anIntArray587[class32.anInt580] >> 8; + class32.anInt584 = 0; + class32.anInt581 = Class32.anIntArray587[class32.anInt581]; + class32.anInt582 = (byte) (class32.anInt581 & 0xff); + class32.anInt581 >>= 8; + class32.anInt584++; + class32.anInt601 = i6; + method226(class32); + flag19 = class32.anInt584 == class32.anInt601 + 1 && class32.anInt574 == 0; + } + } + + private static byte method228(Class32 class32) { + return (byte) method230(8, class32); + } + + private static byte method229(Class32 class32) { + return (byte) method230(1, class32); + } + + private static int method230(int i, Class32 class32) { + int j; + do { + if (class32.anInt577 >= i) { + int k = class32.anInt576 >> class32.anInt577 - i & (1 << i) - 1; + class32.anInt577 -= i; + j = k; + break; + } + class32.anInt576 = class32.anInt576 << 8 | class32.aByteArray563[class32.anInt564] & 0xff; + class32.anInt577 += 8; + class32.anInt564++; + class32.anInt565--; + class32.anInt566++; + if (class32.anInt566 == 0) { + class32.anInt567++; + } + } while (true); + return j; + } + + private static void method231(Class32 class32) { + class32.anInt588 = 0; + for (int i = 0; i < 256; i++) { + if (class32.aBooleanArray589[i]) { + class32.aByteArray591[class32.anInt588] = (byte) i; + class32.anInt588++; + } + } + + } + + private static void method232(int ai[], int ai1[], int ai2[], byte abyte0[], int i, int j, int k) { + int l = 0; + for (int i1 = i; i1 <= j; i1++) { + for (int l2 = 0; l2 < k; l2++) { + if (abyte0[l2] == i1) { + ai2[l] = l2; + l++; + } + } + + } + + for (int j1 = 0; j1 < 23; j1++) { + ai1[j1] = 0; + } + + for (int k1 = 0; k1 < k; k1++) { + ai1[abyte0[k1] + 1]++; + } + + for (int l1 = 1; l1 < 23; l1++) { + ai1[l1] += ai1[l1 - 1]; + } + + for (int i2 = 0; i2 < 23; i2++) { + ai[i2] = 0; + } + + int i3 = 0; + for (int j2 = i; j2 <= j; j2++) { + i3 += ai1[j2 + 1] - ai1[j2]; + ai[j2] = i3 - 1; + i3 <<= 1; + } + + for (int k2 = i + 1; k2 <= j; k2++) { + ai1[k2] = (ai[k2 - 1] + 1 << 1) - ai1[k2]; + } + + } + + private static final Class32 aClass32_305 = new Class32(); + +} diff --git a/2006Redone Client/src/Class18.java b/2006Redone Client/src/Class18.java new file mode 100644 index 00000000..9290b1b4 --- /dev/null +++ b/2006Redone Client/src/Class18.java @@ -0,0 +1,28 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Class18 { + + public Class18(Stream stream) { + int anInt341 = stream.readUnsignedByte(); + anIntArray342 = new int[anInt341]; + anIntArrayArray343 = new int[anInt341][]; + for (int j = 0; j < anInt341; j++) { + anIntArray342[j] = stream.readUnsignedByte(); + } + + for (int k = 0; k < anInt341; k++) { + int l = stream.readUnsignedByte(); + anIntArrayArray343[k] = new int[l]; + for (int i1 = 0; i1 < l; i1++) { + anIntArrayArray343[k][i1] = stream.readUnsignedByte(); + } + + } + + } + + public final int[] anIntArray342; + public final int[][] anIntArrayArray343; +} diff --git a/2006Redone Client/src/Class21.java b/2006Redone Client/src/Class21.java new file mode 100644 index 00000000..19791626 --- /dev/null +++ b/2006Redone Client/src/Class21.java @@ -0,0 +1,27 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class21 { + + public Class21() { + } + + public byte aByteArray368[]; + public int anInt369; + public int anInt370; + public int anInt371; + public int anInt372; + public int anInt373; + public int anInt374; + public int anInt375; + public int anInt376; + public int anInt377; + public int anInt378; + public int anInt379; + public int anInt380; + public int anInt381; + public int anInt382; + public int anInt383; + public int anInt384; +} diff --git a/2006Redone Client/src/Class29.java b/2006Redone Client/src/Class29.java new file mode 100644 index 00000000..498968af --- /dev/null +++ b/2006Redone Client/src/Class29.java @@ -0,0 +1,64 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class29 { + + public void method325(Stream stream) { + anInt540 = stream.readUnsignedByte(); + anInt538 = stream.readDWord(); + anInt539 = stream.readDWord(); + method326(stream); + } + + public void method326(Stream stream) { + anInt535 = stream.readUnsignedByte(); + anIntArray536 = new int[anInt535]; + anIntArray537 = new int[anInt535]; + for (int i = 0; i < anInt535; i++) { + anIntArray536[i] = stream.readUnsignedWord(); + anIntArray537[i] = stream.readUnsignedWord(); + } + + } + + void resetValues() { + anInt541 = 0; + anInt542 = 0; + anInt543 = 0; + anInt544 = 0; + anInt545 = 0; + } + + int method328(int i) { + if (anInt545 >= anInt541) { + anInt544 = anIntArray537[anInt542++] << 15; + if (anInt542 >= anInt535) { + anInt542 = anInt535 - 1; + } + anInt541 = (int) (anIntArray536[anInt542] / 65536D * i); + if (anInt541 > anInt545) { + anInt543 = ((anIntArray537[anInt542] << 15) - anInt544) / (anInt541 - anInt545); + } + } + anInt544 += anInt543; + anInt545++; + return anInt544 - anInt543 >> 15; + } + + public Class29() { + } + + private int anInt535; + private int[] anIntArray536; + private int[] anIntArray537; + int anInt538; + int anInt539; + int anInt540; + private int anInt541; + private int anInt542; + private int anInt543; + private int anInt544; + private int anInt545; + public static int anInt546; +} diff --git a/2006Redone Client/src/Class30_Sub1.java b/2006Redone Client/src/Class30_Sub1.java new file mode 100644 index 00000000..223b1601 --- /dev/null +++ b/2006Redone Client/src/Class30_Sub1.java @@ -0,0 +1,23 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class30_Sub1 extends Node { + + Class30_Sub1() { + anInt1294 = -1; + } + + public int anInt1291; + public int anInt1292; + public int anInt1293; + public int anInt1294; + public int anInt1295; + public int anInt1296; + public int anInt1297; + public int anInt1298; + public int anInt1299; + public int anInt1300; + public int anInt1301; + public int anInt1302; +} diff --git a/2006Redone Client/src/Class32.java b/2006Redone Client/src/Class32.java new file mode 100644 index 00000000..f6819890 --- /dev/null +++ b/2006Redone Client/src/Class32.java @@ -0,0 +1,62 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class32 { + + Class32() { + anIntArray583 = new int[256]; + anIntArray585 = new int[257]; + aBooleanArray589 = new boolean[256]; + aBooleanArray590 = new boolean[16]; + aByteArray591 = new byte[256]; + aByteArray592 = new byte[4096]; + anIntArray593 = new int[16]; + aByteArray594 = new byte[18002]; + aByteArray595 = new byte[18002]; + aByteArrayArray596 = new byte[6][258]; + anIntArrayArray597 = new int[6][258]; + anIntArrayArray598 = new int[6][258]; + anIntArrayArray599 = new int[6][258]; + anIntArray600 = new int[6]; + } + + byte aByteArray563[]; + int anInt564; + int anInt565; + int anInt566; + int anInt567; + byte aByteArray568[]; + int anInt569; + int anInt570; + int anInt571; + int anInt572; + byte aByte573; + int anInt574; + boolean aBoolean575; + int anInt576; + int anInt577; + int anInt578; + int anInt579; + int anInt580; + int anInt581; + int anInt582; + final int[] anIntArray583; + int anInt584; + final int[] anIntArray585; + public static int anIntArray587[]; + int anInt588; + final boolean[] aBooleanArray589; + final boolean[] aBooleanArray590; + final byte[] aByteArray591; + final byte[] aByteArray592; + final int[] anIntArray593; + final byte[] aByteArray594; + final byte[] aByteArray595; + final byte[][] aByteArrayArray596; + final int[][] anIntArrayArray597; + final int[][] anIntArrayArray598; + final int[][] anIntArrayArray599; + final int[] anIntArray600; + int anInt601; +} diff --git a/2006Redone Client/src/Class33.java b/2006Redone Client/src/Class33.java new file mode 100644 index 00000000..69f0fbb3 --- /dev/null +++ b/2006Redone Client/src/Class33.java @@ -0,0 +1,14 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class33 { + + public Class33() { + } + + int anInt602; + int anInt603; + int anInt604; + int anInt605; +} diff --git a/2006Redone Client/src/Class36.java b/2006Redone Client/src/Class36.java new file mode 100644 index 00000000..37533c3b --- /dev/null +++ b/2006Redone Client/src/Class36.java @@ -0,0 +1,142 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Class36 { + + public static void method528(int i) { + aClass36Array635 = new Class36[i + 1]; + aBooleanArray643 = new boolean[i + 1]; + for (int j = 0; j < i + 1; j++) { + aBooleanArray643[j] = true; + } + + } + + public static void method529(byte abyte0[]) { + Stream stream = new Stream(abyte0); + stream.currentOffset = abyte0.length - 8; + int i = stream.readUnsignedWord(); + int j = stream.readUnsignedWord(); + int k = stream.readUnsignedWord(); + int l = stream.readUnsignedWord(); + int i1 = 0; + Stream stream_1 = new Stream(abyte0); + stream_1.currentOffset = i1; + i1 += i + 2; + Stream stream_2 = new Stream(abyte0); + stream_2.currentOffset = i1; + i1 += j; + Stream stream_3 = new Stream(abyte0); + stream_3.currentOffset = i1; + i1 += k; + Stream stream_4 = new Stream(abyte0); + stream_4.currentOffset = i1; + i1 += l; + Stream stream_5 = new Stream(abyte0); + stream_5.currentOffset = i1; + Class18 class18 = new Class18(stream_5); + int k1 = stream_1.readUnsignedWord(); + int ai[] = new int[500]; + int ai1[] = new int[500]; + int ai2[] = new int[500]; + int ai3[] = new int[500]; + for (int l1 = 0; l1 < k1; l1++) { + int i2 = stream_1.readUnsignedWord(); + Class36 class36 = aClass36Array635[i2] = new Class36(); + class36.anInt636 = stream_4.readUnsignedByte(); + class36.aClass18_637 = class18; + int j2 = stream_1.readUnsignedByte(); + int k2 = -1; + int l2 = 0; + for (int i3 = 0; i3 < j2; i3++) { + int j3 = stream_2.readUnsignedByte(); + if (j3 > 0) { + if (class18.anIntArray342[i3] != 0) { + for (int l3 = i3 - 1; l3 > k2; l3--) { + if (class18.anIntArray342[l3] != 0) { + continue; + } + ai[l2] = l3; + ai1[l2] = 0; + ai2[l2] = 0; + ai3[l2] = 0; + l2++; + break; + } + + } + ai[l2] = i3; + char c = '\0'; + if (class18.anIntArray342[i3] == 3) { + c = '\200'; + } + if ((j3 & 1) != 0) { + ai1[l2] = stream_3.method421(); + } else { + ai1[l2] = c; + } + if ((j3 & 2) != 0) { + ai2[l2] = stream_3.method421(); + } else { + ai2[l2] = c; + } + if ((j3 & 4) != 0) { + ai3[l2] = stream_3.method421(); + } else { + ai3[l2] = c; + } + k2 = i3; + l2++; + if (class18.anIntArray342[i3] == 5) { + aBooleanArray643[i2] = false; + } + } + } + + class36.anInt638 = l2; + class36.anIntArray639 = new int[l2]; + class36.anIntArray640 = new int[l2]; + class36.anIntArray641 = new int[l2]; + class36.anIntArray642 = new int[l2]; + for (int k3 = 0; k3 < l2; k3++) { + class36.anIntArray639[k3] = ai[k3]; + class36.anIntArray640[k3] = ai1[k3]; + class36.anIntArray641[k3] = ai2[k3]; + class36.anIntArray642[k3] = ai3[k3]; + } + + } + + } + + public static void nullLoader() { + aClass36Array635 = null; + } + + public static Class36 method531(int j) { + if (aClass36Array635 == null) { + return null; + } else { + return aClass36Array635[j]; + } + } + + public static boolean method532(int i) { + return i == -1; + } + + private Class36() { + } + + private static Class36[] aClass36Array635; + public int anInt636; + public Class18 aClass18_637; + public int anInt638; + public int anIntArray639[]; + public int anIntArray640[]; + public int anIntArray641[]; + public int anIntArray642[]; + private static boolean[] aBooleanArray643; + +} diff --git a/2006Redone Client/src/Class39.java b/2006Redone Client/src/Class39.java new file mode 100644 index 00000000..6f72a68e --- /dev/null +++ b/2006Redone Client/src/Class39.java @@ -0,0 +1,117 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class39 { + + private float method541(int i, int j, float f) { + float f1 = anIntArrayArrayArray667[i][0][j] + f * (anIntArrayArrayArray667[i][1][j] - anIntArrayArrayArray667[i][0][j]); + f1 *= 0.001525879F; + return 1.0F - (float) Math.pow(10D, -f1 / 20F); + } + + private float method542(float f) { + float f1 = 32.7032F * (float) Math.pow(2D, f); + return f1 * 3.141593F / 11025F; + } + + private float method543(float f, int i, int j) { + float f1 = anIntArrayArrayArray666[j][0][i] + f * (anIntArrayArrayArray666[j][1][i] - anIntArrayArrayArray666[j][0][i]); + f1 *= 0.0001220703F; + return method542(f1); + } + + public int method544(int i, float f) { + if (i == 0) { + float f1 = anIntArray668[0] + (anIntArray668[1] - anIntArray668[0]) * f; + f1 *= 0.003051758F; + aFloat671 = (float) Math.pow(0.10000000000000001D, f1 / 20F); + anInt672 = (int) (aFloat671 * 65536F); + } + if (anIntArray665[i] == 0) { + return 0; + } + float f2 = method541(i, 0, f); + aFloatArrayArray669[i][0] = -2F * f2 * (float) Math.cos(method543(f, 0, i)); + aFloatArrayArray669[i][1] = f2 * f2; + for (int k = 1; k < anIntArray665[i]; k++) { + float f3 = method541(i, k, f); + float f4 = -2F * f3 * (float) Math.cos(method543(f, k, i)); + float f5 = f3 * f3; + aFloatArrayArray669[i][k * 2 + 1] = aFloatArrayArray669[i][k * 2 - 1] * f5; + aFloatArrayArray669[i][k * 2] = aFloatArrayArray669[i][k * 2 - 1] * f4 + aFloatArrayArray669[i][k * 2 - 2] * f5; + for (int j1 = k * 2 - 1; j1 >= 2; j1--) { + aFloatArrayArray669[i][j1] += aFloatArrayArray669[i][j1 - 1] * f4 + aFloatArrayArray669[i][j1 - 2] * f5; + } + + aFloatArrayArray669[i][1] += aFloatArrayArray669[i][0] * f4 + f5; + aFloatArrayArray669[i][0] += f4; + } + + if (i == 0) { + for (int l = 0; l < anIntArray665[0] * 2; l++) { + aFloatArrayArray669[0][l] *= aFloat671; + } + + } + for (int i1 = 0; i1 < anIntArray665[i] * 2; i1++) { + anIntArrayArray670[i][i1] = (int) (aFloatArrayArray669[i][i1] * 65536F); + } + + return anIntArray665[i] * 2; + } + + public void method545(Stream stream, Class29 class29) { + int i = stream.readUnsignedByte(); + anIntArray665[0] = i >> 4; + anIntArray665[1] = i & 0xf; + if (i != 0) { + anIntArray668[0] = stream.readUnsignedWord(); + anIntArray668[1] = stream.readUnsignedWord(); + int j = stream.readUnsignedByte(); + for (int k = 0; k < 2; k++) { + for (int l = 0; l < anIntArray665[k]; l++) { + anIntArrayArrayArray666[k][0][l] = stream.readUnsignedWord(); + anIntArrayArrayArray667[k][0][l] = stream.readUnsignedWord(); + } + + } + + for (int i1 = 0; i1 < 2; i1++) { + for (int j1 = 0; j1 < anIntArray665[i1]; j1++) { + if ((j & 1 << i1 * 4 << j1) != 0) { + anIntArrayArrayArray666[i1][1][j1] = stream.readUnsignedWord(); + anIntArrayArrayArray667[i1][1][j1] = stream.readUnsignedWord(); + } else { + anIntArrayArrayArray666[i1][1][j1] = anIntArrayArrayArray666[i1][0][j1]; + anIntArrayArrayArray667[i1][1][j1] = anIntArrayArrayArray667[i1][0][j1]; + } + } + + } + + if (j != 0 || anIntArray668[1] != anIntArray668[0]) { + class29.method326(stream); + } + } else { + anIntArray668[0] = anIntArray668[1] = 0; + } + } + + public Class39() { + anIntArray665 = new int[2]; + anIntArrayArrayArray666 = new int[2][2][4]; + anIntArrayArrayArray667 = new int[2][2][4]; + anIntArray668 = new int[2]; + } + + final int[] anIntArray665; + private final int[][][] anIntArrayArrayArray666; + private final int[][][] anIntArrayArrayArray667; + private final int[] anIntArray668; + private static final float[][] aFloatArrayArray669 = new float[2][8]; + static final int[][] anIntArrayArray670 = new int[2][8]; + private static float aFloat671; + static int anInt672; + +} diff --git a/2006Redone Client/src/Class4.java b/2006Redone Client/src/Class4.java new file mode 100644 index 00000000..e9bbf95e --- /dev/null +++ b/2006Redone Client/src/Class4.java @@ -0,0 +1,67 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class4 { + + public static int method155(int i, int j, int k) { + i &= 3; + if (i == 0) { + return k; + } + if (i == 1) { + return j; + } + if (i == 2) { + return 7 - k; + } else { + return 7 - j; + } + } + + public static int method156(int i, int j, int l) { + j &= 3; + if (j == 0) { + return i; + } + if (j == 1) { + return 7 - l; + } + if (j == 2) { + return 7 - i; + } else { + return l; + } + } + + public static int method157(int i, int j, int k, int l, int i1) { + i &= 3; + if (i == 0) { + return k; + } + if (i == 1) { + return l; + } + if (i == 2) { + return 7 - k - (i1 - 1); + } else { + return 7 - l - (j - 1); + } + } + + public static int method158(int j, int k, int l, int i1, int j1) { + l &= 3; + if (l == 0) { + return j; + } + if (l == 1) { + return 7 - j1 - (i1 - 1); + } + if (l == 2) { + return 7 - j - (k - 1); + } else { + return j1; + } + } + +} diff --git a/2006Redone Client/src/Class40.java b/2006Redone Client/src/Class40.java new file mode 100644 index 00000000..2512738f --- /dev/null +++ b/2006Redone Client/src/Class40.java @@ -0,0 +1,243 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class40 { + + public Class40(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2, int i3, int j3, int k3, int l3, int i4, int k4, int l4) { + aBoolean683 = !(i3 != l2 || i3 != l || i3 != k2); + anInt684 = j3; + anInt685 = k1; + anInt686 = i2; + anInt687 = l4; + char c = '\200'; + int i5 = c / 2; + int j5 = c / 4; + int k5 = c * 3 / 4; + int ai[] = anIntArrayArray696[j3]; + int l5 = ai.length; + anIntArray673 = new int[l5]; + anIntArray674 = new int[l5]; + anIntArray675 = new int[l5]; + int ai1[] = new int[l5]; + int ai2[] = new int[l5]; + int i6 = k4 * c; + int j6 = i * c; + for (int k6 = 0; k6 < l5; k6++) { + int l6 = ai[k6]; + if ((l6 & 1) == 0 && l6 <= 8) { + l6 = (l6 - k1 - k1 - 1 & 7) + 1; + } + if (l6 > 8 && l6 <= 12) { + l6 = (l6 - 9 - k1 & 3) + 9; + } + if (l6 > 12 && l6 <= 16) { + l6 = (l6 - 13 - k1 & 3) + 13; + } + int i7; + int k7; + int i8; + int k8; + int j9; + if (l6 == 1) { + i7 = i6; + k7 = j6; + i8 = i3; + k8 = l1; + j9 = j; + } else if (l6 == 2) { + i7 = i6 + i5; + k7 = j6; + i8 = i3 + l2 >> 1; + k8 = l1 + i4 >> 1; + j9 = j + l3 >> 1; + } else if (l6 == 3) { + i7 = i6 + c; + k7 = j6; + i8 = l2; + k8 = i4; + j9 = l3; + } else if (l6 == 4) { + i7 = i6 + c; + k7 = j6 + i5; + i8 = l2 + l >> 1; + k8 = i4 + j2 >> 1; + j9 = l3 + j1 >> 1; + } else if (l6 == 5) { + i7 = i6 + c; + k7 = j6 + c; + i8 = l; + k8 = j2; + j9 = j1; + } else if (l6 == 6) { + i7 = i6 + i5; + k7 = j6 + c; + i8 = l + k2 >> 1; + k8 = j2 + k >> 1; + j9 = j1 + k3 >> 1; + } else if (l6 == 7) { + i7 = i6; + k7 = j6 + c; + i8 = k2; + k8 = k; + j9 = k3; + } else if (l6 == 8) { + i7 = i6; + k7 = j6 + i5; + i8 = k2 + i3 >> 1; + k8 = k + l1 >> 1; + j9 = k3 + j >> 1; + } else if (l6 == 9) { + i7 = i6 + i5; + k7 = j6 + j5; + i8 = i3 + l2 >> 1; + k8 = l1 + i4 >> 1; + j9 = j + l3 >> 1; + } else if (l6 == 10) { + i7 = i6 + k5; + k7 = j6 + i5; + i8 = l2 + l >> 1; + k8 = i4 + j2 >> 1; + j9 = l3 + j1 >> 1; + } else if (l6 == 11) { + i7 = i6 + i5; + k7 = j6 + k5; + i8 = l + k2 >> 1; + k8 = j2 + k >> 1; + j9 = j1 + k3 >> 1; + } else if (l6 == 12) { + i7 = i6 + j5; + k7 = j6 + i5; + i8 = k2 + i3 >> 1; + k8 = k + l1 >> 1; + j9 = k3 + j >> 1; + } else if (l6 == 13) { + i7 = i6 + j5; + k7 = j6 + j5; + i8 = i3; + k8 = l1; + j9 = j; + } else if (l6 == 14) { + i7 = i6 + k5; + k7 = j6 + j5; + i8 = l2; + k8 = i4; + j9 = l3; + } else if (l6 == 15) { + i7 = i6 + k5; + k7 = j6 + k5; + i8 = l; + k8 = j2; + j9 = j1; + } else { + i7 = i6 + j5; + k7 = j6 + k5; + i8 = k2; + k8 = k; + j9 = k3; + } + anIntArray673[k6] = i7; + anIntArray674[k6] = i8; + anIntArray675[k6] = k7; + ai1[k6] = k8; + ai2[k6] = j9; + } + + int ai3[] = anIntArrayArray697[j3]; + int j7 = ai3.length / 4; + anIntArray679 = new int[j7]; + anIntArray680 = new int[j7]; + anIntArray681 = new int[j7]; + anIntArray676 = new int[j7]; + anIntArray677 = new int[j7]; + anIntArray678 = new int[j7]; + if (i1 != -1) { + anIntArray682 = new int[j7]; + } + int l7 = 0; + for (int j8 = 0; j8 < j7; j8++) { + int l8 = ai3[l7]; + int k9 = ai3[l7 + 1]; + int i10 = ai3[l7 + 2]; + int k10 = ai3[l7 + 3]; + l7 += 4; + if (k9 < 4) { + k9 = k9 - k1 & 3; + } + if (i10 < 4) { + i10 = i10 - k1 & 3; + } + if (k10 < 4) { + k10 = k10 - k1 & 3; + } + anIntArray679[j8] = k9; + anIntArray680[j8] = i10; + anIntArray681[j8] = k10; + if (l8 == 0) { + anIntArray676[j8] = ai1[k9]; + anIntArray677[j8] = ai1[i10]; + anIntArray678[j8] = ai1[k10]; + if (anIntArray682 != null) { + anIntArray682[j8] = -1; + } + } else { + anIntArray676[j8] = ai2[k9]; + anIntArray677[j8] = ai2[i10]; + anIntArray678[j8] = ai2[k10]; + if (anIntArray682 != null) { + anIntArray682[j8] = i1; + } + } + } + + int i9 = i3; + int l9 = l2; + if (l2 < i9) { + i9 = l2; + } + if (l2 > l9) { + l9 = l2; + } + if (l < i9) { + i9 = l; + } + if (l > l9) { + l9 = l; + } + if (k2 < i9) { + i9 = k2; + } + if (k2 > l9) { + l9 = k2; + } + i9 /= 14; + l9 /= 14; + } + + final int[] anIntArray673; + final int[] anIntArray674; + final int[] anIntArray675; + final int[] anIntArray676; + final int[] anIntArray677; + final int[] anIntArray678; + final int[] anIntArray679; + final int[] anIntArray680; + final int[] anIntArray681; + int anIntArray682[]; + final boolean aBoolean683; + final int anInt684; + final int anInt685; + final int anInt686; + final int anInt687; + static final int[] anIntArray688 = new int[6]; + static final int[] anIntArray689 = new int[6]; + static final int[] anIntArray690 = new int[6]; + static final int[] anIntArray691 = new int[6]; + static final int[] anIntArray692 = new int[6]; + static final int[] anIntArray693 = {1, 0}; + static final int[] anIntArray694 = {2, 1}; + static final int[] anIntArray695 = {3, 3}; + private static final int[][] anIntArrayArray696 = {{1, 3, 5, 7}, {1, 3, 5, 7}, {1, 3, 5, 7}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 2, 6}, {1, 3, 5, 7, 2, 8}, {1, 3, 5, 7, 2, 8}, {1, 3, 5, 7, 11, 12}, {1, 3, 5, 7, 11, 12}, {1, 3, 5, 7, 13, 14}}; + private static final int[][] anIntArrayArray697 = {{0, 1, 2, 3, 0, 0, 1, 3}, {1, 1, 2, 3, 1, 0, 1, 3}, {0, 1, 2, 3, 1, 0, 1, 3}, {0, 0, 1, 2, 0, 0, 2, 4, 1, 0, 4, 3}, {0, 0, 1, 4, 0, 0, 4, 3, 1, 1, 2, 4}, {0, 0, 4, 3, 1, 0, 1, 2, 1, 0, 2, 4}, {0, 1, 2, 4, 1, 0, 1, 4, 1, 0, 4, 3}, {0, 4, 1, 2, 0, 4, 2, 5, 1, 0, 4, 5, 1, 0, 5, 3}, {0, 4, 1, 2, 0, 4, 2, 3, 0, 4, 3, 5, 1, 0, 4, 5}, {0, 0, 4, 5, 1, 4, 1, 2, 1, 4, 2, 3, 1, 4, 3, 5}, {0, 0, 1, 5, 0, 1, 4, 5, 0, 1, 2, 4, 1, 0, 5, 3, 1, 5, 4, 3, 1, 4, 2, 3}, {1, 0, 1, 5, 1, 1, 4, 5, 1, 1, 2, 4, 0, 0, 5, 3, 0, 5, 4, 3, 0, 4, 2, 3}, {1, 0, 5, 4, 1, 0, 1, 5, 0, 0, 4, 3, 0, 4, 5, 3, 0, 5, 2, 3, 0, 1, 2, 5}}; + +} diff --git a/2006Redone Client/src/Class43.java b/2006Redone Client/src/Class43.java new file mode 100644 index 00000000..cb44ac51 --- /dev/null +++ b/2006Redone Client/src/Class43.java @@ -0,0 +1,25 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class43 { + + public Class43(int i, int j, int k, int l, int i1, int j1, boolean flag) { + aBoolean721 = true; + anInt716 = i; + anInt717 = j; + anInt718 = k; + anInt719 = l; + anInt720 = i1; + anInt722 = j1; + aBoolean721 = flag; + } + + final int anInt716; + final int anInt717; + final int anInt718; + final int anInt719; + final int anInt720; + boolean aBoolean721; + final int anInt722; +} diff --git a/2006Redone Client/src/Class47.java b/2006Redone Client/src/Class47.java new file mode 100644 index 00000000..86c749de --- /dev/null +++ b/2006Redone Client/src/Class47.java @@ -0,0 +1,28 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class47 { + + Class47() { + } + + int anInt787; + int anInt788; + int anInt789; + int anInt790; + int anInt791; + int anInt792; + int anInt793; + int anInt794; + int anInt795; + int anInt796; + int anInt797; + int anInt798; + int anInt799; + int anInt800; + int anInt801; + int anInt802; + int anInt803; + int anInt804; +} diff --git a/2006Redone Client/src/Class56.java b/2006Redone Client/src/Class56.java new file mode 100644 index 00000000..268462fc --- /dev/null +++ b/2006Redone Client/src/Class56.java @@ -0,0 +1,18 @@ +abstract class Class56 { + + abstract void method827(int i, byte[] is, int i_2_, boolean bool); + + abstract void method828(); + + public Class56() { + /* empty */ + } + + abstract void method830(int i, int i_7_); + + abstract void method831(int i); + + abstract void method832(int i); + + abstract void method833(); +} diff --git a/2006Redone Client/src/Class56_Sub1.java b/2006Redone Client/src/Class56_Sub1.java new file mode 100644 index 00000000..22f91325 --- /dev/null +++ b/2006Redone Client/src/Class56_Sub1.java @@ -0,0 +1,78 @@ +/* Class56_Sub1 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ + +abstract class Class56_Sub1 extends Class56 +{ + final void method835(int i, int i_1_, long l) { + i_1_ = (int) ((double) i_1_ * Math.pow(0.1, (double) i * 5.0E-4) + 0.5); + if (i_1_ != Game.anInt1401) { + Game.anInt1401 = i_1_; + for (int i_2_ = 0; i_2_ < 16; i_2_++) { + int i_3_ = method844(i_2_); + method836(i_2_ + 176, 7, i_3_ >> 7, l); + method836(i_2_ + 176, 39, i_3_ & 0x7f, l); + } + } + } + + abstract void method836(int i, int i_4_, int i_5_, long l); + + final boolean method837(int i, int i_6_, int i_7_, long l) { + if ((i & 0xf0) == 176) { + if (i_6_ == 121) { + method836(i, i_6_, i_7_, l); + int i_8_ = i & 0xf; + Game.anIntArray385[i_8_] = 12800; + int i_9_ = method844(i_8_); + method836(i, 7, i_9_ >> 7, l); + method836(i, 39, i_9_ & 0x7f, l); + return true; + } + if (i_6_ == 7 || i_6_ == 39) { + int i_10_ = i & 0xf; + if (i_6_ == 7) + Game.anIntArray385[i_10_] = (Game.anIntArray385[i_10_] & 0x7f) + (i_7_ << 7); + else + Game.anIntArray385[i_10_] = (Game.anIntArray385[i_10_] & 0x3f80) + i_7_; + int i_11_ = method844(i_10_); + method836(i, 7, i_11_ >> 7, l); + method836(i, 39, i_11_ & 0x7f, l); + return true; + } + } + return false; + } + + final void method838(long l) { + for (int i_12_ = 0; i_12_ < 16; i_12_++) + method836(i_12_ + 176, 123, 0, l); + for (int i_13_ = 0; i_13_ < 16; i_13_++) + method836(i_13_ + 176, 120, 0, l); + for (int i_14_ = 0; i_14_ < 16; i_14_++) + method836(i_14_ + 176, 121, 0, l); + for (int i_15_ = 0; i_15_ < 16; i_15_++) + method836(i_15_ + 176, 0, 0, l); + for (int i_16_ = 0; i_16_ < 16; i_16_++) + method836(i_16_ + 176, 32, 0, l); + for (int i_17_ = 0; i_17_ < 16; i_17_++) + method836(i_17_ + 192, 0, 0, l); + } + + final void method840(int i, long l) { + Game.anInt1401 = i; + for (int i_21_ = 0; i_21_ < 16; i_21_++) + Game.anIntArray385[i_21_] = 12800; + for (int i_22_ = 0; i_22_ < 16; i_22_++) { + int i_23_ = method844(i_22_); + method836(i_22_ + 176, 7, i_23_ >> 7, l); + method836(i_22_ + 176, 39, i_23_ & 0x7f, l); + } + } + + private static final int method844(int i) { + int i_32_ = Game.anIntArray385[i]; + i_32_ = (i_32_ * Game.anInt1401 >> 8) * i_32_; + return (int) (Math.sqrt((double) i_32_) + 0.5); + } +} diff --git a/2006Redone Client/src/Class56_Sub1_Sub1.java b/2006Redone Client/src/Class56_Sub1_Sub1.java new file mode 100644 index 00000000..dced3b49 --- /dev/null +++ b/2006Redone Client/src/Class56_Sub1_Sub1.java @@ -0,0 +1,99 @@ +/* Class56_Sub1_Sub1 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ +import java.io.ByteArrayInputStream; + +import javax.sound.midi.InvalidMidiDataException; +import javax.sound.midi.MidiMessage; +import javax.sound.midi.MidiSystem; +import javax.sound.midi.Receiver; +import javax.sound.midi.Sequence; +import javax.sound.midi.Sequencer; +import javax.sound.midi.ShortMessage; + +final class Class56_Sub1_Sub1 extends Class56_Sub1 implements Receiver +{ + private static Receiver aReceiver1850 = null; + private static Sequencer aSequencer1851 = null; + + final void method827(int i, byte[] is, int i_0_, boolean bool) { + if (aSequencer1851 != null) { + try { + Sequence sequence = MidiSystem.getSequence(new ByteArrayInputStream(is)); + aSequencer1851.setSequence(sequence); + aSequencer1851.setLoopCount(!bool ? 0 : -1); + method835(0, i, -1L); + aSequencer1851.start(); + } catch (Exception exception) { + /* empty */ + } + } + } + + final void method833() { + if (aSequencer1851 != null) { + aSequencer1851.stop(); + method838(-1L); + } + } + + public final synchronized void send(MidiMessage midimessage, long l) { + byte[] is = midimessage.getMessage(); + if (is.length < 3 || !method837(is[0], is[1], is[2], l)) + aReceiver1850.send(midimessage, l); + } + + Class56_Sub1_Sub1() { + try { + aReceiver1850 = MidiSystem.getReceiver(); + aSequencer1851 = MidiSystem.getSequencer(false); + aSequencer1851.getTransmitter().setReceiver(this); + aSequencer1851.open(); + method838(-1L); + } catch (Exception exception) { + Game.method790(); + } + } + + final void method828() { + if (aSequencer1851 != null) { + aSequencer1851.close(); + aSequencer1851 = null; + } + if (aReceiver1850 != null) { + aReceiver1850.close(); + aReceiver1850 = null; + } + } + + public final void close() { + /* empty */ + } + + final void method831(int i) { + if (aSequencer1851 != null) { + method840(i, -1L); + } + } + + final synchronized void method830(int i, int i_2_) { + if (aSequencer1851 != null) { + method835(i_2_, i, -1L); + } + } + + final void method836(int i, int i_5_, int i_6_, long l) { + try { + ShortMessage shortmessage = new ShortMessage(); + shortmessage.setMessage(i, i_5_, i_6_); + aReceiver1850.send(shortmessage, l); + } catch (InvalidMidiDataException invalidmididataexception) { + /* empty */ + } + } + + final void method832(int i) { + if (i > -90) + method833(); + } +} diff --git a/2006Redone Client/src/Class56_Sub1_Sub2.java b/2006Redone Client/src/Class56_Sub1_Sub2.java new file mode 100644 index 00000000..0c6f6e2b --- /dev/null +++ b/2006Redone Client/src/Class56_Sub1_Sub2.java @@ -0,0 +1,185 @@ +/* Class56_Sub1_Sub2 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ + +final class Class56_Sub1_Sub2 extends Class56_Sub1 implements Runnable +{ + private static Runnable_Impl1 aRunnable_Impl1_1852; + private static boolean aBoolean1853; + private static boolean aBoolean1854; + private static int anInt1855; + private static int anInt1856; + private Class11 aClass11_1857 = new Class11(); + private static int[] anIntArray1858 = new int[256]; + + private static final void method845(int i, int i_1_, int i_2_, int i_3_) { + if (anIntArray1858.length <= anInt1856) { + aRunnable_Impl1_1852.method10(anIntArray1858, anInt1856); + anInt1856 = 0; + } + anIntArray1858[anInt1856++] = i_1_ - anInt1855; + anInt1855 = i_1_; + anIntArray1858[anInt1856++] = i_2_ << 8 | i | i_3_ << 16; + } + + private static final void method846() { + if (anInt1856 > 0) { + aRunnable_Impl1_1852.method10(anIntArray1858, anInt1856); + anInt1856 = 0; + } + } + + final void method836(int i, int i_4_, int i_5_, long l) { + method845(i, (int) l, i_4_, i_5_); + } + + final synchronized void method827(int i, byte[] is, int i_6_, + boolean bool) { + aClass11_1857.method525(is); + boolean bool_7_ = true; + aBoolean1854 = bool; + anInt1855 = 0; + aRunnable_Impl1_1852.method12(false); + method835(i_6_, i, (long) anInt1855); + int i_8_ = aClass11_1857.method533(); + for (int i_9_ = 0; i_9_ < i_8_; i_9_++) { + aClass11_1857.method526(i_9_); + while (!aClass11_1857.method521()) { + aClass11_1857.method520(i_9_); + if (aClass11_1857.anIntArray216[i_9_] != 0) { + bool_7_ = false; + break; + } + method847(i_6_ ^ 0x70, 0L, i_9_); + } + aClass11_1857.method522(i_9_); + } + if (bool_7_) { + if (aBoolean1854) + throw new RuntimeException(); + method838((long) anInt1855); + aClass11_1857.method523(); + } + method846(); + } + + final synchronized void method831(int i) { + method840(i, (long) anInt1855); + aRunnable_Impl1_1852.method10(anIntArray1858, anInt1856); + anInt1856 = 0; + } + + final synchronized void method832(int i) { + if (aClass11_1857.method527()) { + int i_11_ = anInt1855; + int i_12_ = -200; + int i_13_ = aRunnable_Impl1_1852.method14(-29810); + long l = ((long) (i_11_ - (i_13_ + i_12_)) + * (long) (aClass11_1857.anInt213 * 1000)); + for (;;) { + int i_14_ = aClass11_1857.method536(); + int i_15_ = aClass11_1857.anIntArray216[i_14_]; + long l_16_ = aClass11_1857.method532(i_15_); + if (l < l_16_) + break; + while (i_15_ + == aClass11_1857.anIntArray216[i_14_]) { + aClass11_1857.method526(i_14_); + method847(126, l_16_, i_14_); + if (aClass11_1857.method521()) { + aClass11_1857.method522(i_14_); + if (aClass11_1857.method531()) { + if (aBoolean1854) + aClass11_1857.method534(l_16_); + else { + method838 + ((long) (int) (l_16_ + / (long) ((aClass11_1857.anInt213) + * 1000))); + aClass11_1857.method523(); + method846(); + return; + } + } + break; + } + aClass11_1857.method520(i_14_); + aClass11_1857.method522(i_14_); + } + } + if (i > -90) + aRunnable_Impl1_1852 = null; + method846(); + } + } + + final synchronized void method833() { + aRunnable_Impl1_1852.method12(false); + method838((long) anInt1855); + aRunnable_Impl1_1852.method10(anIntArray1858, anInt1856); + anInt1856 = 0; + aClass11_1857.method523(); + } + + final void method828() { + synchronized (this) { + aBoolean1853 = true; + } + for (;;) { + synchronized (this) { + if (!aBoolean1853) + break; + } + Game.sleep(20L); + } + aRunnable_Impl1_1852.method11(true); + } + + public final void run() { + try { + for (;;) { + synchronized (this) { + if (aBoolean1853) { + aBoolean1853 = false; + break; + } + method832(-126); + } + Game.sleep(100L); + } + } catch (Exception exception) { + } + } + + private final void method847(int i, long l, int i_17_) { + int i_18_ = aClass11_1857.method529(i_17_); + if (i_18_ != 1) { + if ((i_18_ & 0x80) != 0) { + int i_19_ = (int) (l / (long) (aClass11_1857.anInt213 * 1000)); + int i_20_ = i_18_ & 0xff; + int i_21_ = (i_18_ & 0xffe7d5) >> 16; + int i_22_ = (i_18_ & 0xfff6) >> 8; + if (!method837(i_20_, i_22_, i_21_, (long) i_19_)) + method845(i_20_, i_19_, i_22_, i_21_); + } + } else + aClass11_1857.method528(); + } + + Class56_Sub1_Sub2(Runnable_Impl1 runnable_impl1) { + aRunnable_Impl1_1852 = runnable_impl1; + aRunnable_Impl1_1852.method15((byte) 96); + aRunnable_Impl1_1852.method12(false); + method838((long) anInt1855); + aRunnable_Impl1_1852.method10(anIntArray1858, anInt1856); + anInt1856 = 0; + Thread thread = new Thread(this); + thread.setDaemon(true); + thread.start(); + thread.setPriority(10); + } + + final synchronized void method830(int i, int i_23_) { + method835(i_23_, i, (long) anInt1855); + } +} diff --git a/2006Redone Client/src/Class6.java b/2006Redone Client/src/Class6.java new file mode 100644 index 00000000..c6e2bf78 --- /dev/null +++ b/2006Redone Client/src/Class6.java @@ -0,0 +1,305 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Class6 { + + public static void method166() { + anIntArray116 = new int[32768]; + for (int i = 0; i < 32768; i++) { + if (Math.random() > 0.5D) { + anIntArray116[i] = 1; + } else { + anIntArray116[i] = -1; + } + } + + anIntArray117 = new int[32768]; + for (int j = 0; j < 32768; j++) { + anIntArray117[j] = (int) (Math.sin(j / 5215.1903000000002D) * 16384D); + } + + anIntArray115 = new int[0x35d54]; + } + + public int[] method167(int i, int j) { + for (int k = 0; k < i; k++) { + anIntArray115[k] = 0; + } + + if (j < 10) { + return anIntArray115; + } + double d = i / (j + 0.0D); + aClass29_98.resetValues(); + aClass29_99.resetValues(); + int l = 0; + int i1 = 0; + int j1 = 0; + if (aClass29_100 != null) { + aClass29_100.resetValues(); + aClass29_101.resetValues(); + l = (int) ((aClass29_100.anInt539 - aClass29_100.anInt538) * 32.768000000000001D / d); + i1 = (int) (aClass29_100.anInt538 * 32.768000000000001D / d); + } + int k1 = 0; + int l1 = 0; + int i2 = 0; + if (aClass29_102 != null) { + aClass29_102.resetValues(); + aClass29_103.resetValues(); + k1 = (int) ((aClass29_102.anInt539 - aClass29_102.anInt538) * 32.768000000000001D / d); + l1 = (int) (aClass29_102.anInt538 * 32.768000000000001D / d); + } + for (int j2 = 0; j2 < 5; j2++) { + if (anIntArray106[j2] != 0) { + anIntArray118[j2] = 0; + anIntArray119[j2] = (int) (anIntArray108[j2] * d); + anIntArray120[j2] = (anIntArray106[j2] << 14) / 100; + anIntArray121[j2] = (int) ((aClass29_98.anInt539 - aClass29_98.anInt538) * 32.768000000000001D * Math.pow(1.0057929410678534D, anIntArray107[j2]) / d); + anIntArray122[j2] = (int) (aClass29_98.anInt538 * 32.768000000000001D / d); + } + } + + for (int k2 = 0; k2 < i; k2++) { + int l2 = aClass29_98.method328(i); + int j4 = aClass29_99.method328(i); + if (aClass29_100 != null) { + int j5 = aClass29_100.method328(i); + int j6 = aClass29_101.method328(i); + l2 += method168(j6, j1, aClass29_100.anInt540) >> 1; + j1 += (j5 * l >> 16) + i1; + } + if (aClass29_102 != null) { + int k5 = aClass29_102.method328(i); + int k6 = aClass29_103.method328(i); + j4 = j4 * ((method168(k6, i2, aClass29_102.anInt540) >> 1) + 32768) >> 15; + i2 += (k5 * k1 >> 16) + l1; + } + for (int l5 = 0; l5 < 5; l5++) { + if (anIntArray106[l5] != 0) { + int l6 = k2 + anIntArray119[l5]; + if (l6 < i) { + anIntArray115[l6] += method168(j4 * anIntArray120[l5] >> 15, anIntArray118[l5], aClass29_98.anInt540); + anIntArray118[l5] += (l2 * anIntArray121[l5] >> 16) + anIntArray122[l5]; + } + } + } + + } + + if (aClass29_104 != null) { + aClass29_104.resetValues(); + aClass29_105.resetValues(); + int i3 = 0; + boolean flag1 = true; + for (int i7 = 0; i7 < i; i7++) { + int k7 = aClass29_104.method328(i); + int i8 = aClass29_105.method328(i); + int k4; + if (flag1) { + k4 = aClass29_104.anInt538 + ((aClass29_104.anInt539 - aClass29_104.anInt538) * k7 >> 8); + } else { + k4 = aClass29_104.anInt538 + ((aClass29_104.anInt539 - aClass29_104.anInt538) * i8 >> 8); + } + if ((i3 += 256) >= k4) { + i3 = 0; + flag1 = !flag1; + } + if (flag1) { + anIntArray115[i7] = 0; + } + } + + } + if (anInt109 > 0 && anInt110 > 0) { + int j3 = (int) (anInt109 * d); + for (int l4 = j3; l4 < i; l4++) { + anIntArray115[l4] += anIntArray115[l4 - j3] * anInt110 / 100; + } + + } + if (aClass39_111.anIntArray665[0] > 0 || aClass39_111.anIntArray665[1] > 0) { + aClass29_112.resetValues(); + int k3 = aClass29_112.method328(i + 1); + int i5 = aClass39_111.method544(0, k3 / 65536F); + int i6 = aClass39_111.method544(1, k3 / 65536F); + if (i >= i5 + i6) { + int j7 = 0; + int l7 = i6; + if (l7 > i - i5) { + l7 = i - i5; + } + for (; j7 < l7; j7++) { + int j8 = (int) ((long) anIntArray115[j7 + i5] * (long) Class39.anInt672 >> 16); + for (int k8 = 0; k8 < i5; k8++) { + j8 += (int) ((long) anIntArray115[j7 + i5 - 1 - k8] * (long) Class39.anIntArrayArray670[0][k8] >> 16); + } + + for (int j9 = 0; j9 < j7; j9++) { + j8 -= (int) ((long) anIntArray115[j7 - 1 - j9] * (long) Class39.anIntArrayArray670[1][j9] >> 16); + } + + anIntArray115[j7] = j8; + k3 = aClass29_112.method328(i + 1); + } + + char c = '\200'; + l7 = c; + do { + if (l7 > i - i5) { + l7 = i - i5; + } + for (; j7 < l7; j7++) { + int l8 = (int) ((long) anIntArray115[j7 + i5] * (long) Class39.anInt672 >> 16); + for (int k9 = 0; k9 < i5; k9++) { + l8 += (int) ((long) anIntArray115[j7 + i5 - 1 - k9] * (long) Class39.anIntArrayArray670[0][k9] >> 16); + } + + for (int i10 = 0; i10 < i6; i10++) { + l8 -= (int) ((long) anIntArray115[j7 - 1 - i10] * (long) Class39.anIntArrayArray670[1][i10] >> 16); + } + + anIntArray115[j7] = l8; + k3 = aClass29_112.method328(i + 1); + } + + if (j7 >= i - i5) { + break; + } + i5 = aClass39_111.method544(0, k3 / 65536F); + i6 = aClass39_111.method544(1, k3 / 65536F); + l7 += c; + } while (true); + for (; j7 < i; j7++) { + int i9 = 0; + for (int l9 = j7 + i5 - i; l9 < i5; l9++) { + i9 += (int) ((long) anIntArray115[j7 + i5 - 1 - l9] * (long) Class39.anIntArrayArray670[0][l9] >> 16); + } + + for (int j10 = 0; j10 < i6; j10++) { + i9 -= (int) ((long) anIntArray115[j7 - 1 - j10] * (long) Class39.anIntArrayArray670[1][j10] >> 16); + } + + anIntArray115[j7] = i9; + aClass29_112.method328(i + 1); + } + + } + } + for (int i4 = 0; i4 < i; i4++) { + if (anIntArray115[i4] < -32768) { + anIntArray115[i4] = -32768; + } + if (anIntArray115[i4] > 32767) { + anIntArray115[i4] = 32767; + } + } + + return anIntArray115; + } + + private int method168(int i, int k, int l) { + if (l == 1) { + if ((k & 0x7fff) < 16384) { + return i; + } else { + return -i; + } + } + if (l == 2) { + return anIntArray117[k & 0x7fff] * i >> 14; + } + if (l == 3) { + return ((k & 0x7fff) * i >> 14) - i; + } + if (l == 4) { + return anIntArray116[k / 2607 & 0x7fff] * i; + } else { + return 0; + } + } + + public void method169(Stream stream) { + aClass29_98 = new Class29(); + aClass29_98.method325(stream); + aClass29_99 = new Class29(); + aClass29_99.method325(stream); + int i = stream.readUnsignedByte(); + if (i != 0) { + stream.currentOffset--; + aClass29_100 = new Class29(); + aClass29_100.method325(stream); + aClass29_101 = new Class29(); + aClass29_101.method325(stream); + } + i = stream.readUnsignedByte(); + if (i != 0) { + stream.currentOffset--; + aClass29_102 = new Class29(); + aClass29_102.method325(stream); + aClass29_103 = new Class29(); + aClass29_103.method325(stream); + } + i = stream.readUnsignedByte(); + if (i != 0) { + stream.currentOffset--; + aClass29_104 = new Class29(); + aClass29_104.method325(stream); + aClass29_105 = new Class29(); + aClass29_105.method325(stream); + } + for (int j = 0; j < 10; j++) { + int k = stream.method422(); + if (k == 0) { + break; + } + anIntArray106[j] = k; + anIntArray107[j] = stream.method421(); + anIntArray108[j] = stream.method422(); + } + + anInt109 = stream.method422(); + anInt110 = stream.method422(); + anInt113 = stream.readUnsignedWord(); + anInt114 = stream.readUnsignedWord(); + aClass39_111 = new Class39(); + aClass29_112 = new Class29(); + aClass39_111.method545(stream, aClass29_112); + } + + public Class6() { + anIntArray106 = new int[5]; + anIntArray107 = new int[5]; + anIntArray108 = new int[5]; + anInt110 = 100; + anInt113 = 500; + } + + private Class29 aClass29_98; + private Class29 aClass29_99; + private Class29 aClass29_100; + private Class29 aClass29_101; + private Class29 aClass29_102; + private Class29 aClass29_103; + private Class29 aClass29_104; + private Class29 aClass29_105; + private final int[] anIntArray106; + private final int[] anIntArray107; + private final int[] anIntArray108; + private int anInt109; + private int anInt110; + private Class39 aClass39_111; + private Class29 aClass29_112; + int anInt113; + int anInt114; + private static int[] anIntArray115; + private static int[] anIntArray116; + private static int[] anIntArray117; + private static final int[] anIntArray118 = new int[5]; + private static final int[] anIntArray119 = new int[5]; + private static final int[] anIntArray120 = new int[5]; + private static final int[] anIntArray121 = new int[5]; + private static final int[] anIntArray122 = new int[5]; + +} diff --git a/2006Redone Client/src/ClientSettings.java b/2006Redone Client/src/ClientSettings.java new file mode 100644 index 00000000..4573756c --- /dev/null +++ b/2006Redone Client/src/ClientSettings.java @@ -0,0 +1,35 @@ +import java.math.BigInteger; + +/** + * ClientSettings + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class ClientSettings { + + /** + * The Servers Name + */ + public final static String SERVER_NAME = "2006Redone"; + /** + * The Servers Website + */ + public final static String SERVER_WEBSITE = "www.2006redone.org"; + /** + * The Servers Ip + */ + public final static String SERVER_IP = "127.0.0.1";//162.218.48.13 + /** + * The Npc Bits for the Server + */ + public final static int NPC_BITS = 12; + /** + * The Servers Uid + */ + public final static int UID = 314268572; + + public static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + public static final BigInteger RSA_EXPONENT = new BigInteger("65537"); + + +} diff --git a/2006Redone Client/src/CollisionMap.java b/2006Redone Client/src/CollisionMap.java new file mode 100644 index 00000000..0bcbaa40 --- /dev/null +++ b/2006Redone Client/src/CollisionMap.java @@ -0,0 +1,548 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class CollisionMap { + + public CollisionMap() { + anInt290 = 0; + anInt291 = 0; + anInt292 = 104; + anInt293 = 104; + anIntArrayArray294 = new int[anInt292][anInt293]; + method210(); + } + + public void method210() { + for (int i = 0; i < anInt292; i++) { + for (int j = 0; j < anInt293; j++) { + if (i == 0 || j == 0 || i == anInt292 - 1 || j == anInt293 - 1) { + anIntArrayArray294[i][j] = 0xffffff; + } else { + anIntArrayArray294[i][j] = 0x1000000; + } + } + + } + + } + + public void method211(int i, int j, int k, int l, boolean flag) { + k -= anInt290; + i -= anInt291; + if (l == 0) { + if (j == 0) { + method214(k, i, 128); + method214(k - 1, i, 8); + } + if (j == 1) { + method214(k, i, 2); + method214(k, i + 1, 32); + } + if (j == 2) { + method214(k, i, 8); + method214(k + 1, i, 128); + } + if (j == 3) { + method214(k, i, 32); + method214(k, i - 1, 2); + } + } + if (l == 1 || l == 3) { + if (j == 0) { + method214(k, i, 1); + method214(k - 1, i + 1, 16); + } + if (j == 1) { + method214(k, i, 4); + method214(k + 1, i + 1, 64); + } + if (j == 2) { + method214(k, i, 16); + method214(k + 1, i - 1, 1); + } + if (j == 3) { + method214(k, i, 64); + method214(k - 1, i - 1, 4); + } + } + if (l == 2) { + if (j == 0) { + method214(k, i, 130); + method214(k - 1, i, 8); + method214(k, i + 1, 32); + } + if (j == 1) { + method214(k, i, 10); + method214(k, i + 1, 32); + method214(k + 1, i, 128); + } + if (j == 2) { + method214(k, i, 40); + method214(k + 1, i, 128); + method214(k, i - 1, 2); + } + if (j == 3) { + method214(k, i, 160); + method214(k, i - 1, 2); + method214(k - 1, i, 8); + } + } + if (flag) { + if (l == 0) { + if (j == 0) { + method214(k, i, 0x10000); + method214(k - 1, i, 4096); + } + if (j == 1) { + method214(k, i, 1024); + method214(k, i + 1, 16384); + } + if (j == 2) { + method214(k, i, 4096); + method214(k + 1, i, 0x10000); + } + if (j == 3) { + method214(k, i, 16384); + method214(k, i - 1, 1024); + } + } + if (l == 1 || l == 3) { + if (j == 0) { + method214(k, i, 512); + method214(k - 1, i + 1, 8192); + } + if (j == 1) { + method214(k, i, 2048); + method214(k + 1, i + 1, 32768); + } + if (j == 2) { + method214(k, i, 8192); + method214(k + 1, i - 1, 512); + } + if (j == 3) { + method214(k, i, 32768); + method214(k - 1, i - 1, 2048); + } + } + if (l == 2) { + if (j == 0) { + method214(k, i, 0x10400); + method214(k - 1, i, 4096); + method214(k, i + 1, 16384); + } + if (j == 1) { + method214(k, i, 5120); + method214(k, i + 1, 16384); + method214(k + 1, i, 0x10000); + } + if (j == 2) { + method214(k, i, 20480); + method214(k + 1, i, 0x10000); + method214(k, i - 1, 1024); + } + if (j == 3) { + method214(k, i, 0x14000); + method214(k, i - 1, 1024); + method214(k - 1, i, 4096); + } + } + } + } + + public void method212(boolean flag, int j, int k, int l, int i1, int j1) { + int k1 = 256; + if (flag) { + k1 += 0x20000; + } + l -= anInt290; + i1 -= anInt291; + if (j1 == 1 || j1 == 3) { + int l1 = j; + j = k; + k = l1; + } + for (int i2 = l; i2 < l + j; i2++) { + if (i2 >= 0 && i2 < anInt292) { + for (int j2 = i1; j2 < i1 + k; j2++) { + if (j2 >= 0 && j2 < anInt293) { + method214(i2, j2, k1); + } + } + + } + } + + } + + public void method213(int i, int k) { + k -= anInt290; + i -= anInt291; + anIntArrayArray294[k][i] |= 0x200000; + } + + private void method214(int i, int j, int k) { + anIntArrayArray294[i][j] |= k; + } + + public void method215(int i, int j, boolean flag, int k, int l) { + k -= anInt290; + l -= anInt291; + if (j == 0) { + if (i == 0) { + method217(128, k, l); + method217(8, k - 1, l); + } + if (i == 1) { + method217(2, k, l); + method217(32, k, l + 1); + } + if (i == 2) { + method217(8, k, l); + method217(128, k + 1, l); + } + if (i == 3) { + method217(32, k, l); + method217(2, k, l - 1); + } + } + if (j == 1 || j == 3) { + if (i == 0) { + method217(1, k, l); + method217(16, k - 1, l + 1); + } + if (i == 1) { + method217(4, k, l); + method217(64, k + 1, l + 1); + } + if (i == 2) { + method217(16, k, l); + method217(1, k + 1, l - 1); + } + if (i == 3) { + method217(64, k, l); + method217(4, k - 1, l - 1); + } + } + if (j == 2) { + if (i == 0) { + method217(130, k, l); + method217(8, k - 1, l); + method217(32, k, l + 1); + } + if (i == 1) { + method217(10, k, l); + method217(32, k, l + 1); + method217(128, k + 1, l); + } + if (i == 2) { + method217(40, k, l); + method217(128, k + 1, l); + method217(2, k, l - 1); + } + if (i == 3) { + method217(160, k, l); + method217(2, k, l - 1); + method217(8, k - 1, l); + } + } + if (flag) { + if (j == 0) { + if (i == 0) { + method217(0x10000, k, l); + method217(4096, k - 1, l); + } + if (i == 1) { + method217(1024, k, l); + method217(16384, k, l + 1); + } + if (i == 2) { + method217(4096, k, l); + method217(0x10000, k + 1, l); + } + if (i == 3) { + method217(16384, k, l); + method217(1024, k, l - 1); + } + } + if (j == 1 || j == 3) { + if (i == 0) { + method217(512, k, l); + method217(8192, k - 1, l + 1); + } + if (i == 1) { + method217(2048, k, l); + method217(32768, k + 1, l + 1); + } + if (i == 2) { + method217(8192, k, l); + method217(512, k + 1, l - 1); + } + if (i == 3) { + method217(32768, k, l); + method217(2048, k - 1, l - 1); + } + } + if (j == 2) { + if (i == 0) { + method217(0x10400, k, l); + method217(4096, k - 1, l); + method217(16384, k, l + 1); + } + if (i == 1) { + method217(5120, k, l); + method217(16384, k, l + 1); + method217(0x10000, k + 1, l); + } + if (i == 2) { + method217(20480, k, l); + method217(0x10000, k + 1, l); + method217(1024, k, l - 1); + } + if (i == 3) { + method217(0x14000, k, l); + method217(1024, k, l - 1); + method217(4096, k - 1, l); + } + } + } + } + + public void method216(int i, int j, int k, int l, int i1, boolean flag) { + int j1 = 256; + if (flag) { + j1 += 0x20000; + } + k -= anInt290; + l -= anInt291; + if (i == 1 || i == 3) { + int k1 = j; + j = i1; + i1 = k1; + } + for (int l1 = k; l1 < k + j; l1++) { + if (l1 >= 0 && l1 < anInt292) { + for (int i2 = l; i2 < l + i1; i2++) { + if (i2 >= 0 && i2 < anInt293) { + method217(j1, l1, i2); + } + } + + } + } + + } + + private void method217(int i, int j, int k) { + anIntArrayArray294[j][k] &= 0xffffff - i; + } + + public void method218(int j, int k) { + k -= anInt290; + j -= anInt291; + anIntArrayArray294[k][j] &= 0xdfffff; + } + + public boolean method219(int i, int j, int k, int i1, int j1, int k1) { + if (j == i && k == k1) { + return true; + } + j -= anInt290; + k -= anInt291; + i -= anInt290; + k1 -= anInt291; + if (j1 == 0) { + if (i1 == 0) { + if (j == i - 1 && k == k1) { + return true; + } + if (j == i && k == k1 + 1 && (anIntArrayArray294[j][k] & 0x1280120) == 0) { + return true; + } + if (j == i && k == k1 - 1 && (anIntArrayArray294[j][k] & 0x1280102) == 0) { + return true; + } + } else if (i1 == 1) { + if (j == i && k == k1 + 1) { + return true; + } + if (j == i - 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280108) == 0) { + return true; + } + if (j == i + 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280180) == 0) { + return true; + } + } else if (i1 == 2) { + if (j == i + 1 && k == k1) { + return true; + } + if (j == i && k == k1 + 1 && (anIntArrayArray294[j][k] & 0x1280120) == 0) { + return true; + } + if (j == i && k == k1 - 1 && (anIntArrayArray294[j][k] & 0x1280102) == 0) { + return true; + } + } else if (i1 == 3) { + if (j == i && k == k1 - 1) { + return true; + } + if (j == i - 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280108) == 0) { + return true; + } + if (j == i + 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280180) == 0) { + return true; + } + } + } + if (j1 == 2) { + if (i1 == 0) { + if (j == i - 1 && k == k1) { + return true; + } + if (j == i && k == k1 + 1) { + return true; + } + if (j == i + 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280180) == 0) { + return true; + } + if (j == i && k == k1 - 1 && (anIntArrayArray294[j][k] & 0x1280102) == 0) { + return true; + } + } else if (i1 == 1) { + if (j == i - 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280108) == 0) { + return true; + } + if (j == i && k == k1 + 1) { + return true; + } + if (j == i + 1 && k == k1) { + return true; + } + if (j == i && k == k1 - 1 && (anIntArrayArray294[j][k] & 0x1280102) == 0) { + return true; + } + } else if (i1 == 2) { + if (j == i - 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280108) == 0) { + return true; + } + if (j == i && k == k1 + 1 && (anIntArrayArray294[j][k] & 0x1280120) == 0) { + return true; + } + if (j == i + 1 && k == k1) { + return true; + } + if (j == i && k == k1 - 1) { + return true; + } + } else if (i1 == 3) { + if (j == i - 1 && k == k1) { + return true; + } + if (j == i && k == k1 + 1 && (anIntArrayArray294[j][k] & 0x1280120) == 0) { + return true; + } + if (j == i + 1 && k == k1 && (anIntArrayArray294[j][k] & 0x1280180) == 0) { + return true; + } + if (j == i && k == k1 - 1) { + return true; + } + } + } + if (j1 == 9) { + if (j == i && k == k1 + 1 && (anIntArrayArray294[j][k] & 0x20) == 0) { + return true; + } + if (j == i && k == k1 - 1 && (anIntArrayArray294[j][k] & 2) == 0) { + return true; + } + if (j == i - 1 && k == k1 && (anIntArrayArray294[j][k] & 8) == 0) { + return true; + } + if (j == i + 1 && k == k1 && (anIntArrayArray294[j][k] & 0x80) == 0) { + return true; + } + } + return false; + } + + public boolean method220(int i, int j, int k, int l, int i1, int j1) { + if (j1 == i && k == j) { + return true; + } + j1 -= anInt290; + k -= anInt291; + i -= anInt290; + j -= anInt291; + if (l == 6 || l == 7) { + if (l == 7) { + i1 = i1 + 2 & 3; + } + if (i1 == 0) { + if (j1 == i + 1 && k == j && (anIntArrayArray294[j1][k] & 0x80) == 0) { + return true; + } + if (j1 == i && k == j - 1 && (anIntArrayArray294[j1][k] & 2) == 0) { + return true; + } + } else if (i1 == 1) { + if (j1 == i - 1 && k == j && (anIntArrayArray294[j1][k] & 8) == 0) { + return true; + } + if (j1 == i && k == j - 1 && (anIntArrayArray294[j1][k] & 2) == 0) { + return true; + } + } else if (i1 == 2) { + if (j1 == i - 1 && k == j && (anIntArrayArray294[j1][k] & 8) == 0) { + return true; + } + if (j1 == i && k == j + 1 && (anIntArrayArray294[j1][k] & 0x20) == 0) { + return true; + } + } else if (i1 == 3) { + if (j1 == i + 1 && k == j && (anIntArrayArray294[j1][k] & 0x80) == 0) { + return true; + } + if (j1 == i && k == j + 1 && (anIntArrayArray294[j1][k] & 0x20) == 0) { + return true; + } + } + } + if (l == 8) { + if (j1 == i && k == j + 1 && (anIntArrayArray294[j1][k] & 0x20) == 0) { + return true; + } + if (j1 == i && k == j - 1 && (anIntArrayArray294[j1][k] & 2) == 0) { + return true; + } + if (j1 == i - 1 && k == j && (anIntArrayArray294[j1][k] & 8) == 0) { + return true; + } + if (j1 == i + 1 && k == j && (anIntArrayArray294[j1][k] & 0x80) == 0) { + return true; + } + } + return false; + } + + public boolean method221(int i, int j, int k, int l, int i1, int j1, int k1) { + int l1 = j + j1 - 1; + int i2 = i + l - 1; + if (k >= j && k <= l1 && k1 >= i && k1 <= i2) { + return true; + } + if (k == j - 1 && k1 >= i && k1 <= i2 && (anIntArrayArray294[k - anInt290][k1 - anInt291] & 8) == 0 && (i1 & 8) == 0) { + return true; + } + if (k == l1 + 1 && k1 >= i && k1 <= i2 && (anIntArrayArray294[k - anInt290][k1 - anInt291] & 0x80) == 0 && (i1 & 2) == 0) { + return true; + } + return k1 == i - 1 && k >= j && k <= l1 && (anIntArrayArray294[k - anInt290][k1 - anInt291] & 2) == 0 && (i1 & 4) == 0 || k1 == i2 + 1 && k >= j && k <= l1 && (anIntArrayArray294[k - anInt290][k1 - anInt291] & 0x20) == 0 && (i1 & 1) == 0; + } + + private final int anInt290; + private final int anInt291; + private final int anInt292; + private final int anInt293; + public final int[][] anIntArrayArray294; +} diff --git a/2006Redone Client/src/Decompressor.java b/2006Redone Client/src/Decompressor.java new file mode 100644 index 00000000..10e50d1f --- /dev/null +++ b/2006Redone Client/src/Decompressor.java @@ -0,0 +1,198 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.io.IOException; +import java.io.RandomAccessFile; + +final class Decompressor { + + public Decompressor(RandomAccessFile randomaccessfile, RandomAccessFile randomaccessfile1, int j) { + anInt311 = j; + dataFile = randomaccessfile; + indexFile = randomaccessfile1; + } + + public synchronized byte[] decompress(int i) { + try { + seekTo(indexFile, i * 6); + int l; + for (int j = 0; j < 6; j += l) { + l = indexFile.read(buffer, j, 6 - j); + if (l == -1) { + return null; + } + } + + int i1 = ((buffer[0] & 0xff) << 16) + ((buffer[1] & 0xff) << 8) + (buffer[2] & 0xff); + int j1 = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff); + // if(i1 < 0 || i1 > 0x7a120) + // return null; + if (j1 <= 0 || j1 > dataFile.length() / 520L) { + return null; + } + byte abyte0[] = new byte[i1]; + int k1 = 0; + for (int l1 = 0; k1 < i1; l1++) { + if (j1 == 0) { + return null; + } + seekTo(dataFile, j1 * 520); + int k = 0; + int i2 = i1 - k1; + if (i2 > 512) { + i2 = 512; + } + int j2; + for (; k < i2 + 8; k += j2) { + j2 = dataFile.read(buffer, k, i2 + 8 - k); + if (j2 == -1) { + return null; + } + } + + int k2 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff); + int l2 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff); + int i3 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff); + int j3 = buffer[7] & 0xff; + if (k2 != i || l2 != l1 || j3 != anInt311) { + return null; + } + if (i3 < 0 || i3 > dataFile.length() / 520L) { + return null; + } + for (int k3 = 0; k3 < i2; k3++) { + abyte0[k1++] = buffer[k3 + 8]; + } + + j1 = i3; + } + + return abyte0; + } catch (IOException _ex) { + return null; + } + } + + public synchronized boolean method234(int i, byte abyte0[], int j) + { + boolean flag = method235(true, j, i, abyte0); + if(!flag) + flag = method235(false, j, i, abyte0); + return flag; + } + + private synchronized boolean method235(boolean flag, int j, int k, byte abyte0[]) { + try { + int l; + if (flag) { + seekTo(indexFile, j * 6); + int k1; + for (int i1 = 0; i1 < 6; i1 += k1) { + k1 = indexFile.read(buffer, i1, 6 - i1); + if (k1 == -1) { + return false; + } + } + + l = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff); + if (l <= 0 || l > dataFile.length() / 520L) { + return false; + } + } else { + l = (int) ((dataFile.length() + 519L) / 520L); + if (l == 0) { + l = 1; + } + } + buffer[0] = (byte) (k >> 16); + buffer[1] = (byte) (k >> 8); + buffer[2] = (byte) k; + buffer[3] = (byte) (l >> 16); + buffer[4] = (byte) (l >> 8); + buffer[5] = (byte) l; + seekTo(indexFile, j * 6); + indexFile.write(buffer, 0, 6); + int j1 = 0; + for (int l1 = 0; j1 < k; l1++) { + int i2 = 0; + if (flag) { + seekTo(dataFile, l * 520); + int j2; + int l2; + for (j2 = 0; j2 < 8; j2 += l2) { + l2 = dataFile.read(buffer, j2, 8 - j2); + if (l2 == -1) { + break; + } + } + + if (j2 == 8) { + int i3 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff); + int j3 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff); + i2 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff); + int k3 = buffer[7] & 0xff; + if (i3 != j || j3 != l1 || k3 != anInt311) { + return false; + } + if (i2 < 0 || i2 > dataFile.length() / 520L) { + return false; + } + } + } + if (i2 == 0) { + flag = false; + i2 = (int) ((dataFile.length() + 519L) / 520L); + if (i2 == 0) { + i2++; + } + if (i2 == l) { + i2++; + } + } + if (k - j1 <= 512) { + i2 = 0; + } + buffer[0] = (byte) (j >> 8); + buffer[1] = (byte) j; + buffer[2] = (byte) (l1 >> 8); + buffer[3] = (byte) l1; + buffer[4] = (byte) (i2 >> 16); + buffer[5] = (byte) (i2 >> 8); + buffer[6] = (byte) i2; + buffer[7] = (byte) anInt311; + seekTo(dataFile, l * 520); + dataFile.write(buffer, 0, 8); + int k2 = k - j1; + if (k2 > 512) { + k2 = 512; + } + dataFile.write(abyte0, j1, k2); + j1 += k2; + l = i2; + } + + return true; + } catch (IOException _ex) { + return false; + } + } + + private synchronized void seekTo(RandomAccessFile randomaccessfile, int j) throws IOException { + if (j < 0 || j > 0x3c00000) { + System.out.println("Badseek - pos:" + j + " len:" + randomaccessfile.length()); + j = 0x3c00000; + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + } + randomaccessfile.seek(j); + } + + private static final byte[] buffer = new byte[520]; + private final RandomAccessFile dataFile; + private final RandomAccessFile indexFile; + private final int anInt311; + +} diff --git a/2006Redone Client/src/DrawingArea.java b/2006Redone Client/src/DrawingArea.java new file mode 100644 index 00000000..a3a9c192 --- /dev/null +++ b/2006Redone Client/src/DrawingArea.java @@ -0,0 +1,233 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class DrawingArea extends NodeSub { + + public static void initDrawingArea(int i, int j, int ai[]) { + pixels = ai; + width = j; + height = i; + setDrawingArea(i, 0, j, 0); + } + + public static void defaultDrawingAreaSize() { + topX = 0; + topY = 0; + bottomX = width; + bottomY = height; + centerX = bottomX - 1; + centerY = bottomX / 2; + } + + public static void setDrawingArea(int i, int j, int k, int l) { + if (j < 0) { + j = 0; + } + if (l < 0) { + l = 0; + } + if (k > width) { + k = width; + } + if (i > height) { + i = height; + } + topX = j; + topY = l; + bottomX = k; + bottomY = i; + centerX = bottomX - 1; + centerY = bottomX / 2; + anInt1387 = bottomY / 2; + } + + public static void setAllPixelsToZero() { + int i = width * height; + for (int j = 0; j < i; j++) { + pixels[j] = 0; + } + + } + + public static void method335(int i, int j, int k, int l, int i1, int k1) { + if (k1 < topX) { + k -= topX - k1; + k1 = topX; + } + if (j < topY) { + l -= topY - j; + j = topY; + } + if (k1 + k > bottomX) { + k = bottomX - k1; + } + if (j + l > bottomY) { + l = bottomY - j; + } + int l1 = 256 - i1; + int i2 = (i >> 16 & 0xff) * i1; + int j2 = (i >> 8 & 0xff) * i1; + int k2 = (i & 0xff) * i1; + int k3 = width - k; + int l3 = k1 + j * width; + for (int i4 = 0; i4 < l; i4++) { + for (int j4 = -k; j4 < 0; j4++) { + int l2 = (pixels[l3] >> 16 & 0xff) * l1; + int i3 = (pixels[l3] >> 8 & 0xff) * l1; + int j3 = (pixels[l3] & 0xff) * l1; + int k4 = (i2 + l2 >> 8 << 16) + (j2 + i3 >> 8 << 8) + (k2 + j3 >> 8); + pixels[l3++] = k4; + } + + l3 += k3; + } + } + + public static void method336(int i, int j, int l, int i1, int k) { + if (k < topX) { + i1 -= topX - k; + k = topX; + } + if (j < topY) { + i -= topY - j; + j = topY; + } + if (k + i1 > bottomX) { + i1 = bottomX - k; + } + if (j + i > bottomY) { + i = bottomY - j; + } + int k1 = width - i1; + int l1 = k + j * width; + for (int i2 = -i; i2 < 0; i2++) { + for (int j2 = -i1; j2 < 0; j2++) { + pixels[l1++] = l; + } + + l1 += k1; + } + + } + + public static void fillPixels(int i1, int k, int l, int i, int j) { + method339(i1, l, j, i); + method339(i1 + k - 1, l, j, i); + method341(i1, l, k, i); + method341(i1, l, k, i + j - 1); + } + + public static void method338(int i, int j, int k, int l, int i1, int j1) { + method340(l, i1, i, k, j1); + method340(l, i1, i + j - 1, k, j1); + if (j >= 3) { + method342(l, j1, k, i + 1, j - 2); + method342(l, j1 + i1 - 1, k, i + 1, j - 2); + } + } + + public static void method339(int i, int j, int k, int l) { + if (i < topY || i >= bottomY) { + return; + } + if (l < topX) { + k -= topX - l; + l = topX; + } + if (l + k > bottomX) { + k = bottomX - l; + } + int i1 = l + i * width; + for (int j1 = 0; j1 < k; j1++) { + pixels[i1 + j1] = j; + } + + } + + private static void method340(int i, int j, int k, int l, int i1) { + if (k < topY || k >= bottomY) { + return; + } + if (i1 < topX) { + j -= topX - i1; + i1 = topX; + } + if (i1 + j > bottomX) { + j = bottomX - i1; + } + int j1 = 256 - l; + int k1 = (i >> 16 & 0xff) * l; + int l1 = (i >> 8 & 0xff) * l; + int i2 = (i & 0xff) * l; + int i3 = i1 + k * width; + for (int j3 = 0; j3 < j; j3++) { + int j2 = (pixels[i3] >> 16 & 0xff) * j1; + int k2 = (pixels[i3] >> 8 & 0xff) * j1; + int l2 = (pixels[i3] & 0xff) * j1; + int k3 = (k1 + j2 >> 8 << 16) + (l1 + k2 >> 8 << 8) + (i2 + l2 >> 8); + pixels[i3++] = k3; + } + + } + + public static void method341(int i, int j, int k, int l) { + if (l < topX || l >= bottomX) { + return; + } + if (i < topY) { + k -= topY - i; + i = topY; + } + if (i + k > bottomY) { + k = bottomY - i; + } + int j1 = l + i * width; + for (int k1 = 0; k1 < k; k1++) { + pixels[j1 + k1 * width] = j; + } + + } + + private static void method342(int i, int j, int k, int l, int i1) { + if (j < topX || j >= bottomX) { + return; + } + if (l < topY) { + i1 -= topY - l; + l = topY; + } + if (l + i1 > bottomY) { + i1 = bottomY - l; + } + int j1 = 256 - k; + int k1 = (i >> 16 & 0xff) * k; + int l1 = (i >> 8 & 0xff) * k; + int i2 = (i & 0xff) * k; + int i3 = j + l * width; + for (int j3 = 0; j3 < i1; j3++) { + int j2 = (pixels[i3] >> 16 & 0xff) * j1; + int k2 = (pixels[i3] >> 8 & 0xff) * j1; + int l2 = (pixels[i3] & 0xff) * j1; + int k3 = (k1 + j2 >> 8 << 16) + (l1 + k2 >> 8 << 8) + (i2 + l2 >> 8); + pixels[i3] = k3; + i3 += width; + } + + } + + DrawingArea() { + } + + public static int pixels[]; + public static int width; + public static int height; + public static int topY; + public static int bottomY; + public static int topX; + public static int bottomX; + public static int centerX; + public static int centerY; + public static int anInt1387; + +} diff --git a/2006Redone Client/src/DummyClass.java b/2006Redone Client/src/DummyClass.java new file mode 100644 index 00000000..9dd5e9a2 --- /dev/null +++ b/2006Redone Client/src/DummyClass.java @@ -0,0 +1,11 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class DummyClass { + + public DummyClass() { + } + + public static DummyClass cache[]; +} diff --git a/2006Redone Client/src/Entity.java b/2006Redone Client/src/Entity.java new file mode 100644 index 00000000..c16a9d5e --- /dev/null +++ b/2006Redone Client/src/Entity.java @@ -0,0 +1,190 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class Entity extends Animable { + + public final void setPos(int i, int j, boolean flag) { + if (anim != -1 && Animation.anims[anim].anInt364 == 1) { + anim = -1; + } + if (!flag) { + int k = i - smallX[0]; + int l = j - smallY[0]; + if (k >= -8 && k <= 8 && l >= -8 && l <= 8) { + if (smallXYIndex < 9) { + smallXYIndex++; + } + for (int i1 = smallXYIndex; i1 > 0; i1--) { + smallX[i1] = smallX[i1 - 1]; + smallY[i1] = smallY[i1 - 1]; + aBooleanArray1553[i1] = aBooleanArray1553[i1 - 1]; + } + + smallX[0] = i; + smallY[0] = j; + aBooleanArray1553[0] = false; + return; + } + } + smallXYIndex = 0; + anInt1542 = 0; + anInt1503 = 0; + smallX[0] = i; + smallY[0] = j; + x = smallX[0] * 128 + anInt1540 * 64; + y = smallY[0] * 128 + anInt1540 * 64; + } + + public final void method446() { + smallXYIndex = 0; + anInt1542 = 0; + } + + public final void updateHitData(int j, int k, int l) { + for (int i1 = 0; i1 < 4; i1++) { + if (hitsLoopCycle[i1] <= l) { + hitArray[i1] = k; + hitMarkTypes[i1] = j; + hitsLoopCycle[i1] = l + 70; + return; + } + } + } + + public final void moveInDir(boolean flag, int i) { + int j = smallX[0]; + int k = smallY[0]; + if (i == 0) { + j--; + k++; + } + if (i == 1) { + k++; + } + if (i == 2) { + j++; + k++; + } + if (i == 3) { + j--; + } + if (i == 4) { + j++; + } + if (i == 5) { + j--; + k--; + } + if (i == 6) { + k--; + } + if (i == 7) { + j++; + k--; + } + if (anim != -1 && Animation.anims[anim].anInt364 == 1) { + anim = -1; + } + if (smallXYIndex < 9) { + smallXYIndex++; + } + for (int l = smallXYIndex; l > 0; l--) { + smallX[l] = smallX[l - 1]; + smallY[l] = smallY[l - 1]; + aBooleanArray1553[l] = aBooleanArray1553[l - 1]; + } + smallX[0] = j; + smallY[0] = k; + aBooleanArray1553[0] = flag; + } + + public int entScreenX; + public int entScreenY; + public final int index = -1; + public boolean isVisible() { + return false; + } + + Entity() { + smallX = new int[10]; + smallY = new int[10]; + interactingEntity = -1; + anInt1504 = 32; + anInt1505 = -1; + height = 200; + anInt1511 = -1; + anInt1512 = -1; + hitArray = new int[4]; + hitMarkTypes = new int[4]; + hitsLoopCycle = new int[4]; + anInt1517 = -1; + anInt1520 = -1; + anim = -1; + loopCycleStatus = -1000; + textCycle = 100; + anInt1540 = 1; + aBoolean1541 = false; + aBooleanArray1553 = new boolean[10]; + anInt1554 = -1; + anInt1555 = -1; + anInt1556 = -1; + anInt1557 = -1; + } + + public final int[] smallX; + public final int[] smallY; + public int interactingEntity; + int anInt1503; + int anInt1504; + int anInt1505; + public String textSpoken; + public int height; + public int turnDirection; + int anInt1511; + int anInt1512; + int anInt1513; + final int[] hitArray; + final int[] hitMarkTypes; + final int[] hitsLoopCycle; + int anInt1517; + int anInt1518; + int anInt1519; + int anInt1520; + int anInt1521; + int anInt1522; + int anInt1523; + int anInt1524; + int smallXYIndex; + public int anim; + int anInt1527; + int anInt1528; + int anInt1529; + int anInt1530; + int anInt1531; + public int loopCycleStatus; + public int currentHealth; + public int maxHealth; + int textCycle; + int anInt1537; + int anInt1538; + int anInt1539; + int anInt1540; + boolean aBoolean1541; + int anInt1542; + int anInt1543; + int anInt1544; + int anInt1545; + int anInt1546; + int anInt1547; + int anInt1548; + int anInt1549; + public int x; + public int y; + int anInt1552; + final boolean[] aBooleanArray1553; + int anInt1554; + int anInt1555; + int anInt1556; + int anInt1557; +} diff --git a/2006Redone Client/src/EntityDef.java b/2006Redone Client/src/EntityDef.java new file mode 100644 index 00000000..a49341de --- /dev/null +++ b/2006Redone Client/src/EntityDef.java @@ -0,0 +1,334 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class EntityDef { + + public static EntityDef forID(int i) { + for (int j = 0; j < 20; j++) { + if (cache[j].type == i) { + return cache[j]; + } + } + + anInt56 = (anInt56 + 1) % 20; + EntityDef entityDef = cache[anInt56] = new EntityDef(); + stream.currentOffset = streamIndices[i]; + entityDef.type = i; + entityDef.readValues(stream); + switch(i) { + case 2258 : + entityDef.actions = new String[5]; + entityDef.actions[0] = "Talk-to"; + entityDef.actions[2] = "Trade"; + entityDef.actions[3] = "Teleport"; + break; + + case 945: + entityDef.name = "2006Redone Guide"; + break; + } + return entityDef; + } + + public Model method160() { + if (childrenIDs != null) { + EntityDef entityDef = method161(); + if (entityDef == null) { + return null; + } else { + return entityDef.method160(); + } + } + if (anIntArray73 == null) { + return null; + } + boolean flag1 = false; + for (int i = 0; i < anIntArray73.length; i++) { + if (!Model.method463(anIntArray73[i])) { + flag1 = true; + } + } + + if (flag1) { + return null; + } + Model aclass30_sub2_sub4_sub6s[] = new Model[anIntArray73.length]; + for (int j = 0; j < anIntArray73.length; j++) { + aclass30_sub2_sub4_sub6s[j] = Model.method462(anIntArray73[j]); + } + + Model model; + if (aclass30_sub2_sub4_sub6s.length == 1) { + model = aclass30_sub2_sub4_sub6s[0]; + } else { + model = new Model(aclass30_sub2_sub4_sub6s.length, aclass30_sub2_sub4_sub6s); + } + if (anIntArray76 != null) { + for (int k = 0; k < anIntArray76.length; k++) { + model.method476(anIntArray76[k], anIntArray70[k]); + } + + } + return model; + } + + public EntityDef method161() { + int j = -1; + if (anInt57 != -1) { + VarBit varBit = VarBit.cache[anInt57]; + int k = varBit.anInt648; + int l = varBit.anInt649; + int i1 = varBit.anInt650; + int j1 = Game.anIntArray1232[i1 - l]; + j = clientInstance.variousSettings[k] >> l & j1; + } else if (anInt59 != -1) { + j = clientInstance.variousSettings[anInt59]; + } + if (j < 0 || j >= childrenIDs.length || childrenIDs[j] == -1) { + return null; + } else { + return forID(childrenIDs[j]); + } + } + + public static void unpackConfig(StreamLoader streamLoader) { + stream = new Stream(streamLoader.getDataForName("npc.dat")); + Stream stream2 = new Stream(streamLoader.getDataForName("npc.idx")); + int totalNPCs = stream2.readUnsignedWord(); + streamIndices = new int[totalNPCs]; + int i = 2; + for (int j = 0; j < totalNPCs; j++) { + streamIndices[j] = i; + i += stream2.readUnsignedWord(); + } + + cache = new EntityDef[20]; + for (int k = 0; k < 20; k++) { + cache[k] = new EntityDef(); + } + + } + + public static void nullLoader() { + mruNodes = null; + streamIndices = null; + cache = null; + stream = null; + } + + public Model method164(int j, int k, int ai[]) { + if (childrenIDs != null) { + EntityDef entityDef = method161(); + if (entityDef == null) { + return null; + } else { + return entityDef.method164(j, k, ai); + } + } + Model model = (Model) mruNodes.insertFromCache(type); + if (model == null) { + boolean flag = false; + for (int i1 = 0; i1 < anIntArray94.length; i1++) { + if (!Model.method463(anIntArray94[i1])) { + flag = true; + } + } + + if (flag) { + return null; + } + Model aclass30_sub2_sub4_sub6s[] = new Model[anIntArray94.length]; + for (int j1 = 0; j1 < anIntArray94.length; j1++) { + aclass30_sub2_sub4_sub6s[j1] = Model.method462(anIntArray94[j1]); + } + + if (aclass30_sub2_sub4_sub6s.length == 1) { + model = aclass30_sub2_sub4_sub6s[0]; + } else { + model = new Model(aclass30_sub2_sub4_sub6s.length, aclass30_sub2_sub4_sub6s); + } + if (anIntArray76 != null) { + for (int k1 = 0; k1 < anIntArray76.length; k1++) { + model.method476(anIntArray76[k1], anIntArray70[k1]); + } + + } + model.method469(); + model.method479(64 + anInt85, 850 + anInt92, -30, -50, -30, true); + mruNodes.removeFromCache(model, type); + } + Model model_1 = Model.aModel_1621; + model_1.method464(model, Class36.method532(k) & Class36.method532(j)); + if (k != -1 && j != -1) { + model_1.method471(ai, j, k); + } else if (k != -1) { + model_1.method470(k); + } + if (anInt91 != 128 || anInt86 != 128) { + model_1.method478(anInt91, anInt91, anInt86); + } + model_1.method466(); + model_1.anIntArrayArray1658 = null; + model_1.anIntArrayArray1657 = null; + if (aByte68 == 1) { + model_1.aBoolean1659 = true; + } + return model_1; + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + return; + } + if (i == 1) { + int j = stream.readUnsignedByte(); + anIntArray94 = new int[j]; + for (int j1 = 0; j1 < j; j1++) { + anIntArray94[j1] = stream.readUnsignedWord(); + } + + } else if (i == 2) { + name = stream.readString(); + } else if (i == 3) { + description = stream.readBytes(); + } else if (i == 12) { + aByte68 = stream.readSignedByte(); + } else if (i == 13) { + anInt77 = stream.readUnsignedWord(); + } else if (i == 14) { + anInt67 = stream.readUnsignedWord(); + } else if (i == 17) { + anInt67 = stream.readUnsignedWord(); + anInt58 = stream.readUnsignedWord(); + anInt83 = stream.readUnsignedWord(); + anInt55 = stream.readUnsignedWord(); + } else if (i >= 30 && i < 40) { + if (actions == null) { + actions = new String[5]; + } + actions[i - 30] = stream.readString(); + if (actions[i - 30].equalsIgnoreCase("hidden")) { + actions[i - 30] = null; + } + } else if (i == 40) { + int k = stream.readUnsignedByte(); + anIntArray76 = new int[k]; + anIntArray70 = new int[k]; + for (int k1 = 0; k1 < k; k1++) { + anIntArray76[k1] = stream.readUnsignedWord(); + anIntArray70[k1] = stream.readUnsignedWord(); + } + + } else if (i == 60) { + int l = stream.readUnsignedByte(); + anIntArray73 = new int[l]; + for (int l1 = 0; l1 < l; l1++) { + anIntArray73[l1] = stream.readUnsignedWord(); + } + + } else if (i == 90) { + stream.readUnsignedWord(); + } else if (i == 91) { + stream.readUnsignedWord(); + } else if (i == 92) { + stream.readUnsignedWord(); + } else if (i == 93) { + aBoolean87 = false; + } else if (i == 95) { + combatLevel = stream.readUnsignedWord(); + } else if (i == 97) { + anInt91 = stream.readUnsignedWord(); + } else if (i == 98) { + anInt86 = stream.readUnsignedWord(); + } else if (i == 99) { + aBoolean93 = true; + } else if (i == 100) { + anInt85 = stream.readSignedByte(); + } else if (i == 101) { + anInt92 = stream.readSignedByte() * 5; + } else if (i == 102) { + anInt75 = stream.readUnsignedWord(); + } else if (i == 103) { + anInt79 = stream.readUnsignedWord(); + } else if (i == 106) { + anInt57 = stream.readUnsignedWord(); + if (anInt57 == 65535) { + anInt57 = -1; + } + anInt59 = stream.readUnsignedWord(); + if (anInt59 == 65535) { + anInt59 = -1; + } + int i1 = stream.readUnsignedByte(); + childrenIDs = new int[i1 + 1]; + for (int i2 = 0; i2 <= i1; i2++) { + childrenIDs[i2] = stream.readUnsignedWord(); + if (childrenIDs[i2] == 65535) { + childrenIDs[i2] = -1; + } + } + + } else if (i == 107) { + aBoolean84 = false; + } + } while (true); + } + + private EntityDef() { + anInt55 = -1; + anInt57 = -1; + anInt58 = -1; + anInt59 = -1; + combatLevel = -1; + anInt67 = -1; + aByte68 = 1; + anInt75 = -1; + anInt77 = -1; + type = -1L; + anInt79 = 32; + anInt83 = -1; + aBoolean84 = true; + anInt86 = 128; + aBoolean87 = true; + anInt91 = 128; + aBoolean93 = false; + } + + public int anInt55; + private static int anInt56; + private int anInt57; + public int anInt58; + private int anInt59; + private static Stream stream; + public int combatLevel; + public String name; + public String actions[]; + public int anInt67; + public byte aByte68; + private int[] anIntArray70; + private static int[] streamIndices; + private int[] anIntArray73; + public int anInt75; + private int[] anIntArray76; + public int anInt77; + public long type; + public int anInt79; + private static EntityDef[] cache; + public static Game clientInstance; + public int anInt83; + public boolean aBoolean84; + private int anInt85; + private int anInt86; + public boolean aBoolean87; + public int childrenIDs[]; + public byte description[]; + private int anInt91; + private int anInt92; + public boolean aBoolean93; + private int[] anIntArray94; + public static MRUNodes mruNodes = new MRUNodes(30); + +} diff --git a/2006Redone Client/src/Flo.java b/2006Redone Client/src/Flo.java new file mode 100644 index 00000000..4753021d --- /dev/null +++ b/2006Redone Client/src/Flo.java @@ -0,0 +1,166 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Flo { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("flo.dat")); + int cacheSize = stream.readUnsignedWord(); + if (cache == null) { + cache = new Flo[cacheSize]; + } + for (int j = 0; j < cacheSize; j++) { + if (cache[j] == null) { + cache[j] = new Flo(); + } + cache[j].readValues(stream); + } + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + return; + } else if (i == 1) { + anInt390 = stream.read3Bytes(); + method262(anInt390); + } else if (i == 2) { + anInt391 = stream.readUnsignedByte(); + } else if (i == 3) { + } else if (i == 5) { + aBoolean393 = false; + } else if (i == 6) { + stream.readString(); + } else if (i == 7) { + int j = anInt394; + int k = anInt395; + int l = anInt396; + int i1 = anInt397; + int j1 = stream.read3Bytes(); + method262(j1); + anInt394 = j; + anInt395 = k; + anInt396 = l; + anInt397 = i1; + anInt398 = i1; + } else { + System.out.println("Error unrecognised config code: " + i); + } + } while (true); + } + + private void method262(int i) { + double d = (i >> 16 & 0xff) / 256D; + double d1 = (i >> 8 & 0xff) / 256D; + double d2 = (i & 0xff) / 256D; + double d3 = d; + if (d1 < d3) { + d3 = d1; + } + if (d2 < d3) { + d3 = d2; + } + double d4 = d; + if (d1 > d4) { + d4 = d1; + } + if (d2 > d4) { + d4 = d2; + } + double d5 = 0.0D; + double d6 = 0.0D; + double d7 = (d3 + d4) / 2D; + if (d3 != d4) { + if (d7 < 0.5D) { + d6 = (d4 - d3) / (d4 + d3); + } + if (d7 >= 0.5D) { + d6 = (d4 - d3) / (2D - d4 - d3); + } + if (d == d4) { + d5 = (d1 - d2) / (d4 - d3); + } else if (d1 == d4) { + d5 = 2D + (d2 - d) / (d4 - d3); + } else if (d2 == d4) { + d5 = 4D + (d - d1) / (d4 - d3); + } + } + d5 /= 6D; + anInt394 = (int) (d5 * 256D); + anInt395 = (int) (d6 * 256D); + anInt396 = (int) (d7 * 256D); + if (anInt395 < 0) { + anInt395 = 0; + } else if (anInt395 > 255) { + anInt395 = 255; + } + if (anInt396 < 0) { + anInt396 = 0; + } else if (anInt396 > 255) { + anInt396 = 255; + } + if (d7 > 0.5D) { + anInt398 = (int) ((1.0D - d7) * d6 * 512D); + } else { + anInt398 = (int) (d7 * d6 * 512D); + } + if (anInt398 < 1) { + anInt398 = 1; + } + anInt397 = (int) (d5 * anInt398); + int k = anInt394 + (int) (Math.random() * 16D) - 8; + if (k < 0) { + k = 0; + } else if (k > 255) { + k = 255; + } + int l = anInt395 + (int) (Math.random() * 48D) - 24; + if (l < 0) { + l = 0; + } else if (l > 255) { + l = 255; + } + int i1 = anInt396 + (int) (Math.random() * 48D) - 24; + if (i1 < 0) { + i1 = 0; + } else if (i1 > 255) { + i1 = 255; + } + anInt399 = method263(k, l, i1); + } + + private int method263(int i, int j, int k) { + if (k > 179) { + j /= 2; + } + if (k > 192) { + j /= 2; + } + if (k > 217) { + j /= 2; + } + if (k > 243) { + j /= 2; + } + return (i / 4 << 10) + (j / 32 << 7) + k / 2; + } + + private Flo() { + anInt391 = -1; + aBoolean393 = true; + } + + public static Flo cache[]; + public int anInt390; + public int anInt391; + public boolean aBoolean393; + public int anInt394; + public int anInt395; + public int anInt396; + public int anInt397; + public int anInt398; + public int anInt399; + +} diff --git a/2006Redone Client/src/Game.java b/2006Redone Client/src/Game.java new file mode 100644 index 00000000..25791b40 --- /dev/null +++ b/2006Redone Client/src/Game.java @@ -0,0 +1,12122 @@ +import java.applet.AppletContext; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Graphics; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; +import java.net.URL; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Calendar; +import java.util.Date; + +@SuppressWarnings("serial") +public class Game extends RSApplet { + + public static String intToKOrMilLongName(int i) { + String s = String.valueOf(i); + for (int k = s.length() - 3; k > 0; k -= 3) { + s = s.substring(0, k) + "," + s.substring(k); + } + if (s.length() > 8) { + s = "@gre@" + s.substring(0, s.length() - 8) + " million @whi@(" + s + ")"; + } else if (s.length() > 4) { + s = "@cya@" + s.substring(0, s.length() - 4) + "K @whi@(" + s + ")"; + } + return " " + s; + } + + static final boolean musicIsntNull() { + if (aClass56_749 == null) + return false; + return true; + } + + static final void method790() { + if (aClass56_749 != null) { + method891(false); + if (anInt720 > 0) { + aClass56_749.method831(256); + anInt720 = 0; + } + aClass56_749.method828(); + aClass56_749 = null; + } + } + + public static String getFileNameWithoutExtension(String fileName) { + File tmpFile = new File(fileName); + tmpFile.getName(); + int whereDot = tmpFile.getName().lastIndexOf('.'); + if (0 < whereDot && whereDot <= tmpFile.getName().length() - 2) { + return tmpFile.getName().substring(0, whereDot); + } + return ""; + } + + public String indexLocation(int cacheIndex, int index) { + return Signlink.findcachedir() + "index" + cacheIndex + "/" + (index != -1 ? index + ".gz" : ""); + } + + public void repackCacheIndex(int cacheIndex) { + System.out.println("Started repacking index " + cacheIndex + "."); + int indexLength = new File(indexLocation(cacheIndex, -1)).listFiles().length; + File[] file = new File(indexLocation(cacheIndex, -1)).listFiles(); + try { + for (int index = 0; index < indexLength; index++) { + int fileIndex = Integer.parseInt(getFileNameWithoutExtension(file[index].toString())); + byte[] data = fileToByteArray(cacheIndex, fileIndex); + if(data != null && data.length > 0) { + decompressors[cacheIndex].method234(data.length, data, fileIndex); + System.out.println("Repacked " + fileIndex + "."); + } else { + System.out.println("Unable to locate index " + fileIndex + "."); + } + } + } catch(Exception e) { + System.out.println("Error packing cache index " + cacheIndex + "."); + } + System.out.println("Finished repacking " + cacheIndex + "."); + } + + public byte[] fileToByteArray(int cacheIndex, int index) { + try { + if (indexLocation(cacheIndex, index).length() <= 0 || indexLocation(cacheIndex, index) == null) { + return null; + } + File file = new File(indexLocation(cacheIndex, index)); + byte[] fileData = new byte[(int)file.length()]; + FileInputStream fis = new FileInputStream(file); + fis.read(fileData); + fis.close(); + return fileData; + } catch(Exception e) { + return null; + } + } + + public void musics() { + for(int MusicIndex = 0; MusicIndex < 3536; MusicIndex++) { + byte[] abyte0 = GetMusic(MusicIndex); + if (abyte0 != null && abyte0.length > 0) { + decompressors[3].method234(abyte0.length, abyte0, MusicIndex); + } + } + } + + public byte[] GetMusic(int Index) { + try { + File Music = new File(Signlink.findcachedir() + "./sounds/"+Index+".gz"); + byte[] aByte = new byte[(int)Music.length()]; + FileInputStream Fis = new FileInputStream(Music); + Fis.read(aByte); + Fis.close(); + return aByte; + } catch(Exception e) { + return null; + } + } + + static final void setVolume(int i) { + if (musicIsntNull()) { + if (fetchMusic) + musicVolume2 = i; + else + method900(i); + } + } + + static final void method900(int i) { + if (aClass56_749 != null) { + if (anInt720 == 0) { + if (anInt478 >= 0) { + anInt478 = i; + aClass56_749.method830(i, 0); + } + } else if (aByteArray347 != null) + anInt1478 = i; + } + } + + static final synchronized void method55(boolean bool) { + if (musicIsntNull()) { + method891(bool); + fetchMusic = false; + } + } + + static final void method891(boolean bool) { + method853(0, null, bool); + } + + static final boolean constructMusic() { + anInt720 = 20; + try { + aClass56_749 = (Class56) Class.forName("Class56_Sub1_Sub1").newInstance(); + } catch (Throwable throwable) { + return false; + } + return true; + } + + final synchronized void method58(int i_30_, int volume, + boolean bool, int music) { + if (musicIsntNull()) { + nextSong = music; + onDemandFetcher.method558(2, nextSong); + musicVolume2 = volume; + anInt139 = -1; + aBoolean995 = true; + anInt116 = i_30_; + } + } + + final synchronized void method56(int i, boolean bool, int music) { + if (musicIsntNull()) { + nextSong = music; + onDemandFetcher.method558(2, nextSong); + musicVolume2 = i; + anInt139 = -1; + aBoolean995 = true; + anInt116 = -1; + } + } + + public void sendFrame126(String str,int i) { + RSInterface.interfaceCache[i].disabledText = str; + if(RSInterface.interfaceCache[i].parentID == tabInterfaceIDs[tabID]) + needDrawTabArea = true; + } + + public static byte[] musicData; + + static final synchronized void method49() { + if (musicIsntNull()) { + if (fetchMusic) { + byte[] is = musicData; + if (is != null) { + if (anInt116 >= 0) + method684(aBoolean995, anInt116, musicVolume2, is); + else if (anInt139 >= 0) + method899(anInt139, -1, aBoolean995, is, musicVolume2); + else + method853(musicVolume2, is, aBoolean995); + fetchMusic = false; + } + } + method368(0); + } + } + + static final int method1004(int i) { + return (int) (Math.log((double) i * 0.00390625) * 868.5889638065036 + 0.5); + } + + static final void method853(int i_2_, byte[] is, boolean bool) { + if (aClass56_749 != null) { + if (anInt478 >= 0) { + aClass56_749.method833(); + anInt478 = -1; + aByteArray347 = null; + anInt720 = 20; + anInt155 = 0; + } + if (is != null) { + if (anInt720 > 0) { + aClass56_749.method831(i_2_); + anInt720 = 0; + } + anInt478 = i_2_; + aClass56_749.method827(i_2_, is, 0, bool); + } + } + } + + static final void method899(int i, int i_29_, boolean bool, byte[] is, int i_30_) { + if (aClass56_749 != null) { + if (i_29_ >= (anInt478 ^ 0xffffffff)) { + i -= 20; + if (i < 1) + i = 1; + anInt720 = i; + if (anInt478 == 0) + anInt2200 = 0; + else { + int i_31_ = method1004(anInt478); + i_31_ -= anInt155; + anInt2200 = ((anInt2200 - 1 + (i_31_ + 3600)) / anInt2200); + } + aBoolean475 = bool; + aByteArray347 = is; + anInt1478 = i_30_; + } else if (anInt720 != 0) { + aBoolean475 = bool; + aByteArray347 = is; + anInt1478 = i_30_; + } else + method853(i_30_, is, bool); + } + } + + static final void method684(boolean bool, int i, int i_2_, byte[] is) { + if (aClass56_749 != null) { + if (anInt478 >= 0) { + anInt2200 = i; + if (anInt478 != 0) { + int i_4_ = method1004(anInt478); + i_4_ -= anInt155; + anInt720 = (i_4_ + 3600) / i; + if (anInt720 < 1) + anInt720 = 1; + } else + anInt720 = 1; + aByteArray347 = is; + anInt1478 = i_2_; + aBoolean475 = bool; + } else if (anInt720 == 0) + method853(i_2_, is, bool); + else { + anInt1478 = i_2_; + aBoolean475 = bool; + aByteArray347 = is; + } + } + } + + static final void method368(int i) { + if (aClass56_749 != null) { + if (anInt478 < i) { + if (anInt720 > 0) { + anInt720--; + if (anInt720 == 0) { + if (aByteArray347 == null) + aClass56_749.method831(256); + else { + aClass56_749.method831(anInt1478); + anInt478 = anInt1478; + aClass56_749.method827(anInt1478, aByteArray347, 0, aBoolean475); + aByteArray347 = null; + } + anInt155 = 0; + } + } + } else if (anInt720 > 0) { + anInt155 += anInt2200; + aClass56_749.method830(anInt478, anInt155); + anInt720--; + if (anInt720 == 0) { + aClass56_749.method833(); + anInt720 = 20; + anInt478 = -1; + } + } + aClass56_749.method832(i - 122); + } + } + + private void stopMidi() { + if (Signlink.music != null) { + if (Signlink.music.isRunning()) { + Signlink.fadeOut(); + Signlink.music.stop(); + Signlink.midi = "stop"; + } + } + } + + public boolean menuHasAddFriend(int j) { + if (j < 0) { + return false; + } + int k = menuActionID[j]; + if (k >= 2000) { + k -= 2000; + } + return k == 337; + } + + public void drawChatArea() { + aRSImageProducer_1166.initDrawingArea(); + Texture.lineOffsets = chatAreaOffsets; + chatBack.method361(0, 0); + if (messagePromptRaised) { + chatTextDrawingArea.drawText(0, aString1121, 40, 239); + chatTextDrawingArea.drawText(128, promptInput + "*", 60, 239); + } else if (inputDialogState == 1) { + chatTextDrawingArea.drawText(0, "Enter amount:", 40, 239); + chatTextDrawingArea.drawText(128, amountOrNameInput + "*", 60, 239); + } else if (inputDialogState == 2) { + chatTextDrawingArea.drawText(0, "Enter name:", 40, 239); + chatTextDrawingArea.drawText(128, amountOrNameInput + "*", 60, 239); + } else if (aString844 != null) { + chatTextDrawingArea.drawText(0, aString844, 40, 239); + chatTextDrawingArea.drawText(128, "Click to continue", 60, 239); + } else if (backDialogID != -1) { + drawInterface(0, 0, RSInterface.interfaceCache[backDialogID], 0);//CHANGED THIS - andrew was 0, 0 + } else if (dialogID != -1) { + drawInterface(0, 0, RSInterface.interfaceCache[dialogID], 0);//CHANGED THIS - andrew was 0, 0 + } else { + TextDrawingArea textDrawingArea = aTextDrawingArea_1271; + int j = 0; + DrawingArea.setDrawingArea(77, 0, 463, 0); + for (int k = 0; k < 100; k++) { + if (chatMessages[k] != null) { + int l = chatTypes[k]; + int i1 = 70 - j * 14 + anInt1089; + String s1 = chatNames[k]; + byte byte0 = 0; + if (s1 != null && s1.startsWith("@cr1@")) { + s1 = s1.substring(5); + byte0 = 1; + } + if (s1 != null && s1.startsWith("@cr2@")) { + s1 = s1.substring(5); + byte0 = 2; + } + if (l == 0) { + if (i1 > 0 && i1 < 110) { + textDrawingArea.method389(false, 4, 0, chatMessages[k], i1); + } + j++; + } + if ((l == 1 || l == 2) && (l == 1 || publicChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s1))) { + if (i1 > 0 && i1 < 110) { + int j1 = 4; + if (byte0 == 1) { + modIcons[0].method361(j1, i1 - 12); + j1 += 14; + } + if (byte0 == 2) { + modIcons[1].method361(j1, i1 - 12); + j1 += 14; + } + textDrawingArea.method385(0, s1 + ":", i1, j1); + j1 += textDrawingArea.getTextWidth(s1) + 8; + textDrawingArea.method385(255, chatMessages[k], i1, j1); + } + j++; + } + if ((l == 3 || l == 7) && splitpublicChat == 0 && (l == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s1))) { + if (i1 > 0 && i1 < 110) { + int k1 = 4; + textDrawingArea.method385(0, "From", i1, k1); + k1 += textDrawingArea.getTextWidth("From "); + if (byte0 == 1) { + modIcons[0].method361(k1, i1 - 12); + k1 += 14; + } + if (byte0 == 2) { + modIcons[1].method361(k1, i1 - 12); + k1 += 14; + } + textDrawingArea.method385(0, s1 + ":", i1, k1); + k1 += textDrawingArea.getTextWidth(s1) + 8; + textDrawingArea.method385(0x800000, chatMessages[k], i1, k1); + } + j++; + } + if (l == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) { + if (i1 > 0 && i1 < 110) { + textDrawingArea.method385(0x800080, s1 + " " + chatMessages[k], i1, 4); + } + j++; + } + if (l == 5 && splitpublicChat == 0 && privateChatMode < 2) { + if (i1 > 0 && i1 < 110) { + textDrawingArea.method385(0x800000, chatMessages[k], i1, 4); + } + j++; + } + if (l == 6 && splitpublicChat == 0 && privateChatMode < 2) { + if (i1 > 0 && i1 < 110) { + textDrawingArea.method385(0, "To " + s1 + ":", i1, 4); + textDrawingArea.method385(0x800000, chatMessages[k], i1, 12 + textDrawingArea.getTextWidth("To " + s1)); + } + j++; + } + if (l == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) { + if (i1 > 0 && i1 < 110) { + textDrawingArea.method385(0x7e3200, s1 + " " + chatMessages[k], i1, 4); + } + j++; + } + } + } + + DrawingArea.defaultDrawingAreaSize(); + anInt1211 = j * 14 + 7; + if (anInt1211 < 78) { + anInt1211 = 78; + } + method30(77, anInt1211 - anInt1089 - 77, 0, 463, anInt1211); + String s; + if (myPlayer != null && myPlayer.name != null) { + s = myPlayer.name; + } else { + s = TextClass.fixName(myUsername); + } + textDrawingArea.method385(0, s + ":", 90, 4); + textDrawingArea.method385(255, inputString + "*", 90, 6 + textDrawingArea.getTextWidth(s + ": ")); + DrawingArea.method339(77, 0, 479, 0); + } + if (menuOpen && menuScreenArea == 2) { + drawMenu(); + } + aRSImageProducer_1166.drawGraphics(357, super.graphics, 17); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + + public void init() { + try { + nodeID = 10; + portOff = 0; + setHighMem(); + isMembers = true; + Signlink.storeid = 32; + Signlink.startpriv(InetAddress.getLocalHost()); + initClientFrame(503, 765); + } catch (Exception exception) { + return; + } + } + + public void startRunnable(Runnable runnable, int i) { + if (i > 10) { + i = 10; + } + if (Signlink.mainapp != null) { + Signlink.startthread(runnable, i); + } else { + super.startRunnable(runnable, i); + } + } + + public Socket openSocket(int i) throws IOException { + if (Signlink.mainapp != null) { + return Signlink.opensocket(i); + } else { + return new Socket(InetAddress.getByName(getCodeBase().getHost()), i); + } + } + + public void processMenuClick() { + if (activeInterfaceType != 0) { + return; + } + int j = super.clickMode3; + if (spellSelected == 1 && super.saveClickX >= 516 && super.saveClickY >= 160 && super.saveClickX <= 765 && super.saveClickY <= 205) { + j = 0; + } + if (menuOpen) { + if (j != 1) { + int k = super.mouseX; + int j1 = super.mouseY; + if (menuScreenArea == 0) { + k -= 4; + j1 -= 4; + } + if (menuScreenArea == 1) { + k -= 553; + j1 -= 205; + } + if (menuScreenArea == 2) { + k -= 17; + j1 -= 357; + } + if (k < menuOffsetX - 10 || k > menuOffsetX + menuWidth + 10 || j1 < menuOffsetY - 10 || j1 > menuOffsetY + anInt952 + 10) { + menuOpen = false; + if (menuScreenArea == 1) { + needDrawTabArea = true; + } + if (menuScreenArea == 2) { + inputTaken = true; + } + } + } + if (j == 1) { + int l = menuOffsetX; + int k1 = menuOffsetY; + int i2 = menuWidth; + int k2 = super.saveClickX; + int l2 = super.saveClickY; + if (menuScreenArea == 0) { + k2 -= 4; + l2 -= 4; + } + if (menuScreenArea == 1) { + k2 -= 553; + l2 -= 205; + } + if (menuScreenArea == 2) { + k2 -= 17; + l2 -= 357; + } + int i3 = -1; + for (int j3 = 0; j3 < menuActionRow; j3++) { + int k3 = k1 + 31 + (menuActionRow - 1 - j3) * 15; + if (k2 > l && k2 < l + i2 && l2 > k3 - 13 && l2 < k3 + 3) { + i3 = j3; + } + } + + if (i3 != -1) { + doAction(i3); + } + menuOpen = false; + if (menuScreenArea == 1) { + needDrawTabArea = true; + } + if (menuScreenArea == 2) { + inputTaken = true; + } + } + } else { + if (j == 1 && menuActionRow > 0) { + int i1 = menuActionID[menuActionRow - 1]; + if (i1 == 632 || i1 == 78 || i1 == 867 || i1 == 431 || i1 == 53 || i1 == 74 || i1 == 454 || i1 == 539 || i1 == 493 || i1 == 847 || i1 == 447 || i1 == 1125) { + int l1 = menuActionCmd2[menuActionRow - 1]; + int j2 = menuActionCmd3[menuActionRow - 1]; + RSInterface class9 = RSInterface.interfaceCache[j2]; + if (class9.aBoolean259 || class9.aBoolean235) { + aBoolean1242 = false; + anInt989 = 0; + anInt1084 = j2; + anInt1085 = l1; + activeInterfaceType = 2; + anInt1087 = super.saveClickX; + anInt1088 = super.saveClickY; + if (RSInterface.interfaceCache[j2].parentID == openInterfaceID) { + activeInterfaceType = 1; + } + if (RSInterface.interfaceCache[j2].parentID == backDialogID) { + activeInterfaceType = 3; + } + return; + } + } + } + if (j == 1 && (anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2) { + j = 2; + } + if (j == 1 && menuActionRow > 0) { + doAction(menuActionRow - 1); + } + if (j == 2 && menuActionRow > 0) { + determineMenuSize(); + } + } + } + + public void saveMidi(boolean flag, byte abyte0[]) { + Signlink.midifade = flag ? 1 : 0; + Signlink.saveMidi(abyte0, abyte0.length); + } + + public void method22() { + try { + anInt985 = -1; + aClass19_1056.removeAll(); + aClass19_1013.removeAll(); + Texture.method366(); + unlinkMRUNodes(); + worldController.initToNull(); + System.gc(); + for (int i = 0; i < 4; i++) { + aClass11Array1230[i].method210(); + } + + for (int l = 0; l < 4; l++) { + for (int k1 = 0; k1 < 104; k1++) { + for (int j2 = 0; j2 < 104; j2++) { + byteGroundArray[l][k1][j2] = 0; + } + + } + + } + + ObjectManager objectManager = new ObjectManager(byteGroundArray, intGroundArray); + int k2 = aByteArrayArray1183.length; + stream.createFrame(0); + if (!aBoolean1159) { + for (int i3 = 0; i3 < k2; i3++) { + int i4 = (anIntArray1234[i3] >> 8) * 64 - baseX; + int k5 = (anIntArray1234[i3] & 0xff) * 64 - baseY; + byte abyte0[] = aByteArrayArray1183[i3]; + if (abyte0 != null) { + objectManager.method180(abyte0, k5, i4, (anInt1069 - 6) * 8, (anInt1070 - 6) * 8, aClass11Array1230); + } + } + + for (int j4 = 0; j4 < k2; j4++) { + int l5 = (anIntArray1234[j4] >> 8) * 64 - baseX; + int k7 = (anIntArray1234[j4] & 0xff) * 64 - baseY; + byte abyte2[] = aByteArrayArray1183[j4]; + if (abyte2 == null && anInt1070 < 800) { + objectManager.method174(k7, 64, 64, l5); + } + } + + anInt1097++; + if (anInt1097 > 160) { + anInt1097 = 0; + stream.createFrame(238); + stream.writeWordBigEndian(96); + } + stream.createFrame(0); + for (int i6 = 0; i6 < k2; i6++) { + byte abyte1[] = aByteArrayArray1247[i6]; + if (abyte1 != null) { + int l8 = (anIntArray1234[i6] >> 8) * 64 - baseX; + int k9 = (anIntArray1234[i6] & 0xff) * 64 - baseY; + objectManager.method190(l8, aClass11Array1230, k9, worldController, abyte1); + } + } + + } + if (aBoolean1159) { + for (int j3 = 0; j3 < 4; j3++) { + for (int k4 = 0; k4 < 13; k4++) { + for (int j6 = 0; j6 < 13; j6++) { + int l7 = anIntArrayArrayArray1129[j3][k4][j6]; + if (l7 != -1) { + int i9 = l7 >> 24 & 3; + int l9 = l7 >> 1 & 3; + int j10 = l7 >> 14 & 0x3ff; + int l10 = l7 >> 3 & 0x7ff; + int j11 = (j10 / 8 << 8) + l10 / 8; + for (int l11 = 0; l11 < anIntArray1234.length; l11++) { + if (anIntArray1234[l11] != j11 || aByteArrayArray1183[l11] == null) { + continue; + } + objectManager.method179(i9, l9, aClass11Array1230, k4 * 8, (j10 & 7) * 8, aByteArrayArray1183[l11], (l10 & 7) * 8, j3, j6 * 8); + break; + } + + } + } + + } + + } + + for (int l4 = 0; l4 < 13; l4++) { + for (int k6 = 0; k6 < 13; k6++) { + int i8 = anIntArrayArrayArray1129[0][l4][k6]; + if (i8 == -1) { + objectManager.method174(k6 * 8, 8, 8, l4 * 8); + } + } + + } + + stream.createFrame(0); + for (int l6 = 0; l6 < 4; l6++) { + for (int j8 = 0; j8 < 13; j8++) { + for (int j9 = 0; j9 < 13; j9++) { + int i10 = anIntArrayArrayArray1129[l6][j8][j9]; + if (i10 != -1) { + int k10 = i10 >> 24 & 3; + int i11 = i10 >> 1 & 3; + int k11 = i10 >> 14 & 0x3ff; + int i12 = i10 >> 3 & 0x7ff; + int j12 = (k11 / 8 << 8) + i12 / 8; + for (int k12 = 0; k12 < anIntArray1234.length; k12++) { + if (anIntArray1234[k12] != j12 || aByteArrayArray1247[k12] == null) { + continue; + } + objectManager.method183(aClass11Array1230, worldController, k10, j8 * 8, (i12 & 7) * 8, l6, aByteArrayArray1247[k12], (k11 & 7) * 8, i11, j9 * 8); + break; + } + + } + } + + } + + } + + } + stream.createFrame(0); + objectManager.method171(aClass11Array1230, worldController); + if(aRSImageProducer_1165 != null) { + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + stream.createFrame(0); + int k3 = ObjectManager.anInt145; + if (k3 > plane) { + k3 = plane; + } + if (k3 < plane - 1) { + k3 = plane - 1; + } + if (lowMem) { + worldController.method275(ObjectManager.anInt145); + } else { + worldController.method275(0); + } + for (int i5 = 0; i5 < 104; i5++) { + for (int i7 = 0; i7 < 104; i7++) { + spawnGroundItem(i5, i7); + } + + } + + anInt1051++; + if (anInt1051 > 98) { + anInt1051 = 0; + stream.createFrame(150); + } + method63(); + } catch (Exception exception) { + } + ObjectDef.mruNodes1.unlinkAll(); + if (super.gameFrame != null) { + stream.createFrame(210); + stream.writeDWord(0x3f008edd); + } + if (lowMem && Signlink.cache_dat != null) { + int j = onDemandFetcher.getVersionCount(0); + for (int i1 = 0; i1 < j; i1++) { + int l1 = onDemandFetcher.getModelIndex(i1); + if ((l1 & 0x79) == 0) { + Model.method461(i1); + } + } + + } + System.gc(); + Texture.method367(); + onDemandFetcher.method566(); + int k = (anInt1069 - 6) / 8 - 1; + int j1 = (anInt1069 + 6) / 8 + 1; + int i2 = (anInt1070 - 6) / 8 - 1; + int l2 = (anInt1070 + 6) / 8 + 1; + if (aBoolean1141) { + k = 49; + j1 = 50; + i2 = 49; + l2 = 50; + } + for (int l3 = k; l3 <= j1; l3++) { + for (int j5 = i2; j5 <= l2; j5++) { + if (l3 == k || l3 == j1 || j5 == i2 || j5 == l2) { + int j7 = onDemandFetcher.method562(0, j5, l3); + if (j7 != -1) { + onDemandFetcher.method560(j7, 3); + } + int k8 = onDemandFetcher.method562(1, j5, l3); + if (k8 != -1) { + onDemandFetcher.method560(k8, 3); + } + } + } + + } + + } + + public void unlinkMRUNodes() { + ObjectDef.mruNodes1.unlinkAll(); + ObjectDef.mruNodes2.unlinkAll(); + EntityDef.mruNodes.unlinkAll(); + ItemDef.mruNodes2.unlinkAll(); + ItemDef.mruNodes1.unlinkAll(); + Player.mruNodes.unlinkAll(); + SpotAnim.aMRUNodes_415.unlinkAll(); + } + + public void method24(int i) { + int ai[] = aClass30_Sub2_Sub1_Sub1_1263.pixels; + int j = ai.length; + for (int k = 0; k < j; k++) { + ai[k] = 0; + } + + for (int l = 1; l < 103; l++) { + int i1 = 24628 + (103 - l) * 512 * 4; + for (int k1 = 1; k1 < 103; k1++) { + if ((byteGroundArray[i][k1][l] & 0x18) == 0) { + worldController.method309(ai, i1, i, k1, l); + } + if (i < 3 && (byteGroundArray[i + 1][k1][l] & 8) != 0) { + worldController.method309(ai, i1, i + 1, k1, l); + } + i1 += 4; + } + + } + + int j1 = (238 + (int) (Math.random() * 20D) - 10 << 16) + (238 + (int) (Math.random() * 20D) - 10 << 8) + 238 + (int) (Math.random() * 20D) - 10; + int l1 = 238 + (int) (Math.random() * 20D) - 10 << 16; + aClass30_Sub2_Sub1_Sub1_1263.method343(); + for (int i2 = 1; i2 < 103; i2++) { + for (int j2 = 1; j2 < 103; j2++) { + if ((byteGroundArray[i][j2][i2] & 0x18) == 0) { + method50(i2, j1, j2, l1, i); + } + if (i < 3 && (byteGroundArray[i + 1][j2][i2] & 8) != 0) { + method50(i2, j1, j2, l1, i + 1); + } + } + + } + if(aRSImageProducer_1165 != null) { + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + anInt1071 = 0; + for (int k2 = 0; k2 < 104; k2++) { + for (int l2 = 0; l2 < 104; l2++) { + int i3 = worldController.method303(plane, k2, l2); + if (i3 != 0) { + i3 = i3 >> 14 & 0x7fff; + int j3 = ObjectDef.forID(i3).anInt746; + if (j3 >= 0) { + int k3 = k2; + int l3 = l2; + if (j3 != 22 && j3 != 29 && j3 != 34 && j3 != 36 && j3 != 46 && j3 != 47 && j3 != 48) { + byte byte0 = 104; + byte byte1 = 104; + int ai1[][] = aClass11Array1230[plane].anIntArrayArray294; + for (int i4 = 0; i4 < 10; i4++) { + int j4 = (int) (Math.random() * 4D); + if (j4 == 0 && k3 > 0 && k3 > k2 - 3 && (ai1[k3 - 1][l3] & 0x1280108) == 0) { + k3--; + } + if (j4 == 1 && k3 < byte0 - 1 && k3 < k2 + 3 && (ai1[k3 + 1][l3] & 0x1280180) == 0) { + k3++; + } + if (j4 == 2 && l3 > 0 && l3 > l2 - 3 && (ai1[k3][l3 - 1] & 0x1280102) == 0) { + l3--; + } + if (j4 == 3 && l3 < byte1 - 1 && l3 < l2 + 3 && (ai1[k3][l3 + 1] & 0x1280120) == 0) { + l3++; + } + } + + } + aClass30_Sub2_Sub1_Sub1Array1140[anInt1071] = mapFunctions[j3]; + anIntArray1072[anInt1071] = k3; + anIntArray1073[anInt1071] = l3; + anInt1071++; + } + } + } + + } + + } + + public void spawnGroundItem(int i, int j) { + NodeList class19 = groundArray[plane][i][j]; + if (class19 == null) { + worldController.method295(plane, i, j); + return; + } + int k = 0xfa0a1f01; + Object obj = null; + for (Item item = (Item) class19.reverseGetFirst(); item != null; item = (Item) class19.reverseGetNext()) { + ItemDef itemDef = ItemDef.forID(item.ID); + int l = itemDef.value; + if (itemDef.stackable) { + l *= item.anInt1559 + 1; + // notifyItemSpawn(item, i + baseX, j + baseY); + } + + if (l > k) { + k = l; + obj = item; + } + } + + class19.insertTail(((Node) obj)); + Object obj1 = null; + Object obj2 = null; + for (Item class30_sub2_sub4_sub2_1 = (Item) class19.reverseGetFirst(); class30_sub2_sub4_sub2_1 != null; class30_sub2_sub4_sub2_1 = (Item) class19.reverseGetNext()) { + if (class30_sub2_sub4_sub2_1.ID != ((Item) obj).ID && obj1 == null) { + obj1 = class30_sub2_sub4_sub2_1; + } + if (class30_sub2_sub4_sub2_1.ID != ((Item) obj).ID && class30_sub2_sub4_sub2_1.ID != ((Item) obj1).ID && obj2 == null) { + obj2 = class30_sub2_sub4_sub2_1; + } + } + + int i1 = i + (j << 7) + 0x60000000; + worldController.method281(i, i1, ((Animable) obj1), method42(plane, j * 128 + 64, i * 128 + 64), ((Animable) obj2), ((Animable) obj), plane, j); + } + + public void method26(boolean flag) { + for (int j = 0; j < npcCount; j++) { + NPC npc = npcArray[npcIndices[j]]; + int k = 0x20000000 + (npcIndices[j] << 14); + if (npc == null || !npc.isVisible() || npc.desc.aBoolean93 != flag) { + continue; + } + int l = npc.x >> 7; + int i1 = npc.y >> 7; + if (l < 0 || l >= 104 || i1 < 0 || i1 >= 104) { + continue; + } + if (npc.anInt1540 == 1 && (npc.x & 0x7f) == 64 && (npc.y & 0x7f) == 64) { + if (anIntArrayArray929[l][i1] == anInt1265) { + continue; + } + anIntArrayArray929[l][i1] = anInt1265; + } + if (!npc.desc.aBoolean84) { + k += 0x80000000; + } + worldController.method285(plane, npc.anInt1552, method42(plane, npc.y, npc.x), k, npc.y, (npc.anInt1540 - 1) * 64 + 60, npc.x, npc, npc.aBoolean1541); + } + } + + public boolean replayWave() { + return Signlink.wavereplay(); + } + + public void loadError() { + String s = "ondemand";// was a constant parameter + try { + getAppletContext().showDocument(new URL(getCodeBase(), "loaderror_" + s + ".html")); + } catch (Exception exception) { + exception.printStackTrace(); + } + do { + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + } while (true); + } + + static final void sleep(long time) { + if (time > 0L) { + if (time % 10L != 0L) + threadSleep(time); + else { + threadSleep(time - 1L); + threadSleep(1L); + } + } + } + + static final void threadSleep(long time) { + try { + Thread.sleep(time); + } catch (InterruptedException interruptedexception) { + /* empty */ + } + } + + public void buildInterfaceMenu(int i, RSInterface class9, int k, int l, int i1, int j1) { + if (class9.type != 0 || class9.children == null || class9.aBoolean266) { + return; + } + if (k < i || i1 < l || k > i + class9.width || i1 > l + class9.height) { + return; + } + int k1 = class9.children.length; + for (int l1 = 0; l1 < k1; l1++) { + int i2 = class9.childX[l1] + i; + int j2 = class9.childY[l1] + l - j1; + RSInterface class9_1 = RSInterface.interfaceCache[class9.children[l1]]; + i2 += class9_1.anInt263; + j2 += class9_1.anInt265; + if ((class9_1.anInt230 >= 0 || class9_1.anInt216 != 0) && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + if (class9_1.anInt230 >= 0) { + anInt886 = class9_1.anInt230; + } else { + anInt886 = class9_1.id; + } + } + if (class9_1.type == 0) { + buildInterfaceMenu(i2, class9_1, k, j2, i1, class9_1.scrollPosition); + if (class9_1.scrollMax > class9_1.height) { + method65(i2 + class9_1.width, class9_1.height, k, i1, class9_1, j2, true, class9_1.scrollMax); + } + } else { + if (class9_1.atActionType == 1 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + boolean flag = false; + if (class9_1.anInt214 != 0) { + flag = buildFriendsListMenu(class9_1); + } + if (!flag) { + menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip; + menuActionID[menuActionRow] = 315; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } + if (class9_1.atActionType == 2 && spellSelected == 0 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + String s = class9_1.selectedActionName; + if (s.indexOf(" ") != -1) { + s = s.substring(0, s.indexOf(" ")); + } + menuActionName[menuActionRow] = s + " @gre@" + class9_1.spellName; + menuActionID[menuActionRow] = 626; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.atActionType == 3 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + menuActionName[menuActionRow] = "Close"; + menuActionID[menuActionRow] = 200; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.atActionType == 4 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip; + menuActionID[menuActionRow] = 169; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.atActionType == 5 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip; + menuActionID[menuActionRow] = 646; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.atActionType == 6 && !aBoolean1149 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) { + menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip; + menuActionID[menuActionRow] = 679; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.type == 2) { + int k2 = 0; + for (int l2 = 0; l2 < class9_1.height; l2++) { + for (int i3 = 0; i3 < class9_1.width; i3++) { + int j3 = i2 + i3 * (32 + class9_1.invSpritePadX); + int k3 = j2 + l2 * (32 + class9_1.invSpritePadY); + if (k2 < 20) { + j3 += class9_1.spritesX[k2]; + k3 += class9_1.spritesY[k2]; + } + if (k >= j3 && i1 >= k3 && k < j3 + 32 && i1 < k3 + 32) { + mouseInvInterfaceIndex = k2; + lastActiveInvInterface = class9_1.id; + if (class9_1.inv[k2] > 0) { + ItemDef itemDef = ItemDef.forID(class9_1.inv[k2] - 1); + if (itemSelected == 1 && class9_1.isInventoryInterface) { + if (class9_1.id != anInt1284 || k2 != anInt1283) { + menuActionName[menuActionRow] = "Use " + selectedItemName + " with @lre@" + itemDef.name; + menuActionID[menuActionRow] = 870; + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } else if (spellSelected == 1 && class9_1.isInventoryInterface) { + if ((spellUsableOn & 0x10) == 16) { + menuActionName[menuActionRow] = spellTooltip + " @lre@" + itemDef.name; + menuActionID[menuActionRow] = 543; + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } else { + if (class9_1.isInventoryInterface) { + for (int l3 = 4; l3 >= 3; l3--) { + if (itemDef.actions != null && itemDef.actions[l3] != null) { + menuActionName[menuActionRow] = itemDef.actions[l3] + " @lre@" + itemDef.name; + if (l3 == 3) { + menuActionID[menuActionRow] = 493; + } + if (l3 == 4) { + menuActionID[menuActionRow] = 847; + } + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } else if (l3 == 4) { + menuActionName[menuActionRow] = "Drop @lre@" + itemDef.name; + menuActionID[menuActionRow] = 847; + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } + + } + if (class9_1.usableItemInterface) { + menuActionName[menuActionRow] = "Use @lre@" + itemDef.name; + menuActionID[menuActionRow] = 447; + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + if (class9_1.isInventoryInterface && itemDef.actions != null) { + for (int i4 = 2; i4 >= 0; i4--) { + if (itemDef.actions[i4] != null) { + menuActionName[menuActionRow] = itemDef.actions[i4] + " @lre@" + itemDef.name; + if (i4 == 0) { + menuActionID[menuActionRow] = 74; + } + if (i4 == 1) { + menuActionID[menuActionRow] = 454; + } + if (i4 == 2) { + menuActionID[menuActionRow] = 539; + } + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } + + } + if (class9_1.actions != null) { + for (int j4 = 4; j4 >= 0; j4--) { + if (class9_1.actions[j4] != null) { + menuActionName[menuActionRow] = class9_1.actions[j4] + " @lre@" + itemDef.name; + if (j4 == 0) { + menuActionID[menuActionRow] = 632; + } + if (j4 == 1) { + menuActionID[menuActionRow] = 78; + } + if (j4 == 2) { + menuActionID[menuActionRow] = 867; + } + if (j4 == 3) { + menuActionID[menuActionRow] = 431; + } + if (j4 == 4) { + menuActionID[menuActionRow] = 53; + } + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } + + } + menuActionName[menuActionRow] = "Examine @lre@" + itemDef.name + (showInfo ? " @gre@(@whi@" + (class9_1.inv[k2] - 1) + "@gre@)" : ""); + menuActionID[menuActionRow] = 1125; + menuActionCmd1[menuActionRow] = itemDef.id; + menuActionCmd2[menuActionRow] = k2; + menuActionCmd3[menuActionRow] = class9_1.id; + menuActionRow++; + } + } + } + k2++; + } + + } + + } + } + } + + } + + public void method30(int j, int k, int l, int i1, int j1) { + scrollBar1.method361(i1, l); + scrollBar2.method361(i1, l + j - 16); + DrawingArea.method336(j - 32, l + 16, anInt1002, 16, i1); + int k1 = (j - 32) * j / j1; + if (k1 < 8) { + k1 = 8; + } + int l1 = (j - 32 - k1) * k / (j1 - j); + DrawingArea.method336(k1, l + 16 + l1, anInt1063, 16, i1); + DrawingArea.method341(l + 16 + l1, anInt902, k1, i1); + DrawingArea.method341(l + 16 + l1, anInt902, k1, i1 + 1); + DrawingArea.method339(l + 16 + l1, anInt902, 16, i1); + DrawingArea.method339(l + 17 + l1, anInt902, 16, i1); + DrawingArea.method341(l + 16 + l1, anInt927, k1, i1 + 15); + DrawingArea.method341(l + 17 + l1, anInt927, k1 - 1, i1 + 14); + DrawingArea.method339(l + 15 + l1 + k1, anInt927, 16, i1); + DrawingArea.method339(l + 14 + l1 + k1, anInt927, 15, i1 + 1); + } + + public void updateNPCs(Stream stream, int i) { + anInt839 = 0; + anInt893 = 0; + method139(stream); + method46(i, stream); + method86(stream); + for (int k = 0; k < anInt839; k++) { + int l = anIntArray840[k]; + if (npcArray[l].anInt1537 != loopCycle) { + npcArray[l].desc = null; + npcArray[l] = null; + } + } + + if (stream.currentOffset != i) { + Signlink.reporterror(myUsername + " size mismatch in getnpcpos - pos:" + stream.currentOffset + " psize:" + i); + throw new RuntimeException("eek"); + } + for (int i1 = 0; i1 < npcCount; i1++) { + if (npcArray[npcIndices[i1]] == null) { + Signlink.reporterror(myUsername + " null entry in npc list - pos:" + i1 + " size:" + npcCount); + throw new RuntimeException("eek"); + } + } + + } + + public void processChatModeClick() { + if (super.clickMode3 == 1) { + if (super.saveClickX >= 6 && super.saveClickX <= 106 && super.saveClickY >= 467 && super.saveClickY <= 499) { + publicChatMode = (publicChatMode + 1) % 4; + aBoolean1233 = true; + inputTaken = true; + stream.createFrame(95); + stream.writeWordBigEndian(publicChatMode); + //stream.writeWordBigEndian(publicChatMode); + stream.writeWordBigEndian(privateChatMode); + stream.writeWordBigEndian(tradeMode); + } + if (super.saveClickX >= 135 && super.saveClickX <= 235 && super.saveClickY >= 467 && super.saveClickY <= 499) { + //publicChatMode = (publicChatMode + 1) % 3; + privateChatMode = (privateChatMode + 1) % 3; + aBoolean1233 = true; + inputTaken = true; + stream.createFrame(95); + stream.writeWordBigEndian(publicChatMode); + stream.writeWordBigEndian(privateChatMode); + stream.writeWordBigEndian(tradeMode); + } + if (super.saveClickX >= 273 && super.saveClickX <= 373 && super.saveClickY >= 467 && super.saveClickY <= 499) { + tradeMode = (tradeMode + 1) % 3; + aBoolean1233 = true; + inputTaken = true; + stream.createFrame(95); + stream.writeWordBigEndian(publicChatMode); + stream.writeWordBigEndian(privateChatMode); + stream.writeWordBigEndian(tradeMode); + } + if (super.saveClickX >= 412 && super.saveClickX <= 512 && super.saveClickY >= 467 && super.saveClickY <= 499) { + if (openInterfaceID == -1) { + closeOpenInterfaces(); + reportAbuseInput = ""; + canMute = false; + for (RSInterface element : RSInterface.interfaceCache) { + if (element == null || element.anInt214 != 600) { + continue; + } + reportAbuseInterfaceID = openInterfaceID = element.parentID; + break; + } + + } else { + pushMessage("Please close the interface you have open before using 'report abuse'", 0, ""); + } + } + anInt940++; + if (anInt940 > 1386) { + anInt940 = 0; + stream.createFrame(165); + stream.writeWordBigEndian(0); + int j = stream.currentOffset; + stream.writeWordBigEndian(139); + stream.writeWordBigEndian(150); + stream.writeWord(32131); + stream.writeWordBigEndian((int) (Math.random() * 256D)); + stream.writeWord(3250); + stream.writeWordBigEndian(177); + stream.writeWord(24859); + stream.writeWordBigEndian(119); + if ((int) (Math.random() * 2D) == 0) { + stream.writeWord(47234); + } + if ((int) (Math.random() * 2D) == 0) { + stream.writeWordBigEndian(21); + } + stream.writeBytes(stream.currentOffset - j); + } + } + } + + public void method33(int i) { + int action = Varp.cache[i].anInt709; + if (action == 0) { + return; + } + int config = variousSettings[i]; + if (action == 1) { + if (config == 1) { + Texture.method372(0.90000000000000002D); + } + if (config == 2) { + Texture.method372(0.80000000000000004D); + } + if (config == 3) { + Texture.method372(0.69999999999999996D); + } + if (config == 4) { + Texture.method372(0.59999999999999998D); + } + ItemDef.mruNodes1.unlinkAll(); + welcomeScreenRaised = true; + } + if (action == 3) { + int volume = 0; + if (config == 0) + volume = 255; + if (config == 1) + volume = 192; + if (config == 2) + volume = 128; + if (config == 3) + volume = 64; + if (config == 4) + volume = 0; + if (volume != musicVolume) { + if (musicVolume != 0 || currentSong == -1) { + if (volume != 0) + setVolume(volume); + else { + method55(false); + previousSong = 0; + } + } else { + method56(volume, false, currentSong); + previousSong = 0;//TODO temp music + } + musicVolume = volume; + } + } + if (action == 4) { + SoundPlayer.setVolume(config); + if (config == 0) { + aBoolean848 = true; + setWaveVolume(0); + } + if (config == 1) { + aBoolean848 = true; + setWaveVolume(-400); + } + if (config == 2) { + aBoolean848 = true; + setWaveVolume(-800); + } + if (config == 3) { + aBoolean848 = true; + setWaveVolume(-1200); + } + if (config == 4) { + aBoolean848 = false; + } + } + if (action == 5) { + anInt1253 = config; + } + if (action == 6) { + anInt1249 = config; + } + if (action == 8) { + splitpublicChat = config; + inputTaken = true; + } + if (action == 9) { + anInt913 = config; + } + } + + public void updateEntities() { + try { + int anInt974 = 0; + for (int j = -1; j < playerCount + npcCount; j++) { + Object obj; + if (j == -1) { + obj = myPlayer; + } else if (j < playerCount) { + obj = playerArray[playerIndices[j]]; + } else { + obj = npcArray[npcIndices[j - playerCount]]; + } + if (obj == null || !((Entity) obj).isVisible()) { + continue; + } + if (obj instanceof NPC) { + EntityDef entityDef = ((NPC) obj).desc; + if (entityDef.childrenIDs != null) { + entityDef = entityDef.method161(); + } + if (entityDef == null) { + continue; + } + } + if (j < playerCount) { + int l = 30; + Player player = (Player) obj; + if (player.headIcon >= 0) { + npcScreenPos(((Entity) obj), ((Entity) obj).height + 15); + if (spriteDrawX > -1) { + if (player.skullIcon < 2) { + skullIcons[player.skullIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l); + l += 25; + } + if (player.headIcon < 7) { + headIcons[player.headIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l); + l += 18; + } + } + } + if (j >= 0 && anInt855 == 10 && anInt933 == playerIndices[j]) { + npcScreenPos(((Entity) obj), ((Entity) obj).height + 15); + if (spriteDrawX > -1) { + headIconsHint[1].drawSprite(spriteDrawX - 12, spriteDrawY - l); + } + } + } else { + EntityDef entityDef_1 = ((NPC) obj).desc; + if (entityDef_1.anInt75 >= 0 && entityDef_1.anInt75 < headIcons.length) { + npcScreenPos(((Entity) obj), ((Entity) obj).height + 15); + if (spriteDrawX > -1) { + headIcons[entityDef_1.anInt75].drawSprite(spriteDrawX - 12, spriteDrawY - 30); + } + } + if (anInt855 == 1 && anInt1222 == npcIndices[j - playerCount] && loopCycle % 20 < 10) { + npcScreenPos(((Entity) obj), ((Entity) obj).height + 15); + if (spriteDrawX > -1) { + headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28); + } + } + } + if (((Entity) obj).textSpoken != null && (j >= playerCount || publicChatMode == 0 || publicChatMode == 3 || publicChatMode == 1 && isFriendOrSelf(((Player) obj).name))) { + npcScreenPos(((Entity) obj), ((Entity) obj).height); + if (spriteDrawX > -1 && anInt974 < anInt975) { + anIntArray979[anInt974] = chatTextDrawingArea.method384(((Entity) obj).textSpoken) / 2; + anIntArray978[anInt974] = chatTextDrawingArea.anInt1497; + anIntArray976[anInt974] = spriteDrawX; + anIntArray977[anInt974] = spriteDrawY; + anIntArray980[anInt974] = ((Entity) obj).anInt1513; + anIntArray981[anInt974] = ((Entity) obj).anInt1531; + anIntArray982[anInt974] = ((Entity) obj).textCycle; + aStringArray983[anInt974++] = ((Entity) obj).textSpoken; + if (anInt1249 == 0 && ((Entity) obj).anInt1531 >= 1 && ((Entity) obj).anInt1531 <= 3) { + anIntArray978[anInt974] += 10; + anIntArray977[anInt974] += 5; + } + if (anInt1249 == 0 && ((Entity) obj).anInt1531 == 4) { + anIntArray979[anInt974] = 60; + } + if (anInt1249 == 0 && ((Entity) obj).anInt1531 == 5) { + anIntArray978[anInt974] += 5; + } + } + } + if (((Entity) obj).loopCycleStatus > loopCycle) { + try { + npcScreenPos(((Entity) obj), ((Entity) obj).height + 15); + if (spriteDrawX > -1) { + int i1 = ((Entity) obj).currentHealth * 30 / ((Entity) obj).maxHealth; + if (i1 > 30) { + i1 = 30; + } + DrawingArea.method336(5, spriteDrawY - 3, 65280, i1, spriteDrawX - 15); + DrawingArea.method336(5, spriteDrawY - 3, 0xff0000, 30 - i1, spriteDrawX - 15 + i1); + } + } catch (Exception e) { + } + } + for (int j1 = 0; j1 < 4; j1++) { + if (((Entity) obj).hitsLoopCycle[j1] > loopCycle) { + npcScreenPos(((Entity) obj), ((Entity) obj).height / 2); + if (spriteDrawX > -1) { + if (j1 == 1) { + spriteDrawY -= 20; + } + if (j1 == 2) { + spriteDrawX -= 15; + spriteDrawY -= 10; + } + if (j1 == 3) { + spriteDrawX += 15; + spriteDrawY -= 10; + } + hitMarks[((Entity) obj).hitMarkTypes[j1]].drawSprite(spriteDrawX - 12, spriteDrawY - 12); + aTextDrawingArea_1270.drawText(0, String.valueOf(((Entity) obj).hitArray[j1]), spriteDrawY + 4, spriteDrawX); + aTextDrawingArea_1270.drawText(0xffffff, String.valueOf(((Entity) obj).hitArray[j1]), spriteDrawY + 3, spriteDrawX - 1); + } + } + } + } + for (int k = 0; k < anInt974; k++) { + int k1 = anIntArray976[k]; + int l1 = anIntArray977[k]; + int j2 = anIntArray979[k]; + int k2 = anIntArray978[k]; + boolean flag = true; + while (flag) { + flag = false; + for (int l2 = 0; l2 < k; l2++) { + if (l1 + 2 > anIntArray977[l2] - anIntArray978[l2] && l1 - k2 < anIntArray977[l2] + 2 && k1 - j2 < anIntArray976[l2] + anIntArray979[l2] && k1 + j2 > anIntArray976[l2] - anIntArray979[l2] && anIntArray977[l2] - anIntArray978[l2] < l1) { + l1 = anIntArray977[l2] - anIntArray978[l2]; + flag = true; + } + } + + } + spriteDrawX = anIntArray976[k]; + spriteDrawY = anIntArray977[k] = l1; + String s = aStringArray983[k]; + if (anInt1249 == 0) { + int i3 = 0xffff00; + if (anIntArray980[k] < 6) { + i3 = anIntArray965[anIntArray980[k]]; + } + if (anIntArray980[k] == 6) { + i3 = anInt1265 % 20 >= 10 ? 0xffff00 : 0xff0000; + } + if (anIntArray980[k] == 7) { + i3 = anInt1265 % 20 >= 10 ? 65535 : 255; + } + if (anIntArray980[k] == 8) { + i3 = anInt1265 % 20 >= 10 ? 0x80ff80 : 45056; + } + if (anIntArray980[k] == 9) { + int j3 = 150 - anIntArray982[k]; + if (j3 < 50) { + i3 = 0xff0000 + 1280 * j3; + } else if (j3 < 100) { + i3 = 0xffff00 - 0x50000 * (j3 - 50); + } else if (j3 < 150) { + i3 = 65280 + 5 * (j3 - 100); + } + } + if (anIntArray980[k] == 10) { + int k3 = 150 - anIntArray982[k]; + if (k3 < 50) { + i3 = 0xff0000 + 5 * k3; + } else if (k3 < 100) { + i3 = 0xff00ff - 0x50000 * (k3 - 50); + } else if (k3 < 150) { + i3 = 255 + 0x50000 * (k3 - 100) - 5 * (k3 - 100); + } + } + if (anIntArray980[k] == 11) { + int l3 = 150 - anIntArray982[k]; + if (l3 < 50) { + i3 = 0xffffff - 0x50005 * l3; + } else if (l3 < 100) { + i3 = 65280 + 0x50005 * (l3 - 50); + } else if (l3 < 150) { + i3 = 0xffffff - 0x50000 * (l3 - 100); + } + } + if (anIntArray981[k] == 0) { + chatTextDrawingArea.drawText(0, s, spriteDrawY + 1, spriteDrawX); + chatTextDrawingArea.drawText(i3, s, spriteDrawY, spriteDrawX); + } + if (anIntArray981[k] == 1) { + chatTextDrawingArea.method386(0, s, spriteDrawX, anInt1265, spriteDrawY + 1); + chatTextDrawingArea.method386(i3, s, spriteDrawX, anInt1265, spriteDrawY); + } + if (anIntArray981[k] == 2) { + chatTextDrawingArea.method387(spriteDrawX, s, anInt1265, spriteDrawY + 1, 0); + chatTextDrawingArea.method387(spriteDrawX, s, anInt1265, spriteDrawY, i3); + } + if (anIntArray981[k] == 3) { + chatTextDrawingArea.method388(150 - anIntArray982[k], s, anInt1265, spriteDrawY + 1, spriteDrawX, 0); + chatTextDrawingArea.method388(150 - anIntArray982[k], s, anInt1265, spriteDrawY, spriteDrawX, i3); + } + if (anIntArray981[k] == 4) { + int i4 = chatTextDrawingArea.method384(s); + int k4 = (150 - anIntArray982[k]) * (i4 + 100) / 150; + DrawingArea.setDrawingArea(334, spriteDrawX - 50, spriteDrawX + 50, 0); + chatTextDrawingArea.method385(0, s, spriteDrawY + 1, spriteDrawX + 50 - k4); + chatTextDrawingArea.method385(i3, s, spriteDrawY, spriteDrawX + 50 - k4); + DrawingArea.defaultDrawingAreaSize(); + } + if (anIntArray981[k] == 5) { + int j4 = 150 - anIntArray982[k]; + int l4 = 0; + if (j4 < 25) { + l4 = j4 - 25; + } else if (j4 > 125) { + l4 = j4 - 125; + } + DrawingArea.setDrawingArea(spriteDrawY + 5, 0, 512, spriteDrawY - chatTextDrawingArea.anInt1497 - 1); + chatTextDrawingArea.drawText(0, s, spriteDrawY + 1 + l4, spriteDrawX); + chatTextDrawingArea.drawText(i3, s, spriteDrawY + l4, spriteDrawX); + DrawingArea.defaultDrawingAreaSize(); + } + } else { + chatTextDrawingArea.drawText(0, s, spriteDrawY + 1, spriteDrawX); + chatTextDrawingArea.drawText(0xffff00, s, spriteDrawY, spriteDrawX); + } + } + } catch (Exception e) { + } + } + + public void delFriend(long l) { + try { + if (l == 0L) { + return; + } + for (int i = 0; i < friendsCount; i++) { + if (friendsListAsLongs[i] != l) { + continue; + } + friendsCount--; + needDrawTabArea = true; + for (int j = i; j < friendsCount; j++) { + friendsList[j] = friendsList[j + 1]; + friendsNodeIDs[j] = friendsNodeIDs[j + 1]; + friendsListAsLongs[j] = friendsListAsLongs[j + 1]; + } + + stream.createFrame(215); + stream.writeQWord(l); + break; + } + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("18622, " + false + ", " + l + ", " + runtimeexception.toString()); + throw new RuntimeException(); + } + } + + public void drawTabArea() { + aRSImageProducer_1163.initDrawingArea(); + Texture.lineOffsets = tabAreaOffsets; + invBack.method361(0, 0); + if (invOverlayInterfaceID != -1) { + drawInterface(0, 0, RSInterface.interfaceCache[invOverlayInterfaceID], 0); + } else if (tabInterfaceIDs[tabID] != -1) { + drawInterface(0, 0, RSInterface.interfaceCache[tabInterfaceIDs[tabID]], 0); + } + if (menuOpen && menuScreenArea == 1) { + drawMenu(); + } + aRSImageProducer_1163.drawGraphics(205, super.graphics, 553); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + + public void method37(int j) { + if (!lowMem) { + if (Texture.anIntArray1480[17] >= j) { + Background background = Texture.aBackgroundArray1474s[17]; + int k = background.anInt1452 * background.anInt1453 - 1; + int j1 = background.anInt1452 * anInt945 * 2; + byte abyte0[] = background.aByteArray1450; + byte abyte3[] = aByteArray912; + for (int i2 = 0; i2 <= k; i2++) { + abyte3[i2] = abyte0[i2 - j1 & k]; + } + + background.aByteArray1450 = abyte3; + aByteArray912 = abyte0; + Texture.method370(17); + } + if (Texture.anIntArray1480[24] >= j) { + Background background_1 = Texture.aBackgroundArray1474s[24]; + int l = background_1.anInt1452 * background_1.anInt1453 - 1; + int k1 = background_1.anInt1452 * anInt945 * 2; + byte abyte1[] = background_1.aByteArray1450; + byte abyte4[] = aByteArray912; + for (int j2 = 0; j2 <= l; j2++) { + abyte4[j2] = abyte1[j2 - k1 & l]; + } + + background_1.aByteArray1450 = abyte4; + aByteArray912 = abyte1; + Texture.method370(24); + } + if (Texture.anIntArray1480[34] >= j) { + Background background_2 = Texture.aBackgroundArray1474s[34]; + int i1 = background_2.anInt1452 * background_2.anInt1453 - 1; + int l1 = background_2.anInt1452 * anInt945 * 2; + byte abyte2[] = background_2.aByteArray1450; + byte abyte5[] = aByteArray912; + for (int k2 = 0; k2 <= i1; k2++) { + abyte5[k2] = abyte2[k2 - l1 & i1]; + } + + background_2.aByteArray1450 = abyte5; + aByteArray912 = abyte2; + Texture.method370(34); + } + if (Texture.anIntArray1480[40] >= j) { + Background background_2 = Texture.aBackgroundArray1474s[40]; + int i1 = background_2.anInt1452 * background_2.anInt1453 - 1; + int l1 = background_2.anInt1452 * anInt945 * 2; + byte abyte2[] = background_2.aByteArray1450; + byte abyte5[] = aByteArray912; + for (int k2 = 0; k2 <= i1; k2++) { + abyte5[k2] = abyte2[k2 - l1 & i1]; + } + + background_2.aByteArray1450 = abyte5; + aByteArray912 = abyte2; + Texture.method370(40); + } + } + } + + public void method38() { + for (int i = -1; i < playerCount; i++) { + int j; + if (i == -1) { + j = myPlayerIndex; + } else { + j = playerIndices[i]; + } + Player player = playerArray[j]; + if (player != null && player.textCycle > 0) { + player.textCycle--; + if (player.textCycle == 0) { + player.textSpoken = null; + } + } + } + + for (int k = 0; k < npcCount; k++) { + int l = npcIndices[k]; + NPC npc = npcArray[l]; + if (npc != null && npc.textCycle > 0) { + npc.textCycle--; + if (npc.textCycle == 0) { + npc.textSpoken = null; + } + } + } + + } + + public void calcCameraPos() { + int i = anInt1098 * 128 + 64; + int j = anInt1099 * 128 + 64; + int k = method42(plane, j, i) - anInt1100; + if (xCameraPos < i) { + xCameraPos += anInt1101 + (i - xCameraPos) * anInt1102 / 1000; + if (xCameraPos > i) { + xCameraPos = i; + } + } + if (xCameraPos > i) { + xCameraPos -= anInt1101 + (xCameraPos - i) * anInt1102 / 1000; + if (xCameraPos < i) { + xCameraPos = i; + } + } + if (zCameraPos < k) { + zCameraPos += anInt1101 + (k - zCameraPos) * anInt1102 / 1000; + if (zCameraPos > k) { + zCameraPos = k; + } + } + if (zCameraPos > k) { + zCameraPos -= anInt1101 + (zCameraPos - k) * anInt1102 / 1000; + if (zCameraPos < k) { + zCameraPos = k; + } + } + if (yCameraPos < j) { + yCameraPos += anInt1101 + (j - yCameraPos) * anInt1102 / 1000; + if (yCameraPos > j) { + yCameraPos = j; + } + } + if (yCameraPos > j) { + yCameraPos -= anInt1101 + (yCameraPos - j) * anInt1102 / 1000; + if (yCameraPos < j) { + yCameraPos = j; + } + } + i = anInt995 * 128 + 64; + j = anInt996 * 128 + 64; + k = method42(plane, j, i) - anInt997; + int l = i - xCameraPos; + int i1 = k - zCameraPos; + int j1 = j - yCameraPos; + int k1 = (int) Math.sqrt(l * l + j1 * j1); + int l1 = (int) (Math.atan2(i1, k1) * 325.94900000000001D) & 0x7ff; + int i2 = (int) (Math.atan2(l, j1) * -325.94900000000001D) & 0x7ff; + if (l1 < 128) { + l1 = 128; + } + if (l1 > 383) { + l1 = 383; + } + if (yCameraCurve < l1) { + yCameraCurve += anInt998 + (l1 - yCameraCurve) * anInt999 / 1000; + if (yCameraCurve > l1) { + yCameraCurve = l1; + } + } + if (yCameraCurve > l1) { + yCameraCurve -= anInt998 + (yCameraCurve - l1) * anInt999 / 1000; + if (yCameraCurve < l1) { + yCameraCurve = l1; + } + } + int j2 = i2 - xCameraCurve; + if (j2 > 1024) { + j2 -= 2048; + } + if (j2 < -1024) { + j2 += 2048; + } + if (j2 > 0) { + xCameraCurve += anInt998 + j2 * anInt999 / 1000; + xCameraCurve &= 0x7ff; + } + if (j2 < 0) { + xCameraCurve -= anInt998 + -j2 * anInt999 / 1000; + xCameraCurve &= 0x7ff; + } + int k2 = i2 - xCameraCurve; + if (k2 > 1024) { + k2 -= 2048; + } + if (k2 < -1024) { + k2 += 2048; + } + if (k2 < 0 && j2 > 0 || k2 > 0 && j2 < 0) { + xCameraCurve = i2; + } + } + + public void drawMenu() { + int i = menuOffsetX; + int j = menuOffsetY; + int k = menuWidth; + int l = anInt952; + int i1 = 0x5d5447; + DrawingArea.method336(l, j, i1, k, i); + DrawingArea.method336(16, j + 1, 0, k - 2, i + 1); + DrawingArea.fillPixels(j + 18, l - 19, 0, i + 1, k - 2); + chatTextDrawingArea.method385(i1, "Choose Option", j + 14, i + 3); + int j1 = super.mouseX; + int k1 = super.mouseY; + if (menuScreenArea == 0) { + j1 -= 4; + k1 -= 4; + } + if (menuScreenArea == 1) { + j1 -= 553; + k1 -= 205; + } + if (menuScreenArea == 2) { + j1 -= 17; + k1 -= 357; + } + for (int l1 = 0; l1 < menuActionRow; l1++) { + int i2 = j + 31 + (menuActionRow - 1 - l1) * 15; + int j2 = 0xffffff; + if (j1 > i && j1 < i + k && k1 > i2 - 13 && k1 < i2 + 3) { + j2 = 0xffff00; + } + chatTextDrawingArea.method389(true, i + 3, j2, menuActionName[l1], i2); + } + + } + + public void addFriend(long l) { + try { + if (l == 0L) { + return; + } + if (friendsCount >= 100 && anInt1046 != 1) { + pushMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, ""); + return; + } + if (friendsCount >= 200) { + pushMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, ""); + return; + } + String s = TextClass.fixName(TextClass.nameForLong(l)); + for (int i = 0; i < friendsCount; i++) { + if (friendsListAsLongs[i] == l) { + pushMessage(s + " is already on your friend list", 0, ""); + return; + } + } + for (int j = 0; j < ignoreCount; j++) { + if (ignoreListAsLongs[j] == l) { + pushMessage("Please remove " + s + " from your ignore list first", 0, ""); + return; + } + } + + if (s.equals(myPlayer.name)) { + return; + } else { + friendsList[friendsCount] = s; + friendsListAsLongs[friendsCount] = l; + friendsNodeIDs[friendsCount] = 0; + friendsCount++; + needDrawTabArea = true; + stream.createFrame(188); + stream.writeQWord(l); + return; + } + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("15283, " + (byte) 68 + ", " + l + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + public int method42(int i, int j, int k) { + int l = k >> 7; + int i1 = j >> 7; + if (l < 0 || i1 < 0 || l > 103 || i1 > 103) { + return 0; + } + int j1 = i; + if (j1 < 3 && (byteGroundArray[1][l][i1] & 2) == 2) { + j1++; + } + int k1 = k & 0x7f; + int l1 = j & 0x7f; + int i2 = intGroundArray[j1][l][i1] * (128 - k1) + intGroundArray[j1][l + 1][i1] * k1 >> 7; + int j2 = intGroundArray[j1][l][i1 + 1] * (128 - k1) + intGroundArray[j1][l + 1][i1 + 1] * k1 >> 7; + return i2 * (128 - l1) + j2 * l1 >> 7; + } + + public static String intToKOrMil(int j) { + if (j < 0x186a0) { + return String.valueOf(j); + } + if (j < 0x989680) { + return j / 1000 + "K"; + } else { + return j / 0xf4240 + "M"; + } + } + + public void resetLogout() { + try { + if (socketStream != null) { + socketStream.close(); + } + } catch (Exception _ex) { + } + socketStream = null; + loggedIn = false; + loginScreenState = 0; + // myUsername = ""; + // myPassword = ""; + unlinkMRUNodes(); + worldController.initToNull(); + for (int i = 0; i < 4; i++) { + aClass11Array1230[i].method210(); + } + + System.gc(); + stopMidi(); + currentSong = -1; + nextSong = -1; + previousSong = 0; + method58(10, musicVolume, false, 0); + } + + public void method45() { + aBoolean1031 = true; + for (int j = 0; j < 7; j++) { + anIntArray1065[j] = -1; + for (int k = 0; k < IDK.length; k++) { + if (IDK.cache[k].aBoolean662 || IDK.cache[k].anInt657 != j + (aBoolean1047 ? 0 : 7)) { + continue; + } + anIntArray1065[j] = k; + break; + } + + } + + } + + public void method46(int i, Stream stream) { + while (stream.bitPosition + 21 < i * 8) { + int k = stream.readBits(14); + if (k == 16383) { + break; + } + if (npcArray[k] == null) { + npcArray[k] = new NPC(); + } + NPC npc = npcArray[k]; + npcIndices[npcCount++] = k; + npc.anInt1537 = loopCycle; + int l = stream.readBits(5); + if (l > 15) { + l -= 32; + } + int i1 = stream.readBits(5); + if (i1 > 15) { + i1 -= 32; + } + int j1 = stream.readBits(1); + npc.desc = EntityDef.forID(stream.readBits(ClientSettings.NPC_BITS)); + int k1 = stream.readBits(1); + if (k1 == 1) { + anIntArray894[anInt893++] = k; + } + npc.anInt1540 = npc.desc.aByte68; + npc.anInt1504 = npc.desc.anInt79; + npc.anInt1554 = npc.desc.anInt67; + npc.anInt1555 = npc.desc.anInt58; + npc.anInt1556 = npc.desc.anInt83; + npc.anInt1557 = npc.desc.anInt55; + npc.anInt1511 = npc.desc.anInt77; + npc.setPos(myPlayer.smallX[0] + i1, myPlayer.smallY[0] + l, j1 == 1); + } + stream.finishBitAccess(); + } + + public void processGameLoop() { + if (rsAlreadyLoaded || loadingError || genericLoadingError) { + return; + } + loopCycle++; + if (!loggedIn) { + processLoginScreenInput(); + } else { + mainGameProcessor(); + } + processOnDemandQueue(); + method49(); + } + + public void method47(boolean flag) { + if (myPlayer.x >> 7 == destX && myPlayer.y >> 7 == destY) { + destX = 0; + } + int j = playerCount; + if (flag) { + j = 1; + } + for (int l = 0; l < j; l++) { + Player player; + int i1; + if (flag) { + player = myPlayer; + i1 = myPlayerIndex << 14; + } else { + player = playerArray[playerIndices[l]]; + i1 = playerIndices[l] << 14; + } + if (player == null || !player.isVisible()) { + continue; + } + player.aBoolean1699 = (lowMem && playerCount > 50 || playerCount > 200) && !flag && player.anInt1517 == player.anInt1511; + int j1 = player.x >> 7; + int k1 = player.y >> 7; + if (j1 < 0 || j1 >= 104 || k1 < 0 || k1 >= 104) { + continue; + } + if (player.aModel_1714 != null && loopCycle >= player.anInt1707 && loopCycle < player.anInt1708) { + player.aBoolean1699 = false; + player.anInt1709 = method42(plane, player.y, player.x); + worldController.method286(plane, player.y, player, player.anInt1552, player.anInt1722, player.x, player.anInt1709, player.anInt1719, player.anInt1721, i1, player.anInt1720); + continue; + } + if ((player.x & 0x7f) == 64 && (player.y & 0x7f) == 64) { + if (anIntArrayArray929[j1][k1] == anInt1265) { + continue; + } + anIntArrayArray929[j1][k1] = anInt1265; + } + player.anInt1709 = method42(plane, player.y, player.x); + worldController.method285(plane, player.anInt1552, player.anInt1709, i1, player.y, 60, player.x, player, player.aBoolean1541); + } + + } + + public boolean promptUserForInput(RSInterface class9) { + int j = class9.anInt214; + if (anInt900 == 2) { + if (j == 201) { + inputTaken = true; + inputDialogState = 0; + messagePromptRaised = true; + promptInput = ""; + friendsListAction = 1; + aString1121 = "Enter name of friend to add to list"; + } + if (j == 202) { + inputTaken = true; + inputDialogState = 0; + messagePromptRaised = true; + promptInput = ""; + friendsListAction = 2; + aString1121 = "Enter name of friend to delete from list"; + } + } + if (j == 205) { + anInt1011 = 250; + return true; + } + if (j == 501) { + inputTaken = true; + inputDialogState = 0; + messagePromptRaised = true; + promptInput = ""; + friendsListAction = 4; + aString1121 = "Enter name of player to add to list"; + } + if (j == 502) { + inputTaken = true; + inputDialogState = 0; + messagePromptRaised = true; + promptInput = ""; + friendsListAction = 5; + aString1121 = "Enter name of player to delete from list"; + } + if (j >= 300 && j <= 313) { + int k = (j - 300) / 2; + int j1 = j & 1; + int i2 = anIntArray1065[k]; + if (i2 != -1) { + do { + if (j1 == 0 && --i2 < 0) { + i2 = IDK.length - 1; + } + if (j1 == 1 && ++i2 >= IDK.length) { + i2 = 0; + } + } while (IDK.cache[i2].aBoolean662 || IDK.cache[i2].anInt657 != k + (aBoolean1047 ? 0 : 7)); + anIntArray1065[k] = i2; + aBoolean1031 = true; + } + } + if (j >= 314 && j <= 323) { + int l = (j - 314) / 2; + int k1 = j & 1; + int j2 = anIntArray990[l]; + if (k1 == 0 && --j2 < 0) { + j2 = anIntArrayArray1003[l].length - 1; + } + if (k1 == 1 && ++j2 >= anIntArrayArray1003[l].length) { + j2 = 0; + } + anIntArray990[l] = j2; + aBoolean1031 = true; + } + if (j == 324 && !aBoolean1047) { + aBoolean1047 = true; + method45(); + } + if (j == 325 && aBoolean1047) { + aBoolean1047 = false; + method45(); + } + if (j == 326) { + stream.createFrame(101); + stream.writeWordBigEndian(aBoolean1047 ? 0 : 1); + for (int i1 = 0; i1 < 7; i1++) { + stream.writeWordBigEndian(anIntArray1065[i1]); + } + + for (int l1 = 0; l1 < 5; l1++) { + stream.writeWordBigEndian(anIntArray990[l1]); + } + + return true; + } + if (j == 613) { + canMute = !canMute; + } + if (j >= 601 && j <= 612) { + closeOpenInterfaces(); + if (reportAbuseInput.length() > 0) { + stream.createFrame(218); + stream.writeQWord(TextClass.longForName(reportAbuseInput)); + stream.writeWordBigEndian(j - 601); + stream.writeWordBigEndian(canMute ? 1 : 0); + } + } + return false; + } + + public void method49(Stream stream) { + for (int j = 0; j < anInt893; j++) { + int k = anIntArray894[j]; + Player player = playerArray[k]; + int l = stream.readUnsignedByte(); + if ((l & 0x40) != 0) { + l += stream.readUnsignedByte() << 8; + } + method107(l, k, stream, player); + } + + } + + public void method50(int i, int k, int l, int i1, int j1) { + int k1 = worldController.method300(j1, l, i); + if (k1 != 0) { + int l1 = worldController.method304(j1, l, i, k1); + int k2 = l1 >> 6 & 3; + int i3 = l1 & 0x1f; + int k3 = k; + if (k1 > 0) { + k3 = i1; + } + int ai[] = aClass30_Sub2_Sub1_Sub1_1263.pixels; + int k4 = 24624 + l * 4 + (103 - i) * 512 * 4; + int i5 = k1 >> 14 & 0x7fff; + ObjectDef class46_2 = ObjectDef.forID(i5); + if (class46_2.anInt758 != -1) { + Background background_2 = mapScenes[class46_2.anInt758]; + if (background_2 != null) { + int i6 = (class46_2.anInt744 * 4 - background_2.anInt1452) / 2; + int j6 = (class46_2.anInt761 * 4 - background_2.anInt1453) / 2; + background_2.method361(48 + l * 4 + i6, 48 + (104 - i - class46_2.anInt761) * 4 + j6); + } + } else { + if (i3 == 0 || i3 == 2) { + if (k2 == 0) { + ai[k4] = k3; + ai[k4 + 512] = k3; + ai[k4 + 1024] = k3; + ai[k4 + 1536] = k3; + } else if (k2 == 1) { + ai[k4] = k3; + ai[k4 + 1] = k3; + ai[k4 + 2] = k3; + ai[k4 + 3] = k3; + } else if (k2 == 2) { + ai[k4 + 3] = k3; + ai[k4 + 3 + 512] = k3; + ai[k4 + 3 + 1024] = k3; + ai[k4 + 3 + 1536] = k3; + } else if (k2 == 3) { + ai[k4 + 1536] = k3; + ai[k4 + 1536 + 1] = k3; + ai[k4 + 1536 + 2] = k3; + ai[k4 + 1536 + 3] = k3; + } + } + if (i3 == 3) { + if (k2 == 0) { + ai[k4] = k3; + } else if (k2 == 1) { + ai[k4 + 3] = k3; + } else if (k2 == 2) { + ai[k4 + 3 + 1536] = k3; + } else if (k2 == 3) { + ai[k4 + 1536] = k3; + } + } + if (i3 == 2) { + if (k2 == 3) { + ai[k4] = k3; + ai[k4 + 512] = k3; + ai[k4 + 1024] = k3; + ai[k4 + 1536] = k3; + } else if (k2 == 0) { + ai[k4] = k3; + ai[k4 + 1] = k3; + ai[k4 + 2] = k3; + ai[k4 + 3] = k3; + } else if (k2 == 1) { + ai[k4 + 3] = k3; + ai[k4 + 3 + 512] = k3; + ai[k4 + 3 + 1024] = k3; + ai[k4 + 3 + 1536] = k3; + } else if (k2 == 2) { + ai[k4 + 1536] = k3; + ai[k4 + 1536 + 1] = k3; + ai[k4 + 1536 + 2] = k3; + ai[k4 + 1536 + 3] = k3; + } + } + } + } + k1 = worldController.method302(j1, l, i); + if (k1 != 0) { + int i2 = worldController.method304(j1, l, i, k1); + int l2 = i2 >> 6 & 3; + int j3 = i2 & 0x1f; + int l3 = k1 >> 14 & 0x7fff; + ObjectDef class46_1 = ObjectDef.forID(l3); + if (class46_1.anInt758 != -1) { + Background background_1 = mapScenes[class46_1.anInt758]; + if (background_1 != null) { + int j5 = (class46_1.anInt744 * 4 - background_1.anInt1452) / 2; + int k5 = (class46_1.anInt761 * 4 - background_1.anInt1453) / 2; + background_1.method361(48 + l * 4 + j5, 48 + (104 - i - class46_1.anInt761) * 4 + k5); + } + } else if (j3 == 9) { + int l4 = 0xeeeeee; + if (k1 > 0) { + l4 = 0xee0000; + } + int ai1[] = aClass30_Sub2_Sub1_Sub1_1263.pixels; + int l5 = 24624 + l * 4 + (103 - i) * 512 * 4; + if (l2 == 0 || l2 == 2) { + ai1[l5 + 1536] = l4; + ai1[l5 + 1024 + 1] = l4; + ai1[l5 + 512 + 2] = l4; + ai1[l5 + 3] = l4; + } else { + ai1[l5] = l4; + ai1[l5 + 512 + 1] = l4; + ai1[l5 + 1024 + 2] = l4; + ai1[l5 + 1536 + 3] = l4; + } + } + } + k1 = worldController.method303(j1, l, i); + if (k1 != 0) { + int j2 = k1 >> 14 & 0x7fff; + ObjectDef class46 = ObjectDef.forID(j2); + if (class46.anInt758 != -1) { + Background background = mapScenes[class46.anInt758]; + if (background != null) { + int i4 = (class46.anInt744 * 4 - background.anInt1452) / 2; + int j4 = (class46.anInt761 * 4 - background.anInt1453) / 2; + background.method361(48 + l * 4 + i4, 48 + (104 - i - class46.anInt761) * 4 + j4); + } + } + } + } + + public void loadTitleScreen() { + aBackground_966 = new Background(titleStreamLoader, "titlebox", 0); + aBackground_967 = new Background(titleStreamLoader, "titlebutton", 0); + aBackgroundArray1152s = new Background[12]; + int j = 0; + try { + j = Integer.parseInt(getParameter("fl_icon")); + } catch (Exception _ex) { + } + if (j == 0) { + for (int k = 0; k < 12; k++) { + aBackgroundArray1152s[k] = new Background(titleStreamLoader, "runes", k); + } + + } else { + for (int l = 0; l < 12; l++) { + aBackgroundArray1152s[l] = new Background(titleStreamLoader, "runes", 12 + (l & 3)); + } + + } + aClass30_Sub2_Sub1_Sub1_1201 = new Sprite(128, 265); + aClass30_Sub2_Sub1_Sub1_1202 = new Sprite(128, 265); + System.arraycopy(aRSImageProducer_1110.anIntArray315, 0, aClass30_Sub2_Sub1_Sub1_1201.pixels, 0, 33920); + + System.arraycopy(aRSImageProducer_1111.anIntArray315, 0, aClass30_Sub2_Sub1_Sub1_1202.pixels, 0, 33920); + + anIntArray851 = new int[256]; + for (int k1 = 0; k1 < 64; k1++) { + anIntArray851[k1] = k1 * 0x40000; + } + + for (int l1 = 0; l1 < 64; l1++) { + anIntArray851[l1 + 64] = 0xff0000 + 1024 * l1; + } + + for (int i2 = 0; i2 < 64; i2++) { + anIntArray851[i2 + 128] = 0xffff00 + 4 * i2; + } + + for (int j2 = 0; j2 < 64; j2++) { + anIntArray851[j2 + 192] = 0xffffff; + } + + anIntArray852 = new int[256]; + for (int k2 = 0; k2 < 64; k2++) { + anIntArray852[k2] = k2 * 1024; + } + + for (int l2 = 0; l2 < 64; l2++) { + anIntArray852[l2 + 64] = 65280 + 4 * l2; + } + + for (int i3 = 0; i3 < 64; i3++) { + anIntArray852[i3 + 128] = 65535 + 0x40000 * i3; + } + + for (int j3 = 0; j3 < 64; j3++) { + anIntArray852[j3 + 192] = 0xffffff; + } + + anIntArray853 = new int[256]; + for (int k3 = 0; k3 < 64; k3++) { + anIntArray853[k3] = k3 * 4; + } + + for (int l3 = 0; l3 < 64; l3++) { + anIntArray853[l3 + 64] = 255 + 0x40000 * l3; + } + + for (int i4 = 0; i4 < 64; i4++) { + anIntArray853[i4 + 128] = 0xff00ff + 1024 * i4; + } + + for (int j4 = 0; j4 < 64; j4++) { + anIntArray853[j4 + 192] = 0xffffff; + } + + anIntArray850 = new int[256]; + anIntArray1190 = new int[32768]; + anIntArray1191 = new int[32768]; + randomizeBackground(null); + anIntArray828 = new int[32768]; + anIntArray829 = new int[32768]; + drawLoadingText(10, "Connecting to fileserver"); + if (!aBoolean831) { + drawFlames = true; + aBoolean831 = true; + startRunnable(this, 2); + } + } + + public static void setHighMem() { + WorldController.lowMem = false; + Texture.lowMem = false; + lowMem = false; + ObjectManager.lowMem = false; + ObjectDef.lowMem = false; + } + + public void loadingStages() { + if (lowMem && loadingStage == 2 && ObjectManager.anInt131 != plane) { + drawTextOnScreen(null, "Loading - please wait."); + loadingStage = 1; + aLong824 = System.currentTimeMillis(); + } + if (loadingStage == 1) { + int j = method54(); + if (j != 0 && System.currentTimeMillis() - aLong824 > 0x57e40L) { + Signlink.reporterror(myUsername + " glcfb " + aLong1215 + "," + j + "," + lowMem + "," + decompressors[0] + "," + onDemandFetcher.getNodeCount() + "," + plane + "," + anInt1069 + "," + anInt1070); + aLong824 = System.currentTimeMillis(); + } + } + if (loadingStage == 2 && plane != anInt985) { + anInt985 = plane; + method24(plane); + } + } + + public int method54() { + for (int i = 0; i < aByteArrayArray1183.length; i++) { + if (aByteArrayArray1183[i] == null && anIntArray1235[i] != -1) { + return -1; + } + if (aByteArrayArray1247[i] == null && anIntArray1236[i] != -1) { + return -2; + } + } + + boolean flag = true; + for (int j = 0; j < aByteArrayArray1183.length; j++) { + byte abyte0[] = aByteArrayArray1247[j]; + if (abyte0 != null) { + int k = (anIntArray1234[j] >> 8) * 64 - baseX; + int l = (anIntArray1234[j] & 0xff) * 64 - baseY; + if (aBoolean1159) { + k = 10; + l = 10; + } + flag &= ObjectManager.method189(k, abyte0, l); + } + } + + if (!flag) { + return -3; + } + if (aBoolean1080) { + return -4; + } else { + loadingStage = 2; + ObjectManager.anInt131 = plane; + method22(); + stream.createFrame(121); + return 0; + } + } + + public void method55() { + for (Animable_Sub4 class30_sub2_sub4_sub4 = (Animable_Sub4) aClass19_1013.reverseGetFirst(); class30_sub2_sub4_sub4 != null; class30_sub2_sub4_sub4 = (Animable_Sub4) aClass19_1013.reverseGetNext()) { + if (class30_sub2_sub4_sub4.anInt1597 != plane || loopCycle > class30_sub2_sub4_sub4.anInt1572) { + class30_sub2_sub4_sub4.unlink(); + } else if (loopCycle >= class30_sub2_sub4_sub4.anInt1571) { + if (class30_sub2_sub4_sub4.anInt1590 > 0) { + NPC npc = npcArray[class30_sub2_sub4_sub4.anInt1590 - 1]; + if (npc != null && npc.x >= 0 && npc.x < 13312 && npc.y >= 0 && npc.y < 13312) { + class30_sub2_sub4_sub4.method455(loopCycle, npc.y, method42(class30_sub2_sub4_sub4.anInt1597, npc.y, npc.x) - class30_sub2_sub4_sub4.anInt1583, npc.x); + } + } + if (class30_sub2_sub4_sub4.anInt1590 < 0) { + int j = -class30_sub2_sub4_sub4.anInt1590 - 1; + Player player; + if (j == unknownInt10) { + player = myPlayer; + } else { + player = playerArray[j]; + } + if (player != null && player.x >= 0 && player.x < 13312 && player.y >= 0 && player.y < 13312) { + class30_sub2_sub4_sub4.method455(loopCycle, player.y, method42(class30_sub2_sub4_sub4.anInt1597, player.y, player.x) - class30_sub2_sub4_sub4.anInt1583, player.x); + } + } + class30_sub2_sub4_sub4.method456(anInt945); + worldController.method285(plane, class30_sub2_sub4_sub4.anInt1595, (int) class30_sub2_sub4_sub4.aDouble1587, -1, (int) class30_sub2_sub4_sub4.aDouble1586, 60, (int) class30_sub2_sub4_sub4.aDouble1585, class30_sub2_sub4_sub4, false); + } + } + + } + + public AppletContext getAppletContext() { + if (Signlink.mainapp != null) { + return Signlink.mainapp.getAppletContext(); + } else { + return super.getAppletContext(); + } + } + + public void drawLogo() { + byte abyte0[] = titleStreamLoader.getDataForName("title.dat"); + Sprite sprite = new Sprite(abyte0, this); + aRSImageProducer_1110.initDrawingArea(); + sprite.method346(0, 0); + aRSImageProducer_1111.initDrawingArea(); + sprite.method346(-637, 0); + aRSImageProducer_1107.initDrawingArea(); + sprite.method346(-128, 0); + aRSImageProducer_1108.initDrawingArea(); + sprite.method346(-202, -371); + aRSImageProducer_1109.initDrawingArea(); + sprite.method346(-202, -171); + aRSImageProducer_1112.initDrawingArea(); + sprite.method346(0, -265); + aRSImageProducer_1113.initDrawingArea(); + sprite.method346(-562, -265); + aRSImageProducer_1114.initDrawingArea(); + sprite.method346(-128, -171); + aRSImageProducer_1115.initDrawingArea(); + sprite.method346(-562, -171); + int ai[] = new int[sprite.width]; + for (int j = 0; j < sprite.height; j++) { + for (int k = 0; k < sprite.width; k++) { + ai[k] = sprite.pixels[sprite.width - k - 1 + sprite.width * j]; + } + + System.arraycopy(ai, 0, sprite.pixels, sprite.width * j, sprite.width); + + } + + aRSImageProducer_1110.initDrawingArea(); + sprite.method346(382, 0); + aRSImageProducer_1111.initDrawingArea(); + sprite.method346(-255, 0); + aRSImageProducer_1107.initDrawingArea(); + sprite.method346(254, 0); + aRSImageProducer_1108.initDrawingArea(); + sprite.method346(180, -371); + aRSImageProducer_1109.initDrawingArea(); + sprite.method346(180, -171); + aRSImageProducer_1112.initDrawingArea(); + sprite.method346(382, -265); + aRSImageProducer_1113.initDrawingArea(); + sprite.method346(-180, -265); + aRSImageProducer_1114.initDrawingArea(); + sprite.method346(254, -171); + aRSImageProducer_1115.initDrawingArea(); + sprite.method346(-180, -171); + sprite = new Sprite(titleStreamLoader, "logo", 0); + aRSImageProducer_1107.initDrawingArea(); + sprite.drawSprite(382 - sprite.width / 2 - 128, 18); + sprite = null; + System.gc(); + + } + + public void processOnDemandQueue() { + do { + OnDemandData onDemandData; + do { + onDemandData = onDemandFetcher.getNextNode(); + if (onDemandData == null) { + return; + } + if (onDemandData.dataType == 0) { + Model.method460(onDemandData.buffer, onDemandData.ID); + if ((onDemandFetcher.getModelIndex(onDemandData.ID) & 0x62) != 0) { + needDrawTabArea = true; + if (backDialogID != -1) { + inputTaken = true; + } + } + } + if (onDemandData.dataType == 1 && onDemandData.buffer != null) { + Class36.method529(onDemandData.buffer); + } + if (onDemandData.dataType == 2 && onDemandData.ID == nextSong && onDemandData.buffer != null) { + musicData = new byte[onDemandData.buffer.length]; + System.arraycopy(onDemandData.buffer, 0, musicData, 0, musicData.length); + fetchMusic = true; + } + if (onDemandData.dataType == 3 && loadingStage == 1) { + for (int i = 0; i < aByteArrayArray1183.length; i++) { + if (anIntArray1235[i] == onDemandData.ID) { + aByteArrayArray1183[i] = onDemandData.buffer; + if (onDemandData.buffer == null) { + anIntArray1235[i] = -1; + } + break; + } + if (anIntArray1236[i] != onDemandData.ID) { + continue; + } + aByteArrayArray1247[i] = onDemandData.buffer; + if (onDemandData.buffer == null) { + anIntArray1236[i] = -1; + } + break; + } + + } + } while (onDemandData.dataType != 93 || !onDemandFetcher.method564(onDemandData.ID)); + ObjectManager.method173(new Stream(onDemandData.buffer), onDemandFetcher); + } while (true); + } + + public void calcFlamesPosition() { + char c = '\u0100'; + for (int j = 10; j < 117; j++) { + int k = (int) (Math.random() * 100D); + if (k < 50) { + anIntArray828[j + (c - 2 << 7)] = 255; + } + } + for (int l = 0; l < 100; l++) { + int i1 = (int) (Math.random() * 124D) + 2; + int k1 = (int) (Math.random() * 128D) + 128; + int k2 = i1 + (k1 << 7); + anIntArray828[k2] = 192; + } + + for (int j1 = 1; j1 < c - 1; j1++) { + for (int l1 = 1; l1 < 127; l1++) { + int l2 = l1 + (j1 << 7); + anIntArray829[l2] = (anIntArray828[l2 - 1] + anIntArray828[l2 + 1] + anIntArray828[l2 - 128] + anIntArray828[l2 + 128]) / 4; + } + + } + + anInt1275 += 128; + if (anInt1275 > anIntArray1190.length) { + anInt1275 -= anIntArray1190.length; + int i2 = (int) (Math.random() * 12D); + randomizeBackground(aBackgroundArray1152s[i2]); + } + for (int j2 = 1; j2 < c - 1; j2++) { + for (int i3 = 1; i3 < 127; i3++) { + int k3 = i3 + (j2 << 7); + int i4 = anIntArray829[k3 + 128] - anIntArray1190[k3 + anInt1275 & anIntArray1190.length - 1] / 5; + if (i4 < 0) { + i4 = 0; + } + anIntArray828[k3] = i4; + } + + } + + System.arraycopy(anIntArray969, 1, anIntArray969, 0, c - 1); + + anIntArray969[c - 1] = (int) (Math.sin((double) loopCycle / 14D) * 16D + Math.sin((double) loopCycle / 15D) * 14D + Math.sin((double) loopCycle / 16D) * 12D); + if (anInt1040 > 0) { + anInt1040 -= 4; + } + if (anInt1041 > 0) { + anInt1041 -= 4; + } + if (anInt1040 == 0 && anInt1041 == 0) { + int l3 = (int) (Math.random() * 2000D); + if (l3 == 0) { + anInt1040 = 1024; + } + if (l3 == 1) { + anInt1041 = 1024; + } + } + } + + public boolean saveWave(byte abyte0[], int i) { + return abyte0 == null || Signlink.wavesave(abyte0, i); + } + + public void method60(int i) { + RSInterface class9 = RSInterface.interfaceCache[i]; + for (int element : class9.children) { + if (element == -1) { + break; + } + RSInterface class9_1 = RSInterface.interfaceCache[element]; + if (class9_1.type == 1) { + method60(class9_1.id); + } + class9_1.anInt246 = 0; + class9_1.anInt208 = 0; + } + } + + public void drawHeadIcon() { + if (anInt855 != 2) { + return; + } + calcEntityScreenPos((anInt934 - baseX << 7) + anInt937, anInt936 * 2, (anInt935 - baseY << 7) + anInt938); + if (spriteDrawX > -1 && loopCycle % 20 < 10) { + headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28); + } + } + + public void mainGameProcessor() { + if (anInt1104 > 1) { + anInt1104--; + } + if (anInt1011 > 0) { + anInt1011--; + } + for (int j = 0; j < 5; j++) { + if (!parsePacket()) { + break; + } + } + + if (!loggedIn) { + return; + } + synchronized (mouseDetection.syncObject) { + if (flagged) { + if (super.clickMode3 != 0 || mouseDetection.coordsIndex >= 40) { + stream.createFrame(45); + stream.writeWordBigEndian(0); + int j2 = stream.currentOffset; + int j3 = 0; + for (int j4 = 0; j4 < mouseDetection.coordsIndex; j4++) { + if (j2 - stream.currentOffset >= 240) { + break; + } + j3++; + int l4 = mouseDetection.coordsY[j4]; + if (l4 < 0) { + l4 = 0; + } else if (l4 > 502) { + l4 = 502; + } + int k5 = mouseDetection.coordsX[j4]; + if (k5 < 0) { + k5 = 0; + } else if (k5 > 764) { + k5 = 764; + } + int i6 = l4 * 765 + k5; + if (mouseDetection.coordsY[j4] == -1 && mouseDetection.coordsX[j4] == -1) { + k5 = -1; + l4 = -1; + i6 = 0x7ffff; + } + if (k5 == anInt1237 && l4 == anInt1238) { + if (anInt1022 < 2047) { + anInt1022++; + } + } else { + int j6 = k5 - anInt1237; + anInt1237 = k5; + int k6 = l4 - anInt1238; + anInt1238 = l4; + if (anInt1022 < 8 && j6 >= -32 && j6 <= 31 && k6 >= -32 && k6 <= 31) { + j6 += 32; + k6 += 32; + stream.writeWord((anInt1022 << 12) + (j6 << 6) + k6); + anInt1022 = 0; + } else if (anInt1022 < 8) { + stream.writeDWordBigEndian(0x800000 + (anInt1022 << 19) + i6); + anInt1022 = 0; + } else { + stream.writeDWord(0xc0000000 + (anInt1022 << 19) + i6); + anInt1022 = 0; + } + } + } + + stream.writeBytes(stream.currentOffset - j2); + if (j3 >= mouseDetection.coordsIndex) { + mouseDetection.coordsIndex = 0; + } else { + mouseDetection.coordsIndex -= j3; + for (int i5 = 0; i5 < mouseDetection.coordsIndex; i5++) { + mouseDetection.coordsX[i5] = mouseDetection.coordsX[i5 + j3]; + mouseDetection.coordsY[i5] = mouseDetection.coordsY[i5 + j3]; + } + + } + } + } else { + mouseDetection.coordsIndex = 0; + } + } + if (super.clickMode3 != 0) { + long l = (super.aLong29 - aLong1220) / 50L; + if (l > 4095L) { + l = 4095L; + } + aLong1220 = super.aLong29; + int k2 = super.saveClickY; + if (k2 < 0) { + k2 = 0; + } else if (k2 > 502) { + k2 = 502; + } + int k3 = super.saveClickX; + if (k3 < 0) { + k3 = 0; + } else if (k3 > 764) { + k3 = 764; + } + int k4 = k2 * 765 + k3; + int j5 = 0; + if (super.clickMode3 == 2) { + j5 = 1; + } + int l5 = (int) l; + stream.createFrame(241); + stream.writeDWord((l5 << 20) + (j5 << 19) + k4); + } + if (anInt1016 > 0) { + anInt1016--; + } + if (super.keyArray[1] == 1 || super.keyArray[2] == 1 || super.keyArray[3] == 1 || super.keyArray[4] == 1) { + aBoolean1017 = true; + } + if (aBoolean1017 && anInt1016 <= 0) { + anInt1016 = 20; + aBoolean1017 = false; + stream.createFrame(86); + stream.writeWord(anInt1184); + stream.method432(minimapInt1); + } + if (super.awtFocus && !aBoolean954) { + aBoolean954 = true; + stream.createFrame(3); + stream.writeWordBigEndian(1); + } + if (!super.awtFocus && aBoolean954) { + aBoolean954 = false; + stream.createFrame(3); + stream.writeWordBigEndian(0); + } + loadingStages(); + method115(); + method90(); + anInt1009++; + if (anInt1009 > 750) { + dropClient(); + } + method114(); + method95(); + method38(); + anInt945++; + if (crossType != 0) { + crossIndex += 20; + if (crossIndex >= 400) { + crossType = 0; + } + } + if (atInventoryInterfaceType != 0) { + atInventoryLoopCycle++; + if (atInventoryLoopCycle >= 15) { + if (atInventoryInterfaceType == 2) { + needDrawTabArea = true; + } + if (atInventoryInterfaceType == 3) { + inputTaken = true; + } + atInventoryInterfaceType = 0; + } + } + if (activeInterfaceType != 0) { + anInt989++; + if (super.mouseX > anInt1087 + 5 || super.mouseX < anInt1087 - 5 || super.mouseY > anInt1088 + 5 || super.mouseY < anInt1088 - 5) { + aBoolean1242 = true; + } + if (super.clickMode2 == 0) { + if (activeInterfaceType == 2) { + needDrawTabArea = true; + } + if (activeInterfaceType == 3) { + inputTaken = true; + } + activeInterfaceType = 0; + if (aBoolean1242 && anInt989 >= 5) { + lastActiveInvInterface = -1; + processRightClick(); + if (lastActiveInvInterface == anInt1084 && mouseInvInterfaceIndex != anInt1085) { + RSInterface class9 = RSInterface.interfaceCache[anInt1084]; + int j1 = 0; + if (anInt913 == 1 && class9.anInt214 == 206) { + j1 = 1; + } + if (class9.inv[mouseInvInterfaceIndex] <= 0) { + j1 = 0; + } + if (class9.aBoolean235) { + int l2 = anInt1085; + int l3 = mouseInvInterfaceIndex; + class9.inv[l3] = class9.inv[l2]; + class9.invStackSizes[l3] = class9.invStackSizes[l2]; + class9.inv[l2] = -1; + class9.invStackSizes[l2] = 0; + } else if (j1 == 1) { + int i3 = anInt1085; + for (int i4 = mouseInvInterfaceIndex; i3 != i4;) { + if (i3 > i4) { + class9.swapInventoryItems(i3, i3 - 1); + i3--; + } else if (i3 < i4) { + class9.swapInventoryItems(i3, i3 + 1); + i3++; + } + } + + } else { + class9.swapInventoryItems(anInt1085, mouseInvInterfaceIndex); + } + stream.createFrame(214); + stream.method433(anInt1084); + stream.method424(j1); + stream.method433(anInt1085); + stream.method431(mouseInvInterfaceIndex); + } + } else if ((anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2) { + determineMenuSize(); + } else if (menuActionRow > 0) { + doAction(menuActionRow - 1); + } + atInventoryLoopCycle = 10; + super.clickMode3 = 0; + } + } + if (WorldController.anInt470 != -1) { + int k = WorldController.anInt470; + int k1 = WorldController.anInt471; + boolean flag = doWalkTo(0, 0, 0, 0, myPlayer.smallY[0], 0, 0, k1, myPlayer.smallX[0], true, k); + WorldController.anInt470 = -1; + if (flag) { + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 1; + crossIndex = 0; + } + } + if (super.clickMode3 == 1 && aString844 != null) { + aString844 = null; + inputTaken = true; + super.clickMode3 = 0; + } + processMenuClick(); + if (fullScreenBackDialogID == -1) { + processMainScreenClick(); + processTabClick(); + processChatModeClick(); + } + if (super.clickMode2 == 1 || super.clickMode3 == 1) { + anInt1213++; + } + if (loadingStage == 2) { + method108(); + } + if (loadingStage == 2 && aBoolean1160) { + calcCameraPos(); + } + for (int i1 = 0; i1 < 5; i1++) { + anIntArray1030[i1]++; + } + + method73(); + super.idleTime++; + if (super.idleTime > 12000) { + anInt1011 = 250; + super.idleTime -= 500; + stream.createFrame(202); + } + anInt988++; + if (anInt988 > 500) { + anInt988 = 0; + int l1 = (int) (Math.random() * 8D); + if ((l1 & 1) == 1) { + anInt1278 += anInt1279; + } + if ((l1 & 2) == 2) { + anInt1131 += anInt1132; + } + if ((l1 & 4) == 4) { + anInt896 += anInt897; + } + } + if (anInt1278 < -50) { + anInt1279 = 2; + } + if (anInt1278 > 50) { + anInt1279 = -2; + } + if (anInt1131 < -55) { + anInt1132 = 2; + } + if (anInt1131 > 55) { + anInt1132 = -2; + } + if (anInt896 < -40) { + anInt897 = 1; + } + if (anInt896 > 40) { + anInt897 = -1; + } + anInt1254++; + if (anInt1254 > 500) { + anInt1254 = 0; + int i2 = (int) (Math.random() * 8D); + if ((i2 & 1) == 1) { + minimapInt2 += anInt1210; + } + if ((i2 & 2) == 2) { + minimapInt3 += anInt1171; + } + } + if (minimapInt2 < -60) { + anInt1210 = 2; + } + if (minimapInt2 > 60) { + anInt1210 = -2; + } + if (minimapInt3 < -20) { + anInt1171 = 1; + } + if (minimapInt3 > 10) { + anInt1171 = -1; + } + anInt1010++; + if (anInt1010 > 50) { + stream.createFrame(0); + } + try { + if (socketStream != null && stream.currentOffset > 0) { + socketStream.queueBytes(stream.currentOffset, stream.buffer); + stream.currentOffset = 0; + anInt1010 = 0; + } + } catch (IOException _ex) { + dropClient(); + } catch (Exception exception) { + resetLogout(); + } + } + + public void method63() { + Class30_Sub1 class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetFirst(); + for (; class30_sub1 != null; class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) { + if (class30_sub1.anInt1294 == -1) { + class30_sub1.anInt1302 = 0; + method89(class30_sub1); + } else { + class30_sub1.unlink(); + } + } + + } + + void drawLoadingText(int i, String s) { + anInt1079 = i; + aString1049 = s; + resetImageProducers(); + if (titleStreamLoader == null) { + super.drawLoadingText(i, s); + return; + } + aRSImageProducer_1109.initDrawingArea(); + char c = '\u0168'; + char c1 = '\310'; + byte byte1 = 20; + chatTextDrawingArea.drawText(0xffffff, "" + ClientSettings.SERVER_NAME + " is loading - please wait...", c1 / 2 - 26 - byte1, c / 2); + int j = c1 / 2 - 18 - byte1; + DrawingArea.fillPixels(j, 34, 0x8c1111, c / 2 - 152, 304); + DrawingArea.fillPixels(j + 1, 32, 0, c / 2 - 151, 302); + DrawingArea.method336(30, j + 2, 0x8c1111, i * 3, c / 2 - 150); + DrawingArea.method336(30, j + 2, 0, 300 - i * 3, c / 2 - 150 + i * 3); + chatTextDrawingArea.drawText(0xffffff, s, c1 / 2 + 5 - byte1, c / 2); + aRSImageProducer_1109.drawGraphics(171, super.graphics, 202); + if (welcomeScreenRaised) { + welcomeScreenRaised = false; + if (!aBoolean831) { + aRSImageProducer_1110.drawGraphics(0, super.graphics, 0); + aRSImageProducer_1111.drawGraphics(0, super.graphics, 637); + } + aRSImageProducer_1107.drawGraphics(0, super.graphics, 128); + aRSImageProducer_1108.drawGraphics(371, super.graphics, 202); + aRSImageProducer_1112.drawGraphics(265, super.graphics, 0); + aRSImageProducer_1113.drawGraphics(265, super.graphics, 562); + aRSImageProducer_1114.drawGraphics(171, super.graphics, 128); + aRSImageProducer_1115.drawGraphics(171, super.graphics, 562); + } + } + + public void method65(int i, int j, int k, int l, RSInterface class9, int i1, boolean flag, int j1) { + int anInt992; + if (aBoolean972) { + anInt992 = 32; + } else { + anInt992 = 0; + } + aBoolean972 = false; + if (k >= i && k < i + 16 && l >= i1 && l < i1 + 16) { + class9.scrollPosition -= anInt1213 * 4; + if (flag) { + needDrawTabArea = true; + } + } else if (k >= i && k < i + 16 && l >= i1 + j - 16 && l < i1 + j) { + class9.scrollPosition += anInt1213 * 4; + if (flag) { + needDrawTabArea = true; + } + } else if (k >= i - anInt992 && k < i + 16 + anInt992 && l >= i1 + 16 && l < i1 + j - 16 && anInt1213 > 0) { + int l1 = (j - 32) * j / j1; + if (l1 < 8) { + l1 = 8; + } + int i2 = l - i1 - 16 - l1 / 2; + int j2 = j - 32 - l1; + class9.scrollPosition = (j1 - j) * i2 / j2; + if (flag) { + needDrawTabArea = true; + } + aBoolean972 = true; + } + } + + public boolean method66(int i, int j, int k) { + int i1 = i >> 14 & 0x7fff; + int j1 = worldController.method304(plane, k, j, i); + if (j1 == -1) { + return false; + } + int k1 = j1 & 0x1f; + int l1 = j1 >> 6 & 3; + if (k1 == 10 || k1 == 11 || k1 == 22) { + ObjectDef class46 = ObjectDef.forID(i1); + int i2; + int j2; + if (l1 == 0 || l1 == 2) { + i2 = class46.anInt744; + j2 = class46.anInt761; + } else { + i2 = class46.anInt761; + j2 = class46.anInt744; + } + int k2 = class46.anInt768; + if (l1 != 0) { + k2 = (k2 << l1 & 0xf) + (k2 >> 4 - l1); + } + doWalkTo(2, 0, j2, 0, myPlayer.smallY[0], i2, k2, j, myPlayer.smallX[0], false, k); + } else { + doWalkTo(2, l1, 0, k1 + 1, myPlayer.smallY[0], 0, 0, j, myPlayer.smallX[0], false, k); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + return true; + } + + public StreamLoader streamLoaderForName(int i, String s, String s1, int j, int k) { + byte abyte0[] = null; + int l = 5; + try { + if (decompressors[0] != null) { + abyte0 = decompressors[0].decompress(i); + } + } catch (Exception _ex) { + } + if (abyte0 != null) { + // aCRC32_930.reset(); + // aCRC32_930.update(abyte0); + // int i1 = (int)aCRC32_930.getValue(); + // if(i1 != j) + } + if (abyte0 != null) { + StreamLoader streamLoader = new StreamLoader(abyte0); + return streamLoader; + } + int j1 = 0; + while (abyte0 == null) { + String s2 = "Unknown error"; + drawLoadingText(k, "Requesting " + s); + try { + int k1 = 0; + DataInputStream datainputstream = openJagGrabInputStream(s1 + j); + byte abyte1[] = new byte[6]; + datainputstream.readFully(abyte1, 0, 6); + Stream stream = new Stream(abyte1); + stream.currentOffset = 3; + int i2 = stream.read3Bytes() + 6; + int j2 = 6; + abyte0 = new byte[i2]; + System.arraycopy(abyte1, 0, abyte0, 0, 6); + + while (j2 < i2) { + int l2 = i2 - j2; + if (l2 > 1000) { + l2 = 1000; + } + int j3 = datainputstream.read(abyte0, j2, l2); + if (j3 < 0) { + s2 = "Length error: " + j2 + "/" + i2; + throw new IOException("EOF"); + } + j2 += j3; + int k3 = j2 * 100 / i2; + if (k3 != k1) { + drawLoadingText(k, "Loading " + s + " - " + k3 + "%"); + } + k1 = k3; + } + datainputstream.close(); + try { + if (decompressors[0] != null) { + decompressors[0].method234(abyte0.length, abyte0, i); + } + } catch (Exception _ex) { + decompressors[0] = null; + } + /* + * if(abyte0 != null) { aCRC32_930.reset(); + * aCRC32_930.update(abyte0); int i3 = + * (int)aCRC32_930.getValue(); if(i3 != j) { abyte0 = null; + * j1++; s2 = "Checksum error: " + i3; } } + */ + } catch (IOException ioexception) { + if (s2.equals("Unknown error")) { + s2 = "Connection error"; + } + abyte0 = null; + } catch (NullPointerException _ex) { + s2 = "Null error"; + abyte0 = null; + if (!Signlink.reporterror) { + return null; + } + } catch (ArrayIndexOutOfBoundsException _ex) { + s2 = "Bounds error"; + abyte0 = null; + if (!Signlink.reporterror) { + return null; + } + } catch (Exception _ex) { + s2 = "Unexpected error"; + abyte0 = null; + if (!Signlink.reporterror) { + return null; + } + } + if (abyte0 == null) { + for (int l1 = l; l1 > 0; l1--) { + if (j1 >= 3) { + drawLoadingText(k, "Game updated - please reload page"); + l1 = 10; + } else { + drawLoadingText(k, s2 + " - Retrying in " + l1); + } + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + } + + l *= 2; + if (l > 60) { + l = 60; + } + aBoolean872 = !aBoolean872; + } + + } + + StreamLoader streamLoader_1 = new StreamLoader(abyte0); + return streamLoader_1; + } + + public void dropClient() { + if (anInt1011 > 0) { + resetLogout(); + return; + } + drawTextOnScreen("Please wait - attempting to reestablish", "Connection lost"); + anInt1021 = 0; + destX = 0; + RSSocket rsSocket = socketStream; + loggedIn = false; + loginFailures = 0; + login(myUsername, myPassword, true); + if (!loggedIn) { + resetLogout(); + } + try { + rsSocket.close(); + } catch (Exception _ex) { + } + } + + public void drawTextOnScreen(String s, String s1) { + if (aRSImageProducer_1165 != null) { + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + int j = 151; + if (s != null) + j -= 7; + aTextDrawingArea_1271.drawText(0, s1, j, 257); + aTextDrawingArea_1271.drawText(0xffffff, s1, j - 1, 256); + j += 15; + if (s != null) { + aTextDrawingArea_1271.drawText(0, s, j, 257); + aTextDrawingArea_1271.drawText(0xffffff, s, j - 1, 256); + } + aRSImageProducer_1165.drawGraphics(4, super.graphics, 4); + return; + } + if (super.fullGameScreen != null) { + super.fullGameScreen.initDrawingArea(); + Texture.lineOffsets = gameScreenOffsets; + int k = 251; + char c = '\u012C'; + byte byte0 = 50; + DrawingArea.method336(byte0, k - 5 - byte0 / 2, 0, c, 383 - c / 2); + DrawingArea.fillPixels(k - 5 - byte0 / 2, byte0, 0xffffff, 383 - c / 2, c); + if (s != null) + k -= 7; + aTextDrawingArea_1271.drawText(0, s1, k, 383); + aTextDrawingArea_1271.drawText(0xffffff, s1, k - 1, 382); + k += 15; + if (s != null) { + aTextDrawingArea_1271.drawText(0, s, k, 383); + aTextDrawingArea_1271.drawText(0xffffff, s, k - 1, 382); + } + super.fullGameScreen.drawGraphics(0, super.graphics, 0); + } + } + + public void doAction(int i) { + if (i < 0) { + return; + } + if (inputDialogState != 0) { + inputDialogState = 0; + inputTaken = true; + } + int j = menuActionCmd2[i]; + int k = menuActionCmd3[i]; + int l = menuActionID[i]; + int i1 = menuActionCmd1[i]; + if (l >= 2000) { + l -= 2000; + } + if (l == 582) { + NPC npc = npcArray[i1]; + if (npc != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, npc.smallY[0], myPlayer.smallX[0], false, npc.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(57); + stream.method432(anInt1285); + stream.method432(i1); + stream.method431(anInt1283); + stream.method432(anInt1284); + } + } + if (l == 234) { + boolean flag1 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag1) { + flag1 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(236); + stream.method431(k + baseY); + stream.writeWord(i1); + stream.method431(j + baseX); + } + if (l == 62 && method66(i1, k, j)) { + stream.createFrame(192); + stream.writeWord(anInt1284); + stream.method431(i1 >> 14 & 0x7fff); + stream.method433(k + baseY); + stream.method431(anInt1283); + stream.method433(j + baseX); + stream.writeWord(anInt1285); + } + if (l == 511) { + boolean flag2 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag2) { + flag2 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(25); + stream.method431(anInt1284); + stream.method432(anInt1285); + stream.writeWord(i1); + stream.method432(k + baseY); + stream.method433(anInt1283); + stream.writeWord(j + baseX); + } + if (l == 74) { + stream.createFrame(122); + stream.method433(k); + stream.method432(j); + stream.method431(i1); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 315) { + RSInterface class9 = RSInterface.interfaceCache[k]; + boolean flag8 = true; + if (class9.anInt214 > 0) { + flag8 = promptUserForInput(class9); + } + if (flag8) { + stream.createFrame(185); + stream.writeWord(k); + } + } + if (l == 561) { + Player player = playerArray[i1]; + if (player != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, player.smallY[0], myPlayer.smallX[0], false, player.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + anInt1188 += i1; + if (anInt1188 >= 90) { + stream.createFrame(136); + anInt1188 = 0; + } + stream.createFrame(128); + stream.writeWord(i1); + } + } + if (l == 20) { + NPC class30_sub2_sub4_sub1_sub1_1 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_1 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_1.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_1.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(155); + stream.method431(i1); + } + } + if (l == 779) { + Player class30_sub2_sub4_sub1_sub2_1 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_1 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_1.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_1.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(153); + stream.method431(i1); + } + } + if (l == 516) { + if (!menuOpen) { + worldController.method312(super.saveClickY - 4, super.saveClickX - 4); + } else { + worldController.method312(k - 4, j - 4); + } + } + if (l == 1062) { + anInt924 += baseX; + if (anInt924 >= 113) { + stream.createFrame(183); + stream.writeDWordBigEndian(0xe63271); + anInt924 = 0; + } + method66(i1, k, j); + stream.createFrame(228); + stream.method432(i1 >> 14 & 0x7fff); + stream.method432(k + baseY); + stream.writeWord(j + baseX); + } + if (l == 679 && !aBoolean1149) { + stream.createFrame(40); + stream.writeWord(k); + aBoolean1149 = true; + } + if (l == 431) { + stream.createFrame(129); + stream.method432(j); + stream.writeWord(k); + stream.method432(i1); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 337 || l == 42 || l == 792 || l == 322) { + String s = menuActionName[i]; + int k1 = s.indexOf("@whi@"); + if (k1 != -1) { + long l3 = TextClass.longForName(s.substring(k1 + 5).trim()); + if (l == 337) { + addFriend(l3); + } + if (l == 42) { + addIgnore(l3); + } + if (l == 792) { + delFriend(l3); + } + if (l == 322) { + delIgnore(l3); + } + } + } + if (l == 53) { + stream.createFrame(135); + stream.method431(j); + stream.method432(k); + stream.method431(i1); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 539) { + stream.createFrame(16); + stream.method432(i1); + stream.method433(j); + stream.method433(k); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 484 || l == 6) { + String s1 = menuActionName[i]; + int l1 = s1.indexOf("@whi@"); + if (l1 != -1) { + s1 = s1.substring(l1 + 5).trim(); + String s7 = TextClass.fixName(TextClass.nameForLong(TextClass.longForName(s1))); + boolean flag9 = false; + for (int j3 = 0; j3 < playerCount; j3++) { + Player class30_sub2_sub4_sub1_sub2_7 = playerArray[playerIndices[j3]]; + if (class30_sub2_sub4_sub1_sub2_7 == null || class30_sub2_sub4_sub1_sub2_7.name == null || !class30_sub2_sub4_sub1_sub2_7.name.equalsIgnoreCase(s7)) { + continue; + } + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_7.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_7.smallX[0]); + if (l == 484) { + stream.createFrame(139); + stream.method431(playerIndices[j3]); + } + if (l == 6) { + anInt1188 += i1; + if (anInt1188 >= 90) { + stream.createFrame(136); + anInt1188 = 0; + } + stream.createFrame(128); + stream.writeWord(playerIndices[j3]); + } + flag9 = true; + break; + } + + if (!flag9) { + pushMessage("Unable to find " + s7, 0, ""); + } + } + } + if (l == 870) { + stream.createFrame(53); + stream.writeWord(j); + stream.method432(anInt1283); + stream.method433(i1); + stream.writeWord(anInt1284); + stream.method431(anInt1285); + stream.writeWord(k); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 847) { + stream.createFrame(87); + stream.method432(i1); + stream.writeWord(k); + stream.method432(j); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 626) { + RSInterface class9_1 = RSInterface.interfaceCache[k]; + spellSelected = 1; + anInt1137 = k; + spellUsableOn = class9_1.spellUsableOn; + itemSelected = 0; + needDrawTabArea = true; + String s4 = class9_1.selectedActionName; + if (s4.indexOf(" ") != -1) { + s4 = s4.substring(0, s4.indexOf(" ")); + } + String s8 = class9_1.selectedActionName; + if (s8.indexOf(" ") != -1) { + s8 = s8.substring(s8.indexOf(" ") + 1); + } + spellTooltip = s4 + " " + class9_1.spellName + " " + s8; + if (spellUsableOn == 16) { + needDrawTabArea = true; + tabID = 3; + tabAreaAltered = true; + } + return; + } + if (l == 78) { + stream.createFrame(117); + stream.method433(k); + stream.method433(i1); + stream.method431(j); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 27) { + Player class30_sub2_sub4_sub1_sub2_2 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_2 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_2.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_2.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + anInt986 += i1; + if (anInt986 >= 54) { + stream.createFrame(189); + stream.writeWordBigEndian(234); + anInt986 = 0; + } + stream.createFrame(73); + stream.method431(i1); + } + } + if (l == 213) { + boolean flag3 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag3) { + flag3 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(79); + stream.method431(k + baseY); + stream.writeWord(i1); + stream.method432(j + baseX); + } + if (l == 632) { + stream.createFrame(145); + stream.method432(k); + stream.method432(j); + stream.method432(i1); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 493) { + stream.createFrame(75); + stream.method433(k); + stream.method431(j); + stream.method432(i1); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 652) { + boolean flag4 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag4) { + flag4 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(156); + stream.method432(j + baseX); + stream.method431(k + baseY); + stream.method433(i1); + } + if (l == 94) { + boolean flag5 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag5) { + flag5 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(181); + stream.method431(k + baseY); + stream.writeWord(i1); + stream.method431(j + baseX); + stream.method432(anInt1137); + } + if (l == 646) { + stream.createFrame(185); + stream.writeWord(k); + RSInterface class9_2 = RSInterface.interfaceCache[k]; + if (class9_2.valueIndexArray != null && class9_2.valueIndexArray[0][0] == 5) { + int i2 = class9_2.valueIndexArray[0][1]; + if (variousSettings[i2] != class9_2.anIntArray212[0]) { + variousSettings[i2] = class9_2.anIntArray212[0]; + method33(i2); + needDrawTabArea = true; + } + } + } + if (l == 225) { + NPC class30_sub2_sub4_sub1_sub1_2 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_2 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_2.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_2.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + anInt1226 += i1; + if (anInt1226 >= 85) { + stream.createFrame(230); + stream.writeWordBigEndian(239); + anInt1226 = 0; + } + stream.createFrame(17); + stream.method433(i1); + } + } + if (l == 965) { + NPC class30_sub2_sub4_sub1_sub1_3 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_3 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_3.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_3.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + anInt1134++; + if (anInt1134 >= 96) { + stream.createFrame(152); + stream.writeWordBigEndian(88); + anInt1134 = 0; + } + stream.createFrame(21); + stream.writeWord(i1); + } + } + if (l == 413) { + NPC class30_sub2_sub4_sub1_sub1_4 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_4 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_4.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_4.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(131); + stream.method433(i1); + stream.method432(anInt1137); + } + } + if (l == 200) { + closeOpenInterfaces(); + } + if (l == 1025) { + NPC class30_sub2_sub4_sub1_sub1_5 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_5 != null) { + EntityDef entityDef = class30_sub2_sub4_sub1_sub1_5.desc; + if (entityDef.childrenIDs != null) { + entityDef = entityDef.method161(); + } + if (entityDef != null) { + String s9; + if (entityDef.description != null) { + s9 = new String(entityDef.description); + } else { + s9 = "It's a " + entityDef.name + "."; + } + pushMessage(s9, 0, ""); + } + } + } + if (l == 900) { + method66(i1, k, j); + stream.createFrame(252); + stream.method433(i1 >> 14 & 0x7fff); + stream.method431(k + baseY); + stream.method432(j + baseX); + } + if (l == 412) { + NPC class30_sub2_sub4_sub1_sub1_6 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_6 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_6.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_6.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(72); + stream.method432(i1); + } + } + if (l == 365) { + Player class30_sub2_sub4_sub1_sub2_3 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_3 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_3.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_3.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(249); + stream.method432(i1); + stream.method431(anInt1137); + } + } + if (l == 729) { + Player class30_sub2_sub4_sub1_sub2_4 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_4 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_4.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_4.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(39); + stream.method431(i1); + } + } + if (l == 577) { + Player class30_sub2_sub4_sub1_sub2_5 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_5 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_5.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_5.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(139); + stream.method431(i1); + } + } + if (l == 956 && method66(i1, k, j)) { + stream.createFrame(35); + stream.method431(j + baseX); + stream.method432(anInt1137); + stream.method432(k + baseY); + stream.method431(i1 >> 14 & 0x7fff); + } + if (l == 567) { + boolean flag6 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag6) { + flag6 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(23); + stream.method431(k + baseY); + stream.method431(i1); + stream.method431(j + baseX); + } + if (l == 867) { + if ((i1 & 3) == 0) { + anInt1175++; + } + if (anInt1175 >= 59) { + stream.createFrame(200); + stream.writeWord(25501); + anInt1175 = 0; + } + stream.createFrame(43); + stream.method431(k); + stream.method432(i1); + stream.method432(j); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 543) { + stream.createFrame(237); + stream.writeWord(j); + stream.method432(i1); + stream.writeWord(k); + stream.method432(anInt1137); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 606) { + String s2 = menuActionName[i]; + int j2 = s2.indexOf("@whi@"); + if (j2 != -1) { + if (openInterfaceID == -1) { + closeOpenInterfaces(); + reportAbuseInput = s2.substring(j2 + 5).trim(); + canMute = false; + for (RSInterface element : RSInterface.interfaceCache) { + if (element == null || element.anInt214 != 600) { + continue; + } + reportAbuseInterfaceID = openInterfaceID = element.parentID; + break; + } + + } else { + pushMessage("Please close the interface you have open before using 'report abuse'", 0, ""); + } + } + } + if (l == 491) { + Player class30_sub2_sub4_sub1_sub2_6 = playerArray[i1]; + if (class30_sub2_sub4_sub1_sub2_6 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_6.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_6.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(14); + // stream.method432(anInt1284); + stream.writeWord(i1); + // stream.writeWord(anInt1285); + stream.method431(anInt1283); + } + } + if (l == 639) { + String s3 = menuActionName[i]; + int k2 = s3.indexOf("@whi@"); + if (k2 != -1) { + long l4 = TextClass.longForName(s3.substring(k2 + 5).trim()); + int k3 = -1; + for (int i4 = 0; i4 < friendsCount; i4++) { + if (friendsListAsLongs[i4] != l4) { + continue; + } + k3 = i4; + break; + } + + if (k3 != -1 && friendsNodeIDs[k3] > 9) { + inputTaken = true; + inputDialogState = 0; + messagePromptRaised = true; + promptInput = ""; + friendsListAction = 3; + aLong953 = friendsListAsLongs[k3]; + aString1121 = "Enter message to send to " + friendsList[k3]; + } else { + pushMessage("That player is currently offline.", 0, ""); + } + } + } + if (l == 454) { + stream.createFrame(41); + stream.writeWord(i1); + stream.method432(j); + stream.method432(k); + atInventoryLoopCycle = 0; + atInventoryInterface = k; + atInventoryIndex = j; + atInventoryInterfaceType = 2; + if (RSInterface.interfaceCache[k].parentID == openInterfaceID) { + atInventoryInterfaceType = 1; + } + if (RSInterface.interfaceCache[k].parentID == backDialogID) { + atInventoryInterfaceType = 3; + } + } + if (l == 478) { + NPC class30_sub2_sub4_sub1_sub1_7 = npcArray[i1]; + if (class30_sub2_sub4_sub1_sub1_7 != null) { + doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_7.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_7.smallX[0]); + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + if ((i1 & 3) == 0) { + anInt1155++; + } + if (anInt1155 >= 53) { + stream.createFrame(85); + stream.writeWordBigEndian(66); + anInt1155 = 0; + } + stream.createFrame(18); + stream.method431(i1); + } + } + if (l == 113) {//third + method66(i1, k, j); + stream.createFrame(70); + stream.method431(j + baseX); + stream.writeWord(k + baseY); + stream.method433(i1 >> 14 & 0x7fff); + } + if (l == 872) {//fourth + method66(i1, k, j); + stream.createFrame(234); + stream.method433(j + baseX); + stream.method432(i1 >> 14 & 0x7fff); + stream.method433(k + baseY); + } + if (l == 502) {//first + method66(i1, k, j); + stream.createFrame(132); + stream.method433(j + baseX); + stream.writeWord(i1 >> 14 & 0x7fff); + stream.method432(k + baseY); + } + if (l == 1125) { + ItemDef itemDef = ItemDef.forID(i1); + RSInterface class9_4 = RSInterface.interfaceCache[k]; + String s5; + if (class9_4 != null && class9_4.invStackSizes[j] >= 0x186a0) { + DecimalFormatSymbols separator = new DecimalFormatSymbols(); + separator.setGroupingSeparator(','); + DecimalFormat formatter = new DecimalFormat("#,###,###,###", separator); + s5 = formatter.format(class9_4.invStackSizes[j]) + " x " + itemDef.name; + } else if (itemDef.description != null) { + s5 = new String(itemDef.description); + } else { + s5 = "It's a " + itemDef.name + "."; + } + pushMessage(s5, 0, ""); + } + if (l == 169) { + stream.createFrame(185); + stream.writeWord(k); + RSInterface class9_3 = RSInterface.interfaceCache[k]; + if (class9_3.valueIndexArray != null && class9_3.valueIndexArray[0][0] == 5) { + int l2 = class9_3.valueIndexArray[0][1]; + variousSettings[l2] = 1 - variousSettings[l2]; + method33(l2); + needDrawTabArea = true; + } + } + if (l == 447) { + itemSelected = 1; + anInt1283 = j; + anInt1284 = k; + anInt1285 = i1; + selectedItemName = ItemDef.forID(i1).name; + spellSelected = 0; + needDrawTabArea = true; + return; + } + if (l == 1226) { + int j1 = i1 >> 14 & 0x7fff; + ObjectDef class46 = ObjectDef.forID(j1); + String s10; + if (class46.description != null) { + s10 = new String(class46.description); + } else { + s10 = "It's a " + class46.name + "."; + } + pushMessage(s10, 0, ""); + } + if (l == 244) { + boolean flag7 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j); + if (!flag7) { + flag7 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j); + } + crossX = super.saveClickX; + crossY = super.saveClickY; + crossType = 2; + crossIndex = 0; + stream.createFrame(253); + stream.method431(j + baseX); + stream.method433(k + baseY); + stream.method432(i1); + } + if (l == 1448) { + ItemDef itemDef_1 = ItemDef.forID(i1); + String s6; + if (itemDef_1.description != null) { + s6 = new String(itemDef_1.description); + } else { + s6 = "It's a " + itemDef_1.name + "."; + } + pushMessage(s6, 0, ""); + } + itemSelected = 0; + spellSelected = 0; + needDrawTabArea = true; + + } + + public void method70() { + anInt1251 = 0; + int j = (myPlayer.x >> 7) + baseX; + int k = (myPlayer.y >> 7) + baseY; + if (j >= 3053 && j <= 3156 && k >= 3056 && k <= 3136) { + anInt1251 = 1; + } + if (j >= 3072 && j <= 3118 && k >= 9492 && k <= 9535) { + anInt1251 = 1; + } + if (anInt1251 == 1 && j >= 3139 && j <= 3199 && k >= 3008 && k <= 3062) { + anInt1251 = 0; + } + } + + public void run() { + if (drawFlames) { + drawFlames(); + } else { + super.run(); + } + } + + public void build3dScreenMenu() { + if (itemSelected == 0 && spellSelected == 0) { + menuActionName[menuActionRow] = "Walk here"; + menuActionID[menuActionRow] = 516; + menuActionCmd2[menuActionRow] = super.mouseX; + menuActionCmd3[menuActionRow] = super.mouseY; + menuActionRow++; + } + int j = -1; + for (int k = 0; k < Model.anInt1687; k++) { + int l = Model.anIntArray1688[k]; + int i1 = l & 0x7f; + int j1 = l >> 7 & 0x7f; + int k1 = l >> 29 & 3; + int l1 = l >> 14 & 0x7fff; + if (l == j) { + continue; + } + j = l; + if (k1 == 2 && worldController.method304(plane, i1, j1, l) >= 0) { + ObjectDef class46 = ObjectDef.forID(l1); + if (class46.childrenIDs != null) { + class46 = class46.method580(); + } + if (class46 == null) { + continue; + } + if (itemSelected == 1) { + menuActionName[menuActionRow] = "Use " + selectedItemName + " with @cya@" + class46.name; + menuActionID[menuActionRow] = 62; + menuActionCmd1[menuActionRow] = l; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } else if (spellSelected == 1) { + if ((spellUsableOn & 4) == 4) { + menuActionName[menuActionRow] = spellTooltip + " @cya@" + class46.name; + menuActionID[menuActionRow] = 956; + menuActionCmd1[menuActionRow] = l; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } else { + if (class46.actions != null) { + for (int i2 = 4; i2 >= 0; i2--) { + if (class46.actions[i2] != null) { + menuActionName[menuActionRow] = class46.actions[i2] + " @cya@" + class46.name; + if (i2 == 0) { + menuActionID[menuActionRow] = 502; + } + if (i2 == 1) { + menuActionID[menuActionRow] = 900; + } + if (i2 == 2) { + menuActionID[menuActionRow] = 113; + } + if (i2 == 3) { + menuActionID[menuActionRow] = 872; + } + if (i2 == 4) { + menuActionID[menuActionRow] = 1062; + } + menuActionCmd1[menuActionRow] = l; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } + + } + menuActionName[menuActionRow] = "Examine @cya@" + class46.name + (showInfo ? " @gre@(@whi@" + l1 + "@gre@) (@whi@" + (i1 + baseX) + "," + (j1 + baseY) + "@gre@)" : ""); + menuActionID[menuActionRow] = 1226; + menuActionCmd1[menuActionRow] = class46.type << 14; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } + if (k1 == 1) { + NPC npc = npcArray[l1]; + if (npc.desc.aByte68 == 1 && (npc.x & 0x7f) == 64 && (npc.y & 0x7f) == 64) { + for (int j2 = 0; j2 < npcCount; j2++) { + NPC npc2 = npcArray[npcIndices[j2]]; + if (npc2 != null && npc2 != npc && npc2.desc.aByte68 == 1 && npc2.x == npc.x && npc2.y == npc.y) { + buildAtNPCMenu(npc2.desc, npcIndices[j2], j1, i1); + } + } + + for (int l2 = 0; l2 < playerCount; l2++) { + Player player = playerArray[playerIndices[l2]]; + if (player != null && player.x == npc.x && player.y == npc.y) { + buildAtPlayerMenu(i1, playerIndices[l2], player, j1); + } + } + + } + buildAtNPCMenu(npc.desc, l1, j1, i1); + } + if (k1 == 0) { + Player player = playerArray[l1]; + if ((player.x & 0x7f) == 64 && (player.y & 0x7f) == 64) { + for (int k2 = 0; k2 < npcCount; k2++) { + NPC class30_sub2_sub4_sub1_sub1_2 = npcArray[npcIndices[k2]]; + if (class30_sub2_sub4_sub1_sub1_2 != null && class30_sub2_sub4_sub1_sub1_2.desc.aByte68 == 1 && class30_sub2_sub4_sub1_sub1_2.x == player.x && class30_sub2_sub4_sub1_sub1_2.y == player.y) { + buildAtNPCMenu(class30_sub2_sub4_sub1_sub1_2.desc, npcIndices[k2], j1, i1); + } + } + + for (int i3 = 0; i3 < playerCount; i3++) { + Player class30_sub2_sub4_sub1_sub2_2 = playerArray[playerIndices[i3]]; + if (class30_sub2_sub4_sub1_sub2_2 != null && class30_sub2_sub4_sub1_sub2_2 != player && class30_sub2_sub4_sub1_sub2_2.x == player.x && class30_sub2_sub4_sub1_sub2_2.y == player.y) { + buildAtPlayerMenu(i1, playerIndices[i3], class30_sub2_sub4_sub1_sub2_2, j1); + } + } + + } + buildAtPlayerMenu(i1, l1, player, j1); + } + if (k1 == 3) { + NodeList class19 = groundArray[plane][i1][j1]; + if (class19 != null) { + for (Item item = (Item) class19.getFirst(); item != null; item = (Item) class19.getNext()) { + ItemDef itemDef = ItemDef.forID(item.ID); + if (itemSelected == 1) { + menuActionName[menuActionRow] = "Use " + selectedItemName + " with @lre@" + itemDef.name; + menuActionID[menuActionRow] = 511; + menuActionCmd1[menuActionRow] = item.ID; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } else if (spellSelected == 1) { + if ((spellUsableOn & 1) == 1) { + menuActionName[menuActionRow] = spellTooltip + " @lre@" + itemDef.name; + menuActionID[menuActionRow] = 94; + menuActionCmd1[menuActionRow] = item.ID; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } else { + for (int j3 = 4; j3 >= 0; j3--) { + if (itemDef.groundActions != null && itemDef.groundActions[j3] != null) { + menuActionName[menuActionRow] = itemDef.groundActions[j3] + " @lre@" + itemDef.name; + if (j3 == 0) { + menuActionID[menuActionRow] = 652; + } + if (j3 == 1) { + menuActionID[menuActionRow] = 567; + } + if (j3 == 2) { + menuActionID[menuActionRow] = 234; + } + if (j3 == 3) { + menuActionID[menuActionRow] = 244; + } + if (j3 == 4) { + menuActionID[menuActionRow] = 213; + } + menuActionCmd1[menuActionRow] = item.ID; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } else if (j3 == 2) { + menuActionName[menuActionRow] = "Take @lre@" + itemDef.name; + menuActionID[menuActionRow] = 234; + menuActionCmd1[menuActionRow] = item.ID; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } + + menuActionName[menuActionRow] = "Examine @lre@" + itemDef.name + (showInfo ? " @gre@(@whi@" + item.ID + "@gre@)" : ""); + menuActionID[menuActionRow] = 1448; + menuActionCmd1[menuActionRow] = item.ID; + menuActionCmd2[menuActionRow] = i1; + menuActionCmd3[menuActionRow] = j1; + menuActionRow++; + } + } + + } + } + } + } + + public void cleanUpForQuit() { + Signlink.reporterror = false; + try { + if (socketStream != null) { + socketStream.close(); + } + } catch (Exception _ex) { + } + socketStream = null; + stopMidi(); + if (mouseDetection != null) { + mouseDetection.running = false; + } + mouseDetection = null; + onDemandFetcher.disable(); + onDemandFetcher = null; + aStream_834 = null; + stream = null; + aStream_847 = null; + inStream = null; + anIntArray1234 = null; + aByteArrayArray1183 = null; + aByteArrayArray1247 = null; + anIntArray1235 = null; + anIntArray1236 = null; + intGroundArray = null; + byteGroundArray = null; + worldController = null; + aClass11Array1230 = null; + anIntArrayArray901 = null; + anIntArrayArray825 = null; + bigX = null; + bigY = null; + aByteArray912 = null; + aRSImageProducer_1163 = null; + aRSImageProducer_1164 = null; + aRSImageProducer_1165 = null; + aRSImageProducer_1166 = null; + aRSImageProducer_1123 = null; + aRSImageProducer_1124 = null; + aRSImageProducer_1125 = null; + backLeftIP1 = null; + backLeftIP2 = null; + backRightIP1 = null; + backRightIP2 = null; + backTopIP1 = null; + backVmidIP1 = null; + backVmidIP2 = null; + backVmidIP3 = null; + backVmidIP2_2 = null; + invBack = null; + mapBack = null; + chatBack = null; + backBase1 = null; + backBase2 = null; + backHmid1 = null; + sideIcons = null; + redStone1 = null; + redStone2 = null; + redStone3 = null; + redStone1_2 = null; + redStone2_2 = null; + redStone1_3 = null; + redStone2_3 = null; + redStone3_2 = null; + redStone1_4 = null; + redStone2_4 = null; + compass = null; + hitMarks = null; + headIcons = null; + skullIcons = null; + headIconsHint = null; + crosses = null; + mapDotItem = null; + mapDotNPC = null; + mapDotPlayer = null; + mapDotFriend = null; + mapDotTeam = null; + mapScenes = null; + mapFunctions = null; + anIntArrayArray929 = null; + playerArray = null; + playerIndices = null; + anIntArray894 = null; + aStreamArray895s = null; + anIntArray840 = null; + npcArray = null; + npcIndices = null; + groundArray = null; + aClass19_1179 = null; + aClass19_1013 = null; + aClass19_1056 = null; + menuActionCmd2 = null; + menuActionCmd3 = null; + menuActionID = null; + menuActionCmd1 = null; + menuActionName = null; + variousSettings = null; + anIntArray1072 = null; + anIntArray1073 = null; + aClass30_Sub2_Sub1_Sub1Array1140 = null; + aClass30_Sub2_Sub1_Sub1_1263 = null; + friendsList = null; + friendsListAsLongs = null; + friendsNodeIDs = null; + aRSImageProducer_1110 = null; + aRSImageProducer_1111 = null; + aRSImageProducer_1107 = null; + aRSImageProducer_1108 = null; + aRSImageProducer_1109 = null; + aRSImageProducer_1112 = null; + aRSImageProducer_1113 = null; + aRSImageProducer_1114 = null; + aRSImageProducer_1115 = null; + multiOverlay = null; + nullLoader(); + ObjectDef.nullLoader(); + EntityDef.nullLoader(); + ItemDef.nullLoader(); + Flo.cache = null; + IDK.cache = null; + RSInterface.interfaceCache = null; + DummyClass.cache = null; + Animation.anims = null; + SpotAnim.cache = null; + SpotAnim.aMRUNodes_415 = null; + Varp.cache = null; + super.fullGameScreen = null; + Player.mruNodes = null; + Texture.nullLoader(); + WorldController.nullLoader(); + Model.nullLoader(); + Class36.nullLoader(); + System.gc(); + } + + public void printDebug() { + System.out.println("============"); + System.out.println("flame-cycle:" + anInt1208); + if (onDemandFetcher != null) { + System.out.println("Od-cycle:" + onDemandFetcher.onDemandCycle); + } + System.out.println("loop-cycle:" + loopCycle); + System.out.println("draw-cycle:" + anInt1061); + System.out.println("ptype:" + pktType); + System.out.println("psize:" + pktSize); + if (socketStream != null) { + socketStream.printDebug(); + } + super.shouldDebug = true; + } + + Component getGameComponent() { + if (Signlink.mainapp != null) { + return Signlink.mainapp; + } + if (super.gameFrame != null) { + return super.gameFrame; + } else { + return this; + } + } + + public void method73() { + do { + int j = readChar(-796); + if (j == -1) { + break; + } + if (openInterfaceID != -1 && openInterfaceID == reportAbuseInterfaceID) { + if (j == 8 && reportAbuseInput.length() > 0) { + reportAbuseInput = reportAbuseInput.substring(0, reportAbuseInput.length() - 1); + } + if ((j >= 97 && j <= 122 || j >= 65 && j <= 90 || j >= 48 && j <= 57 || j == 32) && reportAbuseInput.length() < 12) { + reportAbuseInput += (char) j; + } + } else if (messagePromptRaised) { + if (j >= 32 && j <= 122 && promptInput.length() < 80) { + promptInput += (char) j; + inputTaken = true; + } + if (j == 8 && promptInput.length() > 0) { + promptInput = promptInput.substring(0, promptInput.length() - 1); + inputTaken = true; + } + if (j == 13 || j == 10) { + messagePromptRaised = false; + inputTaken = true; + if (friendsListAction == 1) { + long l = TextClass.longForName(promptInput); + addFriend(l); + } + if (friendsListAction == 2 && friendsCount > 0) { + long l1 = TextClass.longForName(promptInput); + delFriend(l1); + } + if (friendsListAction == 3 && promptInput.length() > 0) { + stream.createFrame(126); + stream.writeWordBigEndian(0); + int k = stream.currentOffset; + stream.writeQWord(aLong953); + TextInput.method526(promptInput, stream); + stream.writeBytes(stream.currentOffset - k); + promptInput = TextInput.processText(promptInput); + promptInput = Censor.doCensor(promptInput); + pushMessage(promptInput, 6, TextClass.fixName(TextClass.nameForLong(aLong953))); + if (privateChatMode == 2) { + privateChatMode = 1; + aBoolean1233 = true; + stream.createFrame(95); + stream.writeWordBigEndian(publicChatMode); + stream.writeWordBigEndian(privateChatMode); + stream.writeWordBigEndian(tradeMode); + } + } + if (friendsListAction == 4 && ignoreCount < 100) { + long l2 = TextClass.longForName(promptInput); + addIgnore(l2); + } + if (friendsListAction == 5 && ignoreCount > 0) { + long l3 = TextClass.longForName(promptInput); + delIgnore(l3); + } + } + } else if (inputDialogState == 1) { + if (j >= 48 && j <= 57 && amountOrNameInput.length() < 10) { + amountOrNameInput += (char) j; + inputTaken = true; + } + if ((!amountOrNameInput.toLowerCase().contains("k") && !amountOrNameInput.toLowerCase().contains("m") && !amountOrNameInput.toLowerCase().contains("b")) && (j == 107 || j == 109) || j == 98) { + amountOrNameInput += (char) j; + inputTaken = true; + } + if (j == 8 && amountOrNameInput.length() > 0) { + amountOrNameInput = amountOrNameInput.substring(0, amountOrNameInput.length() - 1); + inputTaken = true; + } + try { + if (j == 13 || j == 10) { + if (amountOrNameInput.length() > 0) { + if (amountOrNameInput.toLowerCase().contains("k")) { + amountOrNameInput = amountOrNameInput.replaceAll("k", "000"); + } else if (amountOrNameInput.toLowerCase().contains("m")) { + amountOrNameInput = amountOrNameInput.replaceAll("m", "000000"); + } else if (amountOrNameInput.toLowerCase().contains("b")) { + amountOrNameInput = amountOrNameInput.replaceAll("b", "000000000"); + } + int amount = 0; + amount = Integer.parseInt(amountOrNameInput); + stream.createFrame(208); + stream.writeDWord(amount); + } + inputDialogState = 0; + inputTaken = true; + } + } catch (NumberFormatException nfe) { + inputDialogState = 0; + inputTaken = true; + pushMessage("Please enter a lower amount.", 0, ""); + } + } else if (inputDialogState == 2) { + if (j >= 32 && j <= 122 && amountOrNameInput.length() < 12) { + amountOrNameInput += (char) j; + inputTaken = true; + } + if (j == 8 && amountOrNameInput.length() > 0) { + amountOrNameInput = amountOrNameInput.substring(0, amountOrNameInput.length() - 1); + inputTaken = true; + } + if (j == 13 || j == 10) { + if (amountOrNameInput.length() > 0) { + stream.createFrame(60); + stream.writeQWord(TextClass.longForName(amountOrNameInput)); + } + inputDialogState = 0; + inputTaken = true; + } + } else if (backDialogID == -1 && fullScreenBackDialogID == -1) { + if (j >= 32 && j <= 122 && inputString.length() < 80) { + inputString += (char) j; + inputTaken = true; + } + if (j == 8 && inputString.length() > 0) { + inputString = inputString.substring(0, inputString.length() - 1); + inputTaken = true; + } + if ((j == 13 || j == 10) && inputString.length() > 0) { + if (myPrivilege == 2) { + if (inputString.equals("::clientdrop")) { + dropClient(); + } + if (inputString.equals("::lag")) { + printDebug(); + } + if (inputString.equals("::prefetchmusic")) { + for (int j1 = 0; j1 < onDemandFetcher.getVersionCount(2); j1++) { + onDemandFetcher.method563((byte) 1, 2, j1); + } + + } + if (inputString.equals("::fps")) { + fpsOn = !fpsOn; + } + if (inputString.equals("::dataon")) { + showInfo = !showInfo; + } + if (inputString.equals("::clip")) { + for (int k1 = 0; k1 < 4; k1++) { + for (int i2 = 1; i2 < 103; i2++) { + for (int k2 = 1; k2 < 103; k2++) { + aClass11Array1230[k1].anIntArrayArray294[i2][k2] = 0; + } + + } + + } + + } + } + if (inputString.startsWith("::")) { + stream.createFrame(103); + stream.writeWordBigEndian(inputString.length() - 1); + stream.writeString(inputString.substring(2)); + } else { + String s = inputString.toLowerCase(); + int j2 = 0; + if (s.startsWith("yellow:")) { + j2 = 0; + inputString = inputString.substring(7); + } else if (s.startsWith("red:")) { + j2 = 1; + inputString = inputString.substring(4); + } else if (s.startsWith("green:")) { + j2 = 2; + inputString = inputString.substring(6); + } else if (s.startsWith("cyan:")) { + j2 = 3; + inputString = inputString.substring(5); + } else if (s.startsWith("purple:")) { + j2 = 4; + inputString = inputString.substring(7); + } else if (s.startsWith("white:")) { + j2 = 5; + inputString = inputString.substring(6); + } else if (s.startsWith("flash1:")) { + j2 = 6; + inputString = inputString.substring(7); + } else if (s.startsWith("flash2:")) { + j2 = 7; + inputString = inputString.substring(7); + } else if (s.startsWith("flash3:")) { + j2 = 8; + inputString = inputString.substring(7); + } else if (s.startsWith("glow1:")) { + j2 = 9; + inputString = inputString.substring(6); + } else if (s.startsWith("glow2:")) { + j2 = 10; + inputString = inputString.substring(6); + } else if (s.startsWith("glow3:")) { + j2 = 11; + inputString = inputString.substring(6); + } + s = inputString.toLowerCase(); + int i3 = 0; + if (s.startsWith("wave:")) { + i3 = 1; + inputString = inputString.substring(5); + } else if (s.startsWith("wave2:")) { + i3 = 2; + inputString = inputString.substring(6); + } else if (s.startsWith("shake:")) { + i3 = 3; + inputString = inputString.substring(6); + } else if (s.startsWith("scroll:")) { + i3 = 4; + inputString = inputString.substring(7); + } else if (s.startsWith("slide:")) { + i3 = 5; + inputString = inputString.substring(6); + } + stream.createFrame(4); + stream.writeWordBigEndian(0); + int j3 = stream.currentOffset; + stream.method425(i3); + stream.method425(j2); + aStream_834.currentOffset = 0; + TextInput.method526(inputString, aStream_834); + stream.method441(0, aStream_834.buffer, aStream_834.currentOffset); + stream.writeBytes(stream.currentOffset - j3); + inputString = TextInput.processText(inputString); + inputString = Censor.doCensor(inputString); + myPlayer.textSpoken = inputString; + myPlayer.anInt1513 = j2; + myPlayer.anInt1531 = i3; + myPlayer.textCycle = 150; + if (myPrivilege == 2 || myPrivilege == 3) { + pushMessage(myPlayer.textSpoken, 2, "@cr2@" + myPlayer.name); + } else if (myPrivilege == 1) { + pushMessage(myPlayer.textSpoken, 2, "@cr1@" + myPlayer.name); + } else { + pushMessage(myPlayer.textSpoken, 2, myPlayer.name); + } + if (publicChatMode == 2) { + publicChatMode = 3; + aBoolean1233 = true; + stream.createFrame(95); + stream.writeWordBigEndian(publicChatMode); + stream.writeWordBigEndian(privateChatMode); + stream.writeWordBigEndian(tradeMode); + } + } + inputString = ""; + inputTaken = true; + } + } + } while (true); + } + + public void buildChatAreaMenu(int j) { + int l = 0; + for (int i1 = 0; i1 < 100; i1++) { + if (chatMessages[i1] == null) { + continue; + } + int j1 = chatTypes[i1]; + int k1 = 70 - l * 14 + anInt1089 + 4; + if (k1 < -20) { + break; + } + String s = chatNames[i1]; + if (s != null && s.startsWith("@cr1@")) { + s = s.substring(5); + } + if (s != null && s.startsWith("@cr2@")) { + s = s.substring(5); + } + if (j1 == 0) { + l++; + } + if ((j1 == 1 || j1 == 2) && (j1 == 1 || publicChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s))) { + if (j > k1 - 14 && j <= k1 && !s.equals(myPlayer.name)) { + if (myPrivilege >= 1 && myPrivilege <= 3) { + menuActionName[menuActionRow] = "Report abuse @whi@" + s; + menuActionID[menuActionRow] = 606; + menuActionRow++; + } + menuActionName[menuActionRow] = "Add ignore @whi@" + s; + menuActionID[menuActionRow] = 42; + menuActionRow++; + menuActionName[menuActionRow] = "Reply to @whi@" + s; + menuActionID[menuActionRow] = 639; + menuActionRow++; + menuActionName[menuActionRow] = "Add friend @whi@" + s; + menuActionID[menuActionRow] = 337; + menuActionRow++; + } + l++; + } + if ((j1 == 3 || j1 == 7) && splitpublicChat == 0 && (j1 == 7 || privateChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s))) { + if (j > k1 - 14 && j <= k1) { + if (myPrivilege >= 1 && myPrivilege <= 3) { + menuActionName[menuActionRow] = "Report abuse @whi@" + s; + menuActionID[menuActionRow] = 606; + menuActionRow++; + } + menuActionName[menuActionRow] = "Add ignore @whi@" + s; + menuActionID[menuActionRow] = 42; + menuActionRow++; + menuActionName[menuActionRow] = "Reply to @whi@" + s; + menuActionID[menuActionRow] = 639; + menuActionRow++; + menuActionName[menuActionRow] = "Add friend @whi@" + s; + menuActionID[menuActionRow] = 337; + menuActionRow++; + } + l++; + } + if (j1 == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) { + if (j > k1 - 14 && j <= k1) { + menuActionName[menuActionRow] = "Accept trade @whi@" + s; + menuActionID[menuActionRow] = 484; + menuActionRow++; + } + l++; + } + if ((j1 == 5 || j1 == 6) && splitpublicChat == 0 && privateChatMode < 2) { + l++; + } + if (j1 == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) { + if (j > k1 - 14 && j <= k1) { + menuActionName[menuActionRow] = "Accept challenge @whi@" + s; + menuActionID[menuActionRow] = 6; + menuActionRow++; + } + l++; + } + } + + } + + public void drawFriendsListOrWelcomeScreen(RSInterface class9) { + int j = class9.anInt214; + if (j >= 1 && j <= 100 || j >= 701 && j <= 800) { + if (j == 1 && anInt900 == 0) { + class9.disabledText = "Loading friend list"; + class9.atActionType = 0; + return; + } + if (j == 1 && anInt900 == 1) { + class9.disabledText = "Connecting to friendserver"; + class9.atActionType = 0; + return; + } + if (j == 2 && anInt900 != 2) { + class9.disabledText = "Please wait..."; + class9.atActionType = 0; + return; + } + int k = friendsCount; + if (anInt900 != 2) { + k = 0; + } + if (j > 700) { + j -= 601; + } else { + j--; + } + if (j >= k) { + class9.disabledText = ""; + class9.atActionType = 0; + return; + } else { + class9.disabledText = friendsList[j]; + class9.atActionType = 1; + return; + } + } + if (j >= 101 && j <= 200 || j >= 801 && j <= 900) { + int l = friendsCount; + if (anInt900 != 2) { + l = 0; + } + if (j > 800) { + j -= 701; + } else { + j -= 101; + } + if (j >= l) { + class9.disabledText = ""; + class9.atActionType = 0; + return; + } + if (friendsNodeIDs[j] == 0) { + class9.disabledText = "@red@Offline"; + } else if (friendsNodeIDs[j] == nodeID) { + class9.disabledText = "@gre@World-1"; + } else { + class9.disabledText = "@red@Offline"; + } + class9.atActionType = 1; + return; + } + if (j == 203) { + int i1 = friendsCount; + if (anInt900 != 2) { + i1 = 0; + } + class9.scrollMax = i1 * 15 + 20; + if (class9.scrollMax <= class9.height) { + class9.scrollMax = class9.height + 1; + } + return; + } + if (j >= 401 && j <= 500) { + if ((j -= 401) == 0 && anInt900 == 0) { + class9.disabledText = "Loading ignore list"; + class9.atActionType = 0; + return; + } + if (j == 1 && anInt900 == 0) { + class9.disabledText = "Please wait..."; + class9.atActionType = 0; + return; + } + int j1 = ignoreCount; + if (anInt900 == 0) { + j1 = 0; + } + if (j >= j1) { + class9.disabledText = ""; + class9.atActionType = 0; + return; + } else { + class9.disabledText = TextClass.fixName(TextClass.nameForLong(ignoreListAsLongs[j])); + class9.atActionType = 1; + return; + } + } + if (j == 503) { + class9.scrollMax = ignoreCount * 15 + 20; + if (class9.scrollMax <= class9.height) { + class9.scrollMax = class9.height + 1; + } + return; + } + if (j == 327) { + class9.anInt270 = 150; + class9.anInt271 = (int) (Math.sin((double) loopCycle / 40D) * 256D) & 0x7ff; + if (aBoolean1031) { + for (int k1 = 0; k1 < 7; k1++) { + int l1 = anIntArray1065[k1]; + if (l1 >= 0 && !IDK.cache[l1].method537()) { + return; + } + } + + aBoolean1031 = false; + Model aclass30_sub2_sub4_sub6s[] = new Model[7]; + int i2 = 0; + for (int j2 = 0; j2 < 7; j2++) { + int k2 = anIntArray1065[j2]; + if (k2 >= 0) { + aclass30_sub2_sub4_sub6s[i2++] = IDK.cache[k2].method538(); + } + } + + Model model = new Model(i2, aclass30_sub2_sub4_sub6s); + for (int l2 = 0; l2 < 5; l2++) { + if (anIntArray990[l2] != 0) { + model.method476(anIntArrayArray1003[l2][0], anIntArrayArray1003[l2][anIntArray990[l2]]); + if (l2 == 1) { + model.method476(anIntArray1204[0], anIntArray1204[anIntArray990[l2]]); + } + } + } + + model.method469(); + model.method470(Animation.anims[myPlayer.anInt1511].anIntArray353[0]); + model.method479(64, 850, -30, -50, -30, true); + class9.anInt233 = 5; + class9.mediaID = 0; + RSInterface.method208(model, 0, 5); + } + return; + } + if (j == 324) { + if (aClass30_Sub2_Sub1_Sub1_931 == null) { + aClass30_Sub2_Sub1_Sub1_931 = class9.sprite1; + aClass30_Sub2_Sub1_Sub1_932 = class9.sprite2; + } + if (aBoolean1047) { + class9.sprite1 = aClass30_Sub2_Sub1_Sub1_932; + return; + } else { + class9.sprite1 = aClass30_Sub2_Sub1_Sub1_931; + return; + } + } + if (j == 325) { + if (aClass30_Sub2_Sub1_Sub1_931 == null) { + aClass30_Sub2_Sub1_Sub1_931 = class9.sprite1; + aClass30_Sub2_Sub1_Sub1_932 = class9.sprite2; + } + if (aBoolean1047) { + class9.sprite1 = aClass30_Sub2_Sub1_Sub1_931; + return; + } else { + class9.sprite1 = aClass30_Sub2_Sub1_Sub1_932; + return; + } + } + if (j == 600) { + class9.disabledText = reportAbuseInput; + if (loopCycle % 20 < 10) { + class9.disabledText += "|"; + return; + } else { + class9.disabledText += " "; + return; + } + } + if (j == 613) { + if (myPrivilege >= 1 && myPrivilege <= 3) { + if (canMute) { + class9.textColor = 0xff0000; + class9.disabledText = "Moderator option: Mute player for 48 hours: "; + } else { + class9.textColor = 0xffffff; + class9.disabledText = "Moderator option: Mute player for 48 hours: "; + } + } else { + class9.disabledText = ""; + } + } + if (j == 660) { + int k1 = anInt1170 - anInt1215; + String s1; + if (k1 <= 0) + s1 = "earlier today"; + else if (k1 == 1) + s1 = "yesterday"; + else + s1 = k1 + " days ago"; + class9.disabledText = "You last logged in @red@" + s1 + + "@bla@ from: @red@" + Signlink.dns; + } + if (j == 661) + if (anInt1034 == 0) + class9.disabledText = "\\nYou have not yet set any recovery questions.\\nIt is @lre@strongly@yel@ recommended that you do so.\\n\\nIf you don't you will be @lre@unable to recover your\\n@lre@password@yel@ if you forget it, or it is stolen."; + else if (anInt1034 <= anInt1170) { + class9.disabledText = "\\n\\nRecovery Questions Last Set:\\n@gre@" + + method104(anInt1034); + } else { + int l1 = (anInt1170 + 14) - anInt1034; + String s2; + if (l1 <= 0) + s2 = "Earlier today"; + else if (l1 == 1) + s2 = "Yesterday"; + else + s2 = l1 + " days ago"; + class9.disabledText = s2 + + " you requested@lre@ new recovery\\n@lre@questions.@yel@ The requested change will occur\\non: @lre@" + + method104(anInt1034) + + "\\n\\nIf you do not remember making this request\\ncancel it immediately, and change your password."; + } + if (j == 662) { + String s; + if (anInt1273 == 0) + s = "@yel@0 unread messages"; + else if (anInt1273 == 1) + s = "@gre@1 unread message"; + else + s = "@gre@" + anInt1273 + " unread messages"; + class9.disabledText = "You have " + s + "\\nin your message centre."; + } + if (j == 663) + if (anInt1083 <= 0 || anInt1083 > anInt1170 + 10) + class9.disabledText = "Last password change:\\n@gre@Never changed"; + else + class9.disabledText = "Last password change:\\n@gre@" + + method104(anInt1083); + if (j == 665) + if (anInt992 > 2 && !isMembers) + class9.disabledText = "This is a non-members\\nworld. To enjoy your\\nmembers benefits we\\nrecommend you play on a\\nmembers world instead."; + else if (anInt992 > 2) + class9.disabledText = "\\n\\nYou have @gre@" + anInt992 + + "@yel@ days of\\nmember credit remaining."; + else if (anInt992 > 0) + class9.disabledText = "You have @gre@" + + anInt992 + + "@yel@ days of\\nmember credit remaining.\\n\\n@lre@Credit low! Renew now\\n@lre@to avoid losing members."; + else + class9.disabledText = "You are not a member.\\n\\nChoose to subscribe and\\nyou'll get loads of extra\\nbenefits and features."; + if (j == 667) + if (anInt992 > 2 && !isMembers) + class9.disabledText = "To switch to a members-only world:\\n1) Logout and return to the world selection page.\\n2) Choose one of the members world with a gold star next to it's name.\\n\\nIf you prefer you can continue to use this world,\\nbut members only features will be unavailable here."; + else if (anInt992 > 0) + class9.disabledText = "To extend or cancel a subscription:\\n1) Logout and return to the frontpage of this website.\\n2)Choose the relevant option from the 'membership' section.\\n\\nNote: If you are a credit card subscriber a top-up payment will\\nautomatically be taken when 3 days credit remain.\\n(unless you cancel your subscription, which can be done at any time.)"; + else + class9.disabledText = "To start a subscripton:\\n1) Logout and return to the frontpage of this website.\\n2) Choose 'Start a new subscription'"; + if (j == 668) { + if (anInt1034 > anInt1170) { + class9.disabledText = "To cancel this request:\\n1) Logout and return to the frontpage of this website.\\n2) Choose 'Cancel recovery questions'."; + return; + } + class9.disabledText = "To change your recovery questions:\\n1) Logout and return to the frontpage of this website.\\n2) Choose 'Set new recovery questions'."; + } + } + + public String method104(int i) { + if (i > anInt1170 + 10) { + return "Unknown"; + } else { + long l = ((long) i + 11745L) * 0x5265c00L; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date(l)); + int j = calendar.get(5); + int k = calendar.get(2); + int i1 = calendar.get(1); + String as[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Aug", "Sep", "Oct", "Nov", "Dec" }; + return j + "-" + as[k] + "-" + i1; + } + } + + public void drawSplitpublicChat() { + if (splitpublicChat == 0) { + return; + } + TextDrawingArea textDrawingArea = aTextDrawingArea_1271; + int i = 0; + if (anInt1104 != 0) { + i = 1; + } + for (int j = 0; j < 100; j++) { + if (chatMessages[j] != null) { + int k = chatTypes[j]; + String s = chatNames[j]; + byte byte1 = 0; + if (s != null && s.startsWith("@cr1@")) { + s = s.substring(5); + byte1 = 1; + } + if (s != null && s.startsWith("@cr2@")) { + s = s.substring(5); + byte1 = 2; + } + if ((k == 3 || k == 7) && (k == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s))) { + int l = 329 - i * 13; + int k1 = 4; + textDrawingArea.method385(0, "From", l, k1); + textDrawingArea.method385(65535, "From", l - 1, k1); + k1 += textDrawingArea.getTextWidth("From "); + if (byte1 == 1) { + modIcons[0].method361(k1, l - 12); + k1 += 14; + } + if (byte1 == 2) { + modIcons[1].method361(k1, l - 12); + k1 += 14; + } + textDrawingArea.method385(0, s + ": " + chatMessages[j], l, k1); + textDrawingArea.method385(65535, s + ": " + chatMessages[j], l - 1, k1); + if (++i >= 5) { + return; + } + } + if (k == 5 && privateChatMode < 2) { + int i1 = 329 - i * 13; + textDrawingArea.method385(0, chatMessages[j], i1, 4); + textDrawingArea.method385(65535, chatMessages[j], i1 - 1, 4); + if (++i >= 5) { + return; + } + } + if (k == 6 && privateChatMode < 2) { + int j1 = 329 - i * 13; + textDrawingArea.method385(0, "To " + s + ": " + chatMessages[j], j1, 4); + textDrawingArea.method385(65535, "To " + s + ": " + chatMessages[j], j1 - 1, 4); + if (++i >= 5) { + return; + } + } + } + } + + } + + public void pushMessage(String s, int i, String s1) { + if (i == 0 && dialogID != -1) { + aString844 = s; + super.clickMode3 = 0; + } + if (backDialogID == -1) { + inputTaken = true; + } + for (int j = 99; j > 0; j--) { + chatTypes[j] = chatTypes[j - 1]; + chatNames[j] = chatNames[j - 1]; + chatMessages[j] = chatMessages[j - 1]; + } + + chatTypes[0] = i; + chatNames[0] = s1; + chatMessages[0] = s; + } + + public void processTabClick() { + if (super.clickMode3 == 1) { + if (super.saveClickX >= 539 && super.saveClickX <= 573 && super.saveClickY >= 169 && super.saveClickY < 205 && tabInterfaceIDs[0] != -1) { + needDrawTabArea = true; + tabID = 0; + tabAreaAltered = true; + } + if (super.saveClickX >= 569 && super.saveClickX <= 599 && super.saveClickY >= 168 && super.saveClickY < 205 && tabInterfaceIDs[1] != -1) { + needDrawTabArea = true; + tabID = 1; + tabAreaAltered = true; + } + if (super.saveClickX >= 597 && super.saveClickX <= 627 && super.saveClickY >= 168 && super.saveClickY < 205 && tabInterfaceIDs[2] != -1) { + needDrawTabArea = true; + tabID = 2; + tabAreaAltered = true; + } + if (super.saveClickX >= 625 && super.saveClickX <= 669 && super.saveClickY >= 168 && super.saveClickY < 203 && tabInterfaceIDs[3] != -1) { + needDrawTabArea = true; + tabID = 3; + tabAreaAltered = true; + } + if (super.saveClickX >= 666 && super.saveClickX <= 696 && super.saveClickY >= 168 && super.saveClickY < 205 && tabInterfaceIDs[4] != -1) { + needDrawTabArea = true; + tabID = 4; + tabAreaAltered = true; + } + if (super.saveClickX >= 694 && super.saveClickX <= 724 && super.saveClickY >= 168 && super.saveClickY < 205 && tabInterfaceIDs[5] != -1) { + needDrawTabArea = true; + tabID = 5; + tabAreaAltered = true; + } + if (super.saveClickX >= 722 && super.saveClickX <= 756 && super.saveClickY >= 169 && super.saveClickY < 205 && tabInterfaceIDs[6] != -1) { + needDrawTabArea = true; + tabID = 6; + tabAreaAltered = true; + } + if (super.saveClickX >= 540 && super.saveClickX <= 574 && super.saveClickY >= 466 && super.saveClickY < 502 && tabInterfaceIDs[7] != -1) { + needDrawTabArea = true; + tabID = 7; + tabAreaAltered = true; + } + if (super.saveClickX >= 572 && super.saveClickX <= 602 && super.saveClickY >= 466 && super.saveClickY < 503 && tabInterfaceIDs[8] != -1) { + needDrawTabArea = true; + tabID = 8; + tabAreaAltered = true; + } + if (super.saveClickX >= 599 && super.saveClickX <= 629 && super.saveClickY >= 466 && super.saveClickY < 503 && tabInterfaceIDs[9] != -1) { + needDrawTabArea = true; + tabID = 9; + tabAreaAltered = true; + } + if (super.saveClickX >= 627 && super.saveClickX <= 671 && super.saveClickY >= 467 && super.saveClickY < 502 && tabInterfaceIDs[10] != -1) { + needDrawTabArea = true; + tabID = 10; + tabAreaAltered = true; + } + if (super.saveClickX >= 669 && super.saveClickX <= 699 && super.saveClickY >= 466 && super.saveClickY < 503 && tabInterfaceIDs[11] != -1) { + needDrawTabArea = true; + tabID = 11; + tabAreaAltered = true; + } + if (super.saveClickX >= 696 && super.saveClickX <= 726 && super.saveClickY >= 466 && super.saveClickY < 503 && tabInterfaceIDs[12] != -1) { + needDrawTabArea = true; + tabID = 12; + tabAreaAltered = true; + } + if (super.saveClickX >= 724 && super.saveClickX <= 758 && super.saveClickY >= 466 && super.saveClickY < 502 && tabInterfaceIDs[13] != -1) { + needDrawTabArea = true; + tabID = 13; + tabAreaAltered = true; + } + if (anInt1054 == tabID) { + stream.createFrame(152); + stream.writeWordBigEndian(tabID); + } + } + } + + public void resetImageProducers() { + if (aRSImageProducer_1107 != null) { + return; + } + super.fullGameScreen = null; + aRSImageProducer_1166 = null; + aRSImageProducer_1164 = null; + aRSImageProducer_1163 = null; + aRSImageProducer_1165 = null; + aRSImageProducer_1123 = null; + aRSImageProducer_1124 = null; + aRSImageProducer_1125 = null; + aRSImageProducer_1110 = new RSImageProducer(128, 265, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1111 = new RSImageProducer(128, 265, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1107 = new RSImageProducer(509, 171, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1108 = new RSImageProducer(360, 132, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1109 = new RSImageProducer(360, 200, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1112 = new RSImageProducer(202, 238, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1113 = new RSImageProducer(203, 238, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1114 = new RSImageProducer(74, 94, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1115 = new RSImageProducer(75, 94, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + if (titleStreamLoader != null) { + drawLogo(); + loadTitleScreen(); + } + welcomeScreenRaised = true; + } + + public void resetAllImageProducers() { + if (super.fullGameScreen != null) + return; + nullLoader(); + aRSImageProducer_1107 = null; + aRSImageProducer_1108 = null; + aRSImageProducer_1109 = null; + aRSImageProducer_1112 = null; + aRSImageProducer_1113 = null; + aRSImageProducer_1114 = null; + aRSImageProducer_1115 = null; + aRSImageProducer_1166 = null; + aRSImageProducer_1164 = null; + aRSImageProducer_1163 = null; + aRSImageProducer_1165 = null; + aRSImageProducer_1123 = null; + aRSImageProducer_1125 = null; + aRSImageProducer_1124 = null; + super.fullGameScreen = new RSImageProducer(765, 503, getGameComponent()); + welcomeScreenRaised = true; + } + + public void resetImageProducers2() { + if (aRSImageProducer_1166 != null) { + return; + } + nullLoader(); + super.fullGameScreen = null; + aRSImageProducer_1107 = null; + aRSImageProducer_1108 = null; + aRSImageProducer_1109 = null; + aRSImageProducer_1110 = null; + aRSImageProducer_1111 = null; + aRSImageProducer_1112 = null; + aRSImageProducer_1113 = null; + aRSImageProducer_1114 = null; + aRSImageProducer_1115 = null; + aRSImageProducer_1166 = new RSImageProducer(479, 96, getGameComponent()); + aRSImageProducer_1164 = new RSImageProducer(172, 156, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + mapBack.method361(0, 0); + aRSImageProducer_1163 = new RSImageProducer(190, 261, getGameComponent()); + aRSImageProducer_1165 = new RSImageProducer(512, 334, getGameComponent()); + DrawingArea.setAllPixelsToZero(); + aRSImageProducer_1123 = new RSImageProducer(496, 50, getGameComponent()); + aRSImageProducer_1124 = new RSImageProducer(269, 37, getGameComponent()); + aRSImageProducer_1125 = new RSImageProducer(249, 45, getGameComponent()); + welcomeScreenRaised = true; + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + // SignLink.midii.fadeOut(); + } + + public void method81(Sprite sprite, int y, int x) { + int l = x * x + y * y; + if (l > 4225 && l < 90000) { + int i1 = minimapInt1 + minimapInt2 & 0x7ff; + int j1 = Model.modelIntArray1[i1]; + int k1 = Model.modelIntArray2[i1]; + j1 = (j1 * 256) / (minimapInt3 + 256); + k1 = (k1 * 256) / (minimapInt3 + 256); + int l1 = y * j1 + x * k1 >> 16; + int i2 = y * k1 - x * j1 >> 16; + double d = Math.atan2((double) l1, (double) i2); + int j2 = (int) (Math.sin(d) * 63D); + int k2 = (int) (Math.cos(d) * 57D); + mapEdge.method353(83 - k2 - 20, d, 94 + j2 + 4 - 10); + } else { + markMinimap(sprite, x, y); + } + } + + public void processRightClick() { + if (activeInterfaceType != 0) { + return; + } + menuActionName[0] = "Cancel"; + menuActionID[0] = 1107; + menuActionRow = 1; + if(fullScreenBackDialogID != -1) { + anInt886 = 0; + buildInterfaceMenu(0, RSInterface.interfaceCache[fullScreenBackDialogID], super.mouseX, 0, super.mouseY, 0); + if (anInt886 != anInt1026) { + anInt1026 = anInt886; + } + return; + } + buildSplitPrivateChatMenu(); + anInt886 = 0; + if (super.mouseX > 4 && super.mouseY > 4 && super.mouseX < 516 && super.mouseY < 338) { + if (openInterfaceID != -1) { + buildInterfaceMenu(4, RSInterface.interfaceCache[openInterfaceID], super.mouseX, 4, super.mouseY, 0); + } else { + build3dScreenMenu(); + } + } + if (anInt886 != anInt1026) { + anInt1026 = anInt886; + } + anInt886 = 0; + if (super.mouseX > 553 && super.mouseY > 205 && super.mouseX < 743 && super.mouseY < 466) { + if (invOverlayInterfaceID != -1) { + buildInterfaceMenu(553, RSInterface.interfaceCache[invOverlayInterfaceID], super.mouseX, 205, super.mouseY, 0); + } else if (tabInterfaceIDs[tabID] != -1) { + buildInterfaceMenu(553, RSInterface.interfaceCache[tabInterfaceIDs[tabID]], super.mouseX, 205, super.mouseY, 0); + } + } + if (anInt886 != anInt1048) { + needDrawTabArea = true; + anInt1048 = anInt886; + } + anInt886 = 0; + if (super.mouseX > 17 && super.mouseY > 357 && super.mouseX < 496 && super.mouseY < 453) { + if (backDialogID != -1) { + buildInterfaceMenu(17, RSInterface.interfaceCache[backDialogID], super.mouseX, 357, super.mouseY, 0); + } else if (dialogID != -1) { + buildInterfaceMenu(17, RSInterface.interfaceCache[dialogID], super.mouseX, 357, super.mouseY, 0); + } else if (super.mouseY < 434 && super.mouseX < 426) { + buildChatAreaMenu(super.mouseY - 357); + } + } + if ((backDialogID != -1 || dialogID != -1) && anInt886 != anInt1039) {//TODO remove if any issues + inputTaken = true; + anInt1039 = anInt886; + } + boolean flag = false; + while (!flag) { + flag = true; + for (int j = 0; j < menuActionRow - 1; j++) { + if (menuActionID[j] < 1000 && menuActionID[j + 1] > 1000) { + String s = menuActionName[j]; + menuActionName[j] = menuActionName[j + 1]; + menuActionName[j + 1] = s; + int k = menuActionID[j]; + menuActionID[j] = menuActionID[j + 1]; + menuActionID[j + 1] = k; + k = menuActionCmd2[j]; + menuActionCmd2[j] = menuActionCmd2[j + 1]; + menuActionCmd2[j + 1] = k; + k = menuActionCmd3[j]; + menuActionCmd3[j] = menuActionCmd3[j + 1]; + menuActionCmd3[j + 1] = k; + k = menuActionCmd1[j]; + menuActionCmd1[j] = menuActionCmd1[j + 1]; + menuActionCmd1[j + 1] = k; + flag = false; + } + } + + } + } + + public int method83(int i, int j, int k) { + int l = 256 - k; + return ((i & 0xff00ff) * l + (j & 0xff00ff) * k & 0xff00ff00) + ((i & 0xff00) * l + (j & 0xff00) * k & 0xff0000) >> 8; + } + + public void login(String s, String s1, boolean flag) { + Signlink.errorname = s; + try { + if (!flag) { + loginMessage1 = ""; + loginMessage2 = "Connecting to server..."; + drawLoginScreen(true); + } + socketStream = new RSSocket(this, openSocket(43594 + portOff)); + long l = TextClass.longForName(s); + int i = (int) (l >> 16 & 31L); + stream.currentOffset = 0; + stream.writeWordBigEndian(14); + stream.writeWordBigEndian(i); + socketStream.queueBytes(2, stream.buffer); + for (int j = 0; j < 8; j++) { + socketStream.read(); + } + + int k = socketStream.read(); + int i1 = k; + if (k == 0) { + socketStream.flushInputStream(inStream.buffer, 8); + inStream.currentOffset = 0; + aLong1215 = inStream.readQWord(); + int ai[] = new int[4]; + ai[0] = (int) (Math.random() * 99999999D); + ai[1] = (int) (Math.random() * 99999999D); + ai[2] = (int) (aLong1215 >> 32); + ai[3] = (int) aLong1215; + stream.currentOffset = 0; + stream.writeWordBigEndian(10); + stream.writeDWord(ai[0]); + stream.writeDWord(ai[1]); + stream.writeDWord(ai[2]); + stream.writeDWord(ai[3]); + stream.writeDWord(ClientSettings.UID); + stream.writeString(s); + stream.writeString(s1); + stream.doKeys(); + aStream_847.currentOffset = 0; + if (flag) { + aStream_847.writeWordBigEndian(18); + } else { + aStream_847.writeWordBigEndian(16); + } + aStream_847.writeWordBigEndian(stream.currentOffset + 36 + 1 + 1 + 2); + aStream_847.writeWordBigEndian(255); + aStream_847.writeWord(1); + aStream_847.writeWordBigEndian(lowMem ? 1 : 0); + for (int l1 = 0; l1 < 9; l1++) { + aStream_847.writeDWord(expectedCRCs[l1]); + } + + aStream_847.writeBytes(stream.buffer, stream.currentOffset, 0); + stream.encryption = new ISAACRandomGen(ai); + for (int j2 = 0; j2 < 4; j2++) { + ai[j2] += 50; + } + + encryption = new ISAACRandomGen(ai); + socketStream.queueBytes(aStream_847.currentOffset, aStream_847.buffer); + k = socketStream.read(); + } + if (k == 1) { + try { + Thread.sleep(2000L); + } catch (Exception _ex) { + } + login(s, s1, flag); + return; + } + if (k == 2) { + myPrivilege = socketStream.read(); + flagged = socketStream.read() == 1; + aLong1220 = 0L; + anInt1022 = 0; + mouseDetection.coordsIndex = 0; + super.awtFocus = true; + aBoolean954 = true; + loggedIn = true; + stream.currentOffset = 0; + inStream.currentOffset = 0; + pktType = -1; + anInt841 = -1; + anInt842 = -1; + anInt843 = -1; + pktSize = 0; + anInt1009 = 0; + anInt1104 = 0; + anInt1011 = 0; + anInt855 = 0; + menuActionRow = 0; + menuOpen = false; + super.idleTime = 0; + for (int j1 = 0; j1 < 100; j1++) { + chatMessages[j1] = null; + } + + itemSelected = 0; + spellSelected = 0; + loadingStage = 0; + currentSound = 0; + anInt1278 = (int) (Math.random() * 100D) - 50; + anInt1131 = (int) (Math.random() * 110D) - 55; + anInt896 = (int) (Math.random() * 80D) - 40; + minimapInt2 = (int) (Math.random() * 120D) - 60; + minimapInt3 = (int) (Math.random() * 30D) - 20; + minimapInt1 = (int) (Math.random() * 20D) - 10 & 0x7ff; + anInt1021 = 0; + anInt985 = -1; + destX = 0; + destY = 0; + playerCount = 0; + npcCount = 0; + for (int i2 = 0; i2 < maxPlayers; i2++) { + playerArray[i2] = null; + aStreamArray895s[i2] = null; + } + + for (int k2 = 0; k2 < 16384; k2++) { + npcArray[k2] = null; + } + + myPlayer = playerArray[myPlayerIndex] = new Player(); + aClass19_1013.removeAll(); + aClass19_1056.removeAll(); + for (int l2 = 0; l2 < 4; l2++) { + for (int i3 = 0; i3 < 104; i3++) { + for (int k3 = 0; k3 < 104; k3++) { + groundArray[l2][i3][k3] = null; + } + + } + + } + + aClass19_1179 = new NodeList(); + anInt900 = 0; + friendsCount = 0; + dialogID = -1; + backDialogID = -1; + openInterfaceID = -1; + invOverlayInterfaceID = -1; + fullScreenBackDialogID = -1; + fullScreenInterfaceId = -1; + anInt1018 = -1; + aBoolean1149 = false; + tabID = 3; + inputDialogState = 0; + menuOpen = false; + messagePromptRaised = false; + aString844 = null; + anInt1055 = 0; + anInt1054 = -1; + aBoolean1047 = true; + method45(); + for (int j3 = 0; j3 < 5; j3++) { + anIntArray990[j3] = 0; + } + + for (int l3 = 0; l3 < 5; l3++) { + atPlayerActions[l3] = null; + atPlayerArray[l3] = false; + } + + anInt1175 = 0; + anInt1134 = 0; + anInt986 = 0; + anInt1288 = 0; + anInt924 = 0; + anInt1188 = 0; + anInt1155 = 0; + anInt1226 = 0; + resetImageProducers2(); + return; + } + if (k == 3) { + loginMessage1 = ""; + loginMessage2 = "Invalid username or password."; + return; + } + if (k == 4) { + loginMessage1 = "Your account has been disabled."; + loginMessage2 = "Please check your message-center for details."; + return; + } + if (k == 5) { + loginMessage1 = "Your account is already logged in."; + loginMessage2 = "Try again in 60 secs..."; + return; + } + if (k == 6) { + loginMessage1 = "" + ClientSettings.SERVER_NAME + " has been updated!"; + loginMessage2 = "Please reload this page."; + return; + } + if (k == 7) { + loginMessage1 = "This world is full."; + loginMessage2 = "Please use a different world."; + return; + } + if (k == 8) { + loginMessage1 = "Unable to connect."; + loginMessage2 = "Login server offline."; + return; + } + if (k == 9) { + loginMessage1 = "Login limit exceeded."; + loginMessage2 = "Too many connections from your address."; + return; + } + if (k == 10) { + loginMessage1 = "Unable to connect."; + loginMessage2 = "Bad session id."; + return; + } + if (k == 11) { + loginMessage2 = "Login server rejected session."; + loginMessage2 = "Please try again."; + return; + } + if (k == 12) { + loginMessage1 = "Only staff are allowed to play right now."; + loginMessage2 = "Please login using a staff account."; + //loginMessage1 = "You need a members account to login to this world."; + //loginMessage2 = "Please subscribe, or use a different world."; + return; + } + if (k == 13) { + loginMessage1 = "Could not complete login."; + loginMessage2 = "Please try using a different world."; + return; + } + if (k == 14) { + loginMessage1 = "The server is being updated."; + loginMessage2 = "Please wait 1 minute and try again."; + return; + } + if (k == 15) { + loggedIn = true; + stream.currentOffset = 0; + inStream.currentOffset = 0; + pktType = -1; + anInt841 = -1; + anInt842 = -1; + anInt843 = -1; + pktSize = 0; + anInt1009 = 0; + anInt1104 = 0; + menuActionRow = 0; + menuOpen = false; + aLong824 = System.currentTimeMillis(); + return; + } + if (k == 16) { + loginMessage1 = "Login attempts exceeded."; + loginMessage2 = "Please wait 1 minute and try again."; + return; + } + if (k == 17) { + loginMessage1 = "You are standing in a members-only area."; + loginMessage2 = "To play on this world move to a free area first"; + return; + } + if (k == 20) { + loginMessage1 = "Invalid loginserver requested"; + loginMessage2 = "Please try using a different world."; + return; + } + if (k == 30) { + loginMessage1 = "You need a forum account to play."; + loginMessage2 = "Go to " + ClientSettings.SERVER_WEBSITE + " to register."; + return; + } + if (k == 31) { + loginMessage1 = "You're using an invalid or outdated client."; + loginMessage2 = "Get the latest version at " + ClientSettings.SERVER_WEBSITE + ""; + return; + } + if (k == 32) { + loginMessage1 = "You need to recover your account first,"; + loginMessage2 = "go to " + ClientSettings.SERVER_WEBSITE + "/help for a tutorial!"; + return; + } + if (k == 33) { + loginMessage1 = "You need a members account to login to this world."; + loginMessage2 = "Please subscribe, or use a different world."; + return; + } + if (k == 34) { + loginMessage1 = "You need to activate your forum account first."; + loginMessage2 = "Click on confirm in the email we have send you!"; + return; + } + if (k == 21) { + for (int k1 = socketStream.read(); k1 >= 0; k1--) { + loginMessage1 = "You have only just left another world"; + loginMessage2 = "Your profile will be transferred in: " + k1 + " seconds"; + drawLoginScreen(true); + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + } + + login(s, s1, flag); + return; + } + if (k == -1) { + if (i1 == 0) { + if (loginFailures < 2) { + try { + Thread.sleep(2000L); + } catch (Exception _ex) { + } + loginFailures++; + login(s, s1, flag); + return; + } else { + loginMessage1 = "Error connecting to server."; + loginMessage2 = "Please try again in a little while."; + return; + } + } else { + loginMessage1 = "No response from server"; + loginMessage2 = "Please try using a different world."; + return; + } + } else { + System.out.println("response:" + k); + loginMessage1 = "Unexpected server response"; + loginMessage2 = "Please try using a different world."; + return; + } + } catch (IOException _ex) { + loginMessage1 = ""; + } + loginMessage2 = "Error connecting to server."; + } + + public boolean doWalkTo(int i, int j, int k, int i1, int j1, int k1, int l1, int i2, int j2, boolean flag, int k2) { + byte byte0 = 104; + byte byte1 = 104; + for (int l2 = 0; l2 < byte0; l2++) { + for (int i3 = 0; i3 < byte1; i3++) { + anIntArrayArray901[l2][i3] = 0; + anIntArrayArray825[l2][i3] = 0x5f5e0ff; + } + + } + + int j3 = j2; + int k3 = j1; + anIntArrayArray901[j2][j1] = 99; + anIntArrayArray825[j2][j1] = 0; + int l3 = 0; + int i4 = 0; + bigX[l3] = j2; + bigY[l3++] = j1; + boolean flag1 = false; + int j4 = bigX.length; + int ai[][] = aClass11Array1230[plane].anIntArrayArray294; + while (i4 != l3) { + j3 = bigX[i4]; + k3 = bigY[i4]; + i4 = (i4 + 1) % j4; + if (j3 == k2 && k3 == i2) { + flag1 = true; + break; + } + if (i1 != 0) { + if ((i1 < 5 || i1 == 10) && aClass11Array1230[plane].method219(k2, j3, k3, j, i1 - 1, i2)) { + flag1 = true; + break; + } + if (i1 < 10 && aClass11Array1230[plane].method220(k2, i2, k3, i1 - 1, j, j3)) { + flag1 = true; + break; + } + } + if (k1 != 0 && k != 0 && aClass11Array1230[plane].method221(i2, k2, j3, k, l1, k1, k3)) { + flag1 = true; + break; + } + int l4 = anIntArrayArray825[j3][k3] + 1; + if (j3 > 0 && anIntArrayArray901[j3 - 1][k3] == 0 && (ai[j3 - 1][k3] & 0x1280108) == 0) { + bigX[l3] = j3 - 1; + bigY[l3] = k3; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 - 1][k3] = 2; + anIntArrayArray825[j3 - 1][k3] = l4; + } + if (j3 < byte0 - 1 && anIntArrayArray901[j3 + 1][k3] == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0) { + bigX[l3] = j3 + 1; + bigY[l3] = k3; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 + 1][k3] = 8; + anIntArrayArray825[j3 + 1][k3] = l4; + } + if (k3 > 0 && anIntArrayArray901[j3][k3 - 1] == 0 && (ai[j3][k3 - 1] & 0x1280102) == 0) { + bigX[l3] = j3; + bigY[l3] = k3 - 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3][k3 - 1] = 1; + anIntArrayArray825[j3][k3 - 1] = l4; + } + if (k3 < byte1 - 1 && anIntArrayArray901[j3][k3 + 1] == 0 && (ai[j3][k3 + 1] & 0x1280120) == 0) { + bigX[l3] = j3; + bigY[l3] = k3 + 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3][k3 + 1] = 4; + anIntArrayArray825[j3][k3 + 1] = l4; + } + if (j3 > 0 && k3 > 0 && anIntArrayArray901[j3 - 1][k3 - 1] == 0 && (ai[j3 - 1][k3 - 1] & 0x128010e) == 0 && (ai[j3 - 1][k3] & 0x1280108) == 0 && (ai[j3][k3 - 1] & 0x1280102) == 0) { + bigX[l3] = j3 - 1; + bigY[l3] = k3 - 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 - 1][k3 - 1] = 3; + anIntArrayArray825[j3 - 1][k3 - 1] = l4; + } + if (j3 < byte0 - 1 && k3 > 0 && anIntArrayArray901[j3 + 1][k3 - 1] == 0 && (ai[j3 + 1][k3 - 1] & 0x1280183) == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0 && (ai[j3][k3 - 1] & 0x1280102) == 0) { + bigX[l3] = j3 + 1; + bigY[l3] = k3 - 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 + 1][k3 - 1] = 9; + anIntArrayArray825[j3 + 1][k3 - 1] = l4; + } + if (j3 > 0 && k3 < byte1 - 1 && anIntArrayArray901[j3 - 1][k3 + 1] == 0 && (ai[j3 - 1][k3 + 1] & 0x1280138) == 0 && (ai[j3 - 1][k3] & 0x1280108) == 0 && (ai[j3][k3 + 1] & 0x1280120) == 0) { + bigX[l3] = j3 - 1; + bigY[l3] = k3 + 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 - 1][k3 + 1] = 6; + anIntArrayArray825[j3 - 1][k3 + 1] = l4; + } + if (j3 < byte0 - 1 && k3 < byte1 - 1 && anIntArrayArray901[j3 + 1][k3 + 1] == 0 && (ai[j3 + 1][k3 + 1] & 0x12801e0) == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0 && (ai[j3][k3 + 1] & 0x1280120) == 0) { + bigX[l3] = j3 + 1; + bigY[l3] = k3 + 1; + l3 = (l3 + 1) % j4; + anIntArrayArray901[j3 + 1][k3 + 1] = 12; + anIntArrayArray825[j3 + 1][k3 + 1] = l4; + } + } + anInt1264 = 0; + if (!flag1) { + if (flag) { + int i5 = 100; + for (int k5 = 1; k5 < 2; k5++) { + for (int i6 = k2 - k5; i6 <= k2 + k5; i6++) { + for (int l6 = i2 - k5; l6 <= i2 + k5; l6++) { + if (i6 >= 0 && l6 >= 0 && i6 < 104 && l6 < 104 && anIntArrayArray825[i6][l6] < i5) { + i5 = anIntArrayArray825[i6][l6]; + j3 = i6; + k3 = l6; + anInt1264 = 1; + flag1 = true; + } + } + + } + + if (flag1) { + break; + } + } + + } + if (!flag1) { + return false; + } + } + i4 = 0; + bigX[i4] = j3; + bigY[i4++] = k3; + int l5; + for (int j5 = l5 = anIntArrayArray901[j3][k3]; j3 != j2 || k3 != j1; j5 = anIntArrayArray901[j3][k3]) { + if (j5 != l5) { + l5 = j5; + bigX[i4] = j3; + bigY[i4++] = k3; + } + if ((j5 & 2) != 0) { + j3++; + } else if ((j5 & 8) != 0) { + j3--; + } + if ((j5 & 1) != 0) { + k3++; + } else if ((j5 & 4) != 0) { + k3--; + } + } + // if(cancelWalk) { return i4 > 0; } + + if (i4 > 0) { + int k4 = i4; + if (k4 > 25) { + k4 = 25; + } + i4--; + int k6 = bigX[i4]; + int i7 = bigY[i4]; + anInt1288 += k4; + if (anInt1288 >= 92) { + stream.createFrame(36); + stream.writeDWord(0); + anInt1288 = 0; + } + if (i == 0) { + stream.createFrame(164); + stream.writeWordBigEndian(k4 + k4 + 3); + } + if (i == 1) { + stream.createFrame(248); + stream.writeWordBigEndian(k4 + k4 + 3 + 14); + } + if (i == 2) { + stream.createFrame(98); + stream.writeWordBigEndian(k4 + k4 + 3); + } + stream.method433(k6 + baseX); + destX = bigX[0]; + destY = bigY[0]; + for (int j7 = 1; j7 < k4; j7++) { + i4--; + stream.writeWordBigEndian(bigX[i4] - k6); + stream.writeWordBigEndian(bigY[i4] - i7); + } + + stream.method431(i7 + baseY); + stream.method424(super.keyArray[5] != 1 ? 0 : 1); + return true; + } + return i != 1; + } + + static final int method77(int i, int i_1_) { + if (i_1_ == -2) + return 12345678; + if (i_1_ == -1) { + if (i < 0) + i = 0; + else if (i > 127) + i = 127; + i = 127 - i; + return i; + } + i = i * (i_1_ & 0x7f) / 128; + if (i < 2) + i = 2; + else if (i > 126) + i = 126; + return (i_1_ & 0xff80) + i; + } + + public void method86(Stream stream) { + for (int j = 0; j < anInt893; j++) { + int k = anIntArray894[j]; + NPC npc = npcArray[k]; + int l = stream.readUnsignedByte(); + if ((l & 0x10) != 0) { + int i1 = stream.method434(); + if (i1 == 65535) { + i1 = -1; + } + int i2 = stream.readUnsignedByte(); + if (i1 == npc.anim && i1 != -1) { + int l2 = Animation.anims[i1].anInt365; + if (l2 == 1) { + npc.anInt1527 = 0; + npc.anInt1528 = 0; + npc.anInt1529 = i2; + npc.anInt1530 = 0; + } + if (l2 == 2) { + npc.anInt1530 = 0; + } + } else if (i1 == -1 || npc.anim == -1 || Animation.anims[i1].anInt359 >= Animation.anims[npc.anim].anInt359) { + npc.anim = i1; + npc.anInt1527 = 0; + npc.anInt1528 = 0; + npc.anInt1529 = i2; + npc.anInt1530 = 0; + npc.anInt1542 = npc.smallXYIndex; + } + } + if ((l & 8) != 0) { + int j1 = stream.readUnsignedByteA(); + int j2 = stream.method427(); + npc.updateHitData(j2, j1, loopCycle); + npc.loopCycleStatus = loopCycle + 300; + npc.currentHealth = stream.readUnsignedByteA(); + npc.maxHealth = stream.readUnsignedByte(); + } + if ((l & 0x80) != 0) { + npc.anInt1520 = stream.readUnsignedWord(); + int k1 = stream.readDWord(); + npc.anInt1524 = k1 >> 16; + npc.anInt1523 = loopCycle + (k1 & 0xffff); + npc.anInt1521 = 0; + npc.anInt1522 = 0; + if (npc.anInt1523 > loopCycle) { + npc.anInt1521 = -1; + } + if (npc.anInt1520 == 65535) { + npc.anInt1520 = -1; + } + } + if ((l & 0x20) != 0) { + npc.interactingEntity = stream.readUnsignedWord(); + if (npc.interactingEntity == 65535) { + npc.interactingEntity = -1; + } + } + if ((l & 1) != 0) { + npc.textSpoken = stream.readString(); + npc.textCycle = 100; + } + if ((l & 0x40) != 0) { + int l1 = stream.method427(); + int k2 = stream.method428(); + npc.updateHitData(k2, l1, loopCycle); + npc.loopCycleStatus = loopCycle + 300; + npc.currentHealth = stream.method428(); + npc.maxHealth = stream.method427(); + } + if ((l & 2) != 0) { + npc.desc = EntityDef.forID(stream.method436()); + npc.anInt1540 = npc.desc.aByte68; + npc.anInt1504 = npc.desc.anInt79; + npc.anInt1554 = npc.desc.anInt67; + npc.anInt1555 = npc.desc.anInt58; + npc.anInt1556 = npc.desc.anInt83; + npc.anInt1557 = npc.desc.anInt55; + npc.anInt1511 = npc.desc.anInt77; + } + if ((l & 4) != 0) { + npc.anInt1538 = stream.method434(); + npc.anInt1539 = stream.method434(); + } + } + } + + public void buildAtNPCMenu(EntityDef entityDef, int i, int j, int k) { + if (menuActionRow >= 400) { + return; + } + if (entityDef.childrenIDs != null) { + entityDef = entityDef.method161(); + } + if (entityDef == null) { + return; + } + if (!entityDef.aBoolean84) { + return; + } + String s = entityDef.name; + if (entityDef.combatLevel != 0) { + s = s + combatDiffColor(myPlayer.combatLevel, entityDef.combatLevel) + " (level-" + entityDef.combatLevel + ")"; + } + if (itemSelected == 1) { + menuActionName[menuActionRow] = "Use " + selectedItemName + " with @yel@" + s; + menuActionID[menuActionRow] = 582; + menuActionCmd1[menuActionRow] = i; + menuActionCmd2[menuActionRow] = k; + menuActionCmd3[menuActionRow] = j; + menuActionRow++; + return; + } + if (spellSelected == 1) { + if ((spellUsableOn & 2) == 2) { + menuActionName[menuActionRow] = spellTooltip + " @yel@" + s; + menuActionID[menuActionRow] = 413; + menuActionCmd1[menuActionRow] = i; + menuActionCmd2[menuActionRow] = k; + menuActionCmd3[menuActionRow] = j; + menuActionRow++; + } + } else { + if (entityDef.actions != null) { + for (int l = 4; l >= 0; l--) { + if (entityDef.actions[l] != null && !entityDef.actions[l].equalsIgnoreCase("attack")) { + menuActionName[menuActionRow] = entityDef.actions[l] + " @yel@" + s; + if (l == 0) { + menuActionID[menuActionRow] = 20; + } + if (l == 1) { + menuActionID[menuActionRow] = 412; + } + if (l == 2) { + menuActionID[menuActionRow] = 225; + } + if (l == 3) { + menuActionID[menuActionRow] = 965; + } + if (l == 4) { + menuActionID[menuActionRow] = 478; + } + menuActionCmd1[menuActionRow] = i; + menuActionCmd2[menuActionRow] = k; + menuActionCmd3[menuActionRow] = j; + menuActionRow++; + } + } + + } + if (entityDef.actions != null) { + for (int i1 = 4; i1 >= 0; i1--) { + if (entityDef.actions[i1] != null && entityDef.actions[i1].equalsIgnoreCase("attack")) { + char c = '\0'; + if (entityDef.combatLevel > myPlayer.combatLevel) { + c = '\u07D0'; + } + menuActionName[menuActionRow] = entityDef.actions[i1] + " @yel@" + s; + if (i1 == 0) { + menuActionID[menuActionRow] = 20 + c; + } + if (i1 == 1) { + menuActionID[menuActionRow] = 412 + c; + } + if (i1 == 2) { + menuActionID[menuActionRow] = 225 + c; + } + if (i1 == 3) { + menuActionID[menuActionRow] = 965 + c; + } + if (i1 == 4) { + menuActionID[menuActionRow] = 478 + c; + } + menuActionCmd1[menuActionRow] = i; + menuActionCmd2[menuActionRow] = k; + menuActionCmd3[menuActionRow] = j; + menuActionRow++; + } + } + + } + menuActionName[menuActionRow] = "Examine @yel@" + s + (showInfo ? " @gre@(@whi@" + entityDef.type + "@gre@)" : ""); + menuActionID[menuActionRow] = 1025; + menuActionCmd1[menuActionRow] = i; + menuActionCmd2[menuActionRow] = k; + menuActionCmd3[menuActionRow] = j; + menuActionRow++; + } + } + + public void buildAtPlayerMenu(int i, int j, Player player, int k) { + if (player == myPlayer) { + return; + } + if (menuActionRow >= 400) { + return; + } + String s; + if (player.skill == 0) { + s = player.name + combatDiffColor(myPlayer.combatLevel, player.combatLevel) + " (level-" + player.combatLevel + ")"; + } else { + s = player.name + " (skill-" + player.skill + ")"; + } + if (itemSelected == 1) { + menuActionName[menuActionRow] = "Use " + selectedItemName + " with @whi@" + s; + menuActionID[menuActionRow] = 491; + menuActionCmd1[menuActionRow] = j; + menuActionCmd2[menuActionRow] = i; + menuActionCmd3[menuActionRow] = k; + menuActionRow++; + } else if (spellSelected == 1) { + if ((spellUsableOn & 8) == 8) { + menuActionName[menuActionRow] = spellTooltip + " @whi@" + s; + menuActionID[menuActionRow] = 365; + menuActionCmd1[menuActionRow] = j; + menuActionCmd2[menuActionRow] = i; + menuActionCmd3[menuActionRow] = k; + menuActionRow++; + } + } else { + for (int l = 4; l >= 0; l--) { + if (atPlayerActions[l] != null) { + menuActionName[menuActionRow] = atPlayerActions[l] + " @whi@" + s; + char c = '\0'; + if (atPlayerActions[l].equalsIgnoreCase("attack")) { + if (player.combatLevel > myPlayer.combatLevel) { + c = '\u07D0'; + } + if (myPlayer.team != 0 && player.team != 0) { + if (myPlayer.team == player.team) { + c = '\u07D0'; + } else { + c = '\0'; + } + } + } else if (atPlayerArray[l]) { + c = '\u07D0'; + } + if (l == 0) { + menuActionID[menuActionRow] = 561 + c; + } + if (l == 1) { + menuActionID[menuActionRow] = 779 + c; + } + if (l == 2) { + menuActionID[menuActionRow] = 27 + c; + } + if (l == 3) { + menuActionID[menuActionRow] = 577 + c; + } + if (l == 4) { + menuActionID[menuActionRow] = 729 + c; + } + menuActionCmd1[menuActionRow] = j; + menuActionCmd2[menuActionRow] = i; + menuActionCmd3[menuActionRow] = k; + menuActionRow++; + } + } + + } + for (int i1 = 0; i1 < menuActionRow; i1++) { + if (menuActionID[i1] == 516) { + menuActionName[i1] = "Walk here @whi@" + s; + return; + } + } + + } + + public void method89(Class30_Sub1 class30_sub1) { + int i = 0; + int j = -1; + int k = 0; + int l = 0; + if (class30_sub1.anInt1296 == 0) { + i = worldController.method300(class30_sub1.anInt1295, class30_sub1.anInt1297, class30_sub1.anInt1298); + } + if (class30_sub1.anInt1296 == 1) { + i = worldController.method301(class30_sub1.anInt1295, class30_sub1.anInt1297, class30_sub1.anInt1298); + } + if (class30_sub1.anInt1296 == 2) { + i = worldController.method302(class30_sub1.anInt1295, class30_sub1.anInt1297, class30_sub1.anInt1298); + } + if (class30_sub1.anInt1296 == 3) { + i = worldController.method303(class30_sub1.anInt1295, class30_sub1.anInt1297, class30_sub1.anInt1298); + } + if (i != 0) { + int i1 = worldController.method304(class30_sub1.anInt1295, class30_sub1.anInt1297, class30_sub1.anInt1298, i); + j = i >> 14 & 0x7fff; + k = i1 & 0x1f; + l = i1 >> 6; + } + class30_sub1.anInt1299 = j; + class30_sub1.anInt1301 = k; + class30_sub1.anInt1300 = l; + } + + public final void method90() { + for (int index = 0; index < currentSound; index++) { + //if (soundDelay[index] <= 0) { + boolean flag1 = false; + try { + Stream stream = Sounds.method241(soundType[index], sound[index]); + new SoundPlayer((InputStream) new ByteArrayInputStream(stream.buffer, 0, stream.currentOffset), soundVolume[index], soundDelay[index]); + if (System.currentTimeMillis() + (long) (stream.currentOffset / 22) > aLong1172 + (long) (anInt1257 / 22)) { + anInt1257 = stream.currentOffset; + aLong1172 = System.currentTimeMillis(); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + if (!flag1 || soundDelay[index] == -5) { + currentSound--; + for (int j = index; j < currentSound; j++) { + sound[j] = sound[j + 1]; + soundType[j] = soundType[j + 1]; + soundDelay[j] = soundDelay[j + 1]; + soundVolume[j] = soundVolume[j + 1]; + } + index--; + } else { + soundDelay[index] = -5; + } + /*} else { + soundDelay[index]--; + }*/ + } + if (previousSong > 0) { + previousSong -= 20; + if (previousSong < 0) + previousSong = 0; + if (previousSong == 0 && musicVolume != 0 && currentSong != -1) { + method56(musicVolume, false, currentSong); + } + } + } + + private void connectServer() + { + int j = 5; + expectedCRCs[8] = 0; + int k = 0; + while(expectedCRCs[8] == 0) + { + String s = "Unknown problem"; + drawLoadingText(20, "Connecting to web server"); + try + { + DataInputStream datainputstream = openJagGrabInputStream("crc" + (int)(Math.random() * 99999999D) + "-" + 317); + Stream class30_sub2_sub2 = new Stream(new byte[40]); + datainputstream.readFully(class30_sub2_sub2.buffer, 0, 40); + datainputstream.close(); + for(int i1 = 0; i1 < 9; i1++) + expectedCRCs[i1] = class30_sub2_sub2.readDWord(); + + int j1 = class30_sub2_sub2.readDWord(); + int k1 = 1234; + for(int l1 = 0; l1 < 9; l1++) + k1 = (k1 << 1) + expectedCRCs[l1]; + + if(j1 != k1) + { + s = "checksum problem"; + expectedCRCs[8] = 0; + } + } + catch(EOFException _ex) + { + s = "EOF problem"; + expectedCRCs[8] = 0; + } + catch(IOException _ex) + { + s = "connection problem"; + expectedCRCs[8] = 0; + } + catch(Exception _ex) + { + s = "logic problem"; + expectedCRCs[8] = 0; + if(!Signlink.reporterror) + return; + } + if(expectedCRCs[8] == 0) + { + k++; + for(int l = j; l > 0; l--) + { + if(k >= 10) + { + drawLoadingText(10, "Game updated - please reload page"); + l = 10; + } else + { + drawLoadingText(10, s + " - Will retry in " + l + " secs."); + } + try + { + Thread.sleep(1000L); + } + catch(Exception _ex) { } + } + + j *= 2; + if(j > 60) + j = 60; + aBoolean872 = !aBoolean872; + } + } + } + + void startUp() { + drawLoadingText(20, "Starting up"); +// try { +// CacheDownloader.download(this, new URL("https://dl.dropboxusercontent.com/u/19852069/assets.zip")); +// } catch (IOException e) { +// e.printStackTrace(); +// } + if (Signlink.sunjava) { + super.minDelay = 5; + } + aBoolean993 = true; + boolean flag = true; + if (!flag) { + genericLoadingError = true; + return; + } + if (Signlink.cache_dat != null) { + for (int i = 0; i < 5; i++) { + decompressors[i] = new Decompressor(Signlink.cache_dat, Signlink.cache_idx[i], i + 1); + } + + } + try { + connectServer(); + titleStreamLoader = streamLoaderForName(1, "title screen", "title", expectedCRCs[1], 25); + aTextDrawingArea_1270 = new TextDrawingArea(false, "p11_full", titleStreamLoader); + aTextDrawingArea_1271 = new TextDrawingArea(false, "p12_full", titleStreamLoader); + chatTextDrawingArea = new TextDrawingArea(false, "b12_full", titleStreamLoader); + TextDrawingArea aTextDrawingArea_1273 = new TextDrawingArea(true, "q8_full", titleStreamLoader); + drawLogo(); + loadTitleScreen(); + //repackCacheIndex(1); + constructMusic(); + StreamLoader streamLoader = streamLoaderForName(2, "config", "config", expectedCRCs[2], 30); + StreamLoader streamLoader_1 = streamLoaderForName(3, "interface", "interface", expectedCRCs[3], 35); + StreamLoader streamLoader_2 = streamLoaderForName(4, "2d graphics", "media", expectedCRCs[4], 40); + StreamLoader streamLoader_3 = streamLoaderForName(6, "textures", "textures", expectedCRCs[6], 45); + StreamLoader streamLoader_4 = streamLoaderForName(7, "chat system", "wordenc", expectedCRCs[7], 50); + StreamLoader streamLoader_5 = streamLoaderForName(8, "sound effects", "sounds", expectedCRCs[8], 55); + byteGroundArray = new byte[4][104][104]; + intGroundArray = new int[4][105][105]; + worldController = new WorldController(intGroundArray); + for (int j = 0; j < 4; j++) { + aClass11Array1230[j] = new CollisionMap(); + } + + aClass30_Sub2_Sub1_Sub1_1263 = new Sprite(512, 512); + StreamLoader streamLoader_6 = streamLoaderForName(5, "update list", "versionlist", expectedCRCs[5], 60); + drawLoadingText(60, "Connecting to update server"); + onDemandFetcher = new OnDemandFetcher(); + onDemandFetcher.start(streamLoader_6, this); +// musics(); + Class36.method528(onDemandFetcher.getAnimCount()); + Model.method459(onDemandFetcher.getVersionCount(0), onDemandFetcher); + if (!lowMem) { + method58(10, musicVolume, false, 0); + while (onDemandFetcher.getNodeCount() > 0) { + processOnDemandQueue(); + try { + Thread.sleep(100L); + } catch (Exception _ex) { + } + if (onDemandFetcher.anInt1349 > 3) { + loadError(); + return; + } + } + } + drawLoadingText(65, "Requesting animations"); + int k = onDemandFetcher.getVersionCount(1); + for (int i1 = 0; i1 < k; i1++) { + onDemandFetcher.method558(1, i1); + } + + while (onDemandFetcher.getNodeCount() > 0) { + int j1 = k - onDemandFetcher.getNodeCount(); + if (j1 > 0) { + drawLoadingText(65, "Loading animations - " + j1 * 100 / k + "%"); + } + processOnDemandQueue(); + try { + Thread.sleep(100L); + } catch (Exception _ex) { + } + if (onDemandFetcher.anInt1349 > 3) { + loadError(); + return; + } + } + drawLoadingText(70, "Requesting models"); + k = onDemandFetcher.getVersionCount(0); + for (int k1 = 0; k1 < k; k1++) { + int l1 = onDemandFetcher.getModelIndex(k1); + if ((l1 & 1) != 0) { + onDemandFetcher.method558(0, k1); + } + } + + k = onDemandFetcher.getNodeCount(); + while (onDemandFetcher.getNodeCount() > 0) { + int i2 = k - onDemandFetcher.getNodeCount(); + if (i2 > 0) { + drawLoadingText(70, "Loading models - " + i2 * 100 / k + "%"); + } + processOnDemandQueue(); + try { + Thread.sleep(100L); + } catch (Exception _ex) { + } + } + if (decompressors[0] != null) { + drawLoadingText(75, "Requesting maps"); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 48, 47)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 48, 47)); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 48, 48)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 48, 48)); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 48, 49)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 48, 49)); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 47, 47)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 47, 47)); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 47, 48)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 47, 48)); + onDemandFetcher.method558(3, onDemandFetcher.method562(0, 148, 48)); + onDemandFetcher.method558(3, onDemandFetcher.method562(1, 148, 48)); + k = onDemandFetcher.getNodeCount(); + while (onDemandFetcher.getNodeCount() > 0) { + int j2 = k - onDemandFetcher.getNodeCount(); + if (j2 > 0) { + drawLoadingText(75, "Loading maps - " + j2 * 100 / k + "%"); + } + processOnDemandQueue(); + try { + Thread.sleep(100L); + } catch (Exception _ex) { + } + } + } + k = onDemandFetcher.getVersionCount(0); + for (int k2 = 0; k2 < k; k2++) { + int l2 = onDemandFetcher.getModelIndex(k2); + byte byte0 = 0; + if ((l2 & 8) != 0) { + byte0 = 10; + } else if ((l2 & 0x20) != 0) { + byte0 = 9; + } else if ((l2 & 0x10) != 0) { + byte0 = 8; + } else if ((l2 & 0x40) != 0) { + byte0 = 7; + } else if ((l2 & 0x80) != 0) { + byte0 = 6; + } else if ((l2 & 2) != 0) { + byte0 = 5; + } else if ((l2 & 4) != 0) { + byte0 = 4; + } + if ((l2 & 1) != 0) { + byte0 = 3; + } + if (byte0 != 0) { + onDemandFetcher.method563(byte0, 0, k2); + } + } + + onDemandFetcher.method554(isMembers); + if (!lowMem) { + int l = onDemandFetcher.getVersionCount(2); + for (int i3 = 1; i3 < l; i3++) { + if (onDemandFetcher.method569(i3)) { + onDemandFetcher.method563((byte) 1, 2, i3); + } + } + + } + drawLoadingText(80, "Unpacking media"); + invBack = new Background(streamLoader_2, "invback", 0); + chatBack = new Background(streamLoader_2, "chatback", 0); + mapBack = new Background(streamLoader_2, "mapback", 0); + backBase1 = new Background(streamLoader_2, "backbase1", 0); + backBase2 = new Background(streamLoader_2, "backbase2", 0); + backHmid1 = new Background(streamLoader_2, "backhmid1", 0); + for (int j3 = 0; j3 < 13; j3++) { + sideIcons[j3] = new Background(streamLoader_2, "sideicons", j3); + } + + compass = new Sprite(streamLoader_2, "compass", 0); + mapEdge = new Sprite(streamLoader_2, "mapedge", 0); + mapEdge.method345(); + + multiOverlay = new Sprite(streamLoader_2, "overlay_multiway", 0); + try { + for (int k3 = 0; k3 < 100; k3++) { + mapScenes[k3] = new Background(streamLoader_2, "mapscene", k3); + } + + } catch (Exception _ex) { + } + try { + for (int l3 = 0; l3 < 100; l3++) { + mapFunctions[l3] = new Sprite(streamLoader_2, "mapfunction", l3); + } + + } catch (Exception _ex) { + } + try { + for (int i4 = 0; i4 < 20; i4++) { + hitMarks[i4] = new Sprite(streamLoader_2, "hitmarks", i4); + } + + } catch (Exception _ex) { + } + try { + for (int h1 = 0; h1 < 6; h1++) { + headIconsHint[h1] = new Sprite(streamLoader_2, "headicons_hint", h1); + } + for (int j4 = 0; j4 < 8; j4++) { + headIcons[j4] = new Sprite(streamLoader_2, "headicons_prayer", j4); + } + for (int j45 = 0; j45 < 3; j45++) { + skullIcons[j45] = new Sprite(streamLoader_2, "headicons_pk", j45); + } + } catch (Exception _ex) { + } + mapFlag = new Sprite(streamLoader_2, "mapmarker", 0); + mapMarker = new Sprite(streamLoader_2, "mapmarker", 1); + for (int k4 = 0; k4 < 8; k4++) { + crosses[k4] = new Sprite(streamLoader_2, "cross", k4); + } + + mapDotItem = new Sprite(streamLoader_2, "mapdots", 0); + mapDotNPC = new Sprite(streamLoader_2, "mapdots", 1); + mapDotPlayer = new Sprite(streamLoader_2, "mapdots", 2); + mapDotFriend = new Sprite(streamLoader_2, "mapdots", 3); + mapDotTeam = new Sprite(streamLoader_2, "mapdots", 4); + scrollBar1 = new Background(streamLoader_2, "scrollbar", 0); + scrollBar2 = new Background(streamLoader_2, "scrollbar", 1); + redStone1 = new Background(streamLoader_2, "redstone1", 0); + redStone2 = new Background(streamLoader_2, "redstone2", 0); + redStone3 = new Background(streamLoader_2, "redstone3", 0); + redStone1_2 = new Background(streamLoader_2, "redstone1", 0); + redStone1_2.method358(); + redStone2_2 = new Background(streamLoader_2, "redstone2", 0); + redStone2_2.method358(); + redStone1_3 = new Background(streamLoader_2, "redstone1", 0); + redStone1_3.method359(); + redStone2_3 = new Background(streamLoader_2, "redstone2", 0); + redStone2_3.method359(); + redStone3_2 = new Background(streamLoader_2, "redstone3", 0); + redStone3_2.method359(); + redStone1_4 = new Background(streamLoader_2, "redstone1", 0); + redStone1_4.method358(); + redStone1_4.method359(); + redStone2_4 = new Background(streamLoader_2, "redstone2", 0); + redStone2_4.method358(); + redStone2_4.method359(); + for (int l4 = 0; l4 < 2; l4++) { + modIcons[l4] = new Background(streamLoader_2, "mod_icons", l4); + } + + Sprite sprite = new Sprite(streamLoader_2, "backleft1", 0); + backLeftIP1 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backleft2", 0); + backLeftIP2 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backright1", 0); + backRightIP1 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backright2", 0); + backRightIP2 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backtop1", 0); + backTopIP1 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backvmid1", 0); + backVmidIP1 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backvmid2", 0); + backVmidIP2 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backvmid3", 0); + backVmidIP3 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + sprite = new Sprite(streamLoader_2, "backhmid2", 0); + backVmidIP2_2 = new RSImageProducer(sprite.width, sprite.height, getGameComponent()); + sprite.method346(0, 0); + int i5 = (int) (Math.random() * 21D) - 10; + int j5 = (int) (Math.random() * 21D) - 10; + int k5 = (int) (Math.random() * 21D) - 10; + int l5 = (int) (Math.random() * 41D) - 20; + for (int i6 = 0; i6 < 100; i6++) { + if (mapFunctions[i6] != null) { + mapFunctions[i6].method344(i5 + l5, j5 + l5, k5 + l5); + } + if (mapScenes[i6] != null) { + mapScenes[i6].method360(i5 + l5, j5 + l5, k5 + l5); + } + } + + drawLoadingText(83, "Unpacking textures"); + Texture.method368(streamLoader_3); + Texture.method372(0.80000000000000004D); + Texture.method367(); + drawLoadingText(86, "Unpacking config"); + Animation.unpackConfig(streamLoader); + ObjectDef.unpackConfig(streamLoader); + Flo.unpackConfig(streamLoader); + ItemDef.unpackConfig(streamLoader); + EntityDef.unpackConfig(streamLoader); + IDK.unpackConfig(streamLoader); + SpotAnim.unpackConfig(streamLoader); + Varp.unpackConfig(streamLoader); + VarBit.unpackConfig(streamLoader); + ItemDef.isMembers = isMembers; + // if (!lowMem) { + drawLoadingText(90, "Unpacking sounds"); + byte abyte0[] = streamLoader_5.getDataForName("sounds.dat"); + Stream stream = new Stream(abyte0); + Sounds.unpack(stream); + // } + drawLoadingText(95, "Unpacking interfaces"); + TextDrawingArea aclass30_sub2_sub1_sub4s[] = {aTextDrawingArea_1270, aTextDrawingArea_1271, chatTextDrawingArea, aTextDrawingArea_1273}; + RSInterface.unpack(streamLoader_1, aclass30_sub2_sub1_sub4s, streamLoader_2); + drawLoadingText(100, "Preparing game engine"); + for (int j6 = 0; j6 < 33; j6++) { + int k6 = 999; + int i7 = 0; + for (int k7 = 0; k7 < 34; k7++) { + if (mapBack.aByteArray1450[k7 + j6 * mapBack.anInt1452] == 0) { + if (k6 == 999) { + k6 = k7; + } + continue; + } + if (k6 == 999) { + continue; + } + i7 = k7; + break; + } + + anIntArray968[j6] = k6; + anIntArray1057[j6] = i7 - k6; + } + + for (int l6 = 5; l6 < 156; l6++) { + int j7 = 999; + int l7 = 0; + for (int j8 = 25; j8 < 172; j8++) { + if (mapBack.aByteArray1450[j8 + l6 * mapBack.anInt1452] == 0 && (j8 > 34 || l6 > 34)) { + if (j7 == 999) { + j7 = j8; + } + continue; + } + if (j7 == 999) { + continue; + } + l7 = j8; + break; + } + + anIntArray1052[l6 - 5] = j7 - 25; + anIntArray1229[l6 - 5] = l7 - j7; + } + Texture.method365(765, 503); + gameScreenOffsets = Texture.lineOffsets; + Texture.method365(479, 96); + chatAreaOffsets = Texture.lineOffsets; + Texture.method365(190, 261); + tabAreaOffsets = Texture.lineOffsets; + Texture.method365(512, 334); + chatBoxAreaOffsets = Texture.lineOffsets; + int ai[] = new int[9]; + for (int i8 = 0; i8 < 9; i8++) { + int k8 = 128 + i8 * 32 + 15; + int l8 = 600 + k8 * 3; + int i9 = Texture.anIntArray1470[k8]; + ai[i8] = l8 * i9 >> 16; + } + + WorldController.method310(500, 800, 512, 334, ai); + Censor.loadConfig(streamLoader_4); + mouseDetection = new MouseDetection(this); + startRunnable(mouseDetection, 10); + Animable_Sub5.clientInstance = this; + ObjectDef.clientInstance = this; + EntityDef.clientInstance = this; + return; + } catch (Exception exception) { + Signlink.reporterror("loaderror " + aString1049 + " " + anInt1079); + } + loadingError = true; + } + + public void method91(Stream stream, int i) { + while (stream.bitPosition + 10 < i * 8) { + int j = stream.readBits(11); + if (j == 2047) { + break; + } + if (playerArray[j] == null) { + playerArray[j] = new Player(); + if (aStreamArray895s[j] != null) { + playerArray[j].updatePlayer(aStreamArray895s[j]); + } + } + playerIndices[playerCount++] = j; + Player player = playerArray[j]; + player.anInt1537 = loopCycle; + int k = stream.readBits(1); + if (k == 1) { + anIntArray894[anInt893++] = j; + } + int l = stream.readBits(1); + int i1 = stream.readBits(5); + if (i1 > 15) { + i1 -= 32; + } + int j1 = stream.readBits(5); + if (j1 > 15) { + j1 -= 32; + } + player.setPos(myPlayer.smallX[0] + j1, myPlayer.smallY[0] + i1, l == 1); + } + stream.finishBitAccess(); + } + + public void processMainScreenClick() { + if (anInt1021 != 0) { + return; + } + if (super.clickMode3 == 1) { + int i = super.saveClickX - 25 - 550; + int j = super.saveClickY - 5 - 4; + if (i >= 0 && j >= 0 && i < 146 && j < 151) { + i -= 73; + j -= 75; + int k = minimapInt1 + minimapInt2 & 0x7ff; + int i1 = Texture.anIntArray1470[k]; + int j1 = Texture.anIntArray1471[k]; + i1 = i1 * (minimapInt3 + 256) >> 8; + j1 = j1 * (minimapInt3 + 256) >> 8; + int k1 = j * i1 + i * j1 >> 11; + int l1 = j * j1 - i * i1 >> 11; + int i2 = myPlayer.x + k1 >> 7; + int j2 = myPlayer.y - l1 >> 7; + boolean flag1 = doWalkTo(1, 0, 0, 0, myPlayer.smallY[0], 0, 0, j2, myPlayer.smallX[0], true, i2); + if (flag1) { + stream.writeWordBigEndian(i); + stream.writeWordBigEndian(j); + stream.writeWord(minimapInt1); + stream.writeWordBigEndian(57); + stream.writeWordBigEndian(minimapInt2); + stream.writeWordBigEndian(minimapInt3); + stream.writeWordBigEndian(89); + stream.writeWord(myPlayer.x); + stream.writeWord(myPlayer.y); + stream.writeWordBigEndian(anInt1264); + stream.writeWordBigEndian(63); + } + } + anInt1117++; + if (anInt1117 > 1151) { + anInt1117 = 0; + stream.createFrame(246); + stream.writeWordBigEndian(0); + int l = stream.currentOffset; + if ((int) (Math.random() * 2D) == 0) { + stream.writeWordBigEndian(101); + } + stream.writeWordBigEndian(197); + stream.writeWord((int) (Math.random() * 65536D)); + stream.writeWordBigEndian((int) (Math.random() * 256D)); + stream.writeWordBigEndian(67); + stream.writeWord(14214); + if ((int) (Math.random() * 2D) == 0) { + stream.writeWord(29487); + } + stream.writeWord((int) (Math.random() * 65536D)); + if ((int) (Math.random() * 2D) == 0) { + stream.writeWordBigEndian(220); + } + stream.writeWordBigEndian(180); + stream.writeBytes(stream.currentOffset - l); + } + } + } + + public String interfaceIntToString(int j) { + if (j < 0x3b9ac9ff) { + return String.valueOf(j); + } else { + return "*"; + } + } + + public void showErrorScreen() { + Graphics g = getGameComponent().getGraphics(); + g.setColor(Color.black); + g.fillRect(0, 0, 765, 503); + method4(1); + if (loadingError) { + aBoolean831 = false; + g.setFont(new Font("Helvetica", 1, 16)); + g.setColor(Color.yellow); + int k = 35; + g.drawString("Sorry, an error has occured whilst loading " + ClientSettings.SERVER_NAME + "", 30, k); + k += 50; + g.setColor(Color.white); + g.drawString("To fix this try the following (in order):", 30, k); + k += 50; + g.setColor(Color.white); + g.setFont(new Font("Helvetica", 1, 12)); + g.drawString("1: Try closing ALL open web-browser windows, and reloading", 30, k); + k += 30; + g.drawString("2: Try clearing your web-browsers cache from tools->internet options", 30, k); + k += 30; + g.drawString("3: Try using a different game-world", 30, k); + k += 30; + g.drawString("4: Try rebooting your computer", 30, k); + k += 30; + g.drawString("5: Try selecting a different version of Java from the play-game menu", 30, k); + } + if (genericLoadingError) { + aBoolean831 = false; + g.setFont(new Font("Helvetica", 1, 20)); + g.setColor(Color.white); + g.drawString("Error - unable to load game!", 50, 50); + g.drawString("To play " + ClientSettings.SERVER_NAME + " make sure you play from", 50, 100); + g.drawString("" + ClientSettings.SERVER_WEBSITE + "", 50, 150); + } + if (rsAlreadyLoaded) { + aBoolean831 = false; + g.setColor(Color.yellow); + int l = 35; + g.drawString("Error a copy of " + ClientSettings.SERVER_NAME + " already appears to be loaded", 30, l); + l += 50; + g.setColor(Color.white); + g.drawString("To fix this try the following (in order):", 30, l); + l += 50; + g.setColor(Color.white); + g.setFont(new Font("Helvetica", 1, 12)); + g.drawString("1: Try closing ALL open web-browser windows, and reloading", 30, l); + l += 30; + g.drawString("2: Try rebooting your computer, and reloading", 30, l); + l += 30; + } + } + + public URL getCodeBase() { + // if (SignLink.mainapp != null) { + // return SignLink.mainapp.getCodeBase(); + // } + try { + // if (super.gameFrame != null) { + return new URL("http://" + server + ":" + (80 + portOff)); + // } + } catch (Exception _ex) { + } + return null; + // return super.getCodeBase(); + } + + public void method95() { + for (int j = 0; j < npcCount; j++) { + int k = npcIndices[j]; + NPC npc = npcArray[k]; + if (npc != null) { + method96(npc); + } + } + } + + public void method96(Entity entity) { + if (entity.x < 128 || entity.y < 128 || entity.x >= 13184 || entity.y >= 13184) { + entity.anim = -1; + entity.anInt1520 = -1; + entity.anInt1547 = 0; + entity.anInt1548 = 0; + entity.x = entity.smallX[0] * 128 + entity.anInt1540 * 64; + entity.y = entity.smallY[0] * 128 + entity.anInt1540 * 64; + entity.method446(); + } + if (entity == myPlayer && (entity.x < 1536 || entity.y < 1536 || entity.x >= 11776 || entity.y >= 11776)) { + entity.anim = -1; + entity.anInt1520 = -1; + entity.anInt1547 = 0; + entity.anInt1548 = 0; + entity.x = entity.smallX[0] * 128 + entity.anInt1540 * 64; + entity.y = entity.smallY[0] * 128 + entity.anInt1540 * 64; + entity.method446(); + } + if (entity.anInt1547 > loopCycle) { + method97(entity); + } else if (entity.anInt1548 >= loopCycle) { + method98(entity); + } else { + method99(entity); + } + method100(entity); + method101(entity); + } + + public void method97(Entity entity) { + int i = entity.anInt1547 - loopCycle; + int j = entity.anInt1543 * 128 + entity.anInt1540 * 64; + int k = entity.anInt1545 * 128 + entity.anInt1540 * 64; + entity.x += (j - entity.x) / i; + entity.y += (k - entity.y) / i; + entity.anInt1503 = 0; + if (entity.anInt1549 == 0) { + entity.turnDirection = 1024; + } + if (entity.anInt1549 == 1) { + entity.turnDirection = 1536; + } + if (entity.anInt1549 == 2) { + entity.turnDirection = 0; + } + if (entity.anInt1549 == 3) { + entity.turnDirection = 512; + } + } + + public void method98(Entity entity) { + if (entity.anInt1548 == loopCycle || entity.anim == -1 || entity.anInt1529 != 0 || entity.anInt1528 + 1 > Animation.anims[entity.anim].method258(entity.anInt1527)) { + int i = entity.anInt1548 - entity.anInt1547; + int j = loopCycle - entity.anInt1547; + int k = entity.anInt1543 * 128 + entity.anInt1540 * 64; + int l = entity.anInt1545 * 128 + entity.anInt1540 * 64; + int i1 = entity.anInt1544 * 128 + entity.anInt1540 * 64; + int j1 = entity.anInt1546 * 128 + entity.anInt1540 * 64; + entity.x = (k * (i - j) + i1 * j) / i; + entity.y = (l * (i - j) + j1 * j) / i; + } + entity.anInt1503 = 0; + if (entity.anInt1549 == 0) { + entity.turnDirection = 1024; + } + if (entity.anInt1549 == 1) { + entity.turnDirection = 1536; + } + if (entity.anInt1549 == 2) { + entity.turnDirection = 0; + } + if (entity.anInt1549 == 3) { + entity.turnDirection = 512; + } + entity.anInt1552 = entity.turnDirection; + } + + public void method99(Entity entity) { + entity.anInt1517 = entity.anInt1511; + if (entity.smallXYIndex == 0) { + entity.anInt1503 = 0; + return; + } + if (entity.anim != -1 && entity.anInt1529 == 0) { + Animation animation = Animation.anims[entity.anim]; + if (entity.anInt1542 > 0 && animation.anInt363 == 0) { + entity.anInt1503++; + return; + } + if (entity.anInt1542 <= 0 && animation.anInt364 == 0) { + entity.anInt1503++; + return; + } + } + int i = entity.x; + int j = entity.y; + int k = entity.smallX[entity.smallXYIndex - 1] * 128 + entity.anInt1540 * 64; + int l = entity.smallY[entity.smallXYIndex - 1] * 128 + entity.anInt1540 * 64; + if (k - i > 256 || k - i < -256 || l - j > 256 || l - j < -256) { + entity.x = k; + entity.y = l; + return; + } + if (i < k) { + if (j < l) { + entity.turnDirection = 1280; + } else if (j > l) { + entity.turnDirection = 1792; + } else { + entity.turnDirection = 1536; + } + } else if (i > k) { + if (j < l) { + entity.turnDirection = 768; + } else if (j > l) { + entity.turnDirection = 256; + } else { + entity.turnDirection = 512; + } + } else if (j < l) { + entity.turnDirection = 1024; + } else { + entity.turnDirection = 0; + } + int i1 = entity.turnDirection - entity.anInt1552 & 0x7ff; + if (i1 > 1024) { + i1 -= 2048; + } + int j1 = entity.anInt1555; + if (i1 >= -256 && i1 <= 256) { + j1 = entity.anInt1554; + } else if (i1 >= 256 && i1 < 768) { + j1 = entity.anInt1557; + } else if (i1 >= -768 && i1 <= -256) { + j1 = entity.anInt1556; + } + if (j1 == -1) { + j1 = entity.anInt1554; + } + entity.anInt1517 = j1; + int k1 = 4; + if (entity.anInt1552 != entity.turnDirection && entity.interactingEntity == -1 && entity.anInt1504 != 0) { + k1 = 2; + } + if (entity.smallXYIndex > 2) { + k1 = 6; + } + if (entity.smallXYIndex > 3) { + k1 = 8; + } + if (entity.anInt1503 > 0 && entity.smallXYIndex > 1) { + k1 = 8; + entity.anInt1503--; + } + if (entity.aBooleanArray1553[entity.smallXYIndex - 1]) { + k1 <<= 1; + } + if (k1 >= 8 && entity.anInt1517 == entity.anInt1554 && entity.anInt1505 != -1) { + entity.anInt1517 = entity.anInt1505; + } + if (i < k) { + entity.x += k1; + if (entity.x > k) { + entity.x = k; + } + } else if (i > k) { + entity.x -= k1; + if (entity.x < k) { + entity.x = k; + } + } + if (j < l) { + entity.y += k1; + if (entity.y > l) { + entity.y = l; + } + } else if (j > l) { + entity.y -= k1; + if (entity.y < l) { + entity.y = l; + } + } + if (entity.x == k && entity.y == l) { + entity.smallXYIndex--; + if (entity.anInt1542 > 0) { + entity.anInt1542--; + } + } + } + + public void method100(Entity entity) { + if (entity.anInt1504 == 0) { + return; + } + if (entity.interactingEntity != -1 && entity.interactingEntity < 32768) { + NPC npc = npcArray[entity.interactingEntity]; + if (npc != null) { + int i1 = entity.x - npc.x; + int k1 = entity.y - npc.y; + if (i1 != 0 || k1 != 0) { + entity.turnDirection = (int) (Math.atan2(i1, k1) * 325.94900000000001D) & 0x7ff; + } + } + } + if (entity.interactingEntity >= 32768) { + int j = entity.interactingEntity - 32768; + if (j == unknownInt10) { + j = myPlayerIndex; + } + Player player = playerArray[j]; + if (player != null) { + int l1 = entity.x - player.x; + int i2 = entity.y - player.y; + if (l1 != 0 || i2 != 0) { + entity.turnDirection = (int) (Math.atan2(l1, i2) * 325.94900000000001D) & 0x7ff; + } + } + } + if ((entity.anInt1538 != 0 || entity.anInt1539 != 0) && (entity.smallXYIndex == 0 || entity.anInt1503 > 0)) { + int k = entity.x - (entity.anInt1538 - baseX - baseX) * 64; + int j1 = entity.y - (entity.anInt1539 - baseY - baseY) * 64; + if (k != 0 || j1 != 0) { + entity.turnDirection = (int) (Math.atan2(k, j1) * 325.94900000000001D) & 0x7ff; + } + entity.anInt1538 = 0; + entity.anInt1539 = 0; + } + int l = entity.turnDirection - entity.anInt1552 & 0x7ff; + if (l != 0) { + if (l < entity.anInt1504 || l > 2048 - entity.anInt1504) { + entity.anInt1552 = entity.turnDirection; + } else if (l > 1024) { + entity.anInt1552 -= entity.anInt1504; + } else { + entity.anInt1552 += entity.anInt1504; + } + entity.anInt1552 &= 0x7ff; + if (entity.anInt1517 == entity.anInt1511 && entity.anInt1552 != entity.turnDirection) { + if (entity.anInt1512 != -1) { + entity.anInt1517 = entity.anInt1512; + return; + } + entity.anInt1517 = entity.anInt1554; + } + } + } + + public void method101(Entity entity) { + entity.aBoolean1541 = false; + if (entity.anInt1517 != -1) { + Animation animation = Animation.anims[entity.anInt1517]; + entity.anInt1519++; + if (entity.anInt1518 < animation.anInt352 && entity.anInt1519 > animation.method258(entity.anInt1518)) { + entity.anInt1519 = 0; + entity.anInt1518++; + } + if (entity.anInt1518 >= animation.anInt352) { + entity.anInt1519 = 0; + entity.anInt1518 = 0; + } + } + if (entity.anInt1520 != -1 && loopCycle >= entity.anInt1523) { + if (entity.anInt1521 < 0) { + entity.anInt1521 = 0; + } + Animation animation_1 = SpotAnim.cache[entity.anInt1520].aAnimation_407; + for (entity.anInt1522++; entity.anInt1521 < animation_1.anInt352 && entity.anInt1522 > animation_1.method258(entity.anInt1521); entity.anInt1521++) { + entity.anInt1522 -= animation_1.method258(entity.anInt1521); + } + + if (entity.anInt1521 >= animation_1.anInt352 && (entity.anInt1521 < 0 || entity.anInt1521 >= animation_1.anInt352)) { + entity.anInt1520 = -1; + } + } + if (entity.anim != -1 && entity.anInt1529 <= 1) { + Animation animation_2 = Animation.anims[entity.anim]; + if (animation_2.anInt363 == 1 && entity.anInt1542 > 0 && entity.anInt1547 <= loopCycle && entity.anInt1548 < loopCycle) { + entity.anInt1529 = 1; + return; + } + } + if (entity.anim != -1 && entity.anInt1529 == 0) { + Animation animation_3 = Animation.anims[entity.anim]; + for (entity.anInt1528++; entity.anInt1527 < animation_3.anInt352 && entity.anInt1528 > animation_3.method258(entity.anInt1527); entity.anInt1527++) { + entity.anInt1528 -= animation_3.method258(entity.anInt1527); + } + + if (entity.anInt1527 >= animation_3.anInt352) { + entity.anInt1527 -= animation_3.anInt356; + entity.anInt1530++; + if (entity.anInt1530 >= animation_3.anInt362) { + entity.anim = -1; + } + if (entity.anInt1527 < 0 || entity.anInt1527 >= animation_3.anInt352) { + entity.anim = -1; + } + } + entity.aBoolean1541 = animation_3.aBoolean358; + } + if (entity.anInt1529 > 0) { + entity.anInt1529--; + } + } + + public void drawGameScreen() { + if (fullScreenBackDialogID != -1 && (loadingStage == 2 || super.fullGameScreen != null)) { + if (loadingStage == 2) { + method119(anInt945, fullScreenBackDialogID); + if (fullScreenInterfaceId != -1) + method119(anInt945, fullScreenInterfaceId); + anInt945 = 0; + resetAllImageProducers(); + super.fullGameScreen.initDrawingArea(); + Texture.lineOffsets = gameScreenOffsets; + DrawingArea.setAllPixelsToZero(); + welcomeScreenRaised = true; + RSInterface rSInterface = RSInterface.interfaceCache[fullScreenBackDialogID]; + if (rSInterface.width == 512 && rSInterface.height == 334 + && rSInterface.type == 0) { + rSInterface.width = 765; + rSInterface.height = 503; + } + drawInterface(0, 0, rSInterface, 0); + if (fullScreenInterfaceId != -1) { + RSInterface class13_1 = RSInterface.interfaceCache[fullScreenInterfaceId]; + if (class13_1.width == 512 && class13_1.height == 334 + && class13_1.type == 0) { + class13_1.width = 765; + class13_1.height = 503; + } + drawInterface(0, 0, class13_1, 0); + } + if (!menuOpen) { + processRightClick(); + drawTooltip(); + } else { + drawMenu(); + } + } + super.fullGameScreen.drawGraphics(0, super.graphics, 0); + return; + } + if (welcomeScreenRaised) { + resetImageProducers2(); + welcomeScreenRaised = false; + backLeftIP1.drawGraphics(4, super.graphics, 0); + backLeftIP2.drawGraphics(357, super.graphics, 0); + backRightIP1.drawGraphics(4, super.graphics, 722); + backRightIP2.drawGraphics(205, super.graphics, 743); + backTopIP1.drawGraphics(0, super.graphics, 0); + backVmidIP1.drawGraphics(4, super.graphics, 516); + backVmidIP2.drawGraphics(205, super.graphics, 516); + backVmidIP3.drawGraphics(357, super.graphics, 496); + backVmidIP2_2.drawGraphics(338, super.graphics, 0); + needDrawTabArea = true; + inputTaken = true; + tabAreaAltered = true; + aBoolean1233 = true; + if (loadingStage != 2) { + aRSImageProducer_1165.drawGraphics(4, super.graphics, 4); + aRSImageProducer_1164.drawGraphics(4, super.graphics, 550); + } + } + if (loadingStage == 2) { + method146(); + } + if (menuOpen && menuScreenArea == 1) { + needDrawTabArea = true; + } + if (invOverlayInterfaceID != -1) { + boolean flag1 = method119(anInt945, invOverlayInterfaceID); + if (flag1) { + needDrawTabArea = true; + } + } + if (atInventoryInterfaceType == 2) { + needDrawTabArea = true; + } + if (activeInterfaceType == 2) { + needDrawTabArea = true; + } + if (needDrawTabArea) { + drawTabArea(); + needDrawTabArea = false; + } + if (backDialogID == -1) { + aClass9_1059.scrollPosition = anInt1211 - anInt1089 - 77; + if (super.mouseX > 448 && super.mouseX < 560 && super.mouseY > 332) { + method65(463, 77, super.mouseX - 17, super.mouseY - 357, aClass9_1059, 0, false, anInt1211); + } + int i = anInt1211 - 77 - aClass9_1059.scrollPosition; + if (i < 0) { + i = 0; + } + if (i > anInt1211 - 77) { + i = anInt1211 - 77; + } + if (anInt1089 != i) { + anInt1089 = i; + inputTaken = true; + } + } + if (backDialogID != -1) { + boolean flag2 = method119(anInt945, backDialogID); + if (flag2) { + inputTaken = true; + } + } + if (dialogID != -1) { + inputTaken = true; + } + if (atInventoryInterfaceType == 3) { + inputTaken = true; + } + if (activeInterfaceType == 3) { + inputTaken = true; + } + if (aString844 != null) { + inputTaken = true; + } + if (menuOpen && menuScreenArea == 2) { + inputTaken = true; + } + if (inputTaken) { + drawChatArea(); + inputTaken = false; + } + if (loadingStage == 2) { + drawMinimap(); + aRSImageProducer_1164.drawGraphics(4, super.graphics, 550); + } + if (anInt1054 != -1) { + tabAreaAltered = true; + } + if (tabAreaAltered) { + if (anInt1054 != -1 && anInt1054 == tabID) { + anInt1054 = -1; + stream.createFrame(120); + stream.writeWordBigEndian(tabID); + } + tabAreaAltered = false; + aRSImageProducer_1125.initDrawingArea(); + backHmid1.method361(0, 0); + if (invOverlayInterfaceID == -1) { + if (tabInterfaceIDs[tabID] != -1) { + if (tabID == 0) { + redStone1.method361(22, 10); + } + if (tabID == 1) { + redStone2.method361(54, 8); + } + if (tabID == 2) { + redStone2.method361(82, 8); + } + if (tabID == 3) { + redStone3.method361(110, 8); + } + if (tabID == 4) { + redStone2_2.method361(153, 8); + } + if (tabID == 5) { + redStone2_2.method361(181, 8); + } + if (tabID == 6) { + redStone1_2.method361(209, 9); + } + } + if (tabInterfaceIDs[0] != -1 && (anInt1054 != 0 || loopCycle % 20 < 10)) { + sideIcons[0].method361(29, 13); + } + if (tabInterfaceIDs[1] != -1 && (anInt1054 != 1 || loopCycle % 20 < 10)) { + sideIcons[1].method361(53, 11); + } + if (tabInterfaceIDs[2] != -1 && (anInt1054 != 2 || loopCycle % 20 < 10)) { + sideIcons[2].method361(82, 11); + } + if (tabInterfaceIDs[3] != -1 && (anInt1054 != 3 || loopCycle % 20 < 10)) { + sideIcons[3].method361(115, 12); + } + if (tabInterfaceIDs[4] != -1 && (anInt1054 != 4 || loopCycle % 20 < 10)) { + sideIcons[4].method361(153, 13); + } + if (tabInterfaceIDs[5] != -1 && (anInt1054 != 5 || loopCycle % 20 < 10)) { + sideIcons[5].method361(180, 11); + } + if (tabInterfaceIDs[6] != -1 && (anInt1054 != 6 || loopCycle % 20 < 10)) { + sideIcons[6].method361(208, 13); + } + } + aRSImageProducer_1125.drawGraphics(160, super.graphics, 516); + aRSImageProducer_1124.initDrawingArea(); + backBase2.method361(0, 0); + if (invOverlayInterfaceID == -1) { + if (tabInterfaceIDs[tabID] != -1) { + if (tabID == 7) { + redStone1_3.method361(42, 0); + } + if (tabID == 8) { + redStone2_3.method361(74, 0); + } + if (tabID == 9) { + redStone2_3.method361(102, 0); + } + if (tabID == 10) { + redStone3_2.method361(130, 1); + } + if (tabID == 11) { + redStone2_4.method361(173, 0); + } + if (tabID == 12) { + redStone2_4.method361(201, 0); + } + if (tabID == 13) { + redStone1_4.method361(229, 0); + } + } + if (tabInterfaceIDs[8] != -1 && (anInt1054 != 8 || loopCycle % 20 < 10)) { + sideIcons[7].method361(74, 2); + } + if (tabInterfaceIDs[9] != -1 && (anInt1054 != 9 || loopCycle % 20 < 10)) { + sideIcons[8].method361(102, 3); + } + if (tabInterfaceIDs[10] != -1 && (anInt1054 != 10 || loopCycle % 20 < 10)) { + sideIcons[9].method361(137, 4); + } + if (tabInterfaceIDs[11] != -1 && (anInt1054 != 11 || loopCycle % 20 < 10)) { + sideIcons[10].method361(174, 2); + } + if (tabInterfaceIDs[12] != -1 && (anInt1054 != 12 || loopCycle % 20 < 10)) { + sideIcons[11].method361(201, 2); + } + if (tabInterfaceIDs[13] != -1 && (anInt1054 != 13 || loopCycle % 20 < 10)) { + sideIcons[12].method361(226, 2); + } + } + aRSImageProducer_1124.drawGraphics(466, super.graphics, 496); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + if (aBoolean1233) { + aBoolean1233 = false; + aRSImageProducer_1123.initDrawingArea(); + backBase1.method361(0, 0); + aTextDrawingArea_1271.method382(0xffffff, 55, "Public chat", 28, true); + if (publicChatMode == 0) { + aTextDrawingArea_1271.method382(65280, 55, "On", 41, true); + } + if (publicChatMode == 1) { + aTextDrawingArea_1271.method382(0xffff00, 55, "Friends", 41, true); + } + if (publicChatMode == 2) { + aTextDrawingArea_1271.method382(0xff0000, 55, "Off", 41, true); + } + if (publicChatMode == 3) { + aTextDrawingArea_1271.method382(65535, 55, "Hide", 41, true); + } + aTextDrawingArea_1271.method382(0xffffff, 184, "Private chat", 28, true); + if (privateChatMode == 0) { + aTextDrawingArea_1271.method382(65280, 184, "On", 41, true); + } + if (privateChatMode == 1) { + aTextDrawingArea_1271.method382(0xffff00, 184, "Friends", 41, true); + } + if (privateChatMode == 2) { + aTextDrawingArea_1271.method382(0xff0000, 184, "Off", 41, true); + } + aTextDrawingArea_1271.method382(0xffffff, 324, "Trade/compete", 28, true); + if (tradeMode == 0) { + aTextDrawingArea_1271.method382(65280, 324, "On", 41, true); + } + if (tradeMode == 1) { + aTextDrawingArea_1271.method382(0xffff00, 324, "Friends", 41, true); + } + if (tradeMode == 2) { + aTextDrawingArea_1271.method382(0xff0000, 324, "Off", 41, true); + } + aTextDrawingArea_1271.method382(0xffffff, 458, "Report abuse", 33, true); + aRSImageProducer_1123.drawGraphics(453, super.graphics, 0); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + anInt945 = 0; + } + + public boolean buildFriendsListMenu(RSInterface class9) { + int i = class9.anInt214; + if (i >= 1 && i <= 200 || i >= 701 && i <= 900) { + if (i >= 801) { + i -= 701; + } else if (i >= 701) { + i -= 601; + } else if (i >= 101) { + i -= 101; + } else { + i--; + } + menuActionName[menuActionRow] = "Remove @whi@" + friendsList[i]; + menuActionID[menuActionRow] = 792; + menuActionRow++; + menuActionName[menuActionRow] = "Message @whi@" + friendsList[i]; + menuActionID[menuActionRow] = 639; + menuActionRow++; + return true; + } + if (i >= 401 && i <= 500) { + menuActionName[menuActionRow] = "Remove @whi@" + class9.disabledText; + menuActionID[menuActionRow] = 322; + menuActionRow++; + return true; + } else { + return false; + } + } + + public void method104() { + Animable_Sub3 class30_sub2_sub4_sub3 = (Animable_Sub3) aClass19_1056.reverseGetFirst(); + for (; class30_sub2_sub4_sub3 != null; class30_sub2_sub4_sub3 = (Animable_Sub3) aClass19_1056.reverseGetNext()) { + if (class30_sub2_sub4_sub3.anInt1560 != plane || class30_sub2_sub4_sub3.aBoolean1567) { + class30_sub2_sub4_sub3.unlink(); + } else if (loopCycle >= class30_sub2_sub4_sub3.anInt1564) { + class30_sub2_sub4_sub3.method454(anInt945); + if (class30_sub2_sub4_sub3.aBoolean1567) { + class30_sub2_sub4_sub3.unlink(); + } else { + worldController.method285(class30_sub2_sub4_sub3.anInt1560, 0, class30_sub2_sub4_sub3.anInt1563, -1, class30_sub2_sub4_sub3.anInt1562, 60, class30_sub2_sub4_sub3.anInt1561, class30_sub2_sub4_sub3, false); + } + } + } + + } + + public void drawInterface(int scrollPos, int k, RSInterface class9, int l) { + if (class9.type != 0 || class9.children == null) { + return; + } + if (class9.aBoolean266 && anInt1026 != class9.id && anInt1048 != class9.id && anInt1039 != class9.id) { + return; + } + int i1 = DrawingArea.topX; + int j1 = DrawingArea.topY; + int k1 = DrawingArea.bottomX; + int l1 = DrawingArea.bottomY; + DrawingArea.setDrawingArea(l + class9.height, k, k + class9.width, l); + int i2 = class9.children.length; + for (int j2 = 0; j2 < i2; j2++) { + int k2 = class9.childX[j2] + k; + int l2 = class9.childY[j2] + l - scrollPos; + RSInterface component = RSInterface.interfaceCache[class9.children[j2]]; + k2 += component.anInt263; + l2 += component.anInt265; + if (component.anInt214 > 0) { + drawFriendsListOrWelcomeScreen(component); + } + if (component.type == 0) { + if (component.scrollPosition > component.scrollMax - component.height) { + component.scrollPosition = component.scrollMax - component.height; + } + if (component.scrollPosition < 0) { + component.scrollPosition = 0; + } + drawInterface(component.scrollPosition, k2, component, l2); + if (component.scrollMax > component.height) { + method30(component.height, component.scrollPosition, l2, k2 + component.width, component.scrollMax); + } + } else if (component.type != 1) { + if (component.type == 2) { + int i3 = 0; + for (int l3 = 0; l3 < component.height; l3++) { + for (int l4 = 0; l4 < component.width; l4++) { + int k5 = k2 + l4 * (32 + component.invSpritePadX); + int j6 = l2 + l3 * (32 + component.invSpritePadY); + if (i3 < 20) { + k5 += component.spritesX[i3]; + j6 += component.spritesY[i3]; + } + if (component.inv[i3] > 0) { + int k6 = 0; + int j7 = 0; + int j9 = component.inv[i3] - 1; + if (k5 > DrawingArea.topX - 32 && k5 < DrawingArea.bottomX && j6 > DrawingArea.topY - 32 && j6 < DrawingArea.bottomY || activeInterfaceType != 0 && anInt1085 == i3) { + int l9 = 0; + if (itemSelected == 1 && anInt1283 == i3 && anInt1284 == component.id) { + l9 = 0xffffff; + } + Sprite class30_sub2_sub1_sub1_2 = ItemDef.getSprite(j9, component.invStackSizes[i3], l9); + if (class30_sub2_sub1_sub1_2 != null) { + if (activeInterfaceType != 0 && anInt1085 == i3 && anInt1084 == component.id) { + k6 = super.mouseX - anInt1087; + j7 = super.mouseY - anInt1088; + if (k6 < 5 && k6 > -5) { + k6 = 0; + } + if (j7 < 5 && j7 > -5) { + j7 = 0; + } + if (anInt989 < 5) { + k6 = 0; + j7 = 0; + } + class30_sub2_sub1_sub1_2.drawSprite1(k5 + k6, j6 + j7); + if (j6 + j7 < DrawingArea.topY && class9.scrollPosition > 0) { + int i10 = anInt945 * (DrawingArea.topY - j6 - j7) / 3; + if (i10 > anInt945 * 10) { + i10 = anInt945 * 10; + } + if (i10 > class9.scrollPosition) { + i10 = class9.scrollPosition; + } + class9.scrollPosition -= i10; + anInt1088 += i10; + } + if (j6 + j7 + 32 > DrawingArea.bottomY && class9.scrollPosition < class9.scrollMax - class9.height) { + int j10 = anInt945 * (j6 + j7 + 32 - DrawingArea.bottomY) / 3; + if (j10 > anInt945 * 10) { + j10 = anInt945 * 10; + } + if (j10 > class9.scrollMax - class9.height - class9.scrollPosition) { + j10 = class9.scrollMax - class9.height - class9.scrollPosition; + } + class9.scrollPosition += j10; + anInt1088 -= j10; + } + } else if (atInventoryInterfaceType != 0 && atInventoryIndex == i3 && atInventoryInterface == component.id) { + class30_sub2_sub1_sub1_2.drawSprite1(k5, j6); + } else { + class30_sub2_sub1_sub1_2.drawSprite(k5, j6); + } + if (class30_sub2_sub1_sub1_2.trimWidth == 33 || component.invStackSizes[i3] != 1) { + int k10 = component.invStackSizes[i3]; + aTextDrawingArea_1270.method385(0, intToKOrMil(k10), j6 + 10 + j7, k5 + 1 + k6); + aTextDrawingArea_1270.method385(0xffff00, intToKOrMil(k10), j6 + 9 + j7, k5 + k6); + } + } + } + } else if (component.sprites != null && i3 < 20) { + Sprite class30_sub2_sub1_sub1_1 = component.sprites[i3]; + if (class30_sub2_sub1_sub1_1 != null) { + class30_sub2_sub1_sub1_1.drawSprite(k5, j6); + } + } + i3++; + } + + } + + } else if (component.type == 3) { + boolean flag = false; + if (anInt1039 == component.id || anInt1048 == component.id || anInt1026 == component.id) { + flag = true; + } + int j3; + if (interfaceIsSelected(component)) { + j3 = component.anInt219; + if (flag && component.anInt239 != 0) { + j3 = component.anInt239; + } + } else { + j3 = component.textColor; + if (flag && component.anInt216 != 0) { + j3 = component.anInt216; + } + } + if (component.aByte254 == 0) { + if (component.aBoolean227) { + DrawingArea.method336(component.height, l2, j3, component.width, k2); + } else { + DrawingArea.fillPixels(l2, component.height, j3, k2, component.width); + } + } else if (component.aBoolean227) { + DrawingArea.method335(j3, l2, component.width, component.height, 256 - (component.aByte254 & 0xff), k2); + } else { + DrawingArea.method338(l2, component.height, 256 - (component.aByte254 & 0xff), j3, component.width, k2); + } + } else if (component.type == 4) { + TextDrawingArea textDrawingArea = component.textDrawingAreas; + String s = component.disabledText; + boolean flag1 = false; + if (anInt1039 == component.id || anInt1048 == component.id || anInt1026 == component.id) { + flag1 = true; + } + int i4; + if (interfaceIsSelected(component)) { + i4 = component.anInt219; + if (flag1 && component.anInt239 != 0) { + i4 = component.anInt239; + } + if (component.enabledText.length() > 0) { + s = component.enabledText; + } + } else { + i4 = component.textColor; + if (flag1 && component.anInt216 != 0) { + i4 = component.anInt216; + } + } + if (component.atActionType == 6 && aBoolean1149) { + s = "Please wait..."; + i4 = component.textColor; + } + if (DrawingArea.width == 479) { + if (i4 == 0xffff00) { + i4 = 255; + } + if (i4 == 49152) { + i4 = 0xffffff; + } + } + for (int l6 = l2 + textDrawingArea.anInt1497; s.length() > 0; l6 += textDrawingArea.anInt1497) { + if (s.indexOf("%") != -1) { + do { + int k7 = s.indexOf("%1"); + if (k7 == -1) { + break; + } + s = s.substring(0, k7) + interfaceIntToString(extractInterfaceValues(component, 0)) + s.substring(k7 + 2); + } while (true); + do { + int l7 = s.indexOf("%2"); + if (l7 == -1) { + break; + } + s = s.substring(0, l7) + interfaceIntToString(extractInterfaceValues(component, 1)) + s.substring(l7 + 2); + } while (true); + do { + int i8 = s.indexOf("%3"); + if (i8 == -1) { + break; + } + s = s.substring(0, i8) + interfaceIntToString(extractInterfaceValues(component, 2)) + s.substring(i8 + 2); + } while (true); + do { + int j8 = s.indexOf("%4"); + if (j8 == -1) { + break; + } + s = s.substring(0, j8) + interfaceIntToString(extractInterfaceValues(component, 3)) + s.substring(j8 + 2); + } while (true); + do { + int k8 = s.indexOf("%5"); + if (k8 == -1) { + break; + } + s = s.substring(0, k8) + interfaceIntToString(extractInterfaceValues(component, 4)) + s.substring(k8 + 2); + } while (true); + } + int l8 = s.indexOf("\\n"); + String s1; + if (l8 != -1) { + s1 = s.substring(0, l8); + s = s.substring(l8 + 2); + } else { + s1 = s; + s = ""; + } + if (component.aBoolean223) { + textDrawingArea.method382(i4, k2 + component.width / 2, s1, l6, component.aBoolean268); + } else { + textDrawingArea.method389(component.aBoolean268, k2, i4, s1, l6); + } + } + + } else if (component.type == 5) { + Sprite sprite; + if (interfaceIsSelected(component)) { + sprite = component.sprite2; + } else { + sprite = component.sprite1; + } + if (sprite != null) { + sprite.drawSprite(k2, l2); + } + } else if (component.type == 6) { + int k3 = Texture.textureInt1; + int j4 = Texture.textureInt2; + Texture.textureInt1 = k2 + component.width / 2; + Texture.textureInt2 = l2 + component.height / 2; + int i5 = Texture.anIntArray1470[component.anInt270] * component.anInt269 >> 16; + int l5 = Texture.anIntArray1471[component.anInt270] * component.anInt269 >> 16; + boolean flag2 = interfaceIsSelected(component); + int i7; + if (flag2) { + i7 = component.anInt258; + } else { + i7 = component.anInt257; + } + Model model; + if (i7 == -1) { + model = component.method209(-1, -1, flag2); + } else { + Animation animation = Animation.anims[i7]; + model = component.method209(animation.anIntArray354[component.anInt246], animation.anIntArray353[component.anInt246], flag2); + } + if (model != null) { + model.method482(component.anInt271, 0, component.anInt270, 0, i5, l5); + } + Texture.textureInt1 = k3; + Texture.textureInt2 = j4; + } else if (component.type == 7) { + TextDrawingArea textDrawingArea_1 = component.textDrawingAreas; + int k4 = 0; + for (int j5 = 0; j5 < component.height; j5++) { + for (int i6 = 0; i6 < component.width; i6++) { + if (component.inv[k4] > 0) { + ItemDef itemDef = ItemDef.forID(component.inv[k4] - 1); + String s2 = itemDef.name; + if (itemDef.stackable || component.invStackSizes[k4] != 1) { + s2 = s2 + " x" + intToKOrMilLongName(component.invStackSizes[k4]); + } + int i9 = k2 + i6 * (115 + component.invSpritePadX); + int k9 = l2 + j5 * (12 + component.invSpritePadY); + if (component.aBoolean223) { + textDrawingArea_1.method382(component.textColor, i9 + component.width / 2, s2, k9, component.aBoolean268); + } else { + textDrawingArea_1.method389(component.aBoolean268, i9, component.textColor, s2, k9); + } + } + k4++; + } + + } + + } else if(component.type == 8) { + + } + } + } + + DrawingArea.setDrawingArea(l1, i1, k1, j1); + } + + public void randomizeBackground(Background background) { + int j = 256; + for (int k = 0; k < anIntArray1190.length; k++) { + anIntArray1190[k] = 0; + } + + for (int l = 0; l < 5000; l++) { + int i1 = (int) (Math.random() * 128D * (double) j); + anIntArray1190[i1] = (int) (Math.random() * 256D); + } + + for (int j1 = 0; j1 < 20; j1++) { + for (int k1 = 1; k1 < j - 1; k1++) { + for (int i2 = 1; i2 < 127; i2++) { + int k2 = i2 + (k1 << 7); + anIntArray1191[k2] = (anIntArray1190[k2 - 1] + anIntArray1190[k2 + 1] + anIntArray1190[k2 - 128] + anIntArray1190[k2 + 128]) / 4; + } + + } + + int ai[] = anIntArray1190; + anIntArray1190 = anIntArray1191; + anIntArray1191 = ai; + } + + if (background != null) { + int l1 = 0; + for (int j2 = 0; j2 < background.anInt1453; j2++) { + for (int l2 = 0; l2 < background.anInt1452; l2++) { + if (background.aByteArray1450[l1++] != 0) { + int i3 = l2 + 16 + background.anInt1454; + int j3 = j2 + 16 + background.anInt1455; + int k3 = i3 + (j3 << 7); + anIntArray1190[k3] = 0; + } + } + + } + + } + } + + public void method107(int i, int j, Stream stream, Player player) { + if ((i & 0x400) != 0) { + player.anInt1543 = stream.method428(); + player.anInt1545 = stream.method428(); + player.anInt1544 = stream.method428(); + player.anInt1546 = stream.method428(); + player.anInt1547 = stream.method436() + loopCycle; + player.anInt1548 = stream.method435() + loopCycle; + player.anInt1549 = stream.method428(); + player.method446(); + } + if ((i & 0x100) != 0) { + player.anInt1520 = stream.method434(); + int k = stream.readDWord(); + player.anInt1524 = k >> 16; + player.anInt1523 = loopCycle + (k & 0xffff); + player.anInt1521 = 0; + player.anInt1522 = 0; + if (player.anInt1523 > loopCycle) { + player.anInt1521 = -1; + } + if (player.anInt1520 == 65535) { + player.anInt1520 = -1; + } + //processSound(player.anInt1520, 0, player, null); + } + if ((i & 8) != 0) { + int l = stream.method434(); + if (l == 65535) { + l = -1; + } + //processSound(l, 1, player, null); + int i2 = stream.method427(); + if (l == player.anim && l != -1) { + int i3 = Animation.anims[l].anInt365; + if (i3 == 1) { + player.anInt1527 = 0; + player.anInt1528 = 0; + player.anInt1529 = i2; + player.anInt1530 = 0; + } + if (i3 == 2) { + player.anInt1530 = 0; + } + } else if (l == -1 || player.anim == -1 || Animation.anims[l].anInt359 >= Animation.anims[player.anim].anInt359) { + player.anim = l; + player.anInt1527 = 0; + player.anInt1528 = 0; + player.anInt1529 = i2; + player.anInt1530 = 0; + player.anInt1542 = player.smallXYIndex; + } + } + if ((i & 4) != 0) { + player.textSpoken = stream.readString(); + if (player.textSpoken.charAt(0) == '~') { + player.textSpoken = player.textSpoken.substring(1); + pushMessage(player.textSpoken, 2, player.name); + } else if (player == myPlayer) { + pushMessage(player.textSpoken, 2, player.name); + } + player.anInt1513 = 0; + player.anInt1531 = 0; + player.textCycle = 150; + } + if ((i & 0x80) != 0) { + int i1 = stream.method434(); + int j2 = stream.readUnsignedByte(); + int j3 = stream.method427(); + int k3 = stream.currentOffset; + if (player.name != null && player.visible) { + long l3 = TextClass.longForName(player.name); + boolean flag = false; + if (j2 <= 1) { + for (int i4 = 0; i4 < ignoreCount; i4++) { + if (ignoreListAsLongs[i4] != l3) { + continue; + } + flag = true; + break; + } + + } + if (!flag && anInt1251 == 0) { + try { + aStream_834.currentOffset = 0; + stream.method442(j3, 0, aStream_834.buffer); + aStream_834.currentOffset = 0; + String s = TextInput.method525(j3, aStream_834); + s = Censor.doCensor(s); + player.textSpoken = s; + player.anInt1513 = i1 >> 8; + player.privelage = j2; + + // entityMessage(player); + + player.anInt1531 = i1 & 0xff; + player.textCycle = 150; + if (j2 == 2 || j2 == 3) { + pushMessage(s, 1, "@cr2@" + player.name); + } else if (j2 == 1) { + pushMessage(s, 1, "@cr1@" + player.name); + } else { + pushMessage(s, 2, player.name); + } + } catch (Exception exception) { + Signlink.reporterror("cde2"); + } + } + } + stream.currentOffset = k3 + j3; + } + if ((i & 1) != 0) { + player.interactingEntity = stream.method434(); + if (player.interactingEntity == 65535) { + player.interactingEntity = -1; + } + } + if ((i & 0x10) != 0) { + int j1 = stream.method427(); + byte abyte0[] = new byte[j1]; + Stream stream_1 = new Stream(abyte0); + stream.readBytes(j1, 0, abyte0); + aStreamArray895s[j] = stream_1; + player.updatePlayer(stream_1); + } + if ((i & 2) != 0) { + player.anInt1538 = stream.method436(); + player.anInt1539 = stream.method434(); + } + if ((i & 0x20) != 0) { + int k1 = stream.readUnsignedByte(); + int k2 = stream.readUnsignedByteA(); + player.updateHitData(k2, k1, loopCycle); + player.loopCycleStatus = loopCycle + 300; + player.currentHealth = stream.method427(); + player.maxHealth = stream.readUnsignedByte(); + } + if ((i & 0x200) != 0) { + int l1 = stream.readUnsignedByte(); + int l2 = stream.method428(); + player.updateHitData(l2, l1, loopCycle); + player.loopCycleStatus = loopCycle + 300; + player.currentHealth = stream.readUnsignedByte(); + player.maxHealth = stream.method427(); + } + } + + public void method108() { + try { + int j = myPlayer.x + anInt1278; + int k = myPlayer.y + anInt1131; + if (anInt1014 - j < -500 || anInt1014 - j > 500 || anInt1015 - k < -500 || anInt1015 - k > 500) { + anInt1014 = j; + anInt1015 = k; + } + if (anInt1014 != j) { + anInt1014 += (j - anInt1014) / 16; + } + if (anInt1015 != k) { + anInt1015 += (k - anInt1015) / 16; + } + if (super.keyArray[1] == 1) { + anInt1186 += (-24 - anInt1186) / 2; + } else if (super.keyArray[2] == 1) { + anInt1186 += (24 - anInt1186) / 2; + } else { + anInt1186 /= 2; + } + if (super.keyArray[3] == 1) { + anInt1187 += (12 - anInt1187) / 2; + } else if (super.keyArray[4] == 1) { + anInt1187 += (-12 - anInt1187) / 2; + } else { + anInt1187 /= 2; + } + minimapInt1 = minimapInt1 + anInt1186 / 2 & 0x7ff; + anInt1184 += anInt1187 / 2; + if (anInt1184 < 128) { + anInt1184 = 128; + } + if (anInt1184 > 383) { + anInt1184 = 383; + } + int l = anInt1014 >> 7; + int i1 = anInt1015 >> 7; + int j1 = method42(plane, anInt1015, anInt1014); + int k1 = 0; + if (l > 3 && i1 > 3 && l < 100 && i1 < 100) { + for (int l1 = l - 4; l1 <= l + 4; l1++) { + for (int k2 = i1 - 4; k2 <= i1 + 4; k2++) { + int l2 = plane; + if (l2 < 3 && (byteGroundArray[1][l1][k2] & 2) == 2) { + l2++; + } + int i3 = j1 - intGroundArray[l2][l1][k2]; + if (i3 > k1) { + k1 = i3; + } + } + + } + + } + anInt1005++; + if (anInt1005 > 1512) { + anInt1005 = 0; + stream.createFrame(77); + stream.writeWordBigEndian(0); + int i2 = stream.currentOffset; + stream.writeWordBigEndian((int) (Math.random() * 256D)); + stream.writeWordBigEndian(101); + stream.writeWordBigEndian(233); + stream.writeWord(45092); + if ((int) (Math.random() * 2D) == 0) { + stream.writeWord(35784); + } + stream.writeWordBigEndian((int) (Math.random() * 256D)); + stream.writeWordBigEndian(64); + stream.writeWordBigEndian(38); + stream.writeWord((int) (Math.random() * 65536D)); + stream.writeWord((int) (Math.random() * 65536D)); + stream.writeBytes(stream.currentOffset - i2); + } + int j2 = k1 * 192; + if (j2 > 0x17f00) { + j2 = 0x17f00; + } + if (j2 < 32768) { + j2 = 32768; + } + if (j2 > anInt984) { + anInt984 += (j2 - anInt984) / 24; + return; + } + if (j2 < anInt984) { + anInt984 += (j2 - anInt984) / 80; + } + } catch (Exception _ex) { + Signlink.reporterror("glfc_ex " + myPlayer.x + "," + myPlayer.y + "," + anInt1014 + "," + anInt1015 + "," + anInt1069 + "," + anInt1070 + "," + baseX + "," + baseY); + throw new RuntimeException("eek"); + } + } + + public void processDrawing() { + if (rsAlreadyLoaded || loadingError || genericLoadingError) { + showErrorScreen(); + return; + } + anInt1061++; + if (!loggedIn) { + drawLoginScreen(false); + } else { + drawGameScreen(); + } + anInt1213 = 0; + } + + public boolean isFriendOrSelf(String s) { + if (s == null) { + return false; + } + for (int i = 0; i < friendsCount; i++) { + if (s.equalsIgnoreCase(friendsList[i])) { + return true; + } + } + return s.equalsIgnoreCase(myPlayer.name); + } + + public static String combatDiffColor(int i, int j) { + int k = i - j; + if (k < -9) { + return "@red@"; + } + if (k < -6) { + return "@or3@"; + } + if (k < -3) { + return "@or2@"; + } + if (k < 0) { + return "@or1@"; + } + if (k > 9) { + return "@gre@"; + } + if (k > 6) { + return "@gr3@"; + } + if (k > 3) { + return "@gr2@"; + } + if (k > 0) { + return "@gr1@"; + } else { + return "@yel@"; + } + } + + public void setWaveVolume(int i) { + Signlink.wavevol = i; + } + + public void draw3dScreen() { + drawSplitpublicChat(); + if (crossType == 1) { + crosses[crossIndex / 100].drawSprite(crossX - 8 - 4, crossY - 8 - 4); + anInt1142++; + if (anInt1142 > 67) { + anInt1142 = 0; + stream.createFrame(78); + } + } + if (crossType == 2) { + crosses[4 + crossIndex / 100].drawSprite(crossX - 8 - 4, crossY - 8 - 4); + } + if (anInt1018 != -1) { + method119(anInt945, anInt1018); + drawInterface(0, 0, RSInterface.interfaceCache[anInt1018], 0); + } + if (openInterfaceID != -1) { + method119(anInt945, openInterfaceID); + drawInterface(0, 0, RSInterface.interfaceCache[openInterfaceID], 0); + } + method70(); + if (!menuOpen) { + processRightClick(); + drawTooltip(); + } else if (menuScreenArea == 0) { + drawMenu(); + } + if (anInt1055 == 1) { + multiOverlay.drawSprite(472, 296); + } + if (fpsOn) { + char c = '\u01FB'; + int k = 20; + int i1 = 0xffff00; + if (super.fps < 15) { + i1 = 0xff0000; + } + aTextDrawingArea_1271.method380("Fps:" + super.fps, c, i1, k); + k += 15; + Runtime runtime = Runtime.getRuntime(); + int j1 = (int) ((runtime.totalMemory() - runtime.freeMemory()) / 1024L); + i1 = 0xffff00; + if (j1 > 0x2000000 && lowMem) { + i1 = 0xff0000; + } + aTextDrawingArea_1271.method380("Mem:" + j1 + "k", c, 0xffff00, k); + k += 15; + } + if (anInt1104 != 0) { + int j = anInt1104 / 50; + int l = j / 60; + j %= 60; + if (j < 10) { + aTextDrawingArea_1271.method385(0xffff00, "System update in: " + l + ":0" + j, 329, 4); + } else { + aTextDrawingArea_1271.method385(0xffff00, "System update in: " + l + ":" + j, 329, 4); + } + anInt849++; + if (anInt849 > 75) { + anInt849 = 0; + stream.createFrame(148); + } + } + } + + public void addIgnore(long l) { + try { + if (l == 0L) { + return; + } + if (ignoreCount >= 100) { + pushMessage("Your ignore list is full. Max of 100 hit", 0, ""); + return; + } + String s = TextClass.fixName(TextClass.nameForLong(l)); + for (int j = 0; j < ignoreCount; j++) { + if (ignoreListAsLongs[j] == l) { + pushMessage(s + " is already on your ignore list", 0, ""); + return; + } + } + for (int k = 0; k < friendsCount; k++) { + if (friendsListAsLongs[k] == l) { + pushMessage("Please remove " + s + " from your friend list first", 0, ""); + return; + } + } + + ignoreListAsLongs[ignoreCount++] = l; + needDrawTabArea = true; + stream.createFrame(133); + stream.writeQWord(l); + return; + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("45688, " + l + ", " + 4 + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + public void method114() { + for (int i = -1; i < playerCount; i++) { + int j; + if (i == -1) { + j = myPlayerIndex; + } else { + j = playerIndices[i]; + } + Player player = playerArray[j]; + if (player != null) { + method96(player); + } + } + + } + + public void method115() { + if (loadingStage == 2) { + for (Class30_Sub1 class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetFirst(); class30_sub1 != null; class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) { + if (class30_sub1.anInt1294 > 0) { + class30_sub1.anInt1294--; + } + if (class30_sub1.anInt1294 == 0) { + if (class30_sub1.anInt1299 < 0 || ObjectManager.method178(class30_sub1.anInt1299, class30_sub1.anInt1301)) { + method142(class30_sub1.anInt1298, class30_sub1.anInt1295, class30_sub1.anInt1300, class30_sub1.anInt1301, class30_sub1.anInt1297, class30_sub1.anInt1296, class30_sub1.anInt1299); + class30_sub1.unlink(); + } + } else { + if (class30_sub1.anInt1302 > 0) { + class30_sub1.anInt1302--; + } + if (class30_sub1.anInt1302 == 0 && class30_sub1.anInt1297 >= 1 && class30_sub1.anInt1298 >= 1 && class30_sub1.anInt1297 <= 102 && class30_sub1.anInt1298 <= 102 && (class30_sub1.anInt1291 < 0 || ObjectManager.method178(class30_sub1.anInt1291, class30_sub1.anInt1293))) { + method142(class30_sub1.anInt1298, class30_sub1.anInt1295, class30_sub1.anInt1292, class30_sub1.anInt1293, class30_sub1.anInt1297, class30_sub1.anInt1296, class30_sub1.anInt1291); + class30_sub1.anInt1302 = -1; + if (class30_sub1.anInt1291 == class30_sub1.anInt1299 && class30_sub1.anInt1299 == -1) { + class30_sub1.unlink(); + } else if (class30_sub1.anInt1291 == class30_sub1.anInt1299 && class30_sub1.anInt1292 == class30_sub1.anInt1300 && class30_sub1.anInt1293 == class30_sub1.anInt1301) { + class30_sub1.unlink(); + } + } + } + } + + } + } + + public void determineMenuSize() { + int i = chatTextDrawingArea.getTextWidth("Choose Option"); + for (int j = 0; j < menuActionRow; j++) { + int k = chatTextDrawingArea.getTextWidth(menuActionName[j]); + if (k > i) { + i = k; + } + } + + i += 8; + int l = 15 * menuActionRow + 21; + if (super.saveClickX > 4 && super.saveClickY > 4 && super.saveClickX < 516 && super.saveClickY < 338) { + int i1 = super.saveClickX - 4 - i / 2; + if (i1 + i > 512) { + i1 = 512 - i; + } + if (i1 < 0) { + i1 = 0; + } + int l1 = super.saveClickY - 4; + if (l1 + l > 334) { + l1 = 334 - l; + } + if (l1 < 0) { + l1 = 0; + } + menuOpen = true; + menuScreenArea = 0; + menuOffsetX = i1; + menuOffsetY = l1; + menuWidth = i; + anInt952 = 15 * menuActionRow + 22; + } + if (super.saveClickX > 553 && super.saveClickY > 205 && super.saveClickX < 743 && super.saveClickY < 466) { + int j1 = super.saveClickX - 553 - i / 2; + if (j1 < 0) { + j1 = 0; + } else if (j1 + i > 190) { + j1 = 190 - i; + } + int i2 = super.saveClickY - 205; + if (i2 < 0) { + i2 = 0; + } else if (i2 + l > 261) { + i2 = 261 - l; + } + menuOpen = true; + menuScreenArea = 1; + menuOffsetX = j1; + menuOffsetY = i2; + menuWidth = i; + anInt952 = 15 * menuActionRow + 22; + } + if (super.saveClickX > 17 && super.saveClickY > 357 && super.saveClickX < 496 && super.saveClickY < 453) { + int k1 = super.saveClickX - 17 - i / 2; + if (k1 < 0) { + k1 = 0; + } else if (k1 + i > 479) { + k1 = 479 - i; + } + int j2 = super.saveClickY - 357; + if (j2 < 0) { + j2 = 0; + } else if (j2 + l > 96) { + j2 = 96 - l; + } + menuOpen = true; + menuScreenArea = 2; + menuOffsetX = k1; + menuOffsetY = j2; + menuWidth = i; + anInt952 = 15 * menuActionRow + 22; + } + } + + public void method117(Stream stream) { + stream.initBitAccess(); + int j = stream.readBits(1); + if (j == 0) { + return; + } + int k = stream.readBits(2); + if (k == 0) { + anIntArray894[anInt893++] = myPlayerIndex; + return; + } + if (k == 1) { + int l = stream.readBits(3); + myPlayer.moveInDir(false, l); + int k1 = stream.readBits(1); + if (k1 == 1) { + anIntArray894[anInt893++] = myPlayerIndex; + } + return; + } + if (k == 2) { + int i1 = stream.readBits(3); + myPlayer.moveInDir(true, i1); + int l1 = stream.readBits(3); + myPlayer.moveInDir(true, l1); + int j2 = stream.readBits(1); + if (j2 == 1) { + anIntArray894[anInt893++] = myPlayerIndex; + } + return; + } + if (k == 3) { + plane = stream.readBits(2); + int j1 = stream.readBits(1); + int i2 = stream.readBits(1); + if (i2 == 1) { + anIntArray894[anInt893++] = myPlayerIndex; + } + int k2 = stream.readBits(7); + int l2 = stream.readBits(7); + myPlayer.setPos(l2, k2, j1 == 1); + } + } + + public void nullLoader() { + aBoolean831 = false; + while (drawingFlames) { + aBoolean831 = false; + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + aBackground_966 = null; + aBackground_967 = null; + aBackgroundArray1152s = null; + anIntArray850 = null; + anIntArray851 = null; + anIntArray852 = null; + anIntArray853 = null; + anIntArray1190 = null; + anIntArray1191 = null; + anIntArray828 = null; + anIntArray829 = null; + aClass30_Sub2_Sub1_Sub1_1201 = null; + aClass30_Sub2_Sub1_Sub1_1202 = null; + } + + public boolean method119(int i, int j) { + boolean flag1 = false; + RSInterface class9 = RSInterface.interfaceCache[j]; + for (int element : class9.children) { + if (element == -1) { + break; + } + RSInterface class9_1 = RSInterface.interfaceCache[element]; + if (class9_1.type == 1) { + flag1 |= method119(i, class9_1.id); + } + if (class9_1.type == 6 && (class9_1.anInt257 != -1 || class9_1.anInt258 != -1)) { + boolean flag2 = interfaceIsSelected(class9_1); + int l; + if (flag2) { + l = class9_1.anInt258; + } else { + l = class9_1.anInt257; + } + if (l != -1) { + Animation animation = Animation.anims[l]; + for (class9_1.anInt208 += i; class9_1.anInt208 > animation.method258(class9_1.anInt246);) { + class9_1.anInt208 -= animation.method258(class9_1.anInt246) + 1; + class9_1.anInt246++; + if (class9_1.anInt246 >= animation.anInt352) { + class9_1.anInt246 -= animation.anInt356; + if (class9_1.anInt246 < 0 || class9_1.anInt246 >= animation.anInt352) { + class9_1.anInt246 = 0; + } + } + flag1 = true; + } + + } + } + } + + return flag1; + } + + public int method120() { + int j = 3; + if (yCameraCurve < 310) { + int k = xCameraPos >> 7; + int l = yCameraPos >> 7; + int i1 = myPlayer.x >> 7; + int j1 = myPlayer.y >> 7; + if ((byteGroundArray[plane][k][l] & 4) != 0) { + j = plane; + } + int k1; + if (i1 > k) { + k1 = i1 - k; + } else { + k1 = k - i1; + } + int l1; + if (j1 > l) { + l1 = j1 - l; + } else { + l1 = l - j1; + } + if (k1 > l1) { + int i2 = l1 * 0x10000 / k1; + int k2 = 32768; + while (k != i1) { + if (k < i1) { + k++; + } else if (k > i1) { + k--; + } + if ((byteGroundArray[plane][k][l] & 4) != 0) { + j = plane; + } + k2 += i2; + if (k2 >= 0x10000) { + k2 -= 0x10000; + if (l < j1) { + l++; + } else if (l > j1) { + l--; + } + if ((byteGroundArray[plane][k][l] & 4) != 0) { + j = plane; + } + } + } + } else { + int j2 = k1 * 0x10000 / l1; + int l2 = 32768; + while (l != j1) { + if (l < j1) { + l++; + } else if (l > j1) { + l--; + } + if ((byteGroundArray[plane][k][l] & 4) != 0) { + j = plane; + } + l2 += j2; + if (l2 >= 0x10000) { + l2 -= 0x10000; + if (k < i1) { + k++; + } else if (k > i1) { + k--; + } + if ((byteGroundArray[plane][k][l] & 4) != 0) { + j = plane; + } + } + } + } + } + if ((byteGroundArray[plane][myPlayer.x >> 7][myPlayer.y >> 7] & 4) != 0) { + j = plane; + } + return j; + } + + public int method121() { + int j = method42(plane, yCameraPos, xCameraPos); + if (j - zCameraPos < 800 && (byteGroundArray[plane][xCameraPos >> 7][yCameraPos >> 7] & 4) != 0) { + return plane; + } else { + return 3; + } + } + + public void delIgnore(long l) { + try { + if (l == 0L) { + return; + } + for (int j = 0; j < ignoreCount; j++) { + if (ignoreListAsLongs[j] == l) { + ignoreCount--; + needDrawTabArea = true; + System.arraycopy(ignoreListAsLongs, j + 1, ignoreListAsLongs, j, ignoreCount - j); + + stream.createFrame(74); + stream.writeQWord(l); + return; + } + } + + return; + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("47229, " + 3 + ", " + l + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + public String getParameter(String s) { + if (Signlink.mainapp != null) { + return Signlink.mainapp.getParameter(s); + } else { + return super.getParameter(s); + } + } + + public int extractInterfaceValues(RSInterface class9, int j) { + if (class9.valueIndexArray == null || j >= class9.valueIndexArray.length) { + return -2; + } + try { + int ai[] = class9.valueIndexArray[j]; + int k = 0; + int l = 0; + int i1 = 0; + do { + int j1 = ai[l++]; + int k1 = 0; + byte byte0 = 0; + if (j1 == 0) { + return k; + } + if (j1 == 1) { + k1 = currentStats[ai[l++]]; + } + if (j1 == 2) { + k1 = maxStats[ai[l++]]; + } + if (j1 == 3) { + k1 = currentExp[ai[l++]]; + } + if (j1 == 4) { + RSInterface class9_1 = RSInterface.interfaceCache[ai[l++]]; + int k2 = ai[l++]; + if (k2 >= 0 && k2 < ItemDef.totalItems && (!ItemDef.forID(k2).membersObject || isMembers)) { + for (int j3 = 0; j3 < class9_1.inv.length; j3++) { + if (class9_1.inv[j3] == k2 + 1) { + k1 += class9_1.invStackSizes[j3]; + } + } + + } + } + if (j1 == 5) { + k1 = variousSettings[ai[l++]]; + } + if (j1 == 6) { + k1 = anIntArray1019[maxStats[ai[l++]] - 1]; + } + if (j1 == 7) { + k1 = variousSettings[ai[l++]] * 100 / 46875; + } + if (j1 == 8) { + k1 = myPlayer.combatLevel; + } + if (j1 == 9) { + for (int l1 = 0; l1 < Skills.skillsCount; l1++) { + if (Skills.skillEnabled[l1]) { + k1 += maxStats[l1]; + } + } + + } + if (j1 == 10) { + RSInterface class9_2 = RSInterface.interfaceCache[ai[l++]]; + int l2 = ai[l++] + 1; + if (l2 >= 0 && l2 < ItemDef.totalItems && (!ItemDef.forID(l2).membersObject || isMembers)) { + for (int element : class9_2.inv) { + if (element != l2) { + continue; + } + k1 = 0x3b9ac9ff; + break; + } + + } + } + if (j1 == 11) { + k1 = energy; + } + if (j1 == 12) { + k1 = weight; + } + if (j1 == 13) { + int i2 = variousSettings[ai[l++]]; + int i3 = ai[l++]; + k1 = (i2 & 1 << i3) == 0 ? 0 : 1; + } + if (j1 == 14) { + int j2 = ai[l++]; + VarBit varBit = VarBit.cache[j2]; + int l3 = varBit.anInt648; + int i4 = varBit.anInt649; + int j4 = varBit.anInt650; + int k4 = anIntArray1232[j4 - i4]; + k1 = variousSettings[l3] >> i4 & k4; + } + if (j1 == 15) { + byte0 = 1; + } + if (j1 == 16) { + byte0 = 2; + } + if (j1 == 17) { + byte0 = 3; + } + if (j1 == 18) { + k1 = (myPlayer.x >> 7) + baseX; + } + if (j1 == 19) { + k1 = (myPlayer.y >> 7) + baseY; + } + if (j1 == 20) { + k1 = ai[l++]; + } + if (byte0 == 0) { + if (i1 == 0) { + k += k1; + } + if (i1 == 1) { + k -= k1; + } + if (i1 == 2 && k1 != 0) { + k /= k1; + } + if (i1 == 3) { + k *= k1; + } + i1 = 0; + } else { + i1 = byte0; + } + } while (true); + } catch (Exception _ex) { + return -1; + } + } + + public void drawTooltip() { + if (menuActionRow < 2 && itemSelected == 0 && spellSelected == 0) { + return; + } + String s; + if (itemSelected == 1 && menuActionRow < 2) { + s = "Use " + selectedItemName + " with..."; + } else if (spellSelected == 1 && menuActionRow < 2) { + s = spellTooltip + "..."; + } else { + s = menuActionName[menuActionRow - 1]; + } + if (menuActionRow > 2) { + s = s + "@whi@ / " + (menuActionRow - 2) + " more options"; + } + chatTextDrawingArea.method390(4, 0xffffff, s, loopCycle / 1000, 15); + } + + public void drawMinimap() { + aRSImageProducer_1164.initDrawingArea(); + if (anInt1021 == 2) { + byte abyte0[] = mapBack.aByteArray1450; + int ai[] = DrawingArea.pixels; + int k2 = abyte0.length; + for (int i5 = 0; i5 < k2; i5++) { + if (abyte0[i5] == 0) { + ai[i5] = 0; + } + } + + compass.method352(33, minimapInt1, anIntArray1057, 256, anIntArray968, 25, 0, 0, 33, 25); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + return; + } + int i = minimapInt1 + minimapInt2 & 0x7ff; + int j = 48 + myPlayer.x / 32; + int l2 = 464 - myPlayer.y / 32; + aClass30_Sub2_Sub1_Sub1_1263.method352(151, i, anIntArray1229, 256 + minimapInt3, anIntArray1052, l2, 5, 25, 146, j); + compass.method352(33, minimapInt1, anIntArray1057, 256, anIntArray968, 25, 0, 0, 33, 25); + for (int j5 = 0; j5 < anInt1071; j5++) { + int k = anIntArray1072[j5] * 4 + 2 - myPlayer.x / 32; + int i3 = anIntArray1073[j5] * 4 + 2 - myPlayer.y / 32; + markMinimap(aClass30_Sub2_Sub1_Sub1Array1140[j5], k, i3); + } + + for (int k5 = 0; k5 < 104; k5++) { + for (int l5 = 0; l5 < 104; l5++) { + NodeList class19 = groundArray[plane][k5][l5]; + if (class19 != null) { + int l = k5 * 4 + 2 - myPlayer.x / 32; + int j3 = l5 * 4 + 2 - myPlayer.y / 32; + markMinimap(mapDotItem, l, j3); + } + } + + } + + for (int i6 = 0; i6 < npcCount; i6++) { + NPC npc = npcArray[npcIndices[i6]]; + if (npc != null && npc.isVisible()) { + EntityDef entityDef = npc.desc; + if (entityDef.childrenIDs != null) { + entityDef = entityDef.method161(); + } + if (entityDef != null && entityDef.aBoolean87 && entityDef.aBoolean84) { + int i1 = npc.x / 32 - myPlayer.x / 32; + int k3 = npc.y / 32 - myPlayer.y / 32; + markMinimap(mapDotNPC, i1, k3); + } + } + } + + for (int j6 = 0; j6 < playerCount; j6++) { + Player player = playerArray[playerIndices[j6]]; + if (player != null && player.isVisible()) { + int j1 = player.x / 32 - myPlayer.x / 32; + int l3 = player.y / 32 - myPlayer.y / 32; + boolean flag1 = false; + long l6 = TextClass.longForName(player.name); + for (int k6 = 0; k6 < friendsCount; k6++) { + if (l6 != friendsListAsLongs[k6] || friendsNodeIDs[k6] == 0) { + continue; + } + flag1 = true; + break; + } + + boolean flag2 = false; + if (myPlayer.team != 0 && player.team != 0 && myPlayer.team == player.team) { + flag2 = true; + } + if (flag1) { + markMinimap(mapDotFriend, j1, l3); + } else if (flag2) { + markMinimap(mapDotTeam, j1, l3); + } else { + markMinimap(mapDotPlayer, j1, l3); + } + } + } + + if (anInt855 != 0 && loopCycle % 20 < 10) { + if (anInt855 == 1 && anInt1222 >= 0 && anInt1222 < npcArray.length) { + NPC class30_sub2_sub4_sub1_sub1_1 = npcArray[anInt1222]; + if (class30_sub2_sub4_sub1_sub1_1 != null) { + int k1 = class30_sub2_sub4_sub1_sub1_1.x / 32 - myPlayer.x / 32; + int i4 = class30_sub2_sub4_sub1_sub1_1.y / 32 - myPlayer.y / 32; + method81(mapMarker, i4, k1); + } + } + if (anInt855 == 2) { + int l1 = (anInt934 - baseX) * 4 + 2 - myPlayer.x / 32; + int j4 = (anInt935 - baseY) * 4 + 2 - myPlayer.y / 32; + method81(mapMarker, j4, l1); + } + if (anInt855 == 10 && anInt933 >= 0 && anInt933 < playerArray.length) { + Player class30_sub2_sub4_sub1_sub2_1 = playerArray[anInt933]; + if (class30_sub2_sub4_sub1_sub2_1 != null) { + int i2 = class30_sub2_sub4_sub1_sub2_1.x / 32 - myPlayer.x / 32; + int k4 = class30_sub2_sub4_sub1_sub2_1.y / 32 - myPlayer.y / 32; + method81(mapMarker, k4, i2); + } + } + } + if (destX != 0) { + int j2 = destX * 4 + 2 - myPlayer.x / 32; + int l4 = destY * 4 + 2 - myPlayer.y / 32; + markMinimap(mapFlag, j2, l4); + } + DrawingArea.method336(3, 78, 0xffffff, 3, 97); + aRSImageProducer_1165.initDrawingArea(); + Texture.lineOffsets = chatBoxAreaOffsets; + } + + public void npcScreenPos(Entity entity, int i) { + calcEntityScreenPos(entity.x, i, entity.y); + + // aryan entity.entScreenX = spriteDrawX; entity.entScreenY = + // spriteDrawY; + } + + public void calcEntityScreenPos(int i, int j, int l) { + if (i < 128 || l < 128 || i > 13056 || l > 13056) { + spriteDrawX = -1; + spriteDrawY = -1; + return; + } + int i1 = method42(plane, l, i) - j; + i -= xCameraPos; + i1 -= zCameraPos; + l -= yCameraPos; + int j1 = Model.modelIntArray1[yCameraCurve]; + int k1 = Model.modelIntArray2[yCameraCurve]; + int l1 = Model.modelIntArray1[xCameraCurve]; + int i2 = Model.modelIntArray2[xCameraCurve]; + int j2 = l * l1 + i * i2 >> 16; + l = l * i2 - i * l1 >> 16; + i = j2; + j2 = i1 * k1 - l * j1 >> 16; + l = i1 * j1 + l * k1 >> 16; + i1 = j2; + if (l >= 50) { + spriteDrawX = Texture.textureInt1 + (i << 9) / l; + spriteDrawY = Texture.textureInt2 + (i1 << 9) / l; + } else { + spriteDrawX = -1; + spriteDrawY = -1; + } + } + + public void buildSplitPrivateChatMenu() { + if (splitpublicChat == 0) { + return; + } + int i = 0; + if (anInt1104 != 0) { + i = 1; + } + for (int j = 0; j < 100; j++) { + if (chatMessages[j] != null) { + int k = chatTypes[j]; + String s = chatNames[j]; + if (s != null && s.startsWith("@cr1@")) { + s = s.substring(5); + } + if (s != null && s.startsWith("@cr2@")) { + s = s.substring(5); + } + if ((k == 3 || k == 7) && (k == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s))) { + int l = 329 - i * 13; + if (super.mouseX > 4 && super.mouseY - 4 > l - 10 && super.mouseY - 4 <= l + 3) { + int i1 = aTextDrawingArea_1271.getTextWidth("From: " + s + chatMessages[j]) + 25; + if (i1 > 450) { + i1 = 450; + } + if (super.mouseX < 4 + i1) { + if (myPrivilege >= 1 && myPrivilege <= 3) { + menuActionName[menuActionRow] = "Report abuse @whi@" + s; + menuActionID[menuActionRow] = 2606; + menuActionRow++; + } + menuActionName[menuActionRow] = "Add ignore @whi@" + s; + menuActionID[menuActionRow] = 2042; + menuActionRow++; + menuActionName[menuActionRow] = "Reply to @whi@" + s; + menuActionID[menuActionRow] = 2639; + menuActionRow++; + menuActionName[menuActionRow] = "Add friend @whi@" + s; + menuActionID[menuActionRow] = 2337; + menuActionRow++; + } + } + if (++i >= 5) { + return; + } + } + if ((k == 5 || k == 6) && privateChatMode < 2 && ++i >= 5) { + return; + } + } + } + + } + + public void method130(int j, int k, int l, int i1, int j1, int k1, int l1, int i2, int j2) { + Class30_Sub1 class30_sub1 = null; + for (Class30_Sub1 class30_sub1_1 = (Class30_Sub1) aClass19_1179.reverseGetFirst(); class30_sub1_1 != null; class30_sub1_1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) { + if (class30_sub1_1.anInt1295 != l1 || class30_sub1_1.anInt1297 != i2 || class30_sub1_1.anInt1298 != j1 || class30_sub1_1.anInt1296 != i1) { + continue; + } + class30_sub1 = class30_sub1_1; + break; + } + + if (class30_sub1 == null) { + class30_sub1 = new Class30_Sub1(); + class30_sub1.anInt1295 = l1; + class30_sub1.anInt1296 = i1; + class30_sub1.anInt1297 = i2; + class30_sub1.anInt1298 = j1; + method89(class30_sub1); + aClass19_1179.insertHead(class30_sub1); + } + class30_sub1.anInt1291 = k; + class30_sub1.anInt1293 = k1; + class30_sub1.anInt1292 = l; + class30_sub1.anInt1302 = j2; + class30_sub1.anInt1294 = j; + } + + public boolean interfaceIsSelected(RSInterface class9) { + if (class9.anIntArray245 == null) { + return false; + } + for (int i = 0; i < class9.anIntArray245.length; i++) { + int j = extractInterfaceValues(class9, i); + int k = class9.anIntArray212[i]; + if (class9.anIntArray245[i] == 2) { + if (j >= k) { + return false; + } + } else if (class9.anIntArray245[i] == 3) { + if (j <= k) { + return false; + } + } else if (class9.anIntArray245[i] == 4) { + if (j == k) { + return false; + } + } else if (j != k) { + return false; + } + } + + return true; + } + + public DataInputStream openJagGrabInputStream(String s) throws IOException { + // if(!aBoolean872) + // if(signlink.mainapp != null) + // return signlink.openurl(s); + // else + // return new DataInputStream((new URL(getCodeBase(), s)).openStream()); + if (aSocket832 != null) { + try { + aSocket832.close(); + } catch (Exception _ex) { + } + aSocket832 = null; + } + aSocket832 = openSocket(43595); + aSocket832.setSoTimeout(10000); + java.io.InputStream inputstream = aSocket832.getInputStream(); + OutputStream outputstream = aSocket832.getOutputStream(); + outputstream.write(("JAGGRAB /" + s + "\n\n").getBytes()); + return new DataInputStream(inputstream); + } + + public void doFlamesDrawing() { + char c = '\u0100'; + if (anInt1040 > 0) { + for (int i = 0; i < 256; i++) { + if (anInt1040 > 768) { + anIntArray850[i] = method83(anIntArray851[i], anIntArray852[i], 1024 - anInt1040); + } else if (anInt1040 > 256) { + anIntArray850[i] = anIntArray852[i]; + } else { + anIntArray850[i] = method83(anIntArray852[i], anIntArray851[i], 256 - anInt1040); + } + } + + } else if (anInt1041 > 0) { + for (int j = 0; j < 256; j++) { + if (anInt1041 > 768) { + anIntArray850[j] = method83(anIntArray851[j], anIntArray853[j], 1024 - anInt1041); + } else if (anInt1041 > 256) { + anIntArray850[j] = anIntArray853[j]; + } else { + anIntArray850[j] = method83(anIntArray853[j], anIntArray851[j], 256 - anInt1041); + } + } + + } else { + System.arraycopy(anIntArray851, 0, anIntArray850, 0, 256); + + } + System.arraycopy(aClass30_Sub2_Sub1_Sub1_1201.pixels, 0, aRSImageProducer_1110.anIntArray315, 0, 33920); + + int i1 = 0; + int j1 = 1152; + for (int k1 = 1; k1 < c - 1; k1++) { + int l1 = anIntArray969[k1] * (c - k1) / c; + int j2 = 22 + l1; + if (j2 < 0) { + j2 = 0; + } + i1 += j2; + for (int l2 = j2; l2 < 128; l2++) { + int j3 = anIntArray828[i1++]; + if (j3 != 0) { + int l3 = j3; + int j4 = 256 - j3; + j3 = anIntArray850[j3]; + int l4 = aRSImageProducer_1110.anIntArray315[j1]; + aRSImageProducer_1110.anIntArray315[j1++] = ((j3 & 0xff00ff) * l3 + (l4 & 0xff00ff) * j4 & 0xff00ff00) + ((j3 & 0xff00) * l3 + (l4 & 0xff00) * j4 & 0xff0000) >> 8; + } else { + j1++; + } + } + + j1 += j2; + } + + aRSImageProducer_1110.drawGraphics(0, super.graphics, 0); + System.arraycopy(aClass30_Sub2_Sub1_Sub1_1202.pixels, 0, aRSImageProducer_1111.anIntArray315, 0, 33920); + + i1 = 0; + j1 = 1176; + for (int k2 = 1; k2 < c - 1; k2++) { + int i3 = anIntArray969[k2] * (c - k2) / c; + int k3 = 103 - i3; + j1 += i3; + for (int i4 = 0; i4 < k3; i4++) { + int k4 = anIntArray828[i1++]; + if (k4 != 0) { + int i5 = k4; + int j5 = 256 - k4; + k4 = anIntArray850[k4]; + int k5 = aRSImageProducer_1111.anIntArray315[j1]; + aRSImageProducer_1111.anIntArray315[j1++] = ((k4 & 0xff00ff) * i5 + (k5 & 0xff00ff) * j5 & 0xff00ff00) + ((k4 & 0xff00) * i5 + (k5 & 0xff00) * j5 & 0xff0000) >> 8; + } else { + j1++; + } + } + + i1 += 128 - k3; + j1 += 128 - k3 - i3; + } + + aRSImageProducer_1111.drawGraphics(0, super.graphics, 637); + } + + public void method134(Stream stream) { + int j = stream.readBits(8); + if (j < playerCount) { + for (int k = j; k < playerCount; k++) { + anIntArray840[anInt839++] = playerIndices[k]; + } + + } + if (j > playerCount) { + Signlink.reporterror(myUsername + " Too many players"); + throw new RuntimeException("eek"); + } + playerCount = 0; + for (int l = 0; l < j; l++) { + int i1 = playerIndices[l]; + Player player = playerArray[i1]; + int j1 = stream.readBits(1); + if (j1 == 0) { + playerIndices[playerCount++] = i1; + player.anInt1537 = loopCycle; + } else { + int k1 = stream.readBits(2); + if (k1 == 0) { + playerIndices[playerCount++] = i1; + player.anInt1537 = loopCycle; + anIntArray894[anInt893++] = i1; + } else if (k1 == 1) { + playerIndices[playerCount++] = i1; + player.anInt1537 = loopCycle; + int l1 = stream.readBits(3); + player.moveInDir(false, l1); + int j2 = stream.readBits(1); + if (j2 == 1) { + anIntArray894[anInt893++] = i1; + } + } else if (k1 == 2) { + playerIndices[playerCount++] = i1; + player.anInt1537 = loopCycle; + int i2 = stream.readBits(3); + player.moveInDir(true, i2); + int k2 = stream.readBits(3); + player.moveInDir(true, k2); + int l2 = stream.readBits(1); + if (l2 == 1) { + anIntArray894[anInt893++] = i1; + } + } else if (k1 == 3) { + anIntArray840[anInt839++] = i1; + } + } + } + } + + public void drawLoginScreen(boolean flag) { + resetImageProducers(); + aRSImageProducer_1109.initDrawingArea(); + aBackground_966.method361(0, 0); + char c = '\u0168'; + char c1 = '\310'; + if (loginScreenState == 0) { + int i = c1 / 2 + 80; + aTextDrawingArea_1270.method382(0x75a9a9, c / 2, onDemandFetcher.statusString, i, true); + i = c1 / 2 - 20; + chatTextDrawingArea.method382(0xffff00, c / 2, "Welcome to " + ClientSettings.SERVER_NAME + "", i, true); + i += 30; + int l = c / 2 - 80; + int k1 = c1 / 2 + 20; + aBackground_967.method361(l - 73, k1 - 20); + chatTextDrawingArea.method382(0xffffff, l, "New User", k1 + 5, true); + l = c / 2 + 80; + aBackground_967.method361(l - 73, k1 - 20); + chatTextDrawingArea.method382(0xffffff, l, "Existing User", k1 + 5, true); + } + if (loginScreenState == 2) { + int j = c1 / 2 - 40; + if (loginMessage1.length() > 0) { + chatTextDrawingArea.method382(0xffff00, c / 2, loginMessage1, j - 15, true); + chatTextDrawingArea.method382(0xffff00, c / 2, loginMessage2, j, true); + j += 30; + } else { + chatTextDrawingArea.method382(0xffff00, c / 2, loginMessage2, j - 7, true); + j += 30; + } + chatTextDrawingArea.method389(true, c / 2 - 90, 0xffffff, "Username: " + myUsername + (loginScreenCursorPos == 0 & loopCycle % 40 < 20 ? "@yel@|" : ""), j); + j += 15; + chatTextDrawingArea.method389(true, c / 2 - 88, 0xffffff, "Password: " + TextClass.passwordAsterisks(myPassword) + (loginScreenCursorPos == 1 & loopCycle % 40 < 20 ? "@yel@|" : ""), j); + j += 15; + if (!flag) { + int i1 = c / 2 - 80; + int l1 = c1 / 2 + 50; + aBackground_967.method361(i1 - 73, l1 - 20); + chatTextDrawingArea.method382(0xffffff, i1, "Login", l1 + 5, true); + i1 = c / 2 + 80; + aBackground_967.method361(i1 - 73, l1 - 20); + chatTextDrawingArea.method382(0xffffff, i1, "Cancel", l1 + 5, true); + } + } + if (loginScreenState == 3) { + chatTextDrawingArea.method382(0xffff00, c / 2, "Create a free account", c1 / 2 - 60, true); + int k = c1 / 2 - 35; + chatTextDrawingArea.method382(0xffffff, c / 2, "To create a new account you need to", k, true); + k += 15; + chatTextDrawingArea.method382(0xffffff, c / 2, "go back to the main " + ClientSettings.SERVER_NAME + " webpage", k, true); + k += 15; + chatTextDrawingArea.method382(0xffffff, c / 2, "and choose the red 'create account'", k, true); + k += 15; + chatTextDrawingArea.method382(0xffffff, c / 2, "button at the top right of that page.", k, true); + k += 15; + int j1 = c / 2; + int i2 = c1 / 2 + 50; + aBackground_967.method361(j1 - 73, i2 - 20); + chatTextDrawingArea.method382(0xffffff, j1, "Cancel", i2 + 5, true); + } + aRSImageProducer_1109.drawGraphics(171, super.graphics, 202); + if (welcomeScreenRaised) { + welcomeScreenRaised = false; + aRSImageProducer_1107.drawGraphics(0, super.graphics, 128); + aRSImageProducer_1108.drawGraphics(371, super.graphics, 202); + aRSImageProducer_1112.drawGraphics(265, super.graphics, 0); + aRSImageProducer_1113.drawGraphics(265, super.graphics, 562); + aRSImageProducer_1114.drawGraphics(171, super.graphics, 128); + aRSImageProducer_1115.drawGraphics(171, super.graphics, 562); + } + } + + public void drawFlames() { + drawingFlames = true; + try { + long l = System.currentTimeMillis(); + int i = 0; + int j = 20; + while (aBoolean831) { + anInt1208++; + calcFlamesPosition(); + calcFlamesPosition(); + doFlamesDrawing(); + if (++i > 10) { + long l1 = System.currentTimeMillis(); + int k = (int) (l1 - l) / 10 - j; + j = 40 - k; + if (j < 5) { + j = 5; + } + i = 0; + l = l1; + } + try { + Thread.sleep(j); + } catch (Exception _ex) { + } + } + } catch (Exception _ex) { + } + drawingFlames = false; + } + + public void raiseWelcomeScreen() { + welcomeScreenRaised = true; + } + + public void method137(Stream stream, int j) { + if (j == 84) { + int k = stream.readUnsignedByte(); + int j3 = anInt1268 + (k >> 4 & 7); + int i6 = anInt1269 + (k & 7); + int l8 = stream.readUnsignedWord(); + int k11 = stream.readUnsignedWord(); + int l13 = stream.readUnsignedWord(); + if (j3 >= 0 && i6 >= 0 && j3 < 104 && i6 < 104) { + NodeList class19_1 = groundArray[plane][j3][i6]; + if (class19_1 != null) { + for (Item class30_sub2_sub4_sub2_3 = (Item) class19_1.reverseGetFirst(); class30_sub2_sub4_sub2_3 != null; class30_sub2_sub4_sub2_3 = (Item) class19_1.reverseGetNext()) { + if (class30_sub2_sub4_sub2_3.ID != (l8 & 0x7fff) || class30_sub2_sub4_sub2_3.anInt1559 != k11) { + continue; + } + class30_sub2_sub4_sub2_3.anInt1559 = l13; + break; + } + + spawnGroundItem(j3, i6); + } + } + return; + } + if (j == 105) { + int l = stream.readUnsignedByte(); + int k3 = anInt1268 + (l >> 4 & 7); + int j6 = anInt1269 + (l & 7); + int i9 = stream.readUnsignedWord(); + int l11 = stream.readUnsignedByte(); + int i14 = l11 >> 4 & 0xf; + int i16 = l11 & 7; + if (myPlayer.smallX[0] >= k3 - i14 && myPlayer.smallX[0] <= k3 + i14 && myPlayer.smallY[0] >= j6 - i14 && myPlayer.smallY[0] <= j6 + i14 && aBoolean848 && !lowMem && currentSound < 50) { + sound[currentSound] = i9; + soundType[currentSound] = i16; + soundDelay[currentSound] = Sounds.anIntArray326[i9]; + currentSound++; + } + } + if (j == 215) { + int i1 = stream.method435(); + int l3 = stream.method428(); + int k6 = anInt1268 + (l3 >> 4 & 7); + int j9 = anInt1269 + (l3 & 7); + int i12 = stream.method435(); + int j14 = stream.readUnsignedWord(); + if (k6 >= 0 && j9 >= 0 && k6 < 104 && j9 < 104 && i12 != unknownInt10) { + Item class30_sub2_sub4_sub2_2 = new Item(); + class30_sub2_sub4_sub2_2.ID = i1; + class30_sub2_sub4_sub2_2.anInt1559 = j14; + if (groundArray[plane][k6][j9] == null) { + groundArray[plane][k6][j9] = new NodeList(); + } + groundArray[plane][k6][j9].insertHead(class30_sub2_sub4_sub2_2); + spawnGroundItem(k6, j9); + } + return; + } + if (j == 156) { + int j1 = stream.readUnsignedByteA(); + int i4 = anInt1268 + (j1 >> 4 & 7); + int l6 = anInt1269 + (j1 & 7); + int k9 = stream.readUnsignedWord(); + if (i4 >= 0 && l6 >= 0 && i4 < 104 && l6 < 104) { + NodeList class19 = groundArray[plane][i4][l6]; + if (class19 != null) { + for (Item item = (Item) class19.reverseGetFirst(); item != null; item = (Item) class19.reverseGetNext()) { + if (item.ID != (k9 & 0x7fff)) { + continue; + } + item.unlink(); + break; + } + + if (class19.reverseGetFirst() == null) { + groundArray[plane][i4][l6] = null; + } + spawnGroundItem(i4, l6); + } + } + return; + } + if (j == 160) { + int k1 = stream.method428(); + int j4 = anInt1268 + (k1 >> 4 & 7); + int i7 = anInt1269 + (k1 & 7); + int l9 = stream.method428(); + int j12 = l9 >> 2; + int k14 = l9 & 3; + int j16 = anIntArray1177[j12]; + int j17 = stream.method435(); + if (j4 >= 0 && i7 >= 0 && j4 < 103 && i7 < 103) { + int j18 = intGroundArray[plane][j4][i7]; + int i19 = intGroundArray[plane][j4 + 1][i7]; + int l19 = intGroundArray[plane][j4 + 1][i7 + 1]; + int k20 = intGroundArray[plane][j4][i7 + 1]; + if (j16 == 0) { + Object1 class10 = worldController.method296(plane, j4, i7); + if (class10 != null) { + int k21 = class10.uid >> 14 & 0x7fff; + if (j12 == 2) { + class10.aClass30_Sub2_Sub4_278 = new Animable_Sub5(k21, 4 + k14, 2, i19, l19, j18, k20, j17, false); + class10.aClass30_Sub2_Sub4_279 = new Animable_Sub5(k21, k14 + 1 & 3, 2, i19, l19, j18, k20, j17, false); + } else { + class10.aClass30_Sub2_Sub4_278 = new Animable_Sub5(k21, k14, j12, i19, l19, j18, k20, j17, false); + } + } + } + if (j16 == 1) { + Object2 class26 = worldController.method297(j4, i7, plane); + if (class26 != null) { + class26.aClass30_Sub2_Sub4_504 = new Animable_Sub5(class26.uid >> 14 & 0x7fff, 0, 4, i19, l19, j18, k20, j17, false); + } + } + if (j16 == 2) { + Object5 class28 = worldController.method298(j4, i7, plane); + if (j12 == 11) { + j12 = 10; + } + if (class28 != null) { + class28.aClass30_Sub2_Sub4_521 = new Animable_Sub5(class28.uid >> 14 & 0x7fff, k14, j12, i19, l19, j18, k20, j17, false); + } + } + if (j16 == 3) { + Object3 class49 = worldController.method299(i7, j4, plane); + if (class49 != null) { + class49.aClass30_Sub2_Sub4_814 = new Animable_Sub5(class49.uid >> 14 & 0x7fff, k14, 22, i19, l19, j18, k20, j17, false); + } + } + } + return; + } + if (j == 147) { + int l1 = stream.method428(); + int k4 = anInt1268 + (l1 >> 4 & 7); + int j7 = anInt1269 + (l1 & 7); + int i10 = stream.readUnsignedWord(); + byte byte0 = stream.method430(); + int l14 = stream.method434(); + byte byte1 = stream.method429(); + int k17 = stream.readUnsignedWord(); + int k18 = stream.method428(); + int j19 = k18 >> 2; + int i20 = k18 & 3; + int l20 = anIntArray1177[j19]; + byte byte2 = stream.readSignedByte(); + int l21 = stream.readUnsignedWord(); + byte byte3 = stream.method429(); + Player player; + if (i10 == unknownInt10) { + player = myPlayer; + } else { + player = playerArray[i10]; + } + if (player != null) { + ObjectDef class46 = ObjectDef.forID(l21); + int i22 = intGroundArray[plane][k4][j7]; + int j22 = intGroundArray[plane][k4 + 1][j7]; + int k22 = intGroundArray[plane][k4 + 1][j7 + 1]; + int l22 = intGroundArray[plane][k4][j7 + 1]; + Model model = class46.method578(j19, i20, i22, j22, k22, l22, -1); + if (model != null) { + method130(k17 + 1, -1, 0, l20, j7, 0, plane, k4, l14 + 1); + player.anInt1707 = l14 + loopCycle; + player.anInt1708 = k17 + loopCycle; + player.aModel_1714 = model; + int i23 = class46.anInt744; + int j23 = class46.anInt761; + if (i20 == 1 || i20 == 3) { + i23 = class46.anInt761; + j23 = class46.anInt744; + } + player.anInt1711 = k4 * 128 + i23 * 64; + player.anInt1713 = j7 * 128 + j23 * 64; + player.anInt1712 = method42(plane, player.anInt1713, player.anInt1711); + if (byte2 > byte0) { + byte byte4 = byte2; + byte2 = byte0; + byte0 = byte4; + } + if (byte3 > byte1) { + byte byte5 = byte3; + byte3 = byte1; + byte1 = byte5; + } + player.anInt1719 = k4 + byte2; + player.anInt1721 = k4 + byte0; + player.anInt1720 = j7 + byte3; + player.anInt1722 = j7 + byte1; + } + } + } + if (j == 101) { + int l2 = stream.method427(); + int k5 = l2 >> 2; + int j8 = l2 & 3; + int i11 = anIntArray1177[k5]; + int j13 = stream.readUnsignedByte(); + int k15 = anInt1268 + (j13 >> 4 & 7); + int l16 = anInt1269 + (j13 & 7); + if (k15 >= 0 && l16 >= 0 && k15 < 104 && l16 < 104) + method130(-1, -1, j8, i11, l16, k5, plane, k15, 0); + return; + } + if (j == 151) { + int i2 = stream.method426(); + int l4 = anInt1268 + (i2 >> 4 & 7); + int k7 = anInt1269 + (i2 & 7); + int j10 = stream.method434(); + int k12 = stream.method428(); + int i15 = k12 >> 2; + int k16 = k12 & 3; + int l17 = anIntArray1177[i15]; + if (l4 >= 0 && k7 >= 0 && l4 < 104 && k7 < 104) + method130(-1, j10, k16, l17, k7, i15, plane, l4, 0); + return; + } + + if (j == 4) { + int j2 = stream.readUnsignedByte(); + int i5 = anInt1268 + (j2 >> 4 & 7); + int l7 = anInt1269 + (j2 & 7); + int k10 = stream.readUnsignedWord(); + int l12 = stream.readUnsignedByte(); + int j15 = stream.readUnsignedWord(); + if (i5 >= 0 && l7 >= 0 && i5 < 104 && l7 < 104) { + i5 = i5 * 128 + 64; + l7 = l7 * 128 + 64; + Animable_Sub3 class30_sub2_sub4_sub3 = new Animable_Sub3(plane, loopCycle, j15, k10, method42(plane, l7, i5) - l12, l7, i5); + aClass19_1056.insertHead(class30_sub2_sub4_sub3); + } + return; + } + if (j == 44) { + int k2 = stream.method436(); + int j5 = stream.readUnsignedWord(); + int i8 = stream.readUnsignedByte(); + int l10 = anInt1268 + (i8 >> 4 & 7); + int i13 = anInt1269 + (i8 & 7); + if (l10 >= 0 && i13 >= 0 && l10 < 104 && i13 < 104) { + Item class30_sub2_sub4_sub2_1 = new Item(); + class30_sub2_sub4_sub2_1.ID = k2; + class30_sub2_sub4_sub2_1.anInt1559 = j5; + if (groundArray[plane][l10][i13] == null) { + groundArray[plane][l10][i13] = new NodeList(); + } + groundArray[plane][l10][i13].insertHead(class30_sub2_sub4_sub2_1); + spawnGroundItem(l10, i13); + } + return; + } + if (j == 117) { + int i3 = stream.readUnsignedByte(); + int l5 = anInt1268 + (i3 >> 4 & 7); + int k8 = anInt1269 + (i3 & 7); + int j11 = l5 + stream.readSignedByte(); + int k13 = k8 + stream.readSignedByte(); + int l15 = stream.readSignedWord(); + int i17 = stream.readUnsignedWord(); + int i18 = stream.readUnsignedByte() * 4; + int l18 = stream.readUnsignedByte() * 4; + int k19 = stream.readUnsignedWord(); + int j20 = stream.readUnsignedWord(); + int i21 = stream.readUnsignedByte(); + int j21 = stream.readUnsignedByte(); + if (l5 >= 0 && k8 >= 0 && l5 < 104 && k8 < 104 && j11 >= 0 && k13 >= 0 && j11 < 104 && k13 < 104 && i17 != 65535) { + l5 = l5 * 128 + 64; + k8 = k8 * 128 + 64; + j11 = j11 * 128 + 64; + k13 = k13 * 128 + 64; + Animable_Sub4 class30_sub2_sub4_sub4 = new Animable_Sub4(i21, l18, k19 + loopCycle, j20 + loopCycle, j21, plane, method42(plane, k8, l5) - i18, k8, l5, l15, i17); + class30_sub2_sub4_sub4.method455(k19 + loopCycle, k13, method42(plane, k13, j11) - l18, j11); + aClass19_1013.insertHead(class30_sub2_sub4_sub4); + } + } + } + + public static void setLowMem() { + WorldController.lowMem = true; + Texture.lowMem = true; + lowMem = true; + ObjectManager.lowMem = true; + ObjectDef.lowMem = true; + } + + public void method139(Stream stream) { + stream.initBitAccess(); + int k = stream.readBits(8); + if (k < npcCount) { + for (int l = k; l < npcCount; l++) { + anIntArray840[anInt839++] = npcIndices[l]; + } + + } + if (k > npcCount) { + Signlink.reporterror(myUsername + " Too many npcs"); + throw new RuntimeException("eek"); + } + npcCount = 0; + for (int i1 = 0; i1 < k; i1++) { + int j1 = npcIndices[i1]; + NPC npc = npcArray[j1]; + int k1 = stream.readBits(1); + if (k1 == 0) { + npcIndices[npcCount++] = j1; + npc.anInt1537 = loopCycle; + } else { + int l1 = stream.readBits(2); + if (l1 == 0) { + npcIndices[npcCount++] = j1; + npc.anInt1537 = loopCycle; + anIntArray894[anInt893++] = j1; + } else if (l1 == 1) { + npcIndices[npcCount++] = j1; + npc.anInt1537 = loopCycle; + int i2 = stream.readBits(3); + npc.moveInDir(false, i2); + int k2 = stream.readBits(1); + if (k2 == 1) { + anIntArray894[anInt893++] = j1; + } + } else if (l1 == 2) { + npcIndices[npcCount++] = j1; + npc.anInt1537 = loopCycle; + int j2 = stream.readBits(3); + npc.moveInDir(true, j2); + int l2 = stream.readBits(3); + npc.moveInDir(true, l2); + int i3 = stream.readBits(1); + if (i3 == 1) { + anIntArray894[anInt893++] = j1; + } + } else if (l1 == 3) { + anIntArray840[anInt839++] = j1; + } + } + } + + } + + public void processLoginScreenInput() { + if (loginScreenState == 0) { + int i = super.myWidth / 2 - 80; + int l = super.myHeight / 2 + 20; + l += 20; + if (super.clickMode3 == 1 && super.saveClickX >= i - 75 && super.saveClickX <= i + 75 && super.saveClickY >= l - 20 && super.saveClickY <= l + 20) { + loginScreenState = 3; + loginScreenCursorPos = 0; + } + i = super.myWidth / 2 + 80; + if (super.clickMode3 == 1 && super.saveClickX >= i - 75 && super.saveClickX <= i + 75 && super.saveClickY >= l - 20 && super.saveClickY <= l + 20) { + loginMessage1 = ""; + loginMessage2 = "Enter your username & password."; + loginScreenState = 2; + loginScreenCursorPos = 0; + } + } else { + if (loginScreenState == 2) { + int j = super.myHeight / 2 - 40; + j += 30; + j += 25; + if (super.clickMode3 == 1 && super.saveClickY >= j - 15 && super.saveClickY < j) { + loginScreenCursorPos = 0; + } + j += 15; + if (super.clickMode3 == 1 && super.saveClickY >= j - 15 && super.saveClickY < j) { + loginScreenCursorPos = 1; + } + j += 15; + int i1 = super.myWidth / 2 - 80; + int k1 = super.myHeight / 2 + 50; + k1 += 20; + if (super.clickMode3 == 1 && super.saveClickX >= i1 - 75 && super.saveClickX <= i1 + 75 && super.saveClickY >= k1 - 20 && super.saveClickY <= k1 + 20) { + loginFailures = 0; + login(myUsername, myPassword, false); + if (loggedIn) { + return; + } + } + i1 = super.myWidth / 2 + 80; + if (super.clickMode3 == 1 && super.saveClickX >= i1 - 75 && super.saveClickX <= i1 + 75 && super.saveClickY >= k1 - 20 && super.saveClickY <= k1 + 20) { + loginScreenState = 0; + // myUsername = ""; + // myPassword = ""; + } + do { + int l1 = readChar(-796); + if (l1 == -1) { + break; + } + boolean flag1 = false; + for (int i2 = 0; i2 < validUserPassChars.length(); i2++) { + if (l1 != validUserPassChars.charAt(i2)) { + continue; + } + flag1 = true; + break; + } + + if (loginScreenCursorPos == 0) { + if (l1 == 8 && myUsername.length() > 0) { + myUsername = myUsername.substring(0, myUsername.length() - 1); + } + if (l1 == 9 || l1 == 10 || l1 == 13) { + loginScreenCursorPos = 1; + } + if (flag1) { + myUsername += (char) l1; + } + if (myUsername.length() > 12) { + myUsername = myUsername.substring(0, 12); + } + } else if (loginScreenCursorPos == 1) { + if (l1 == 8 && myPassword.length() > 0) { + myPassword = myPassword.substring(0, myPassword.length() - 1); + } + if (l1 == 9 || l1 == 10 || l1 == 13) { + login(myUsername, myPassword, false); + loginScreenCursorPos = 0; + } + if (flag1) { + myPassword += (char) l1; + } + if (myPassword.length() > 20) { + myPassword = myPassword.substring(0, 20); + } + } + } while (true); + return; + } + if (loginScreenState == 3) { + int k = super.myWidth / 2; + int j1 = super.myHeight / 2 + 50; + j1 += 20; + if (super.clickMode3 == 1 && super.saveClickX >= k - 75 && super.saveClickX <= k + 75 && super.saveClickY >= j1 - 20 && super.saveClickY <= j1 + 20) { + loginScreenState = 0; + } + } + } + } + + public void markMinimap(Sprite sprite, int i, int j) { + int k = minimapInt1 + minimapInt2 & 0x7ff; + int l = i * i + j * j; + if (l > 6400) { + return; + } + int i1 = Model.modelIntArray1[k]; + int j1 = Model.modelIntArray2[k]; + i1 = i1 * 256 / (minimapInt3 + 256); + j1 = j1 * 256 / (minimapInt3 + 256); + int k1 = j * i1 + i * j1 >> 16; + int l1 = j * j1 - i * i1 >> 16; + if (l > 2500) { + sprite.method354(mapBack, 83 - l1 - sprite.trimHeight / 2 - 4, 94 + k1 - sprite.trimWidth / 2 + 4); + } else { + sprite.drawSprite(94 + k1 - sprite.trimWidth / 2 + 4, 83 - l1 - sprite.trimHeight / 2 - 4); + } + } + + public void method142(int i, int j, int k, int l, int i1, int j1, int k1) { + if (i1 >= 1 && i >= 1 && i1 <= 102 && i <= 102) { + if (lowMem && j != plane) { + return; + } + int i2 = 0; + if (j1 == 0) { + i2 = worldController.method300(j, i1, i); + } + if (j1 == 1) { + i2 = worldController.method301(j, i1, i); + } + if (j1 == 2) { + i2 = worldController.method302(j, i1, i); + } + if (j1 == 3) { + i2 = worldController.method303(j, i1, i); + } + if (i2 != 0) { + int i3 = worldController.method304(j, i1, i, i2); + int j2 = i2 >> 14 & 0x7fff; + int k2 = i3 & 0x1f; + int l2 = i3 >> 6; + if (j1 == 0) { + worldController.method291(i1, j, i, (byte) -119); + ObjectDef class46 = ObjectDef.forID(j2); + if (class46.aBoolean767) { + aClass11Array1230[j].method215(l2, k2, class46.aBoolean757, i1, i); + } + } + if (j1 == 1) { + worldController.method292(i, j, i1); + } + if (j1 == 2) { + worldController.method293(j, i1, i); + ObjectDef class46_1 = ObjectDef.forID(j2); + if (i1 + class46_1.anInt744 > 103 || i + class46_1.anInt744 > 103 || i1 + class46_1.anInt761 > 103 || i + class46_1.anInt761 > 103) { + return; + } + if (class46_1.aBoolean767) { + aClass11Array1230[j].method216(l2, class46_1.anInt744, i1, i, class46_1.anInt761, class46_1.aBoolean757); + } + } + if (j1 == 3) { + worldController.method294(j, i, i1); + ObjectDef class46_2 = ObjectDef.forID(j2); + if (class46_2.aBoolean767 && class46_2.hasActions) { + aClass11Array1230[j].method218(i, i1); + } + } + } + if (k1 >= 0) { + int j3 = j; + if (j3 < 3 && (byteGroundArray[1][i1][i] & 2) == 2) { + j3++; + } + ObjectManager.method188(worldController, k, i, l, j3, aClass11Array1230[j], intGroundArray, i1, k1, j); + } + } + } + + public void updatePlayers(int i, Stream stream) { + anInt839 = 0; + anInt893 = 0; + method117(stream); + method134(stream); + method91(stream, i); + method49(stream); + for (int k = 0; k < anInt839; k++) { + int l = anIntArray840[k]; + if (playerArray[l].anInt1537 != loopCycle) { + playerArray[l] = null; + } + } + + if (stream.currentOffset != i) { + Signlink.reporterror("Error packet size mismatch in getplayer pos:" + stream.currentOffset + " psize:" + i); + throw new RuntimeException("eek"); + } + for (int i1 = 0; i1 < playerCount; i1++) { + if (playerArray[playerIndices[i1]] == null) { + Signlink.reporterror(myUsername + " null entry in pl list - pos:" + i1 + " size:" + playerCount); + throw new RuntimeException("eek"); + } + } + + } + + public void setCameraPos(int j, int k, int l, int i1, int j1, int k1) { + int l1 = 2048 - k & 0x7ff; + int i2 = 2048 - j1 & 0x7ff; + int j2 = 0; + int k2 = 0; + int l2 = j; + if (l1 != 0) { + int i3 = Model.modelIntArray1[l1]; + int k3 = Model.modelIntArray2[l1]; + int i4 = k2 * k3 - l2 * i3 >> 16; + l2 = k2 * i3 + l2 * k3 >> 16; + k2 = i4; + } + if (i2 != 0) { + /* + * xxx if(cameratoggle){ if(zoom == 0) zoom = k2; if(lftrit == 0) + * lftrit = j2; if(fwdbwd == 0) fwdbwd = l2; k2 = zoom; j2 = lftrit; + * l2 = fwdbwd; } + */ + int j3 = Model.modelIntArray1[i2]; + int l3 = Model.modelIntArray2[i2]; + int j4 = l2 * j3 + j2 * l3 >> 16; + l2 = l2 * l3 - j2 * j3 >> 16; + j2 = j4; + } + xCameraPos = l - j2; + zCameraPos = i1 - k2; + yCameraPos = k1 - l2; + yCameraCurve = k; + xCameraCurve = j1; + } + + public boolean parsePacket() { + if (socketStream == null) { + return false; + } + try { + int i = socketStream.available(); + if (i == 0) { + return false; + } + if (pktType == -1) { + socketStream.flushInputStream(inStream.buffer, 1); + pktType = inStream.buffer[0] & 0xff; + if (encryption != null) { + pktType = pktType - encryption.getNextKey() & 0xff; + } + pktSize = SizeConstants.packetSizes[pktType]; + i--; + } + if (pktSize == -1) { + if (i > 0) { + socketStream.flushInputStream(inStream.buffer, 1); + pktSize = inStream.buffer[0] & 0xff; + i--; + } else { + return false; + } + } + if (pktSize == -2) { + if (i > 1) { + socketStream.flushInputStream(inStream.buffer, 2); + inStream.currentOffset = 0; + pktSize = inStream.readUnsignedWord(); + i -= 2; + } else { + return false; + } + } + if (i < pktSize) { + return false; + } + inStream.currentOffset = 0; + socketStream.flushInputStream(inStream.buffer, pktSize); + anInt1009 = 0; + anInt843 = anInt842; + anInt842 = anInt841; + anInt841 = pktType; + if (pktType == 81) { + updatePlayers(pktSize, inStream); + aBoolean1080 = false; + pktType = -1; + return true; + } + if (pktType == 176) { + daysSinceRecovChange = inStream.method427(); + unreadMessages = inStream.method435(); + membersInt = inStream.readUnsignedByte(); + anInt1193 = inStream.method440(); + daysSinceLastLogin = inStream.readUnsignedWord(); + if (anInt1193 != 0 && openInterfaceID == -1) { + Signlink.dnslookup(TextClass.method586(anInt1193)); + closeOpenInterfaces(); + char c = '\u028A'; + if (daysSinceRecovChange != 201 || membersInt == 1) { + c = '\u028F'; + } + reportAbuseInput = ""; + canMute = false; + for (RSInterface element : RSInterface.interfaceCache) { + if (element == null || element.anInt214 != c) { + continue; + } + openInterfaceID = element.parentID; + break; + } + + } + pktType = -1; + return true; + } + if (pktType == 64) { + anInt1268 = inStream.method427(); + anInt1269 = inStream.method428(); + for (int j = anInt1268; j < anInt1268 + 8; j++) { + for (int l9 = anInt1269; l9 < anInt1269 + 8; l9++) { + if (groundArray[plane][j][l9] != null) { + groundArray[plane][j][l9] = null; + spawnGroundItem(j, l9); + } + } + + } + + for (Class30_Sub1 class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetFirst(); class30_sub1 != null; class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) { + if (class30_sub1.anInt1297 >= anInt1268 && class30_sub1.anInt1297 < anInt1268 + 8 && class30_sub1.anInt1298 >= anInt1269 && class30_sub1.anInt1298 < anInt1269 + 8 && class30_sub1.anInt1295 == plane) { + class30_sub1.anInt1294 = 0; + } + } + + pktType = -1; + return true; + } + if (pktType == 185) { + int k = inStream.method436(); + RSInterface.interfaceCache[k].anInt233 = 3; + if (myPlayer.desc == null) { + RSInterface.interfaceCache[k].mediaID = (myPlayer.anIntArray1700[0] << 25) + (myPlayer.anIntArray1700[4] << 20) + (myPlayer.equipment[0] << 15) + (myPlayer.equipment[8] << 10) + (myPlayer.equipment[11] << 5) + myPlayer.equipment[1]; + } else { + RSInterface.interfaceCache[k].mediaID = (int) (0x12345678L + myPlayer.desc.type); + } + pktType = -1; + return true; + } + if (pktType == 107) { + aBoolean1160 = false; + for (int l = 0; l < 5; l++) { + aBooleanArray876[l] = false; + } + + pktType = -1; + return true; + } + if (pktType == 72) { + int i1 = inStream.method434(); + RSInterface class9 = RSInterface.interfaceCache[i1]; + for (int k15 = 0; k15 < class9.inv.length; k15++) { + class9.inv[k15] = -1; + class9.inv[k15] = 0; + } + + pktType = -1; + return true; + } + if (pktType == 214) { + ignoreCount = pktSize / 8; + for (int j1 = 0; j1 < ignoreCount; j1++) { + ignoreListAsLongs[j1] = inStream.readQWord(); + } + + pktType = -1; + return true; + } + if (pktType == 166) { + aBoolean1160 = true; + anInt1098 = inStream.readUnsignedByte(); + anInt1099 = inStream.readUnsignedByte(); + anInt1100 = inStream.readUnsignedWord(); + anInt1101 = inStream.readUnsignedByte(); + anInt1102 = inStream.readUnsignedByte(); + if (anInt1102 >= 100) { + xCameraPos = anInt1098 * 128 + 64; + yCameraPos = anInt1099 * 128 + 64; + zCameraPos = method42(plane, yCameraPos, xCameraPos) - anInt1100; + } + pktType = -1; + return true; + } + if (pktType == 134) { + needDrawTabArea = true; + int k1 = inStream.readUnsignedByte(); + int i10 = inStream.method439(); + int l15 = inStream.readUnsignedByte(); + currentExp[k1] = i10; + currentStats[k1] = l15; + maxStats[k1] = 1; + for (int k20 = 0; k20 < 98; k20++) { + if (i10 >= anIntArray1019[k20]) { + maxStats[k1] = k20 + 2; + } + } + + pktType = -1; + return true; + } + if (pktType == 71) { + int l1 = inStream.readUnsignedWord(); + int j10 = inStream.readUnsignedByteA(); + if (l1 == 65535) { + l1 = -1; + } + tabInterfaceIDs[j10] = l1; + needDrawTabArea = true; + tabAreaAltered = true; + pktType = -1; + return true; + } + if (pktType == 74) { + int i2 = inStream.method434(); + if (i2 == 65535) { + i2 = -1; + } + if (i2 != -1 || previousSong != 0) { + if (i2 != -1 && currentSong != i2 && musicVolume != 0 && previousSong == 0) + method58(10, musicVolume, false, i2); + } else + method55(false); + currentSong = i2; + pktType = -1; + return true; + } + if (pktType == 121) { + int i_60_ = inStream.method436(); + int i_61_ = inStream.method435(); + if (i_61_ == 65535) + i_61_ = -1; + if (musicVolume != 0 && i_61_ != -1) { + method56(musicVolume, false, i_60_); + previousSong = i_61_*20; + } + pktType = -1; + return true; + } + if (pktType == 109) { + resetLogout(); + pktType = -1; + return false; + } + if (pktType == 70) { + int k2 = inStream.readSignedWord(); + int l10 = inStream.method437(); + int i16 = inStream.method434(); + RSInterface class9_5 = RSInterface.interfaceCache[i16]; + class9_5.anInt263 = k2; + class9_5.anInt265 = l10; + pktType = -1; + return true; + } + if (pktType == 73 || pktType == 241) { + + // mapReset(); + int l2 = anInt1069; + int i11 = anInt1070; + if (pktType == 73) { + l2 = inStream.method435(); + i11 = inStream.readUnsignedWord(); + aBoolean1159 = false; + } + if (pktType == 241) { + i11 = inStream.method435(); + inStream.initBitAccess(); + for (int j16 = 0; j16 < 4; j16++) { + for (int l20 = 0; l20 < 13; l20++) { + for (int j23 = 0; j23 < 13; j23++) { + int i26 = inStream.readBits(1); + if (i26 == 1) { + anIntArrayArrayArray1129[j16][l20][j23] = inStream.readBits(26); + } else { + anIntArrayArrayArray1129[j16][l20][j23] = -1; + } + } + + } + + } + + inStream.finishBitAccess(); + l2 = inStream.readUnsignedWord(); + aBoolean1159 = true; + } + if (anInt1069 == l2 && anInt1070 == i11 && loadingStage == 2) { + pktType = -1; + return true; + } + anInt1069 = l2; + anInt1070 = i11; + baseX = (anInt1069 - 6) * 8; + baseY = (anInt1070 - 6) * 8; + aBoolean1141 = (anInt1069 / 8 == 48 || anInt1069 / 8 == 49) && anInt1070 / 8 == 48; + if (anInt1069 / 8 == 48 && anInt1070 / 8 == 148) { + aBoolean1141 = true; + } + loadingStage = 1; + aLong824 = System.currentTimeMillis(); + drawTextOnScreen(null, "Loading - please wait."); + if (pktType == 73) { + int k16 = 0; + for (int i21 = (anInt1069 - 6) / 8; i21 <= (anInt1069 + 6) / 8; i21++) { + for (int k23 = (anInt1070 - 6) / 8; k23 <= (anInt1070 + 6) / 8; k23++) { + k16++; + } + + } + + aByteArrayArray1183 = new byte[k16][]; + aByteArrayArray1247 = new byte[k16][]; + anIntArray1234 = new int[k16]; + anIntArray1235 = new int[k16]; + anIntArray1236 = new int[k16]; + k16 = 0; + for (int l23 = (anInt1069 - 6) / 8; l23 <= (anInt1069 + 6) / 8; l23++) { + for (int j26 = (anInt1070 - 6) / 8; j26 <= (anInt1070 + 6) / 8; j26++) { + anIntArray1234[k16] = (l23 << 8) + j26; + if (aBoolean1141 && (j26 == 49 || j26 == 149 || j26 == 147 || l23 == 50 || l23 == 49 && j26 == 47)) { + anIntArray1235[k16] = -1; + anIntArray1236[k16] = -1; + k16++; + } else { + int k28 = anIntArray1235[k16] = onDemandFetcher.method562(0, j26, l23); + if (k28 != -1) { + onDemandFetcher.method558(3, k28); + } + int j30 = anIntArray1236[k16] = onDemandFetcher.method562(1, j26, l23); + if (j30 != -1) { + onDemandFetcher.method558(3, j30); + } + k16++; + } + } + + } + + } + if (pktType == 241) { + int l16 = 0; + int ai[] = new int[676]; + for (int i24 = 0; i24 < 4; i24++) { + for (int k26 = 0; k26 < 13; k26++) { + for (int l28 = 0; l28 < 13; l28++) { + int k30 = anIntArrayArrayArray1129[i24][k26][l28]; + if (k30 != -1) { + int k31 = k30 >> 14 & 0x3ff; + int i32 = k30 >> 3 & 0x7ff; + int k32 = (k31 / 8 << 8) + i32 / 8; + for (int j33 = 0; j33 < l16; j33++) { + if (ai[j33] != k32) { + continue; + } + k32 = -1; + break; + } + + if (k32 != -1) { + ai[l16++] = k32; + } + } + } + + } + + } + + aByteArrayArray1183 = new byte[l16][]; + aByteArrayArray1247 = new byte[l16][]; + anIntArray1234 = new int[l16]; + anIntArray1235 = new int[l16]; + anIntArray1236 = new int[l16]; + for (int l26 = 0; l26 < l16; l26++) { + int i29 = anIntArray1234[l26] = ai[l26]; + int l30 = i29 >> 8 & 0xff; + int l31 = i29 & 0xff; + int j32 = anIntArray1235[l26] = onDemandFetcher.method562(0, l31, l30); + if (j32 != -1) { + onDemandFetcher.method558(3, j32); + } + int i33 = anIntArray1236[l26] = onDemandFetcher.method562(1, l31, l30); + if (i33 != -1) { + onDemandFetcher.method558(3, i33); + } + } + + } + int i17 = baseX - anInt1036; + int j21 = baseY - anInt1037; + anInt1036 = baseX; + anInt1037 = baseY; + for (int j24 = 0; j24 < 16384; j24++) { + NPC npc = npcArray[j24]; + if (npc != null) { + for (int j29 = 0; j29 < 10; j29++) { + npc.smallX[j29] -= i17; + npc.smallY[j29] -= j21; + } + + npc.x -= i17 * 128; + npc.y -= j21 * 128; + } + } + + for (int i27 = 0; i27 < maxPlayers; i27++) { + Player player = playerArray[i27]; + if (player != null) { + for (int i31 = 0; i31 < 10; i31++) { + player.smallX[i31] -= i17; + player.smallY[i31] -= j21; + } + + player.x -= i17 * 128; + player.y -= j21 * 128; + } + } + + aBoolean1080 = true; + byte byte1 = 0; + byte byte2 = 104; + byte byte3 = 1; + if (i17 < 0) { + byte1 = 103; + byte2 = -1; + byte3 = -1; + } + byte byte4 = 0; + byte byte5 = 104; + byte byte6 = 1; + if (j21 < 0) { + byte4 = 103; + byte5 = -1; + byte6 = -1; + } + for (int k33 = byte1; k33 != byte2; k33 += byte3) { + for (int l33 = byte4; l33 != byte5; l33 += byte6) { + int i34 = k33 + i17; + int j34 = l33 + j21; + for (int k34 = 0; k34 < 4; k34++) { + if (i34 >= 0 && j34 >= 0 && i34 < 104 && j34 < 104) { + groundArray[k34][k33][l33] = groundArray[k34][i34][j34]; + } else { + groundArray[k34][k33][l33] = null; + } + } + + } + + } + + for (Class30_Sub1 class30_sub1_1 = (Class30_Sub1) aClass19_1179.reverseGetFirst(); class30_sub1_1 != null; class30_sub1_1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) { + class30_sub1_1.anInt1297 -= i17; + class30_sub1_1.anInt1298 -= j21; + if (class30_sub1_1.anInt1297 < 0 || class30_sub1_1.anInt1298 < 0 || class30_sub1_1.anInt1297 >= 104 || class30_sub1_1.anInt1298 >= 104) { + class30_sub1_1.unlink(); + } + } + + if (destX != 0) { + destX -= i17; + destY -= j21; + } + aBoolean1160 = false; + pktType = -1; + return true; + } + if (pktType == 208) { + int i3 = inStream.method437(); + if (i3 >= 0) { + method60(i3); + } + anInt1018 = i3; + pktType = -1; + return true; + } + if (pktType == 99) { + anInt1021 = inStream.readUnsignedByte(); + pktType = -1; + return true; + } + if (pktType == 75) { + int j3 = inStream.method436(); + int j11 = inStream.method436(); + RSInterface.interfaceCache[j11].anInt233 = 2; + RSInterface.interfaceCache[j11].mediaID = j3; + pktType = -1; + return true; + } + if (pktType == 114) { + anInt1104 = inStream.method434() * 30; + pktType = -1; + return true; + } + if (pktType == 60) { + anInt1269 = inStream.readUnsignedByte(); + anInt1268 = inStream.method427(); + while (inStream.currentOffset < pktSize) { + int k3 = inStream.readUnsignedByte(); + method137(inStream, k3); + } + pktType = -1; + return true; + } + if (pktType == 35) { + int l3 = inStream.readUnsignedByte(); + int k11 = inStream.readUnsignedByte(); + int j17 = inStream.readUnsignedByte(); + int k21 = inStream.readUnsignedByte(); + aBooleanArray876[l3] = true; + anIntArray873[l3] = k11; + anIntArray1203[l3] = j17; + anIntArray928[l3] = k21; + anIntArray1030[l3] = 0; + pktType = -1; + return true; + } + if (pktType == 174) { + int id = inStream.readUnsignedWord(); + int type = inStream.readUnsignedByte(); + int delay = inStream.readUnsignedWord(); + int volume = inStream.readUnsignedByte(); + sound[currentSound] = id; + soundType[currentSound] = type; + soundDelay[currentSound] = delay + Sounds.anIntArray326[id]; + soundVolume[currentSound] = volume; + currentSound++; + pktType = -1; + return true; + } + if (pktType == 104) { + int j4 = inStream.method427(); + int i12 = inStream.readUnsignedByteA(); + String s6 = inStream.readString(); + if (j4 >= 1 && j4 <= 5) { + if (s6.equalsIgnoreCase("null")) { + s6 = null; + } + atPlayerActions[j4 - 1] = s6; + atPlayerArray[j4 - 1] = i12 == 0; + } + pktType = -1; + return true; + } + if (pktType == 78) { + destX = 0; + pktType = -1; + return true; + } + if (pktType == 253) { + String s = inStream.readString(); + if (s.endsWith(":tradereq:")) { + String s3 = s.substring(0, s.indexOf(":")); + long l17 = TextClass.longForName(s3); + boolean flag2 = false; + for (int j27 = 0; j27 < ignoreCount; j27++) { + if (ignoreListAsLongs[j27] != l17) { + continue; + } + flag2 = true; + break; + } + + if (!flag2 && anInt1251 == 0) { + pushMessage("wishes to trade with you.", 4, s3); + } + } else if (s.endsWith(":duelreq:")) { + String s4 = s.substring(0, s.indexOf(":")); + long l18 = TextClass.longForName(s4); + boolean flag3 = false; + for (int k27 = 0; k27 < ignoreCount; k27++) { + if (ignoreListAsLongs[k27] != l18) { + continue; + } + flag3 = true; + break; + } + + if (!flag3 && anInt1251 == 0) { + pushMessage("wishes to duel with you.", 8, s4); + } + } else if (s.endsWith(":chalreq:")) { + String s5 = s.substring(0, s.indexOf(":")); + long l19 = TextClass.longForName(s5); + boolean flag4 = false; + for (int l27 = 0; l27 < ignoreCount; l27++) { + if (ignoreListAsLongs[l27] != l19) { + continue; + } + flag4 = true; + break; + } + + if (!flag4 && anInt1251 == 0) { + String s8 = s.substring(s.indexOf(":") + 1, s.length() - 9); + pushMessage(s8, 8, s5); + } + } else if (s.endsWith(":airtiara:")) { + tiara = 1; + } else if (s.endsWith(":watertiara:")) { + tiara = 2; + } else if (s.endsWith(":earthtiara:")) { + tiara = 3; + } else if (s.endsWith(":firetiara:")) { + tiara = 4; + } else if (s.endsWith(":mindtiara:")) { + tiara = 5; + } else if (s.endsWith(":bodytiara:")) { + tiara = 6; + } else if (s.endsWith(":cosmictiara:")) { + tiara = 7; + } else if (s.endsWith(":chaostiara:")) { + tiara = 8; + } else if (s.endsWith(":naturetiara:")) { + tiara = 9; + } else if (s.endsWith(":lawtiara:")) { + tiara = 10; + } else if (s.endsWith(":deathtiara:")) { + tiara = 11; + } else if (s.endsWith(":notiara:")) { + tiara = 0; + } else { + pushMessage(s, 0, ""); + } + pktType = -1; + // serverMessage(s); + + return true; + } + if (pktType == 1) { + for (int k4 = 0; k4 < playerArray.length; k4++) { + if (playerArray[k4] != null) { + playerArray[k4].anim = -1; + } + } + + for (int j12 = 0; j12 < npcArray.length; j12++) { + if (npcArray[j12] != null) { + npcArray[j12].anim = -1; + } + } + + pktType = -1; + return true; + } + if (pktType == 50) { + long l4 = inStream.readQWord(); + int i18 = inStream.readUnsignedByte(); + String s7 = TextClass.fixName(TextClass.nameForLong(l4)); + for (int k24 = 0; k24 < friendsCount; k24++) { + if (l4 != friendsListAsLongs[k24]) { + continue; + } + if (friendsNodeIDs[k24] != i18) { + friendsNodeIDs[k24] = i18; + needDrawTabArea = true; + if (i18 >= 2) { + pushMessage(s7 + " has logged in.", 5, ""); + } + if (i18 <= 1) { + pushMessage(s7 + " has logged out.", 5, ""); + } + } + s7 = null; + break; + } + + if (s7 != null && friendsCount < 200) { + friendsListAsLongs[friendsCount] = l4; + friendsList[friendsCount] = s7; + friendsNodeIDs[friendsCount] = i18; + friendsCount++; + needDrawTabArea = true; + } + for (boolean flag6 = false; !flag6;) { + flag6 = true; + for (int k29 = 0; k29 < friendsCount - 1; k29++) { + if (friendsNodeIDs[k29] != nodeID && friendsNodeIDs[k29 + 1] == nodeID || friendsNodeIDs[k29] == 0 && friendsNodeIDs[k29 + 1] != 0) { + int j31 = friendsNodeIDs[k29]; + friendsNodeIDs[k29] = friendsNodeIDs[k29 + 1]; + friendsNodeIDs[k29 + 1] = j31; + String s10 = friendsList[k29]; + friendsList[k29] = friendsList[k29 + 1]; + friendsList[k29 + 1] = s10; + long l32 = friendsListAsLongs[k29]; + friendsListAsLongs[k29] = friendsListAsLongs[k29 + 1]; + friendsListAsLongs[k29 + 1] = l32; + needDrawTabArea = true; + flag6 = false; + } + } + + } + + pktType = -1; + return true; + } + if (pktType == 110) { + if (tabID == 12) { + needDrawTabArea = true; + } + energy = inStream.readUnsignedByte(); + pktType = -1; + return true; + } + if (pktType == 254) { + anInt855 = inStream.readUnsignedByte(); + if (anInt855 == 1) { + anInt1222 = inStream.readUnsignedWord(); + } + if (anInt855 >= 2 && anInt855 <= 6) { + if (anInt855 == 2) { + anInt937 = 64; + anInt938 = 64; + } + if (anInt855 == 3) { + anInt937 = 0; + anInt938 = 64; + } + if (anInt855 == 4) { + anInt937 = 128; + anInt938 = 64; + } + if (anInt855 == 5) { + anInt937 = 64; + anInt938 = 0; + } + if (anInt855 == 6) { + anInt937 = 64; + anInt938 = 128; + } + anInt855 = 2; + anInt934 = inStream.readUnsignedWord(); + anInt935 = inStream.readUnsignedWord(); + anInt936 = inStream.readUnsignedByte(); + } + if (anInt855 == 10) { + anInt933 = inStream.readUnsignedWord(); + } + pktType = -1; + return true; + } + if (pktType == 248) { + int i5 = inStream.method435(); + int k12 = inStream.readUnsignedWord(); + if (backDialogID != -1) { + backDialogID = -1; + inputTaken = true; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + if (openInterfaceID != i5) { + openInterfaceID = i5; + } + if (invOverlayInterfaceID != k12) { + invOverlayInterfaceID = k12; + } + if (inputDialogState != 0) { + inputDialogState = 0; + inputTaken = true; + } + needDrawTabArea = true; + tabAreaAltered = true; + aBoolean1149 = false; + pktType = -1; + return true; + } + if (pktType == 79) { + int j5 = inStream.method434(); + int l12 = inStream.method435(); + RSInterface class9_3 = RSInterface.interfaceCache[j5]; + if (class9_3 != null && class9_3.type == 0) { + if (l12 < 0) { + l12 = 0; + } + if (l12 > class9_3.scrollMax - class9_3.height) { + l12 = class9_3.scrollMax - class9_3.height; + } + class9_3.scrollPosition = l12; + } + pktType = -1; + return true; + } + if (pktType == 68) { + for (int k5 = 0; k5 < variousSettings.length; k5++) { + if (variousSettings[k5] != anIntArray1045[k5]) { + variousSettings[k5] = anIntArray1045[k5]; + method33(k5); + needDrawTabArea = true; + } + } + + pktType = -1; + return true; + } + if (pktType == 196) { + long l5 = inStream.readQWord(); + @SuppressWarnings("unused") + int j18 = inStream.readDWord(); + int l21 = inStream.readUnsignedByte(); + boolean flag5 = false; + if (l21 <= 1) { + for (int l29 = 0; l29 < ignoreCount; l29++) { + if (ignoreListAsLongs[l29] != l5) { + continue; + } + flag5 = true; + + } + } + if (!flag5 && anInt1251 == 0) { + try { + String s9 = TextInput.method525(pktSize - 13, inStream); + if (l21 == 2 || l21 == 3) { + pushMessage(s9, 7, "@cr2@" + TextClass.fixName(TextClass.nameForLong(l5))); + } else if (l21 == 1) { + pushMessage(s9, 7, "@cr1@" + TextClass.fixName(TextClass.nameForLong(l5))); + } else { + pushMessage(s9, 3, TextClass.fixName(TextClass.nameForLong(l5))); + } + } catch (Exception exception1) { + Signlink.reporterror("cde1"); + } + } + pktType = -1; + return true; + } + if (pktType == 85) { + anInt1269 = inStream.method427(); + anInt1268 = inStream.method427(); + pktType = -1; + return true; + } + if (pktType == 24) { + anInt1054 = inStream.method428(); + if (anInt1054 == tabID) { + if (anInt1054 == 3) { + tabID = 1; + } else { + tabID = 3; + } + needDrawTabArea = true; + } + pktType = -1; + return true; + } + if (pktType == 246) { + int i6 = inStream.method434(); + int i13 = inStream.readUnsignedWord(); + int k18 = inStream.readUnsignedWord(); + if (k18 == 65535) { + RSInterface.interfaceCache[i6].anInt233 = 0; + pktType = -1; + return true; + } else { + ItemDef itemDef = ItemDef.forID(k18); + RSInterface.interfaceCache[i6].anInt233 = 4; + RSInterface.interfaceCache[i6].mediaID = k18; + RSInterface.interfaceCache[i6].anInt270 = itemDef.modelRotation1; + RSInterface.interfaceCache[i6].anInt271 = itemDef.modelRotation2; + RSInterface.interfaceCache[i6].anInt269 = itemDef.modelZoom * 100 / i13; + pktType = -1; + return true; + } + } + if (pktType == 171) { + boolean flag1 = inStream.readUnsignedByte() == 1; + int j13 = inStream.readUnsignedWord(); + RSInterface.interfaceCache[j13].aBoolean266 = flag1; + pktType = -1; + return true; + } + if (pktType == 142) { + int j6 = inStream.method434(); + method60(j6); + if (backDialogID != -1) { + backDialogID = -1; + inputTaken = true; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + if (openInterfaceID != -1) { + openInterfaceID = -1; + } + if (invOverlayInterfaceID != j6) { + invOverlayInterfaceID = j6; + } + if (inputDialogState != 0) { + inputDialogState = 0; + inputTaken = true; + } + needDrawTabArea = true; + tabAreaAltered = true; + aBoolean1149 = false; + pktType = -1; + return true; + } + if (pktType == 126) { + String s1 = inStream.readString(); + int k13 = inStream.method435(); + RSInterface.interfaceCache[k13].disabledText = s1; + if (RSInterface.interfaceCache[k13].parentID == tabInterfaceIDs[tabID]) { + needDrawTabArea = true; + } + pktType = -1; + return true; + } + if (pktType == 206) { + publicChatMode = inStream.readUnsignedByte(); + privateChatMode = inStream.readUnsignedByte(); + tradeMode = inStream.readUnsignedByte(); + aBoolean1233 = true; + inputTaken = true; + pktType = -1; + return true; + } + if (pktType == 240) { + if (tabID == 12) { + needDrawTabArea = true; + } + weight = inStream.readSignedWord(); + pktType = -1; + return true; + } + if (pktType == 69) { + int k9 = inStream.readUnsignedWord(); + int k15 = inStream.readUnsignedWord(); + method60(k15); + if (k9 != -1) + method60(k9); + if (openInterfaceID != -1) { + openInterfaceID = -1; + } + if (invOverlayInterfaceID != -1) { + invOverlayInterfaceID = -1; + } + if (backDialogID != -1) { + backDialogID = -1; + } + if (fullScreenBackDialogID != k15) { + fullScreenBackDialogID = k15; + } + if (fullScreenInterfaceId != k15) { + fullScreenInterfaceId = k9; + } + inputDialogState = 0; + aBoolean1149 = false; + pktType = -1; + return true; + } + if (pktType == 8) { + int k6 = inStream.method436(); + int l13 = inStream.readUnsignedWord(); + RSInterface.interfaceCache[k6].anInt233 = 1; + RSInterface.interfaceCache[k6].mediaID = l13; + pktType = -1; + return true; + } + if (pktType == 122) { + int l6 = inStream.method436(); + int i14 = inStream.method436(); + int i19 = i14 >> 10 & 0x1f; + int i22 = i14 >> 5 & 0x1f; + int l24 = i14 & 0x1f; + RSInterface.interfaceCache[l6].textColor = (i19 << 19) + (i22 << 11) + (l24 << 3); + pktType = -1; + return true; + } + if (pktType == 53) { + needDrawTabArea = true; + int i7 = inStream.readUnsignedWord(); + RSInterface class9_1 = RSInterface.interfaceCache[i7]; + int j19 = inStream.readUnsignedWord(); + for (int j22 = 0; j22 < j19; j22++) { + int i25 = inStream.readUnsignedByte(); + if (i25 == 255) { + i25 = inStream.method440(); + } + class9_1.inv[j22] = inStream.method436(); + class9_1.invStackSizes[j22] = i25; + } + + for (int j25 = j19; j25 < class9_1.inv.length; j25++) { + class9_1.inv[j25] = 0; + class9_1.invStackSizes[j25] = 0; + } + + pktType = -1; + return true; + } + if (pktType == 230) { + int j7 = inStream.method435(); + int j14 = inStream.readUnsignedWord(); + int k19 = inStream.readUnsignedWord(); + int k22 = inStream.method436(); + RSInterface.interfaceCache[j14].anInt270 = k19; + RSInterface.interfaceCache[j14].anInt271 = k22; + RSInterface.interfaceCache[j14].anInt269 = j7; + pktType = -1; + return true; + } + if (pktType == 221) { + anInt900 = inStream.readUnsignedByte(); + needDrawTabArea = true; + pktType = -1; + return true; + } + if (pktType == 177) { + aBoolean1160 = true; + anInt995 = inStream.readUnsignedByte(); + anInt996 = inStream.readUnsignedByte(); + anInt997 = inStream.readUnsignedWord(); + anInt998 = inStream.readUnsignedByte(); + anInt999 = inStream.readUnsignedByte(); + if (anInt999 >= 100) { + int k7 = anInt995 * 128 + 64; + int k14 = anInt996 * 128 + 64; + int i20 = method42(plane, k14, k7) - anInt997; + int l22 = k7 - xCameraPos; + int k25 = i20 - zCameraPos; + int j28 = k14 - yCameraPos; + int i30 = (int) Math.sqrt(l22 * l22 + j28 * j28); + yCameraCurve = (int) (Math.atan2(k25, i30) * 325.94900000000001D) & 0x7ff; + xCameraCurve = (int) (Math.atan2(l22, j28) * -325.94900000000001D) & 0x7ff; + if (yCameraCurve < 128) { + yCameraCurve = 128; + } + if (yCameraCurve > 383) { + yCameraCurve = 383; + } + } + pktType = -1; + return true; + } + if (pktType == 249) { + anInt1046 = inStream.readUnsignedByteA(); + unknownInt10 = inStream.method436(); + pktType = -1; + return true; + } + if (pktType == 65) { + updateNPCs(inStream, pktSize); + pktType = -1; + return true; + } + if (pktType == 27) { + messagePromptRaised = false; + inputDialogState = 1; + amountOrNameInput = ""; + inputTaken = true; + pktType = -1; + return true; + } + if (pktType == 187) { + messagePromptRaised = false; + inputDialogState = 2; + amountOrNameInput = ""; + inputTaken = true; + pktType = -1; + return true; + } + if (pktType == 97) { + int l7 = inStream.readUnsignedWord(); + method60(l7); + if (invOverlayInterfaceID != -1) { + invOverlayInterfaceID = -1; + needDrawTabArea = true; + tabAreaAltered = true; + } + if (backDialogID != -1) { + backDialogID = -1; + inputTaken = true; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + /*if (openInterfaceID != l7) { + openInterfaceID = l7; + }*/ + if (inputDialogState != 0) { + inputDialogState = 0; + inputTaken = true; + } + /* + * 15244 = main Interface ID + * 17511 = Question Type + * 15819 = Christmas Type + * 15812 = Security Type + * 15801 = Item Scam Type + * 15791 = Password Safety + * 15774 = Good/Bad Password + * 15767 = Drama Type + */ + + if (l7 == 15244) { + openInterfaceID = 15812;//secondary/bottom part + fullScreenBackDialogID = 15244; + /*} else if (l7 == 17511) { + openInterfaceID = 17511; + fullScreenBackDialogID = 15244; + } else if (l7 == 15819) { + openInterfaceID = 15819; + fullScreenBackDialogID = 15244; + } else if (l7 == 15812) { + openInterfaceID = 15812; + fullScreenBackDialogID = 15244; + } else if (l7 == 15801) { + openInterfaceID = 15801; + fullScreenBackDialogID = 15244; + } else if (l7 == 15791) { + openInterfaceID = 15791; + fullScreenBackDialogID = 15244; + } else if (l7 == 15774) { + openInterfaceID = 15774; + fullScreenBackDialogID = 15244; + } else if (l7 == 15767) { + openInterfaceID = 15767; + fullScreenBackDialogID = 15244;*/ + } else { + openInterfaceID = l7; + } + aBoolean1149 = false; + pktType = -1; + return true; + } + if (pktType == 218) { + int i8 = inStream.method438(); + dialogID = i8; + inputTaken = true; + pktType = -1; + return true; + } + if (pktType == 87) { + int j8 = inStream.method434(); + int l14 = inStream.method439(); + anIntArray1045[j8] = l14; + if (variousSettings[j8] != l14) { + variousSettings[j8] = l14; + method33(j8); + needDrawTabArea = true; + if (dialogID != -1) { + inputTaken = true; + } + } + pktType = -1; + return true; + } + if (pktType == 36) { + int k8 = inStream.method434(); + byte byte0 = inStream.readSignedByte(); + anIntArray1045[k8] = byte0; + if (variousSettings[k8] != byte0) { + variousSettings[k8] = byte0; + method33(k8); + needDrawTabArea = true; + if (dialogID != -1) { + inputTaken = true; + } + } + pktType = -1; + return true; + } + if (pktType == 61) { + anInt1055 = inStream.readUnsignedByte(); + pktType = -1; + return true; + } + if (pktType == 200) { + int l8 = inStream.readUnsignedWord(); + int i15 = inStream.readSignedWord(); + RSInterface class9_4 = RSInterface.interfaceCache[l8]; + class9_4.anInt257 = i15; + if (i15 == -1) { + class9_4.anInt246 = 0; + class9_4.anInt208 = 0; + } + pktType = -1; + return true; + } + if (pktType == 219) { + if (invOverlayInterfaceID != -1) { + invOverlayInterfaceID = -1; + needDrawTabArea = true; + tabAreaAltered = true; + } + if (backDialogID != -1) { + backDialogID = -1; + inputTaken = true; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + if (openInterfaceID != -1) { + openInterfaceID = -1; + } + if (inputDialogState != 0) { + inputDialogState = 0; + inputTaken = true; + } + aBoolean1149 = false; + pktType = -1; + return true; + } + if (pktType == 34) { + needDrawTabArea = true; + int i9 = inStream.readUnsignedWord(); + RSInterface class9_2 = RSInterface.interfaceCache[i9]; + while (inStream.currentOffset < pktSize) { + int j20 = inStream.method422(); + int i23 = inStream.readUnsignedWord(); + int l25 = inStream.readUnsignedByte(); + if (l25 == 255) { + l25 = inStream.readDWord(); + } + if (j20 >= 0 && j20 < class9_2.inv.length) { + class9_2.inv[j20] = i23; + class9_2.invStackSizes[j20] = l25; + } + } + pktType = -1; + return true; + } + if (pktType == 105 || pktType == 84 || pktType == 147 || pktType == 215 || pktType == 4 || pktType == 117 || pktType == 156 || pktType == 44 || pktType == 160 || pktType == 101 || pktType == 151) { + method137(inStream, pktType); + pktType = -1; + return true; + } + if (pktType == 106) { + tabID = inStream.method427(); + needDrawTabArea = true; + tabAreaAltered = true; + pktType = -1; + return true; + } + if (pktType == 164) { + int j9 = inStream.method434(); + method60(j9); + if (invOverlayInterfaceID != -1) { + invOverlayInterfaceID = -1; + needDrawTabArea = true; + tabAreaAltered = true; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + if (openInterfaceID != -1) { + openInterfaceID = -1; + } + if (backDialogID != j9) { + backDialogID = j9; + } + inputTaken = true; + aBoolean1149 = false; + pktType = -1; + return true; + } + String s2 = "T1 - " + pktType + "," + pktSize + " - " + anInt842 + "," + anInt843 + " - "; + for (int j15 = 0; j15 < pktSize && j15 < 50; j15++) { + s2 = s2 + inStream.buffer[j15] + ","; + } + Signlink.reporterror(s2); + resetLogout(); + } catch (IOException _ex) { + dropClient(); + } catch (Exception exception) { + String s2 = "T2 - " + pktType + "," + anInt842 + "," + anInt843 + " - " + pktSize + "," + (baseX + myPlayer.smallX[0]) + "," + (baseY + myPlayer.smallY[0]) + " - "; + for (int j15 = 0; j15 < pktSize && j15 < 50; j15++) { + s2 = s2 + inStream.buffer[j15] + ","; + } + + Signlink.reporterror(s2); + resetLogout(); + } + return true; + } + + public void method146() { + anInt1265++; + method47(true); + method26(true); + method47(false); + method26(false); + method55(); + method104(); + if (!aBoolean1160) { + int i = anInt1184; + if (anInt984 / 256 > i) { + i = anInt984 / 256; + } + if (aBooleanArray876[4] && anIntArray1203[4] + 128 > i) { + i = anIntArray1203[4] + 128; + } + int k = minimapInt1 + anInt896 & 0x7ff; + setCameraPos(600 + i * 3, i, anInt1014, method42(plane, myPlayer.y, myPlayer.x) - 50, k, anInt1015); + } + int j; + if (!aBoolean1160) { + j = method120(); + } else { + j = method121(); + } + int l = xCameraPos; + int i1 = zCameraPos; + int j1 = yCameraPos; + int k1 = yCameraCurve; + int l1 = xCameraCurve; + for (int i2 = 0; i2 < 5; i2++) { + if (aBooleanArray876[i2]) { + int j2 = (int) (Math.random() * (double) (anIntArray873[i2] * 2 + 1) - (double) anIntArray873[i2] + Math.sin((double) anIntArray1030[i2] * (double) anIntArray928[i2] / 100D) * (double) anIntArray1203[i2]); + if (i2 == 0) { + xCameraPos += j2; + } + if (i2 == 1) { + zCameraPos += j2; + } + if (i2 == 2) { + yCameraPos += j2; + } + if (i2 == 3) { + xCameraCurve = xCameraCurve + j2 & 0x7ff; + } + if (i2 == 4) { + yCameraCurve += j2; + if (yCameraCurve < 128) { + yCameraCurve = 128; + } + if (yCameraCurve > 383) { + yCameraCurve = 383; + } + } + } + } + + int k2 = Texture.anInt1481; + Model.aBoolean1684 = true; + Model.anInt1687 = 0; + Model.anInt1685 = super.mouseX - 4; + Model.anInt1686 = super.mouseY - 4; + DrawingArea.setAllPixelsToZero(); + // xxx disables graphics if(graphicsEnabled){ + worldController.method313(xCameraPos, yCameraPos, xCameraCurve, zCameraPos, j, yCameraCurve); + worldController.clearObj5Cache(); + updateEntities(); + drawHeadIcon(); + method37(k2); + draw3dScreen(); + aRSImageProducer_1165.drawGraphics(4, super.graphics, 4); + xCameraPos = l; + zCameraPos = i1; + yCameraPos = j1; + yCameraCurve = k1; + xCameraCurve = l1; + // } + } + + public void closeOpenInterfaces() { + stream.createFrame(130); + if (invOverlayInterfaceID != -1) { + invOverlayInterfaceID = -1; + needDrawTabArea = true; + aBoolean1149 = false; + tabAreaAltered = true; + } + if (backDialogID != -1) { + backDialogID = -1; + inputTaken = true; + aBoolean1149 = false; + } + if (fullScreenBackDialogID != -1) { + fullScreenBackDialogID = -1; + welcomeScreenRaised = true; + } + if (fullScreenInterfaceId != -1) { + fullScreenInterfaceId = -1; + } + if (openInterfaceID != -1) + openInterfaceID = -1; + } + + public Game() { + server = ClientSettings.SERVER_IP; + anIntArrayArray825 = new int[104][104]; + friendsNodeIDs = new int[200]; + groundArray = new NodeList[4][104][104]; + aBoolean831 = false; + aStream_834 = new Stream(new byte[5000]); + npcArray = new NPC[16384]; + npcIndices = new int[16384]; + anIntArray840 = new int[1000]; + aStream_847 = Stream.create(); + aBoolean848 = true; + openInterfaceID = -1; + currentExp = new int[Skills.skillsCount]; + aBoolean872 = false; + anIntArray873 = new int[5]; + anInt874 = -1; + aBooleanArray876 = new boolean[5]; + drawFlames = false; + reportAbuseInput = ""; + unknownInt10 = -1; + menuOpen = false; + inputString = ""; + maxPlayers = 2048; + myPlayerIndex = 2047; + playerArray = new Player[maxPlayers]; + playerIndices = new int[maxPlayers]; + anIntArray894 = new int[maxPlayers]; + aStreamArray895s = new Stream[maxPlayers]; + anInt897 = 1; + anIntArrayArray901 = new int[104][104]; + anInt902 = 0x766654; + aByteArray912 = new byte[16384]; + currentStats = new int[Skills.skillsCount]; + ignoreListAsLongs = new long[100]; + loadingError = false; + anInt927 = 0x332d25; + anIntArray928 = new int[5]; + anIntArrayArray929 = new int[104][104]; + chatTypes = new int[100]; + chatNames = new String[100]; + chatMessages = new String[100]; + sideIcons = new Background[13]; + aBoolean954 = true; + friendsListAsLongs = new long[200]; + currentSong = -1; + drawingFlames = false; + spriteDrawX = -1; + spriteDrawY = -1; + anIntArray968 = new int[33]; + anIntArray969 = new int[256]; + decompressors = new Decompressor[5]; + variousSettings = new int[2000]; + aBoolean972 = false; + anInt975 = 50; + anIntArray976 = new int[anInt975]; + anIntArray977 = new int[anInt975]; + anIntArray978 = new int[anInt975]; + anIntArray979 = new int[anInt975]; + anIntArray980 = new int[anInt975]; + anIntArray981 = new int[anInt975]; + anIntArray982 = new int[anInt975]; + aStringArray983 = new String[anInt975]; + anInt985 = -1; + hitMarks = new Sprite[20]; + anIntArray990 = new int[5]; + anInt1002 = 0x23201b; + amountOrNameInput = ""; + aClass19_1013 = new NodeList(); + aBoolean1017 = false; + anInt1018 = -1; + anIntArray1030 = new int[5]; + aBoolean1031 = false; + mapFunctions = new Sprite[100]; + dialogID = -1; + maxStats = new int[Skills.skillsCount]; + anIntArray1045 = new int[2000]; + aBoolean1047 = true; + anIntArray1052 = new int[151]; + anInt1054 = -1; + aClass19_1056 = new NodeList(); + anIntArray1057 = new int[33]; + aClass9_1059 = new RSInterface(); + mapScenes = new Background[100]; + anInt1063 = 0x4d4233; + anIntArray1065 = new int[7]; + anIntArray1072 = new int[1000]; + anIntArray1073 = new int[1000]; + aBoolean1080 = false; + friendsList = new String[200]; + inStream = Stream.create(); + expectedCRCs = new int[9]; + menuActionCmd2 = new int[500]; + menuActionCmd3 = new int[500]; + menuActionID = new int[500]; + menuActionCmd1 = new int[500]; + headIcons = new Sprite[20]; + headIconsHint = new Sprite[20]; + skullIcons = new Sprite[20]; + tabAreaAltered = false; + aString1121 = ""; + atPlayerActions = new String[5]; + atPlayerArray = new boolean[5]; + anIntArrayArrayArray1129 = new int[4][13][13]; + anInt1132 = 2; + aClass30_Sub2_Sub1_Sub1Array1140 = new Sprite[1000]; + aBoolean1141 = false; + aBoolean1149 = false; + crosses = new Sprite[8]; + musicEnabled = true; + needDrawTabArea = false; + loggedIn = false; + canMute = false; + aBoolean1159 = false; + aBoolean1160 = false; + anInt1171 = 1; + myUsername = ""; + myPassword = ""; + genericLoadingError = false; + reportAbuseInterfaceID = -1; + aClass19_1179 = new NodeList(); + anInt1184 = 128; + invOverlayInterfaceID = -1; + stream = Stream.create(); + menuActionName = new String[500]; + anIntArray1203 = new int[5]; + sound = new int[50]; + anInt1210 = 2; + anInt1211 = 78; + promptInput = ""; + modIcons = new Background[2]; + tabID = 3; + inputTaken = false; + songChanging = true; + anIntArray1229 = new int[151]; + aClass11Array1230 = new CollisionMap[4]; + aBoolean1233 = false; + soundType = new int[50]; + aBoolean1242 = false; + soundDelay = new int[50]; + soundVolume = new int[50]; + rsAlreadyLoaded = false; + welcomeScreenRaised = false; + messagePromptRaised = false; + loginMessage1 = ""; + loginMessage2 = ""; + backDialogID = -1; + anInt1279 = 2; + bigX = new int[4000]; + bigY = new int[4000]; + anInt1289 = -1; + } + + public static String server; + public int ignoreCount; + public long aLong824; + public int[][] anIntArrayArray825; + public int[] friendsNodeIDs; + public NodeList[][][] groundArray; + public int[] anIntArray828; + public int[] anIntArray829; + public volatile boolean aBoolean831; + public Socket aSocket832; + public int loginScreenState; + public Stream aStream_834; + public NPC[] npcArray; + public int npcCount; + public int[] npcIndices; + public int anInt839; + public int[] anIntArray840; + public int anInt841; + public int anInt842; + public int anInt843; + public String aString844; + public int publicChatMode; + public int privateChatMode; + public Stream aStream_847; + public boolean aBoolean848; + public static int anInt849; + public int[] anIntArray850; + public int[] anIntArray851; + public int[] anIntArray852; + public int[] anIntArray853; + public static int anInt854; + public int anInt855; + public int openInterfaceID; + public int fullScreenBackDialogID = -1; + public int fullScreenInterfaceId = -1; + public int xCameraPos; + public int zCameraPos; + public int yCameraPos; + public int yCameraCurve; + public int xCameraCurve; + public int myPrivilege; + public final int[] currentExp; + public static int musicId; + public static int soundId; + public Background redStone1_3; + public Background redStone2_3; + public Background redStone3_2; + public Background redStone1_4; + public Background redStone2_4; + public Sprite multiOverlay; + public Sprite mapFlag; + public Sprite mapMarker; + public boolean aBoolean872; + public final int[] anIntArray873; + public int anInt874; + public final boolean[] aBooleanArray876; + public int weight; + public MouseDetection mouseDetection; + public volatile boolean drawFlames; + public String reportAbuseInput; + public int unknownInt10; + public boolean menuOpen; + public int anInt886; + public String inputString; + public final int maxPlayers; + public final int myPlayerIndex; + public Player[] playerArray; + public int playerCount; + public int[] playerIndices; + public int anInt893; + public int[] anIntArray894; + public Stream[] aStreamArray895s; + public int anInt896; + public int anInt897; + public int friendsCount; + public int anInt900; + public int[][] anIntArrayArray901; + public final int anInt902; + public RSImageProducer backLeftIP1; + public RSImageProducer backLeftIP2; + public RSImageProducer backRightIP1; + public RSImageProducer backRightIP2; + public RSImageProducer backTopIP1; + public RSImageProducer backVmidIP1; + public RSImageProducer backVmidIP2; + public RSImageProducer backVmidIP3; + public RSImageProducer backVmidIP2_2; + public byte[] aByteArray912; + public int anInt913; + public int crossX; + public int crossY; + public int crossIndex; + public int crossType; + public int plane; + public final int[] currentStats; + public static int anInt924; + public final long[] ignoreListAsLongs; + public boolean loadingError; + public final int anInt927; + public final int[] anIntArray928; + public int[][] anIntArrayArray929; + public Sprite aClass30_Sub2_Sub1_Sub1_931; + public Sprite aClass30_Sub2_Sub1_Sub1_932; + public int anInt933; + public int anInt934; + public int anInt935; + public int anInt936; + public int anInt937; + public int anInt938; + public static int anInt940; + public final int[] chatTypes; + public final String[] chatNames; + public final String[] chatMessages; + public int anInt945; + public WorldController worldController; + public Background[] sideIcons; + public int menuScreenArea; + public int menuOffsetX; + public int menuOffsetY; + public int menuWidth; + public int anInt952; + public long aLong953; + public boolean aBoolean954; + public long[] friendsListAsLongs; + public int currentSong; + public static int nodeID = 10; + static int portOff; + public static boolean isMembers = true; + public static boolean lowMem; + public volatile boolean drawingFlames; + public int spriteDrawX; + public int spriteDrawY; + public final int[] anIntArray965 = {0xffff00, 0xff0000, 65280, 65535, 0xff00ff, 0xffffff}; + public Background aBackground_966; + public Background aBackground_967; + public final int[] anIntArray968; + public final int[] anIntArray969; + final Decompressor[] decompressors; + public int variousSettings[]; + public boolean aBoolean972; + public final int anInt975; + public final int[] anIntArray976; + public final int[] anIntArray977; + public final int[] anIntArray978; + public final int[] anIntArray979; + public final int[] anIntArray980; + public final int[] anIntArray981; + public final int[] anIntArray982; + public final String[] aStringArray983; + public int anInt984; + public int anInt985; + public static int anInt986; + public Sprite[] hitMarks; + public int anInt988; + public int anInt989; + public final int[] anIntArray990; + public static boolean aBoolean993; + public int anInt995; + public int anInt996; + public int anInt997; + public int anInt998; + public int anInt999; + public ISAACRandomGen encryption; + public Sprite mapEdge; + public final int anInt1002; + static final int[][] anIntArrayArray1003 = {{6798, 107, 10283, 16, 4797, 7744, 5799, 4634, 33697, 22433, 2983, 54193}, {8741, 12, 64030, 43162, 7735, 8404, 1701, 38430, 24094, 10153, 56621, 4783, 1341, 16578, 35003, 25239}, {25238, 8742, 12, 64030, 43162, 7735, 8404, 1701, 38430, 24094, 10153, 56621, 4783, 1341, 16578, 35003}, {4626, 11146, 6439, 12, 4758, 10270}, {4550, 4537, 5681, 5673, 5790, 6806, 8076, 4574}}; + public String amountOrNameInput; + public static int anInt1005; + public int daysSinceLastLogin; + public int pktSize; + public int pktType; + public int anInt1009; + public int anInt1010; + public int anInt1011; + public NodeList aClass19_1013; + public int anInt1014; + public int anInt1015; + public int anInt1016; + public boolean aBoolean1017; + public int anInt1018; + public static final int[] anIntArray1019; + public int anInt1021; + public int anInt1022; + public int loadingStage; + public Background scrollBar1; + public Background scrollBar2; + public int anInt1026; + public Background backBase1; + public Background backBase2; + public Background backHmid1; + public final int[] anIntArray1030; + public boolean aBoolean1031; + public Sprite[] mapFunctions; + public int baseX; + public int baseY; + public int anInt1036; + public int anInt1037; + public int loginFailures; + public int anInt1039; + public int anInt1040; + public int anInt1041; + public int dialogID; + public final int[] maxStats; + public final int[] anIntArray1045; + public int anInt1046; + public boolean aBoolean1047; + public int anInt1048; + public String aString1049; + public static int anInt1051; + public final int[] anIntArray1052; + public StreamLoader titleStreamLoader; + public int anInt1054; + public int anInt1055; + public NodeList aClass19_1056; + public final int[] anIntArray1057; + public final RSInterface aClass9_1059; + public Background[] mapScenes; + public static int anInt1061; + public int currentSound; + public final int anInt1063; + public int friendsListAction; + public final int[] anIntArray1065; + public int mouseInvInterfaceIndex; + public int lastActiveInvInterface; + public OnDemandFetcher onDemandFetcher; + public int anInt1069; + public int anInt1070; + public int anInt1071; + public int[] anIntArray1072; + public int[] anIntArray1073; + public Sprite mapDotItem; + public Sprite mapDotNPC; + public Sprite mapDotPlayer; + public Sprite mapDotFriend; + public Sprite mapDotTeam; + public int anInt1079; + public boolean aBoolean1080; + public String[] friendsList; + public Stream inStream; + public int anInt1084; + public int anInt1085; + public int activeInterfaceType; + public int anInt1087; + public int anInt1088; + public int anInt1089; + public final int[] expectedCRCs; + public int[] menuActionCmd2; + public int[] menuActionCmd3; + public int[] menuActionID; + public int[] menuActionCmd1; + public Sprite[] headIcons; + public Sprite[] skullIcons; + public Sprite[] headIconsHint; + public static int anInt1097; + public int anInt1098; + public int anInt1099; + public int anInt1100; + public int anInt1101; + public int anInt1102; + public boolean tabAreaAltered; + public int anInt1104; + public RSImageProducer aRSImageProducer_1107; + public RSImageProducer aRSImageProducer_1108; + public RSImageProducer aRSImageProducer_1109; + public RSImageProducer aRSImageProducer_1110; + public RSImageProducer aRSImageProducer_1111; + public RSImageProducer aRSImageProducer_1112; + public RSImageProducer aRSImageProducer_1113; + public RSImageProducer aRSImageProducer_1114; + public RSImageProducer aRSImageProducer_1115; + public static int anInt1117; + public int membersInt; + public String aString1121; + public Sprite compass; + public RSImageProducer aRSImageProducer_1123; + public RSImageProducer aRSImageProducer_1124; + public RSImageProducer aRSImageProducer_1125; + public static Player myPlayer; + public final String[] atPlayerActions; + public final boolean[] atPlayerArray; + public final int[][][] anIntArrayArrayArray1129; + public final int[] tabInterfaceIDs = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + public int anInt1131; + public int anInt1132; + public int menuActionRow; + public static int anInt1134; + public int spellSelected; + public int anInt1137; + public int spellUsableOn; + public String spellTooltip; + public Sprite[] aClass30_Sub2_Sub1_Sub1Array1140; + public boolean aBoolean1141; + public static int anInt1142; + public Background redStone1; + public Background redStone2; + public Background redStone3; + public Background redStone1_2; + public Background redStone2_2; + public int energy; + public boolean aBoolean1149; + public Sprite[] crosses; + public boolean musicEnabled; + public Background[] aBackgroundArray1152s; + public boolean needDrawTabArea; + public int unreadMessages; + public static int anInt1155; + public static boolean fpsOn; + public boolean loggedIn; + public boolean canMute; + public boolean aBoolean1159; + public boolean aBoolean1160; + static int loopCycle; + public static final String validUserPassChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"\243$%^&*()-_=+[{]};:'@#~,<.>/?\\| "; + public RSImageProducer aRSImageProducer_1163; + public RSImageProducer aRSImageProducer_1164; + public RSImageProducer aRSImageProducer_1165; + public RSImageProducer aRSImageProducer_1166; + public int daysSinceRecovChange; + public RSSocket socketStream; + public int minimapInt3; + public int anInt1171; + public static long aLong1172; + public String myUsername; + public String myPassword; + public static int anInt1175; + public boolean genericLoadingError; + public final int[] anIntArray1177 = {0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3}; + public int reportAbuseInterfaceID; + public NodeList aClass19_1179; + public int[] chatAreaOffsets; + public int[] tabAreaOffsets; + public int[] chatBoxAreaOffsets; + public byte[][] aByteArrayArray1183; + public int anInt1184; + public int minimapInt1; + public int anInt1186; + public int anInt1187; + public static int anInt1188; + public int invOverlayInterfaceID; + public int[] anIntArray1190; + public int[] anIntArray1191; + public Stream stream; + public int anInt1193; + public int splitpublicChat; + public Background invBack; + public Background mapBack; + public Background chatBack; + public String[] menuActionName; + public Sprite aClass30_Sub2_Sub1_Sub1_1201; + public Sprite aClass30_Sub2_Sub1_Sub1_1202; + public final int[] anIntArray1203; + static final int[] anIntArray1204 = {9104, 10275, 7595, 3610, 7975, 8526, 918, 38802, 24466, 10145, 58654, 5027, 1457, 16565, 34991, 25486}; + public static boolean flagged; + public final int[] sound; + public int anInt1208; + public int minimapInt2; + public int anInt1210; + public int anInt1211; + public String promptInput; + public int anInt1213; + public int[][][] intGroundArray; + public long aLong1215; + public int loginScreenCursorPos; + public final Background[] modIcons; + public long aLong1220; + public int tabID; + public int anInt1222; + public boolean inputTaken; + public int inputDialogState; + public static int anInt1226; + public int nextSong; + public boolean songChanging; + public final int[] anIntArray1229; + public CollisionMap[] aClass11Array1230; + public static int anIntArray1232[]; + public boolean aBoolean1233; + public int[] anIntArray1234; + public int[] anIntArray1235; + public int[] anIntArray1236; + public int anInt1237; + public int anInt1238; + public final int anInt1239 = 100; + public final int[] soundType; + public boolean aBoolean1242; + public int atInventoryLoopCycle; + public int atInventoryInterface; + public int atInventoryIndex; + public int atInventoryInterfaceType; + public byte[][] aByteArrayArray1247; + public int tradeMode; + public int anInt1249; + public final int[] soundDelay; + public final int[] soundVolume; + public int anInt1251; + public final boolean rsAlreadyLoaded; + public int anInt1253; + public int anInt1254; + public boolean welcomeScreenRaised; + public boolean messagePromptRaised; + public static int anInt1257; + public byte[][][] byteGroundArray; + public int previousSong; + public int destX; + public int destY; + public Sprite aClass30_Sub2_Sub1_Sub1_1263; + public int anInt1264; + public int anInt1265; + public String loginMessage1; + public String loginMessage2; + public int anInt1268; + public int anInt1269; + public TextDrawingArea aTextDrawingArea_1270; + public TextDrawingArea aTextDrawingArea_1271; + public TextDrawingArea chatTextDrawingArea; + public int anInt1275; + public int backDialogID; + public int anInt1278; + public int anInt1279; + public int[] bigX; + public int[] bigY; + public int itemSelected; + public int anInt1283; + public int anInt1284; + public int anInt1285; + public String selectedItemName; + public static int anInt1288; + public int anInt1289; + public static int tiara; + public static int anInt1290; + public boolean showInfo; + public static int anInt1401 = 256; + public static int[] anIntArray385 = new int[] { 12800, 12800, 12800, 12800, 12800, 12800, + 12800, 12800, 12800, 12800, 12800, 12800, + 12800, 12800, 12800, 12800 }; + public static int anInt720 = 0; + public static Class56 aClass56_749; + public static boolean fetchMusic = false; + public static int musicVolume2; + public static int anInt478 = -1; + public static byte[] aByteArray347; + public static int anInt155 = 0; + public static int anInt2200 = 0; + public static int anInt1478; + public static boolean aBoolean475; + public static int anInt116; + public static boolean aBoolean995; + public static int anInt139; + public static int musicVolume = 255; + public int[] gameScreenOffsets; + public int anInt1170; + public int anInt1215; + public int anInt1083; + public int anInt992; + public int anInt1273; + public int anInt1034; + + static { + anIntArray1019 = new int[99]; + int i = 0; + for (int j = 0; j < 99; j++) { + int l = j + 1; + int i1 = (int) ((double) l + 300D * Math.pow(2D, (double) l / 7D)); + i += i1; + anIntArray1019[j] = i / 4; + } + + anIntArray1232 = new int[32]; + i = 2; + for (int k = 0; k < 32; k++) { + anIntArray1232[k] = i - 1; + i += i; + } + + } +} diff --git a/2006Redone Client/src/Ground.java b/2006Redone Client/src/Ground.java new file mode 100644 index 00000000..8e5905d8 --- /dev/null +++ b/2006Redone Client/src/Ground.java @@ -0,0 +1,38 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Ground extends Node { + + public Ground(int i, int j, int k) { + obj5Array = new Object5[5]; + anIntArray1319 = new int[5]; + anInt1310 = anInt1307 = i; + anInt1308 = j; + anInt1309 = k; + } + + int anInt1307; + final int anInt1308; + final int anInt1309; + final int anInt1310; + public Class43 aClass43_1311; + public Class40 aClass40_1312; + public Object1 obj1; + public Object2 obj2; + public Object3 obj3; + public Object4 obj4; + int anInt1317; + public final Object5[] obj5Array; + final int[] anIntArray1319; + int anInt1320; + int anInt1321; + boolean aBoolean1322; + boolean aBoolean1323; + boolean aBoolean1324; + int anInt1325; + int anInt1326; + int anInt1327; + int anInt1328; + public Ground aClass30_Sub3_1329; +} diff --git a/2006Redone Client/src/IDK.java b/2006Redone Client/src/IDK.java new file mode 100644 index 00000000..aa22180f --- /dev/null +++ b/2006Redone Client/src/IDK.java @@ -0,0 +1,135 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class IDK { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("idk.dat")); + length = stream.readUnsignedWord(); + if (cache == null) { + cache = new IDK[length]; + } + for (int j = 0; j < length; j++) { + if (cache[j] == null) { + cache[j] = new IDK(); + } + cache[j].readValues(stream); + } + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + return; + } + if (i == 1) { + anInt657 = stream.readUnsignedByte(); + } else if (i == 2) { + int j = stream.readUnsignedByte(); + anIntArray658 = new int[j]; + for (int k = 0; k < j; k++) { + anIntArray658[k] = stream.readUnsignedWord(); + } + + } else if (i == 3) { + aBoolean662 = true; + } else if (i >= 40 && i < 50) { + anIntArray659[i - 40] = stream.readUnsignedWord(); + } else if (i >= 50 && i < 60) { + anIntArray660[i - 50] = stream.readUnsignedWord(); + } else if (i >= 60 && i < 70) { + anIntArray661[i - 60] = stream.readUnsignedWord(); + } else { + System.out.println("Error unrecognised config code: " + i); + } + } while (true); + } + + public boolean method537() { + if (anIntArray658 == null) { + return true; + } + boolean flag = true; + for (int j = 0; j < anIntArray658.length; j++) { + if (!Model.method463(anIntArray658[j])) { + flag = false; + } + } + + return flag; + } + + public Model method538() { + if (anIntArray658 == null) { + return null; + } + Model aclass30_sub2_sub4_sub6s[] = new Model[anIntArray658.length]; + for (int i = 0; i < anIntArray658.length; i++) { + aclass30_sub2_sub4_sub6s[i] = Model.method462(anIntArray658[i]); + } + + Model model; + if (aclass30_sub2_sub4_sub6s.length == 1) { + model = aclass30_sub2_sub4_sub6s[0]; + } else { + model = new Model(aclass30_sub2_sub4_sub6s.length, aclass30_sub2_sub4_sub6s); + } + for (int j = 0; j < 6; j++) { + if (anIntArray659[j] == 0) { + break; + } + model.method476(anIntArray659[j], anIntArray660[j]); + } + + return model; + } + + public boolean method539() { + boolean flag1 = true; + for (int i = 0; i < 5; i++) { + if (anIntArray661[i] != -1 && !Model.method463(anIntArray661[i])) { + flag1 = false; + } + } + + return flag1; + } + + public Model method540() { + Model aclass30_sub2_sub4_sub6s[] = new Model[5]; + int j = 0; + for (int k = 0; k < 5; k++) { + if (anIntArray661[k] != -1) { + aclass30_sub2_sub4_sub6s[j++] = Model.method462(anIntArray661[k]); + } + } + + Model model = new Model(j, aclass30_sub2_sub4_sub6s); + for (int l = 0; l < 6; l++) { + if (anIntArray659[l] == 0) { + break; + } + model.method476(anIntArray659[l], anIntArray660[l]); + } + + return model; + } + + private IDK() { + anInt657 = -1; + anIntArray659 = new int[6]; + anIntArray660 = new int[6]; + aBoolean662 = false; + } + + public static int length; + public static IDK cache[]; + public int anInt657; + private int[] anIntArray658; + private final int[] anIntArray659; + private final int[] anIntArray660; + private final int[] anIntArray661 = {-1, -1, -1, -1, -1}; + public boolean aBoolean662; +} diff --git a/2006Redone Client/src/ISAACRandomGen.java b/2006Redone Client/src/ISAACRandomGen.java new file mode 100644 index 00000000..0d6250a6 --- /dev/null +++ b/2006Redone Client/src/ISAACRandomGen.java @@ -0,0 +1,175 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class ISAACRandomGen { + + public ISAACRandomGen(int seed[]) { + memory = new int[256]; + results = new int[256]; + System.arraycopy(seed, 0, results, 0, seed.length); + initializeKeySet(); + } + + public int getNextKey() { + if (count-- == 0) { + isaac(); + count = 255; + } + return results[count]; + } + + private void isaac() { + lastResult += ++counter; + for (int i = 0; i < 256; i++) { + int j = memory[i]; + if ((i & 3) == 0) { + accumulator ^= accumulator << 13; + } else if ((i & 3) == 1) { + accumulator ^= accumulator >>> 6; + } else if ((i & 3) == 2) { + accumulator ^= accumulator << 2; + } else if ((i & 3) == 3) { + accumulator ^= accumulator >>> 16; + } + accumulator += memory[i + 128 & 0xff]; + int k; + memory[i] = k = memory[(j & 0x3fc) >> 2] + accumulator + lastResult; + results[i] = lastResult = memory[(k >> 8 & 0x3fc) >> 2] + j; + } + + } + + private void initializeKeySet() { + int i1; + int j1; + int k1; + int l1; + int i2; + int j2; + int k2; + int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9; + for (int i = 0; i < 4; i++) { + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + } + + for (int j = 0; j < 256; j += 8) { + l += results[j]; + i1 += results[j + 1]; + j1 += results[j + 2]; + k1 += results[j + 3]; + l1 += results[j + 4]; + i2 += results[j + 5]; + j2 += results[j + 6]; + k2 += results[j + 7]; + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + memory[j] = l; + memory[j + 1] = i1; + memory[j + 2] = j1; + memory[j + 3] = k1; + memory[j + 4] = l1; + memory[j + 5] = i2; + memory[j + 6] = j2; + memory[j + 7] = k2; + } + + for (int k = 0; k < 256; k += 8) { + l += memory[k]; + i1 += memory[k + 1]; + j1 += memory[k + 2]; + k1 += memory[k + 3]; + l1 += memory[k + 4]; + i2 += memory[k + 5]; + j2 += memory[k + 6]; + k2 += memory[k + 7]; + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + memory[k] = l; + memory[k + 1] = i1; + memory[k + 2] = j1; + memory[k + 3] = k1; + memory[k + 4] = l1; + memory[k + 5] = i2; + memory[k + 6] = j2; + memory[k + 7] = k2; + } + + isaac(); + count = 256; + } + + private int count; + private final int[] results; + private final int[] memory; + private int accumulator; + private int lastResult; + private int counter; +} diff --git a/2006Redone Client/src/InputStream_Sub1.java b/2006Redone Client/src/InputStream_Sub1.java new file mode 100644 index 00000000..854cbe24 --- /dev/null +++ b/2006Redone Client/src/InputStream_Sub1.java @@ -0,0 +1,79 @@ +/* InputStream_Sub1 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ +import java.io.InputStream; + +final class InputStream_Sub1 extends InputStream { + + boolean aBoolean31; + private int[] anIntArray32 = { + 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 + }; + private byte[] aByteArray33 = new byte[65536]; + private int[] anIntArray34 = new int[256]; + + private final byte method41(int i) { + int i_0_ = i >> 8 & 0x80; + if (i_0_ != 0) + i = -i; + if (i > 32635) + i = 32635; + i += 132; + int i_1_ = anIntArray32[i >> 7 & 0xff]; + int i_2_ = i >> i_1_ + 3 & 0xf; + byte i_3_ = (byte) ((i_0_ | i_1_ << 4 | i_2_) ^ 0xffffffff); + return i_3_; + } + + public final synchronized int read(byte[] is, int i, int i_4_) { + int i_5_; + try { + if (aBoolean31) + return -1; + if (i_4_ > 256) { + read(is, i, 256); + read(is, i + 256, i_4_ - 256); + return i_4_; + } + //Game.method486(anIntArray34, i_4_);//TODO incase + for (int i_6_ = 0; i_6_ < i_4_; i_6_++) { + int i_7_ = anIntArray34[i_6_]; + if ((i_7_ + 8388608 & ~0xffffff) != 0) + anIntArray34[i_6_] = 0x7fffff ^ i_7_ >> 31; + } + method42(aByteArray33, anIntArray34, is, 0, i, i_4_); + i_5_ = i_4_; + } catch (Exception exception) { + aBoolean31 = true; + return -1; + } + return i_5_; + } + + public final int read() { + byte[] is = new byte[1]; + read(is, 0, 1); + return is[0]; + } + + private static final void method42(byte[] is, int[] is_8_, byte[] is_9_, int i, int i_10_, int i_11_) { + for (i = 0; i < i_11_; i++) + is_9_[i_10_++] = is[(is_8_[i] >> 8) + 32768]; + } + + InputStream_Sub1() { + for (int i = -32768; i < 32768; i++) + aByteArray33[i + 32768] = method41(i); + } +} diff --git a/2006Redone Client/src/Item.java b/2006Redone Client/src/Item.java new file mode 100644 index 00000000..e25850de --- /dev/null +++ b/2006Redone Client/src/Item.java @@ -0,0 +1,20 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Item extends Animable { + + @Override + public final Model getRotatedModel() { + ItemDef itemDef = ItemDef.forID(ID); + return itemDef.method201(anInt1559); + } + + public Item() { + } + + public int ID; + public int x; + public int y; + public int anInt1559; +} diff --git a/2006Redone Client/src/ItemDef.java b/2006Redone Client/src/ItemDef.java new file mode 100644 index 00000000..8f36f53f --- /dev/null +++ b/2006Redone Client/src/ItemDef.java @@ -0,0 +1,2410 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class ItemDef { + + public static void nullLoader() { + mruNodes2 = null; + mruNodes1 = null; + streamIndices = null; + cache = null; + stream = null; + } + + public boolean method192(int j) { + int k = anInt175; + int l = anInt166; + if (j == 1) { + k = anInt197; + l = anInt173; + } + if (k == -1) { + return true; + } + boolean flag = true; + if (!Model.method463(k)) { + flag = false; + } + if (l != -1 && !Model.method463(l)) { + flag = false; + } + return flag; + } + + public static void unpackConfig(StreamLoader streamLoader) { + stream = new Stream(streamLoader.getDataForName("obj.dat")); + Stream stream = new Stream(streamLoader.getDataForName("obj.idx")); + totalItems = stream.readUnsignedWord(); + streamIndices = new int[totalItems]; + int i = 2; + for (int j = 0; j < totalItems; j++) { + streamIndices[j] = i; + i += stream.readUnsignedWord(); + } + + cache = new ItemDef[10]; + for (int k = 0; k < 10; k++) { + cache[k] = new ItemDef(); + } + + } + + public Model method194(int j) { + int k = anInt175; + int l = anInt166; + if (j == 1) { + k = anInt197; + l = anInt173; + } + if (k == -1) { + return null; + } + Model model = Model.method462(k); + if (l != -1) { + Model model_1 = Model.method462(l); + Model aclass30_sub2_sub4_sub6s[] = {model, model_1}; + model = new Model(2, aclass30_sub2_sub4_sub6s); + } + if (modifiedModelColors != null) { + for (int i1 = 0; i1 < modifiedModelColors.length; i1++) { + model.method476(modifiedModelColors[i1], originalModelColors[i1]); + } + + } + return model; + } + + public boolean method195(int j) { + int k = anInt165; + int l = anInt188; + int i1 = anInt185; + if (j == 1) { + k = anInt200; + l = anInt164; + i1 = anInt162; + } + if (k == -1) { + return true; + } + boolean flag = true; + if (!Model.method463(k)) { + flag = false; + } + if (l != -1 && !Model.method463(l)) { + flag = false; + } + if (i1 != -1 && !Model.method463(i1)) { + flag = false; + } + return flag; + } + + public Model method196(int i) { + int j = anInt165; + int k = anInt188; + int l = anInt185; + if (i == 1) { + j = anInt200; + k = anInt164; + l = anInt162; + } + if (j == -1) { + return null; + } + Model model = Model.method462(j); + if (k != -1) { + if (l != -1) { + Model model_1 = Model.method462(k); + Model model_3 = Model.method462(l); + Model aclass30_sub2_sub4_sub6_1s[] = {model, model_1, model_3}; + model = new Model(3, aclass30_sub2_sub4_sub6_1s); + } else { + Model model_2 = Model.method462(k); + Model aclass30_sub2_sub4_sub6s[] = {model, model_2}; + model = new Model(2, aclass30_sub2_sub4_sub6s); + } + } + if (i == 0 && aByte205 != 0) { + model.method475(0, aByte205, 0); + } + if (i == 1 && aByte154 != 0) { + model.method475(0, aByte154, 0); + } + if (modifiedModelColors != null) { + for (int i1 = 0; i1 < modifiedModelColors.length; i1++) { + model.method476(modifiedModelColors[i1], originalModelColors[i1]); + } + + } + return model; + } + + private void setDefaults() { + modelID = 0; + name = null; + description = null; + modifiedModelColors = null; + originalModelColors = null; + modelZoom = 2000; + modelRotation1 = 0; + modelRotation2 = 0; + anInt204 = 0; + modelOffset1 = 0; + modelOffset2 = 0; + stackable = false; + value = 1; + membersObject = false; + groundActions = null; + actions = null; + anInt165 = -1; + anInt188 = -1; + aByte205 = 0; + anInt200 = -1; + anInt164 = -1; + aByte154 = 0; + anInt185 = -1; + anInt162 = -1; + anInt175 = -1; + anInt166 = -1; + anInt197 = -1; + anInt173 = -1; + stackIDs = null; + stackAmounts = null; + certID = -1; + certTemplateID = -1; + anInt167 = 128; + anInt192 = 128; + anInt191 = 128; + anInt196 = 0; + anInt184 = 0; + team = 0; + } + + public static ItemDef forID(int i) { + for (int j = 0; j < 10; j++) { + if (cache[j].id == i) { + return cache[j]; + } + } + + cacheIndex = (cacheIndex + 1) % 10; + ItemDef itemDef = cache[cacheIndex]; + stream.currentOffset = streamIndices[i]; + itemDef.id = i; + itemDef.setDefaults(); + itemDef.readValues(stream); + if (itemDef.certTemplateID != -1) { + itemDef.toNote(); + } + if (i == 6543) { + itemDef.name = "Magical Lamp"; + itemDef.description = "I wonder what will happen when I rub this...".getBytes(); + } + if (!isMembers && itemDef.membersObject) { + itemDef.name = "Members Object"; + itemDef.description = "Login to a members' server to use this object.".getBytes(); + itemDef.groundActions = null; + itemDef.actions = null; + itemDef.team = 0; + } + switch (i) { + case 9747: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[5]; + itemDef.originalModelColors = new int[5]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 923; + itemDef.originalModelColors[1] = 920; + itemDef.originalModelColors[2] = 920; + itemDef.originalModelColors[3] = 923; + itemDef.modelID = 19047; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt204 = 0; + itemDef.anInt165 = 18920; + itemDef.anInt200 = 18969; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Attack cape"; + itemDef.description = "The cape worn by masters of Attack.".getBytes(); + break; + + case 9748: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19047; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18920; + itemDef.anInt200 = 18969; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Attack cape(t)"; + itemDef.description = "The cape worn by masters of Attack.".getBytes(); + break; + + case 9749: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.originalModelColors[0] = 912; + itemDef.modifiedModelColors[1] = 22464; + itemDef.originalModelColors[1] = 912; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[2] = 912; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Attack hood"; + itemDef.description = "Attack skillcape hood.".getBytes(); + break; + + case 9750: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[6]; + itemDef.originalModelColors = new int[6]; + itemDef.modifiedModelColors = new int[6]; + itemDef.originalModelColors = new int[6]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 27549; + itemDef.originalModelColors[1] = 27544; + itemDef.originalModelColors[2] = 27544; + itemDef.originalModelColors[3] = 27549; + itemDef.modelID = 19067; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt204 = 0; + itemDef.anInt165 = 18954; + itemDef.anInt200 = 18989; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Strength cape"; + itemDef.description = "The cape worn by only the strongest people.".getBytes(); + break; + + case 9751: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 940; + itemDef.originalModelColors[1] = 930; + itemDef.originalModelColors[2] = 930; + itemDef.originalModelColors[3] = 940; + itemDef.modelID = 19067; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18954; + itemDef.anInt200 = 18989; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Strength cape(t)"; + itemDef.description = "The cape worn by only the strongest people.".getBytes(); + break; + + case 9752: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 27544; + itemDef.originalModelColors[1] = 27544; + itemDef.originalModelColors[2] = 27544; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Strength hood"; + itemDef.description = "Strength skillcape hood.".getBytes(); + break; + + case 9753: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 41436; + itemDef.originalModelColors[1] = 41416; + itemDef.originalModelColors[2] = 41416; + itemDef.originalModelColors[3] = 41436; + itemDef.modelID = 19051; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18928; + itemDef.anInt200 = 18973; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + /*itemDef.anInt199 = -1;*/ + itemDef.name = "Defence cape"; + itemDef.description = "The cape worn by masters of the art of Defence.".getBytes(); + break; + + case 9754: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.originalModelColors[0] = 107; + itemDef.modifiedModelColors[1] = 54503; + itemDef.originalModelColors[1] = 107; + itemDef.modifiedModelColors[2] = 54183; + itemDef.originalModelColors[2] = 107; + itemDef.modelID = 19051; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18928; + itemDef.anInt200 = 18973; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Defence cape(t)"; + itemDef.description = "The cape worn by masters of the art of Defence.".getBytes(); + break; + + case 9755: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.originalModelColors[0] = 41416; + itemDef.modifiedModelColors[1] = 22464; + itemDef.originalModelColors[1] = 41416; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[2] = 41416; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Defence hood"; + itemDef.description = "Defence skillcape hood.".getBytes(); + break; + + case 9756: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 13214; + itemDef.originalModelColors[1] = 13214; + itemDef.originalModelColors[2] = 13214; + itemDef.originalModelColors[3] = 13214; + itemDef.modelID = 19063; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18948; + itemDef.anInt200 = 18985; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Ranging cape"; + itemDef.description = "The cape worn by master archers.".getBytes(); + break; + + case 9757: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 3755; + itemDef.originalModelColors[1] = 4003; + itemDef.originalModelColors[2] = 4003; + itemDef.originalModelColors[3] = 3755; + itemDef.modelID = 19063; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18948; + itemDef.anInt200 = 18985; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Ranging cape(t)"; + itemDef.description = "The cape worn by master archers.".getBytes(); + break; + + case 9758: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 13214; + itemDef.originalModelColors[1] = 13214; + itemDef.originalModelColors[2] = 13214; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Range hood"; + itemDef.description = "Range skillcape hood.".getBytes(); + break; + + case 9759: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 107; + itemDef.originalModelColors[1] = 107; + itemDef.originalModelColors[2] = 107; + itemDef.originalModelColors[3] = 107; + itemDef.modelID = 19061; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18945; + itemDef.anInt200 = 18983; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Prayer cape"; + itemDef.description = "The cape worn by the most pious of heroes.".getBytes(); + break; + + case 9760: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 9172; + itemDef.originalModelColors[2] = 9172; + itemDef.originalModelColors[3] = 9152; + itemDef.modelID = 19061; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18945; + itemDef.anInt200 = 18983; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Prayer cape(t)"; + itemDef.description = "The cape worn by the most pious of heroes.".getBytes(); + break; + + case 9761: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 107; + itemDef.originalModelColors[1] = 107; + itemDef.originalModelColors[2] = 107; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Prayer hood"; + itemDef.description = "Prayer skillcape hood.".getBytes(); + break; + + case 9762: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 6348; + itemDef.originalModelColors[1] = 6340; + itemDef.originalModelColors[2] = 6331; + itemDef.originalModelColors[3] = 6331; + itemDef.modelID = 19059; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18915; + itemDef.anInt200 = 18981; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Magic cape"; + itemDef.description = "The cape worn by the most powerful mages.".getBytes(); + break; + + case 9763: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 43569; + itemDef.originalModelColors[1] = 43685; + itemDef.originalModelColors[2] = 43685; + itemDef.originalModelColors[3] = 43569; + itemDef.modelID = 19059; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18915; + itemDef.anInt200 = 18981; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Magic cape(t)"; + itemDef.description = "The cape worn by the most powerful mages.".getBytes(); + break; + + case 9764: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 6348; + itemDef.originalModelColors[1] = 6340; + itemDef.originalModelColors[2] = 6331; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Magic hood"; + itemDef.description = "Magic skillcape hood.".getBytes(); + break; + + case 9765: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 90; + itemDef.originalModelColors[1] = 80; + itemDef.originalModelColors[2] = 80; + itemDef.originalModelColors[3] = 90; + itemDef.modelID = 19053; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18950; + itemDef.anInt200 = 18986; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "RuneCrafting cape"; + itemDef.description = "The cape worn by master runecrafters.".getBytes(); + break; + + case 9766: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7080; + itemDef.originalModelColors[2] = 7080; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19053; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18950; + itemDef.anInt200 = 18986; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "RuneCrafting cape(t)"; + itemDef.description = "The cape worn by master runecrafters.".getBytes(); + break; + + case 9767: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 99; + itemDef.originalModelColors[1] = 99; + itemDef.originalModelColors[2] = 99; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "RuneCrafting hood"; + itemDef.description = "RuneCrafting skillcape hood.".getBytes(); + break; + + case 9768: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 75; + itemDef.originalModelColors[1] = 75; + itemDef.originalModelColors[2] = 75; + itemDef.originalModelColors[3] = 75; + itemDef.modelID = 19057; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18939; + itemDef.anInt200 = 18980; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Hitpoint cape"; + itemDef.description = "The cape worn by the healthiest adventurers.".getBytes(); + break; + + case 9769: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 940; + itemDef.originalModelColors[1] = 920; + itemDef.originalModelColors[2] = 920; + itemDef.originalModelColors[3] = 940; + itemDef.modelID = 19057; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18939; + itemDef.anInt200 = 18980; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Hitpoint cape(t)"; + itemDef.description = "The cape worn by the healthiest adventurers.".getBytes(); + break; + + case 9770: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 90; + itemDef.originalModelColors[1] = 90; + itemDef.originalModelColors[2] = 90; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Hitpoint hood"; + itemDef.description = "Hitpoint skillcape hood.".getBytes(); + break; + + case 9771: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 43674; + itemDef.originalModelColors[1] = 43680; + itemDef.originalModelColors[2] = 43680; + itemDef.originalModelColors[3] = 43674; + itemDef.modelID = 19046; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18918; + itemDef.anInt200 = 18968; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Agility cape"; + itemDef.description = "The cape worn by the most agile of heroes.".getBytes(); + break; + + case 9772: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 801; + itemDef.originalModelColors[1] = 677; + itemDef.originalModelColors[2] = 677; + itemDef.originalModelColors[3] = 801; + itemDef.modelID = 19046; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18918; + itemDef.anInt200 = 18968; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Agility cape(t)"; + itemDef.description = "The cape worn by the best of agility trainers.".getBytes(); + break; + + case 9773: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 43674; + itemDef.originalModelColors[1] = 43674; + itemDef.originalModelColors[2] = 43674; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Agility hood"; + itemDef.description = "Agility skillcape hood.".getBytes(); + break; + + case 9774: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 22426; + itemDef.originalModelColors[1] = 22416; + itemDef.originalModelColors[2] = 22416; + itemDef.originalModelColors[3] = 22426; + itemDef.modelID = 19056; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18938; + itemDef.anInt200 = 18978; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Herblore cape"; + itemDef.description = "The cape worn by master herbalists.".getBytes(); + break; + + case 9775: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19056; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18938; + itemDef.anInt200 = 18978; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Herblore cape(t)"; + itemDef.description = "The cape worn by master herbalists.".getBytes(); + break; + + case 9776: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 22416; + itemDef.originalModelColors[1] = 22416; + itemDef.originalModelColors[2] = 22416; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Herblore hood"; + itemDef.description = "Herblore skillcape hood.".getBytes(); + break; + + case 9777: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 58795; + itemDef.originalModelColors[1] = 58785; + itemDef.originalModelColors[2] = 58785; + itemDef.originalModelColors[3] = 58795; + itemDef.modelID = 19068; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18956; + itemDef.anInt200 = 18956; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Thieving cape"; + itemDef.description = "The cape worn by the best of thieves.".getBytes(); + break; + + case 9778: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 15; + itemDef.originalModelColors[1] = 0; + itemDef.originalModelColors[2] = 0; + itemDef.originalModelColors[3] = 15; + itemDef.modelID = 19068; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18956; + itemDef.anInt200 = 18956; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Thieving cape(t)"; + itemDef.description = "The cape worn by the best of thieves.".getBytes(); + break; + + case 9779: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 58785; + itemDef.originalModelColors[1] = 58785; + itemDef.originalModelColors[2] = 58785; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Thieving hood"; + itemDef.description = "Thieving skillcape hood.".getBytes(); + break; + + case 9780: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 4520; + itemDef.originalModelColors[1] = 4510; + itemDef.originalModelColors[2] = 4510; + itemDef.originalModelColors[3] = 4520; + itemDef.modelID = 19050; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18925; + itemDef.anInt200 = 18972; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Crafting cape"; + itemDef.description = "The cape worn by master craftworkers.".getBytes(); + break; + + case 9781: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19050; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18925; + itemDef.anInt200 = 18972; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Crafting cape(t)"; + itemDef.description = "The cape worn by master craftworkers.".getBytes(); + break; + + case 9782: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 4520; + itemDef.originalModelColors[1] = 4520; + itemDef.originalModelColors[2] = 4520; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Crafting hood"; + itemDef.description = "Crafting skillcape hood.".getBytes(); + break; + + case 9783: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 33682; + itemDef.originalModelColors[1] = 33676; + itemDef.originalModelColors[2] = 33676; + itemDef.originalModelColors[3] = 33682; + itemDef.modelID = 19055; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18935; + itemDef.anInt200 = 18977; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Fletching cape"; + itemDef.description = "The cape worn by the best of fletchers.".getBytes(); + break; + + case 9784: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19055; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18935; + itemDef.anInt200 = 18977; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Fletching cape(t)"; + itemDef.description = "The cape worn by the best of fletchers.".getBytes(); + break; + + case 9785: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 33676; + itemDef.originalModelColors[1] = 33676; + itemDef.originalModelColors[2] = 33676; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Fletching hood"; + itemDef.description = "Fletching skillcape hood.".getBytes(); + break; + + case 9786: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 8; + itemDef.originalModelColors[1] = 8; + itemDef.originalModelColors[2] = 8; + itemDef.originalModelColors[3] = 8; + itemDef.modelID = 19065; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18951; + itemDef.anInt200 = 18987; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Slayer cape"; + itemDef.description = "The cape worn by Slayer masters.".getBytes(); + break; + + case 9787: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 920; + itemDef.originalModelColors[1] = 916; + itemDef.originalModelColors[2] = 916; + itemDef.originalModelColors[3] = 920; + itemDef.modelID = 19065; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18951; + itemDef.anInt200 = 18987; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Slayer cape(t)"; + itemDef.description = "The cape worn by Slayer masters.".getBytes(); + break; + + case 9788: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 8; + itemDef.originalModelColors[1] = 8; + itemDef.originalModelColors[2] = 8; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Slayer hood"; + itemDef.description = "Slayer skillcape hood.".getBytes(); + break; + + case 9789: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 6327; + itemDef.originalModelColors[1] = 6336; + itemDef.originalModelColors[2] = 6336; + itemDef.originalModelColors[3] = 6327; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.modelID = 19045; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18916; + itemDef.anInt200 = 18970; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Construct. cape"; + itemDef.description = "The cape worn by the best of constructers.".getBytes(); + break; + + case 9790: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 6077; + itemDef.originalModelColors[1] = 6067; + itemDef.originalModelColors[2] = 6067; + itemDef.originalModelColors[3] = 6077; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.modelID = 19045; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18916; + itemDef.anInt200 = 18970; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Const. cape(t)"; + itemDef.description = "The cape worn by the best of constructers.".getBytes(); + break; + + case 9791: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 6327; + itemDef.originalModelColors[1] = 6327; + itemDef.originalModelColors[2] = 6327; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Const. hood"; + itemDef.description = "Construction skillcape hood.".getBytes(); + break; + + case 9792: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 10530; + itemDef.originalModelColors[1] = 10520; + itemDef.originalModelColors[2] = 10520; + itemDef.originalModelColors[3] = 10530; + itemDef.modelID = 19060; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18942; + itemDef.anInt200 = 18982; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Mining cape"; + itemDef.description = "The cape worn by the most skilled miners.".getBytes(); + break; + + case 9793: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 38226; + itemDef.originalModelColors[1] = 38236; + itemDef.originalModelColors[2] = 38236; + itemDef.originalModelColors[3] = 38226; + itemDef.modelID = 19060; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18942; + itemDef.anInt200 = 18982; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Mining cape(t)"; + itemDef.description = "The cape worn by the most skilled miners.".getBytes(); + break; + + case 9794: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 10512; + itemDef.originalModelColors[1] = 10512; + itemDef.originalModelColors[2] = 10512; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Mining hood"; + itemDef.description = "Mining skillcape hood.".getBytes(); + break; + + case 9795: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 10530; + itemDef.originalModelColors[1] = 10520; + itemDef.originalModelColors[2] = 10520; + itemDef.originalModelColors[3] = 10530; + itemDef.modelID = 19066; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18953; + itemDef.anInt200 = 18988; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Smithing cape"; + itemDef.description = "The cape worn by the best of smithers.".getBytes(); + break; + + case 9796: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19066; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18953; + itemDef.anInt200 = 18988; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Smithing cape(t)"; + itemDef.description = "The cape worn by the best of smithers.".getBytes(); + break; + + case 9797: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 10512; + itemDef.originalModelColors[1] = 10512; + itemDef.originalModelColors[2] = 10512; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Smithing hood"; + itemDef.description = "Smithing skillcape hood.".getBytes(); + break; + + case 9798: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 38256; + itemDef.originalModelColors[1] = 38226; + itemDef.originalModelColors[2] = 38226; + itemDef.originalModelColors[3] = 38256; + itemDef.modelID = 19054; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18934; + itemDef.anInt200 = 18976; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Fishing cape"; + itemDef.description = "The cape worn by the best fishermen.".getBytes(); + break; + + case 9799: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19054; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18934; + itemDef.anInt200 = 18976; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Fishing cape(t)"; + itemDef.description = "The cape worn by the best fishermen.".getBytes(); + break; + + case 9800: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 38226; + itemDef.originalModelColors[1] = 38226; + itemDef.originalModelColors[2] = 38226; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Fishing hood"; + itemDef.description = "Fishing skillcape hood.".getBytes(); + break; + + case 9801: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 51869; + itemDef.originalModelColors[1] = 51864; + itemDef.originalModelColors[2] = 51864; + itemDef.originalModelColors[3] = 51869; + itemDef.modelID = 19049; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18924; + itemDef.anInt200 = 18971; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Cooking cape"; + itemDef.description = "The cape worn by the world's best chefs.".getBytes(); + break; + + case 9802: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 801; + itemDef.originalModelColors[1] = 677; + itemDef.originalModelColors[2] = 677; + itemDef.originalModelColors[3] = 801; + itemDef.modelID = 19049; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18924; + itemDef.anInt200 = 18971; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Cooking cape(t)"; + itemDef.description = "The cape worn by the world's best chefs.".getBytes(); + break; + + case 9803: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 51864; + itemDef.originalModelColors[1] = 51864; + itemDef.originalModelColors[2] = 51864; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Cooking hood"; + itemDef.description = "Cooking skillcape hood.".getBytes(); + break; + + + case 9804: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 4032; + itemDef.originalModelColors[1] = 4027; + itemDef.originalModelColors[2] = 4027; + itemDef.originalModelColors[3] = 4032; + itemDef.modelID = 19048; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt204 = 0; + itemDef.anInt165 = 18932; + itemDef.anInt200 = 18975; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Firemaking cape"; + itemDef.description = "The cape worn by the master firelighters.".getBytes(); + break; + + case 9805: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 9152; + itemDef.originalModelColors[1] = 7104; + itemDef.originalModelColors[2] = 7104; + itemDef.originalModelColors[3] = 796; + itemDef.modelID = 19048; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt204 = 0; + itemDef.anInt165 = 18932; + itemDef.anInt200 = 18975; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Firemaking cape(t)"; + itemDef.description = "The cape worn by the master firelighters.".getBytes(); + break; + + case 9806: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 4027; + itemDef.originalModelColors[1] = 4027; + itemDef.originalModelColors[2] = 4027; + itemDef.modelID = 19058; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "FireMaking hood"; + itemDef.description = "FireMaking skillcape hood.".getBytes(); + break; + + case 9807: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 5570; + itemDef.originalModelColors[1] = 5560; + itemDef.originalModelColors[2] = 5560; + itemDef.originalModelColors[3] = 5570; + itemDef.modelID = 19064; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18955; + itemDef.anInt200 = 18991; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Woodcutting cape"; + itemDef.description = "The cape worn by master woodcutters.".getBytes(); + break; + + case 9808: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 25113; + itemDef.originalModelColors[1] = 25113; + itemDef.originalModelColors[2] = 25113; + itemDef.originalModelColors[3] = 25113; + itemDef.modelID = 19064; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18955; + itemDef.anInt200 = 18991; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Woodcutting cape(t)"; + itemDef.description = "The cape worn by master woodcutters.".getBytes(); + break; + + case 9809: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 5560; + itemDef.originalModelColors[1] = 5560; + itemDef.originalModelColors[2] = 5560; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Woodcutting hood"; + itemDef.description = "Woodcutting skillcape hood.".getBytes(); + break; + + case 9810: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 22426; + itemDef.originalModelColors[1] = 22416; + itemDef.originalModelColors[2] = 22416; + itemDef.originalModelColors[3] = 22426; + itemDef.modelID = 19052; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18929; + itemDef.anInt200 = 18974; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Farming cape"; + itemDef.description = "The cape worn by the best of farmers.".getBytes(); + break; + + case 9811: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 21844; + itemDef.originalModelColors[1] = 21844; + itemDef.originalModelColors[2] = 21844; + itemDef.originalModelColors[3] = 21844; + itemDef.modelID = 19052; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18929; + itemDef.anInt200 = 18974; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Farming cape(t)"; + itemDef.description = "The cape worn by the best of farmers.".getBytes(); + break; + + case 9812: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 22416; + itemDef.originalModelColors[1] = 22416; + itemDef.originalModelColors[2] = 22416; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Farming hood"; + itemDef.description = "Farming skillcape hood.".getBytes(); + break; + + case 9813: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[4]; + itemDef.originalModelColors = new int[4]; + itemDef.modifiedModelColors[0] = 57280; + itemDef.modifiedModelColors[1] = 54503; + itemDef.modifiedModelColors[2] = 54183; + itemDef.modifiedModelColors[3] = 11200; + itemDef.originalModelColors[0] = 107; + itemDef.originalModelColors[1] = 107; + itemDef.originalModelColors[2] = 107; + itemDef.originalModelColors[3] = 107; + itemDef.modelID = 19062; + itemDef.modelZoom = 2128; + itemDef.modelRotation1 = 504; + itemDef.modelRotation2 = 0; + itemDef.anInt204 = 0; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 1; + itemDef.anInt165 = 18946; + itemDef.anInt200 = 18984; + itemDef.anInt175 = -1; + itemDef.anInt197 = -1; + itemDef.name = "Quest cape"; + itemDef.description = "Its a quest cape".getBytes(); + break; + + case 9814: + itemDef.actions = new String[5]; + itemDef.actions[1] = "Wear"; + itemDef.modifiedModelColors = new int[3]; + itemDef.originalModelColors = new int[3]; + itemDef.modifiedModelColors[0] = 960; + itemDef.modifiedModelColors[1] = 22464; + itemDef.modifiedModelColors[2] = 43968; + itemDef.originalModelColors[0] = 107; + itemDef.originalModelColors[1] = 107; + itemDef.originalModelColors[2] = 107; + itemDef.modelID = 19058; + itemDef.stackable = false; + itemDef.modelZoom = 720; + itemDef.modelRotation1 = 21; + itemDef.modelRotation2 = 18; + itemDef.modelOffset1 = 0; + itemDef.modelOffset2 = 0; + itemDef.anInt165 = 18914; + itemDef.anInt200 = 18967; + itemDef.name = "Quest hood"; + itemDef.description = "Quest skillcape hood.".getBytes(); + break; + } + return itemDef; + } + + private void toNote() { + ItemDef itemDef = forID(certTemplateID); + modelID = itemDef.modelID; + modelZoom = itemDef.modelZoom; + modelRotation1 = itemDef.modelRotation1; + modelRotation2 = itemDef.modelRotation2; + + anInt204 = itemDef.anInt204; + modelOffset1 = itemDef.modelOffset1; + modelOffset2 = itemDef.modelOffset2; + modifiedModelColors = itemDef.modifiedModelColors; + originalModelColors = itemDef.originalModelColors; + ItemDef itemDef_1 = forID(certID); + name = itemDef_1.name; + membersObject = itemDef_1.membersObject; + value = itemDef_1.value; + String s = "a"; + char c = itemDef_1.name.charAt(0); + if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') { + s = "an"; + } + description = ("Swap this note at any bank for " + s + " " + itemDef_1.name + ".").getBytes(); + stackable = true; + } + + public static Sprite getSprite(int i, int j, int k) { + if (k == 0) { + Sprite sprite = (Sprite) mruNodes1.insertFromCache(i); + if (sprite != null && sprite.trimHeight != j && sprite.trimHeight != -1) { + sprite.unlink(); + sprite = null; + } + if (sprite != null) { + return sprite; + } + } + ItemDef itemDef = forID(i); + if (itemDef.stackIDs == null) { + j = -1; + } + if (j > 1) { + int i1 = -1; + for (int j1 = 0; j1 < 10; j1++) { + if (j >= itemDef.stackAmounts[j1] && itemDef.stackAmounts[j1] != 0) { + i1 = itemDef.stackIDs[j1]; + } + } + + if (i1 != -1) { + itemDef = forID(i1); + } + } + Model model = itemDef.method201(1); + if (model == null) { + return null; + } + Sprite sprite = null; + if (itemDef.certTemplateID != -1) { + sprite = getSprite(itemDef.certID, 10, -1); + if (sprite == null) { + return null; + } + } + Sprite sprite2 = new Sprite(32, 32); + int k1 = Texture.textureInt1; + int l1 = Texture.textureInt2; + int ai[] = Texture.lineOffsets; + int ai1[] = DrawingArea.pixels; + int i2 = DrawingArea.width; + int j2 = DrawingArea.height; + int k2 = DrawingArea.topX; + int l2 = DrawingArea.bottomX; + int i3 = DrawingArea.topY; + int j3 = DrawingArea.bottomY; + Texture.aBoolean1464 = false; + DrawingArea.initDrawingArea(32, 32, sprite2.pixels); + DrawingArea.method336(32, 0, 0, 32, 0); + Texture.method364(); + int k3 = itemDef.modelZoom; + if (k == -1) { + k3 = (int) (k3 * 1.5D); + } + if (k > 0) { + k3 = (int) (k3 * 1.04D); + } + int l3 = Texture.anIntArray1470[itemDef.modelRotation1] * k3 >> 16; + int i4 = Texture.anIntArray1471[itemDef.modelRotation1] * k3 >> 16; + model.method482(itemDef.modelRotation2, itemDef.anInt204, itemDef.modelRotation1, itemDef.modelOffset1, l3 + model.modelHeight / 2 + itemDef.modelOffset2, i4 + itemDef.modelOffset2); + for (int i5 = 31; i5 >= 0; i5--) { + for (int j4 = 31; j4 >= 0; j4--) { + if (sprite2.pixels[i5 + j4 * 32] == 0) { + if (i5 > 0 && sprite2.pixels[i5 - 1 + j4 * 32] > 1) { + sprite2.pixels[i5 + j4 * 32] = 1; + } else if (j4 > 0 && sprite2.pixels[i5 + (j4 - 1) * 32] > 1) { + sprite2.pixels[i5 + j4 * 32] = 1; + } else if (i5 < 31 && sprite2.pixels[i5 + 1 + j4 * 32] > 1) { + sprite2.pixels[i5 + j4 * 32] = 1; + } else if (j4 < 31 && sprite2.pixels[i5 + (j4 + 1) * 32] > 1) { + sprite2.pixels[i5 + j4 * 32] = 1; + } + } + } + + } + + if (k > 0) { + for (int j5 = 31; j5 >= 0; j5--) { + for (int k4 = 31; k4 >= 0; k4--) { + if (sprite2.pixels[j5 + k4 * 32] == 0) { + if (j5 > 0 && sprite2.pixels[j5 - 1 + k4 * 32] == 1) { + sprite2.pixels[j5 + k4 * 32] = k; + } else if (k4 > 0 && sprite2.pixels[j5 + (k4 - 1) * 32] == 1) { + sprite2.pixels[j5 + k4 * 32] = k; + } else if (j5 < 31 && sprite2.pixels[j5 + 1 + k4 * 32] == 1) { + sprite2.pixels[j5 + k4 * 32] = k; + } else if (k4 < 31 && sprite2.pixels[j5 + (k4 + 1) * 32] == 1) { + sprite2.pixels[j5 + k4 * 32] = k; + } + } + } + + } + + } else if (k == 0) { + for (int k5 = 31; k5 >= 0; k5--) { + for (int l4 = 31; l4 >= 0; l4--) { + if (sprite2.pixels[k5 + l4 * 32] == 0 && k5 > 0 && l4 > 0 && sprite2.pixels[k5 - 1 + (l4 - 1) * 32] > 0) { + sprite2.pixels[k5 + l4 * 32] = 0x302020; + } + } + + } + + } + if (itemDef.certTemplateID != -1) { + int l5 = sprite.trimWidth; + int j6 = sprite.trimHeight; + sprite.trimWidth = 32; + sprite.trimHeight = 32; + sprite.drawSprite(0, 0); + sprite.trimWidth = l5; + sprite.trimHeight = j6; + } + if (k == 0) { + mruNodes1.removeFromCache(sprite2, i); + } + DrawingArea.initDrawingArea(j2, i2, ai1); + DrawingArea.setDrawingArea(j3, k2, l2, i3); + Texture.textureInt1 = k1; + Texture.textureInt2 = l1; + Texture.lineOffsets = ai; + Texture.aBoolean1464 = true; + if (itemDef.stackable) { + sprite2.trimWidth = 33; + } else { + sprite2.trimWidth = 32; + } + sprite2.trimHeight = j; + return sprite2; + } + + public Model method201(int i) { + if (stackIDs != null && i > 1) { + int j = -1; + for (int k = 0; k < 10; k++) { + if (i >= stackAmounts[k] && stackAmounts[k] != 0) { + j = stackIDs[k]; + } + } + + if (j != -1) { + return forID(j).method201(1); + } + } + Model model = (Model) mruNodes2.insertFromCache(id); + if (model != null) { + return model; + } + model = Model.method462(modelID); + if (model == null) { + return null; + } + if (anInt167 != 128 || anInt192 != 128 || anInt191 != 128) { + model.method478(anInt167, anInt191, anInt192); + } + if (modifiedModelColors != null) { + for (int l = 0; l < modifiedModelColors.length; l++) { + model.method476(modifiedModelColors[l], originalModelColors[l]); + } + + } + model.method479(64 + anInt196, 768 + anInt184, -50, -10, -50, true); + model.aBoolean1659 = true; + mruNodes2.removeFromCache(model, id); + return model; + } + + public Model method202(int i) { + if (stackIDs != null && i > 1) { + int j = -1; + for (int k = 0; k < 10; k++) { + if (i >= stackAmounts[k] && stackAmounts[k] != 0) { + j = stackIDs[k]; + } + } + + if (j != -1) { + return forID(j).method202(1); + } + } + Model model = Model.method462(modelID); + if (model == null) { + return null; + } + if (modifiedModelColors != null) { + for (int l = 0; l < modifiedModelColors.length; l++) { + model.method476(modifiedModelColors[l], originalModelColors[l]); + } + + } + return model; + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + return; + } + if (i == 1) { + modelID = stream.readUnsignedWord(); + } else if (i == 2) { + name = stream.readString(); + } else if (i == 3) { + description = stream.readBytes(); + } else if (i == 4) { + modelZoom = stream.readUnsignedWord(); + } else if (i == 5) { + modelRotation1 = stream.readUnsignedWord(); + } else if (i == 6) { + modelRotation2 = stream.readUnsignedWord(); + } else if (i == 7) { + modelOffset1 = stream.readUnsignedWord(); + if (modelOffset1 > 32767) { + modelOffset1 -= 0x10000; + } + } else if (i == 8) { + modelOffset2 = stream.readUnsignedWord(); + if (modelOffset2 > 32767) { + modelOffset2 -= 0x10000; + } + } else if (i == 10) { + stream.readUnsignedWord(); + } else if (i == 11) { + stackable = true; + } else if (i == 12) { + value = stream.readDWord(); + } else if (i == 16) { + membersObject = true; + } else if (i == 23) { + anInt165 = stream.readUnsignedWord(); + aByte205 = stream.readSignedByte(); + } else if (i == 24) { + anInt188 = stream.readUnsignedWord(); + } else if (i == 25) { + anInt200 = stream.readUnsignedWord(); + aByte154 = stream.readSignedByte(); + } else if (i == 26) { + anInt164 = stream.readUnsignedWord(); + } else if (i >= 30 && i < 35) { + if (groundActions == null) { + groundActions = new String[5]; + } + groundActions[i - 30] = stream.readString(); + if (groundActions[i - 30].equalsIgnoreCase("hidden")) { + groundActions[i - 30] = null; + } + } else if (i >= 35 && i < 40) { + if (actions == null) { + actions = new String[5]; + } + actions[i - 35] = stream.readString(); + } else if (i == 40) { + int j = stream.readUnsignedByte(); + modifiedModelColors = new int[j]; + originalModelColors = new int[j]; + for (int k = 0; k < j; k++) { + modifiedModelColors[k] = stream.readUnsignedWord(); + originalModelColors[k] = stream.readUnsignedWord(); + } + + } else if (i == 78) { + anInt185 = stream.readUnsignedWord(); + } else if (i == 79) { + anInt162 = stream.readUnsignedWord(); + } else if (i == 90) { + anInt175 = stream.readUnsignedWord(); + } else if (i == 91) { + anInt197 = stream.readUnsignedWord(); + } else if (i == 92) { + anInt166 = stream.readUnsignedWord(); + } else if (i == 93) { + anInt173 = stream.readUnsignedWord(); + } else if (i == 95) { + anInt204 = stream.readUnsignedWord(); + } else if (i == 97) { + certID = stream.readUnsignedWord(); + } else if (i == 98) { + certTemplateID = stream.readUnsignedWord(); + } else if (i >= 100 && i < 110) { + if (stackIDs == null) { + stackIDs = new int[10]; + stackAmounts = new int[10]; + } + stackIDs[i - 100] = stream.readUnsignedWord(); + stackAmounts[i - 100] = stream.readUnsignedWord(); + } else if (i == 110) { + anInt167 = stream.readUnsignedWord(); + } else if (i == 111) { + anInt192 = stream.readUnsignedWord(); + } else if (i == 112) { + anInt191 = stream.readUnsignedWord(); + } else if (i == 113) { + anInt196 = stream.readSignedByte(); + } else if (i == 114) { + anInt184 = stream.readSignedByte() * 5; + } else if (i == 115) { + team = stream.readUnsignedByte(); + } + } while (true); + } + + private ItemDef() { + id = -1; + } + + private byte aByte154; + public int value; + private int[] modifiedModelColors; + public int id; + static MRUNodes mruNodes1 = new MRUNodes(100); + public static MRUNodes mruNodes2 = new MRUNodes(50); + private int[] originalModelColors; + public boolean membersObject; + private int anInt162; + private int certTemplateID; + private int anInt164; + private int anInt165; + private int anInt166; + private int anInt167; + public String groundActions[]; + private int modelOffset1; + public String name; + private static ItemDef[] cache; + private int anInt173; + private int modelID; + private int anInt175; + public boolean stackable; + public byte description[]; + private int certID; + private static int cacheIndex; + public int modelZoom; + public static boolean isMembers = true; + private static Stream stream; + public int anInt184; + private int anInt185; + private int anInt188; + public String actions[]; + public int modelRotation1; + private int anInt191; + private int anInt192; + private int[] stackIDs; + private int modelOffset2; + private static int[] streamIndices; + public int anInt196; + private int anInt197; + public int modelRotation2; + private int anInt200; + private int[] stackAmounts; + public int team; + public static int totalItems; + private int anInt204; + private byte aByte205; + +} diff --git a/2006Redone Client/src/MRUNodes.java b/2006Redone Client/src/MRUNodes.java new file mode 100644 index 00000000..ea6e8fcb --- /dev/null +++ b/2006Redone Client/src/MRUNodes.java @@ -0,0 +1,64 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class MRUNodes { + + public MRUNodes(int i) { + emptyNodeSub = new NodeSub(); + nodeSubList = new NodeSubList(); + initialCount = i; + spaceLeft = i; + nodeCache = new NodeCache(); + } + + public NodeSub insertFromCache(long l) { + NodeSub nodeSub = (NodeSub) nodeCache.findNodeByID(l); + if (nodeSub != null) { + nodeSubList.insertHead(nodeSub); + } + return nodeSub; + } + + public void removeFromCache(NodeSub nodeSub, long l) { + try { + if (spaceLeft == 0) { + NodeSub nodeSub_1 = nodeSubList.popTail(); + nodeSub_1.unlink(); + nodeSub_1.unlinkSub(); + if (nodeSub_1 == emptyNodeSub) { + NodeSub nodeSub_2 = nodeSubList.popTail(); + nodeSub_2.unlink(); + nodeSub_2.unlinkSub(); + } + } else { + spaceLeft--; + } + nodeCache.removeFromCache(nodeSub, l); + nodeSubList.insertHead(nodeSub); + return; + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("47547, " + nodeSub + ", " + l + ", " + (byte) 2 + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + public void unlinkAll() { + do { + NodeSub nodeSub = nodeSubList.popTail(); + if (nodeSub != null) { + nodeSub.unlink(); + nodeSub.unlinkSub(); + } else { + spaceLeft = initialCount; + return; + } + } while (true); + } + + private final NodeSub emptyNodeSub; + private final int initialCount; + private int spaceLeft; + private final NodeCache nodeCache; + private final NodeSubList nodeSubList; +} diff --git a/2006Redone Client/src/Main.java b/2006Redone Client/src/Main.java new file mode 100644 index 00000000..951d4931 --- /dev/null +++ b/2006Redone Client/src/Main.java @@ -0,0 +1,21 @@ +import java.net.InetAddress; +import java.net.UnknownHostException; + +public final class Main { + + public static void main(String[] args) { + try { + Game game = new Game(); + Game.nodeID = 10; + Game.portOff = 0; + Game.setHighMem(); + Game.isMembers = true; + Signlink.storeid = 32; + Signlink.startpriv(InetAddress.getLocalHost()); + game.createClientFrame(503, 765); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/2006Redone Client/src/Midi.java b/2006Redone Client/src/Midi.java new file mode 100644 index 00000000..c7f30177 --- /dev/null +++ b/2006Redone Client/src/Midi.java @@ -0,0 +1,178 @@ +import java.io.File; + +import javax.sound.midi.MidiSystem; +import javax.sound.midi.Receiver; +import javax.sound.midi.Sequence; +import javax.sound.midi.Sequencer; +import javax.sound.midi.ShortMessage; +import javax.sound.midi.Synthesizer; + +/** + * Midi file playing. + * + * @author Primadude. + */ +public class Midi implements Runnable { + + /** + * The name of the midi file. + */ + String midiFileName; + + /** + * The dir of the midi file. + */ + String midiSaveDir; + + /** + * The Sequence object. + */ + Sequence sequence; + + /** + * The Sequencer object. + */ + Sequencer sequencer; + + /** + * The Synthesizer object. + */ + Synthesizer synthesizer; + + /** + * Gets the name of the midi file. + * + * @return The midiFileName variable. + */ + public String getMidiFileName() { + return midiFileName; + } + + /** + * Gets the midi file directory. + * + * @return The midiSaveDir variable. + */ + public String getMidiSaveDir() { + return midiSaveDir; + } + + /** + * Sets the midi file name. + * + * @param midiFileName + * The String to set the file name to. + */ + public void setMidiFileName(String midiFileName) { + this.midiFileName = midiFileName; + } + + /** + * Sets the midi directory. + * + * @param midiFileName + * The String to set the file directory to. + */ + public void setMidiSaveDir(String midiSaveDir) { + this.midiSaveDir = midiSaveDir; + } + + /** + * Checks if the sequenced is finished. If the sequence is finished, it is + * faded out and closed. + */ + @Override + public void run() { + while (sequencer != null) { + if (sequencer.getTickPosition() >= sequencer.getTickLength()) { + fadeOut(); + } + } + } + + /** + * Sets the volume of the midi that is playing. + * + * @param volume + * The volume of the midi sound. + * @return True or false. + */ + public boolean setVolume(double value) { + try { + Receiver receiver = MidiSystem.getReceiver(); + ShortMessage volumeMessage = new ShortMessage(); + + for (int i = 0; i < 16; i++) { + volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, 7, (int) (value * 127.0)); + receiver.send(volumeMessage, -1); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * Fades the volume of the midi out. Stops the current midi playing. + */ + public void fadeOut() { + double volume = 1; + while (volume - 0.05 > 0 && setVolume(volume)) { + try { + Thread.sleep(150); + } catch (Exception exception) { + } + volume -= 0.025; + } + try { + if (synthesizer != null) { + synthesizer.close(); + synthesizer = null; + } + if (sequencer != null) { + if (sequencer.isOpen()) { + sequencer.stop(); + } + sequencer.close(); + } + } catch (Exception exception) { + } + } + + /** + * Starts playing the midi. + */ + public void startMidi() { + String midiDir = getMidiFileName() + getMidiSaveDir(); + new Thread(this); + + try { + if (sequencer != null) { + fadeOut(); + } + sequencer = null; + sequence = null; + + File file = new File(midiDir); + + if (file.exists()) { + sequence = MidiSystem.getSequence(file); + } + sequencer = MidiSystem.getSequencer(); + sequencer.setSequence(sequence); + synthesizer = MidiSystem.getSynthesizer(); + synthesizer.open(); + + if (synthesizer.getDefaultSoundbank() == null) { + sequencer.getTransmitter().setReceiver(MidiSystem.getReceiver()); + } else { + sequencer.getTransmitter().setReceiver(synthesizer.getReceiver()); + } + sequencer.open(); + sequencer.start(); + } catch (Exception exception) { + exception.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/2006Redone Client/src/Model.java b/2006Redone Client/src/Model.java new file mode 100644 index 00000000..efde1f61 --- /dev/null +++ b/2006Redone Client/src/Model.java @@ -0,0 +1,1895 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Model extends Animable { + + public static void nullLoader() { + aClass21Array1661 = null; + aBooleanArray1663 = null; + aBooleanArray1664 = null; + anIntArray1665 = null; + anIntArray1666 = null; + anIntArray1667 = null; + anIntArray1668 = null; + anIntArray1669 = null; + anIntArray1670 = null; + anIntArray1671 = null; + anIntArrayArray1672 = null; + anIntArray1673 = null; + anIntArrayArray1674 = null; + anIntArray1675 = null; + anIntArray1676 = null; + anIntArray1677 = null; + modelIntArray1 = null; + modelIntArray2 = null; + modelIntArray3 = null; + modelIntArray4 = null; + } + + public static void method459(int i, OnDemandFetcherParent onDemandFetcherParent) { + aClass21Array1661 = new Class21[i]; + aOnDemandFetcherParent_1662 = onDemandFetcherParent; + } + + public static void method460(byte abyte0[], int j) { + if (abyte0 == null) { + Class21 class21 = aClass21Array1661[j] = new Class21(); + class21.anInt369 = 0; + class21.anInt370 = 0; + class21.anInt371 = 0; + return; + } + Stream stream = new Stream(abyte0); + stream.currentOffset = abyte0.length - 18; + Class21 class21_1 = aClass21Array1661[j] = new Class21(); + class21_1.aByteArray368 = abyte0; + class21_1.anInt369 = stream.readUnsignedWord(); + class21_1.anInt370 = stream.readUnsignedWord(); + class21_1.anInt371 = stream.readUnsignedByte(); + int k = stream.readUnsignedByte(); + int l = stream.readUnsignedByte(); + int i1 = stream.readUnsignedByte(); + int j1 = stream.readUnsignedByte(); + int k1 = stream.readUnsignedByte(); + int l1 = stream.readUnsignedWord(); + int i2 = stream.readUnsignedWord(); + int j2 = stream.readUnsignedWord(); + int k2 = stream.readUnsignedWord(); + int l2 = 0; + class21_1.anInt372 = l2; + l2 += class21_1.anInt369; + class21_1.anInt378 = l2; + l2 += class21_1.anInt370; + class21_1.anInt381 = l2; + if (l == 255) { + l2 += class21_1.anInt370; + } else { + class21_1.anInt381 = -l - 1; + } + class21_1.anInt383 = l2; + if (j1 == 1) { + l2 += class21_1.anInt370; + } else { + class21_1.anInt383 = -1; + } + class21_1.anInt380 = l2; + if (k == 1) { + l2 += class21_1.anInt370; + } else { + class21_1.anInt380 = -1; + } + class21_1.anInt376 = l2; + if (k1 == 1) { + l2 += class21_1.anInt369; + } else { + class21_1.anInt376 = -1; + } + class21_1.anInt382 = l2; + if (i1 == 1) { + l2 += class21_1.anInt370; + } else { + class21_1.anInt382 = -1; + } + class21_1.anInt377 = l2; + l2 += k2; + class21_1.anInt379 = l2; + l2 += class21_1.anInt370 * 2; + class21_1.anInt384 = l2; + l2 += class21_1.anInt371 * 6; + class21_1.anInt373 = l2; + l2 += l1; + class21_1.anInt374 = l2; + l2 += i2; + class21_1.anInt375 = l2; + l2 += j2; + } + + public static void method461(int j) { + aClass21Array1661[j] = null; + } + + public static Model method462(int j) { + if (aClass21Array1661 == null) { + return null; + } + Class21 class21 = aClass21Array1661[j]; + if (class21 == null) { + aOnDemandFetcherParent_1662.method548(j); + return null; + } else { + return new Model(j); + } + } + + public static boolean method463(int i) { + if (aClass21Array1661 == null) { + return false; + } + Class21 class21 = aClass21Array1661[i]; + if (class21 == null) { + aOnDemandFetcherParent_1662.method548(i); + return false; + } else { + return true; + } + } + + private Model() { + aBoolean1659 = false; + } + + private Model(int i) { + aBoolean1659 = false; + Class21 class21 = aClass21Array1661[i]; + anInt1626 = class21.anInt369; + anInt1630 = class21.anInt370; + anInt1642 = class21.anInt371; + anIntArray1627 = new int[anInt1626]; + anIntArray1628 = new int[anInt1626]; + anIntArray1629 = new int[anInt1626]; + anIntArray1631 = new int[anInt1630]; + anIntArray1632 = new int[anInt1630]; + anIntArray1633 = new int[anInt1630]; + anIntArray1643 = new int[anInt1642]; + anIntArray1644 = new int[anInt1642]; + anIntArray1645 = new int[anInt1642]; + if (class21.anInt376 >= 0) { + anIntArray1655 = new int[anInt1626]; + } + if (class21.anInt380 >= 0) { + anIntArray1637 = new int[anInt1630]; + } + if (class21.anInt381 >= 0) { + anIntArray1638 = new int[anInt1630]; + } else { + anInt1641 = -class21.anInt381 - 1; + } + if (class21.anInt382 >= 0) { + anIntArray1639 = new int[anInt1630]; + } + if (class21.anInt383 >= 0) { + anIntArray1656 = new int[anInt1630]; + } + anIntArray1640 = new int[anInt1630]; + Stream stream = new Stream(class21.aByteArray368); + stream.currentOffset = class21.anInt372; + Stream stream_1 = new Stream(class21.aByteArray368); + stream_1.currentOffset = class21.anInt373; + Stream stream_2 = new Stream(class21.aByteArray368); + stream_2.currentOffset = class21.anInt374; + Stream stream_3 = new Stream(class21.aByteArray368); + stream_3.currentOffset = class21.anInt375; + Stream stream_4 = new Stream(class21.aByteArray368); + stream_4.currentOffset = class21.anInt376; + int k = 0; + int l = 0; + int i1 = 0; + for (int j1 = 0; j1 < anInt1626; j1++) { + int k1 = stream.readUnsignedByte(); + int i2 = 0; + if ((k1 & 1) != 0) { + i2 = stream_1.method421(); + } + int k2 = 0; + if ((k1 & 2) != 0) { + k2 = stream_2.method421(); + } + int i3 = 0; + if ((k1 & 4) != 0) { + i3 = stream_3.method421(); + } + anIntArray1627[j1] = k + i2; + anIntArray1628[j1] = l + k2; + anIntArray1629[j1] = i1 + i3; + k = anIntArray1627[j1]; + l = anIntArray1628[j1]; + i1 = anIntArray1629[j1]; + if (anIntArray1655 != null) { + anIntArray1655[j1] = stream_4.readUnsignedByte(); + } + } + + stream.currentOffset = class21.anInt379; + stream_1.currentOffset = class21.anInt380; + stream_2.currentOffset = class21.anInt381; + stream_3.currentOffset = class21.anInt382; + stream_4.currentOffset = class21.anInt383; + for (int l1 = 0; l1 < anInt1630; l1++) { + anIntArray1640[l1] = stream.readUnsignedWord(); + if (anIntArray1637 != null) { + anIntArray1637[l1] = stream_1.readUnsignedByte(); + } + if (anIntArray1638 != null) { + anIntArray1638[l1] = stream_2.readUnsignedByte(); + } + if (anIntArray1639 != null) { + anIntArray1639[l1] = stream_3.readUnsignedByte(); + } + if (anIntArray1656 != null) { + anIntArray1656[l1] = stream_4.readUnsignedByte(); + } + } + + stream.currentOffset = class21.anInt377; + stream_1.currentOffset = class21.anInt378; + int j2 = 0; + int l2 = 0; + int j3 = 0; + int k3 = 0; + for (int l3 = 0; l3 < anInt1630; l3++) { + int i4 = stream_1.readUnsignedByte(); + if (i4 == 1) { + j2 = stream.method421() + k3; + k3 = j2; + l2 = stream.method421() + k3; + k3 = l2; + j3 = stream.method421() + k3; + k3 = j3; + anIntArray1631[l3] = j2; + anIntArray1632[l3] = l2; + anIntArray1633[l3] = j3; + } + if (i4 == 2) { + l2 = j3; + j3 = stream.method421() + k3; + k3 = j3; + anIntArray1631[l3] = j2; + anIntArray1632[l3] = l2; + anIntArray1633[l3] = j3; + } + if (i4 == 3) { + j2 = j3; + j3 = stream.method421() + k3; + k3 = j3; + anIntArray1631[l3] = j2; + anIntArray1632[l3] = l2; + anIntArray1633[l3] = j3; + } + if (i4 == 4) { + int k4 = j2; + j2 = l2; + l2 = k4; + j3 = stream.method421() + k3; + k3 = j3; + anIntArray1631[l3] = j2; + anIntArray1632[l3] = l2; + anIntArray1633[l3] = j3; + } + } + + stream.currentOffset = class21.anInt384; + for (int j4 = 0; j4 < anInt1642; j4++) { + anIntArray1643[j4] = stream.readUnsignedWord(); + anIntArray1644[j4] = stream.readUnsignedWord(); + anIntArray1645[j4] = stream.readUnsignedWord(); + } + + } + + public Model(int i, Model aclass30_sub2_sub4_sub6s[]) { + aBoolean1659 = false; + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + anInt1626 = 0; + anInt1630 = 0; + anInt1642 = 0; + anInt1641 = -1; + for (int k = 0; k < i; k++) { + Model model = aclass30_sub2_sub4_sub6s[k]; + if (model != null) { + anInt1626 += model.anInt1626; + anInt1630 += model.anInt1630; + anInt1642 += model.anInt1642; + flag |= model.anIntArray1637 != null; + if (model.anIntArray1638 != null) { + flag1 = true; + } else { + if (anInt1641 == -1) { + anInt1641 = model.anInt1641; + } + if (anInt1641 != model.anInt1641) { + flag1 = true; + } + } + flag2 |= model.anIntArray1639 != null; + flag3 |= model.anIntArray1656 != null; + } + } + + anIntArray1627 = new int[anInt1626]; + anIntArray1628 = new int[anInt1626]; + anIntArray1629 = new int[anInt1626]; + anIntArray1655 = new int[anInt1626]; + anIntArray1631 = new int[anInt1630]; + anIntArray1632 = new int[anInt1630]; + anIntArray1633 = new int[anInt1630]; + anIntArray1643 = new int[anInt1642]; + anIntArray1644 = new int[anInt1642]; + anIntArray1645 = new int[anInt1642]; + if (flag) { + anIntArray1637 = new int[anInt1630]; + } + if (flag1) { + anIntArray1638 = new int[anInt1630]; + } + if (flag2) { + anIntArray1639 = new int[anInt1630]; + } + if (flag3) { + anIntArray1656 = new int[anInt1630]; + } + anIntArray1640 = new int[anInt1630]; + anInt1626 = 0; + anInt1630 = 0; + anInt1642 = 0; + int l = 0; + for (int i1 = 0; i1 < i; i1++) { + Model model_1 = aclass30_sub2_sub4_sub6s[i1]; + if (model_1 != null) { + for (int j1 = 0; j1 < model_1.anInt1630; j1++) { + if (flag) { + if (model_1.anIntArray1637 == null) { + anIntArray1637[anInt1630] = 0; + } else { + int k1 = model_1.anIntArray1637[j1]; + if ((k1 & 2) == 2) { + k1 += l << 2; + } + anIntArray1637[anInt1630] = k1; + } + } + if (flag1) { + if (model_1.anIntArray1638 == null) { + anIntArray1638[anInt1630] = model_1.anInt1641; + } else { + anIntArray1638[anInt1630] = model_1.anIntArray1638[j1]; + } + } + if (flag2) { + if (model_1.anIntArray1639 == null) { + anIntArray1639[anInt1630] = 0; + } else { + anIntArray1639[anInt1630] = model_1.anIntArray1639[j1]; + } + } + if (flag3 && model_1.anIntArray1656 != null) { + anIntArray1656[anInt1630] = model_1.anIntArray1656[j1]; + } + anIntArray1640[anInt1630] = model_1.anIntArray1640[j1]; + anIntArray1631[anInt1630] = method465(model_1, model_1.anIntArray1631[j1]); + anIntArray1632[anInt1630] = method465(model_1, model_1.anIntArray1632[j1]); + anIntArray1633[anInt1630] = method465(model_1, model_1.anIntArray1633[j1]); + anInt1630++; + } + + for (int l1 = 0; l1 < model_1.anInt1642; l1++) { + anIntArray1643[anInt1642] = method465(model_1, model_1.anIntArray1643[l1]); + anIntArray1644[anInt1642] = method465(model_1, model_1.anIntArray1644[l1]); + anIntArray1645[anInt1642] = method465(model_1, model_1.anIntArray1645[l1]); + anInt1642++; + } + + l += model_1.anInt1642; + } + } + + } + + public Model(Model aclass30_sub2_sub4_sub6s[]) { + int i = 2;// was parameter + aBoolean1659 = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + boolean flag4 = false; + anInt1626 = 0; + anInt1630 = 0; + anInt1642 = 0; + anInt1641 = -1; + for (int k = 0; k < i; k++) { + Model model = aclass30_sub2_sub4_sub6s[k]; + if (model != null) { + anInt1626 += model.anInt1626; + anInt1630 += model.anInt1630; + anInt1642 += model.anInt1642; + flag1 |= model.anIntArray1637 != null; + if (model.anIntArray1638 != null) { + flag2 = true; + } else { + if (anInt1641 == -1) { + anInt1641 = model.anInt1641; + } + if (anInt1641 != model.anInt1641) { + flag2 = true; + } + } + flag3 |= model.anIntArray1639 != null; + flag4 |= model.anIntArray1640 != null; + } + } + + anIntArray1627 = new int[anInt1626]; + anIntArray1628 = new int[anInt1626]; + anIntArray1629 = new int[anInt1626]; + anIntArray1631 = new int[anInt1630]; + anIntArray1632 = new int[anInt1630]; + anIntArray1633 = new int[anInt1630]; + anIntArray1634 = new int[anInt1630]; + anIntArray1635 = new int[anInt1630]; + anIntArray1636 = new int[anInt1630]; + anIntArray1643 = new int[anInt1642]; + anIntArray1644 = new int[anInt1642]; + anIntArray1645 = new int[anInt1642]; + if (flag1) { + anIntArray1637 = new int[anInt1630]; + } + if (flag2) { + anIntArray1638 = new int[anInt1630]; + } + if (flag3) { + anIntArray1639 = new int[anInt1630]; + } + if (flag4) { + anIntArray1640 = new int[anInt1630]; + } + anInt1626 = 0; + anInt1630 = 0; + anInt1642 = 0; + int i1 = 0; + for (int j1 = 0; j1 < i; j1++) { + Model model_1 = aclass30_sub2_sub4_sub6s[j1]; + if (model_1 != null) { + int k1 = anInt1626; + for (int l1 = 0; l1 < model_1.anInt1626; l1++) { + anIntArray1627[anInt1626] = model_1.anIntArray1627[l1]; + anIntArray1628[anInt1626] = model_1.anIntArray1628[l1]; + anIntArray1629[anInt1626] = model_1.anIntArray1629[l1]; + anInt1626++; + } + + for (int i2 = 0; i2 < model_1.anInt1630; i2++) { + anIntArray1631[anInt1630] = model_1.anIntArray1631[i2] + k1; + anIntArray1632[anInt1630] = model_1.anIntArray1632[i2] + k1; + anIntArray1633[anInt1630] = model_1.anIntArray1633[i2] + k1; + anIntArray1634[anInt1630] = model_1.anIntArray1634[i2]; + anIntArray1635[anInt1630] = model_1.anIntArray1635[i2]; + anIntArray1636[anInt1630] = model_1.anIntArray1636[i2]; + if (flag1) { + if (model_1.anIntArray1637 == null) { + anIntArray1637[anInt1630] = 0; + } else { + int j2 = model_1.anIntArray1637[i2]; + if ((j2 & 2) == 2) { + j2 += i1 << 2; + } + anIntArray1637[anInt1630] = j2; + } + } + if (flag2) { + if (model_1.anIntArray1638 == null) { + anIntArray1638[anInt1630] = model_1.anInt1641; + } else { + anIntArray1638[anInt1630] = model_1.anIntArray1638[i2]; + } + } + if (flag3) { + if (model_1.anIntArray1639 == null) { + anIntArray1639[anInt1630] = 0; + } else { + anIntArray1639[anInt1630] = model_1.anIntArray1639[i2]; + } + } + if (flag4 && model_1.anIntArray1640 != null) { + anIntArray1640[anInt1630] = model_1.anIntArray1640[i2]; + } + anInt1630++; + } + + for (int k2 = 0; k2 < model_1.anInt1642; k2++) { + anIntArray1643[anInt1642] = model_1.anIntArray1643[k2] + k1; + anIntArray1644[anInt1642] = model_1.anIntArray1644[k2] + k1; + anIntArray1645[anInt1642] = model_1.anIntArray1645[k2] + k1; + anInt1642++; + } + + i1 += model_1.anInt1642; + } + } + + method466(); + } + + public Model(boolean flag, boolean flag1, boolean flag2, Model model) { + aBoolean1659 = false; + anInt1626 = model.anInt1626; + anInt1630 = model.anInt1630; + anInt1642 = model.anInt1642; + if (flag2) { + anIntArray1627 = model.anIntArray1627; + anIntArray1628 = model.anIntArray1628; + anIntArray1629 = model.anIntArray1629; + } else { + anIntArray1627 = new int[anInt1626]; + anIntArray1628 = new int[anInt1626]; + anIntArray1629 = new int[anInt1626]; + for (int j = 0; j < anInt1626; j++) { + anIntArray1627[j] = model.anIntArray1627[j]; + anIntArray1628[j] = model.anIntArray1628[j]; + anIntArray1629[j] = model.anIntArray1629[j]; + } + + } + if (flag) { + anIntArray1640 = model.anIntArray1640; + } else { + anIntArray1640 = new int[anInt1630]; + System.arraycopy(model.anIntArray1640, 0, anIntArray1640, 0, anInt1630); + + } + if (flag1) { + anIntArray1639 = model.anIntArray1639; + } else { + anIntArray1639 = new int[anInt1630]; + if (model.anIntArray1639 == null) { + for (int l = 0; l < anInt1630; l++) { + anIntArray1639[l] = 0; + } + + } else { + System.arraycopy(model.anIntArray1639, 0, anIntArray1639, 0, anInt1630); + + } + } + anIntArray1655 = model.anIntArray1655; + anIntArray1656 = model.anIntArray1656; + anIntArray1637 = model.anIntArray1637; + anIntArray1631 = model.anIntArray1631; + anIntArray1632 = model.anIntArray1632; + anIntArray1633 = model.anIntArray1633; + anIntArray1638 = model.anIntArray1638; + anInt1641 = model.anInt1641; + anIntArray1643 = model.anIntArray1643; + anIntArray1644 = model.anIntArray1644; + anIntArray1645 = model.anIntArray1645; + } + + public Model(boolean flag, boolean flag1, Model model) { + aBoolean1659 = false; + anInt1626 = model.anInt1626; + anInt1630 = model.anInt1630; + anInt1642 = model.anInt1642; + if (flag) { + anIntArray1628 = new int[anInt1626]; + System.arraycopy(model.anIntArray1628, 0, anIntArray1628, 0, anInt1626); + + } else { + anIntArray1628 = model.anIntArray1628; + } + if (flag1) { + anIntArray1634 = new int[anInt1630]; + anIntArray1635 = new int[anInt1630]; + anIntArray1636 = new int[anInt1630]; + for (int k = 0; k < anInt1630; k++) { + anIntArray1634[k] = model.anIntArray1634[k]; + anIntArray1635[k] = model.anIntArray1635[k]; + anIntArray1636[k] = model.anIntArray1636[k]; + } + + anIntArray1637 = new int[anInt1630]; + if (model.anIntArray1637 == null) { + for (int l = 0; l < anInt1630; l++) { + anIntArray1637[l] = 0; + } + + } else { + System.arraycopy(model.anIntArray1637, 0, anIntArray1637, 0, anInt1630); + + } + super.aClass33Array1425 = new Class33[anInt1626]; + for (int j1 = 0; j1 < anInt1626; j1++) { + Class33 class33 = super.aClass33Array1425[j1] = new Class33(); + Class33 class33_1 = model.aClass33Array1425[j1]; + class33.anInt602 = class33_1.anInt602; + class33.anInt603 = class33_1.anInt603; + class33.anInt604 = class33_1.anInt604; + class33.anInt605 = class33_1.anInt605; + } + + aClass33Array1660 = model.aClass33Array1660; + } else { + anIntArray1634 = model.anIntArray1634; + anIntArray1635 = model.anIntArray1635; + anIntArray1636 = model.anIntArray1636; + anIntArray1637 = model.anIntArray1637; + } + anIntArray1627 = model.anIntArray1627; + anIntArray1629 = model.anIntArray1629; + anIntArray1640 = model.anIntArray1640; + anIntArray1639 = model.anIntArray1639; + anIntArray1638 = model.anIntArray1638; + anInt1641 = model.anInt1641; + anIntArray1631 = model.anIntArray1631; + anIntArray1632 = model.anIntArray1632; + anIntArray1633 = model.anIntArray1633; + anIntArray1643 = model.anIntArray1643; + anIntArray1644 = model.anIntArray1644; + anIntArray1645 = model.anIntArray1645; + super.modelHeight = model.modelHeight; + anInt1651 = model.anInt1651; + anInt1650 = model.anInt1650; + anInt1653 = model.anInt1653; + anInt1652 = model.anInt1652; + anInt1646 = model.anInt1646; + anInt1648 = model.anInt1648; + anInt1649 = model.anInt1649; + anInt1647 = model.anInt1647; + } + + public void method464(Model model, boolean flag) { + anInt1626 = model.anInt1626; + anInt1630 = model.anInt1630; + anInt1642 = model.anInt1642; + if (anIntArray1622.length < anInt1626) { + anIntArray1622 = new int[anInt1626 + 100]; + anIntArray1623 = new int[anInt1626 + 100]; + anIntArray1624 = new int[anInt1626 + 100]; + } + anIntArray1627 = anIntArray1622; + anIntArray1628 = anIntArray1623; + anIntArray1629 = anIntArray1624; + for (int k = 0; k < anInt1626; k++) { + anIntArray1627[k] = model.anIntArray1627[k]; + anIntArray1628[k] = model.anIntArray1628[k]; + anIntArray1629[k] = model.anIntArray1629[k]; + } + + if (flag) { + anIntArray1639 = model.anIntArray1639; + } else { + if (anIntArray1625.length < anInt1630) { + anIntArray1625 = new int[anInt1630 + 100]; + } + anIntArray1639 = anIntArray1625; + if (model.anIntArray1639 == null) { + for (int l = 0; l < anInt1630; l++) { + anIntArray1639[l] = 0; + } + + } else { + System.arraycopy(model.anIntArray1639, 0, anIntArray1639, 0, anInt1630); + + } + } + anIntArray1637 = model.anIntArray1637; + anIntArray1640 = model.anIntArray1640; + anIntArray1638 = model.anIntArray1638; + anInt1641 = model.anInt1641; + anIntArrayArray1658 = model.anIntArrayArray1658; + anIntArrayArray1657 = model.anIntArrayArray1657; + anIntArray1631 = model.anIntArray1631; + anIntArray1632 = model.anIntArray1632; + anIntArray1633 = model.anIntArray1633; + anIntArray1634 = model.anIntArray1634; + anIntArray1635 = model.anIntArray1635; + anIntArray1636 = model.anIntArray1636; + anIntArray1643 = model.anIntArray1643; + anIntArray1644 = model.anIntArray1644; + anIntArray1645 = model.anIntArray1645; + } + + private int method465(Model model, int i) { + int j = -1; + int k = model.anIntArray1627[i]; + int l = model.anIntArray1628[i]; + int i1 = model.anIntArray1629[i]; + for (int j1 = 0; j1 < anInt1626; j1++) { + if (k != anIntArray1627[j1] || l != anIntArray1628[j1] || i1 != anIntArray1629[j1]) { + continue; + } + j = j1; + break; + } + + if (j == -1) { + anIntArray1627[anInt1626] = k; + anIntArray1628[anInt1626] = l; + anIntArray1629[anInt1626] = i1; + if (model.anIntArray1655 != null) { + anIntArray1655[anInt1626] = model.anIntArray1655[i]; + } + j = anInt1626++; + } + return j; + } + + public void method466() { + super.modelHeight = 0; + anInt1650 = 0; + anInt1651 = 0; + for (int i = 0; i < anInt1626; i++) { + int j = anIntArray1627[i]; + int k = anIntArray1628[i]; + int l = anIntArray1629[i]; + if (-k > super.modelHeight) { + super.modelHeight = -k; + } + if (k > anInt1651) { + anInt1651 = k; + } + int i1 = j * j + l * l; + if (i1 > anInt1650) { + anInt1650 = i1; + } + } + anInt1650 = (int) (Math.sqrt(anInt1650) + 0.98999999999999999D); + anInt1653 = (int) (Math.sqrt(anInt1650 * anInt1650 + super.modelHeight * super.modelHeight) + 0.98999999999999999D); + anInt1652 = anInt1653 + (int) (Math.sqrt(anInt1650 * anInt1650 + anInt1651 * anInt1651) + 0.98999999999999999D); + } + + public void method467() { + super.modelHeight = 0; + anInt1651 = 0; + for (int i = 0; i < anInt1626; i++) { + int j = anIntArray1628[i]; + if (-j > super.modelHeight) { + super.modelHeight = -j; + } + if (j > anInt1651) { + anInt1651 = j; + } + } + + anInt1653 = (int) (Math.sqrt(anInt1650 * anInt1650 + super.modelHeight * super.modelHeight) + 0.98999999999999999D); + anInt1652 = anInt1653 + (int) (Math.sqrt(anInt1650 * anInt1650 + anInt1651 * anInt1651) + 0.98999999999999999D); + } + + private void method468() { + super.modelHeight = 0; + anInt1650 = 0; + anInt1651 = 0; + anInt1646 = 0xf423f; + anInt1647 = 0xfff0bdc1; + anInt1648 = 0xfffe7961; + anInt1649 = 0x1869f; + for (int j = 0; j < anInt1626; j++) { + int k = anIntArray1627[j]; + int l = anIntArray1628[j]; + int i1 = anIntArray1629[j]; + if (k < anInt1646) { + anInt1646 = k; + } + if (k > anInt1647) { + anInt1647 = k; + } + if (i1 < anInt1649) { + anInt1649 = i1; + } + if (i1 > anInt1648) { + anInt1648 = i1; + } + if (-l > super.modelHeight) { + super.modelHeight = -l; + } + if (l > anInt1651) { + anInt1651 = l; + } + int j1 = k * k + i1 * i1; + if (j1 > anInt1650) { + anInt1650 = j1; + } + } + + anInt1650 = (int) Math.sqrt(anInt1650); + anInt1653 = (int) Math.sqrt(anInt1650 * anInt1650 + super.modelHeight * super.modelHeight); + anInt1652 = anInt1653 + (int) Math.sqrt(anInt1650 * anInt1650 + anInt1651 * anInt1651); + } + + public void method469() { + if (anIntArray1655 != null) { + int ai[] = new int[256]; + int j = 0; + for (int l = 0; l < anInt1626; l++) { + int j1 = anIntArray1655[l]; + ai[j1]++; + if (j1 > j) { + j = j1; + } + } + + anIntArrayArray1657 = new int[j + 1][]; + for (int k1 = 0; k1 <= j; k1++) { + anIntArrayArray1657[k1] = new int[ai[k1]]; + ai[k1] = 0; + } + + for (int j2 = 0; j2 < anInt1626; j2++) { + int l2 = anIntArray1655[j2]; + anIntArrayArray1657[l2][ai[l2]++] = j2; + } + + anIntArray1655 = null; + } + if (anIntArray1656 != null) { + int ai1[] = new int[256]; + int k = 0; + for (int i1 = 0; i1 < anInt1630; i1++) { + int l1 = anIntArray1656[i1]; + ai1[l1]++; + if (l1 > k) { + k = l1; + } + } + + anIntArrayArray1658 = new int[k + 1][]; + for (int i2 = 0; i2 <= k; i2++) { + anIntArrayArray1658[i2] = new int[ai1[i2]]; + ai1[i2] = 0; + } + + for (int k2 = 0; k2 < anInt1630; k2++) { + int i3 = anIntArray1656[k2]; + anIntArrayArray1658[i3][ai1[i3]++] = k2; + } + + anIntArray1656 = null; + } + } + + public void method470(int i) { + if (anIntArrayArray1657 == null) { + return; + } + if (i == -1) { + return; + } + Class36 class36 = Class36.method531(i); + if (class36 == null) { + return; + } + Class18 class18 = class36.aClass18_637; + anInt1681 = 0; + anInt1682 = 0; + anInt1683 = 0; + for (int k = 0; k < class36.anInt638; k++) { + int l = class36.anIntArray639[k]; + method472(class18.anIntArray342[l], class18.anIntArrayArray343[l], class36.anIntArray640[k], class36.anIntArray641[k], class36.anIntArray642[k]); + } + + } + + public void method471(int ai[], int j, int k) { + if (k == -1) { + return; + } + if (ai == null || j == -1) { + method470(k); + return; + } + Class36 class36 = Class36.method531(k); + if (class36 == null) { + return; + } + Class36 class36_1 = Class36.method531(j); + if (class36_1 == null) { + method470(k); + return; + } + Class18 class18 = class36.aClass18_637; + anInt1681 = 0; + anInt1682 = 0; + anInt1683 = 0; + int l = 0; + int i1 = ai[l++]; + for (int j1 = 0; j1 < class36.anInt638; j1++) { + int k1; + for (k1 = class36.anIntArray639[j1]; k1 > i1; i1 = ai[l++]) { + ; + } + if (k1 != i1 || class18.anIntArray342[k1] == 0) { + method472(class18.anIntArray342[k1], class18.anIntArrayArray343[k1], class36.anIntArray640[j1], class36.anIntArray641[j1], class36.anIntArray642[j1]); + } + } + + anInt1681 = 0; + anInt1682 = 0; + anInt1683 = 0; + l = 0; + i1 = ai[l++]; + for (int l1 = 0; l1 < class36_1.anInt638; l1++) { + int i2; + for (i2 = class36_1.anIntArray639[l1]; i2 > i1; i1 = ai[l++]) { + ; + } + if (i2 == i1 || class18.anIntArray342[i2] == 0) { + method472(class18.anIntArray342[i2], class18.anIntArrayArray343[i2], class36_1.anIntArray640[l1], class36_1.anIntArray641[l1], class36_1.anIntArray642[l1]); + } + } + + } + + private void method472(int i, int ai[], int j, int k, int l) { + int i1 = ai.length; + if (i == 0) { + int j1 = 0; + anInt1681 = 0; + anInt1682 = 0; + anInt1683 = 0; + for (int k2 = 0; k2 < i1; k2++) { + int l3 = ai[k2]; + if (l3 < anIntArrayArray1657.length) { + int ai5[] = anIntArrayArray1657[l3]; + for (int j6 : ai5) { + anInt1681 += anIntArray1627[j6]; + anInt1682 += anIntArray1628[j6]; + anInt1683 += anIntArray1629[j6]; + j1++; + } + + } + } + + if (j1 > 0) { + anInt1681 = anInt1681 / j1 + j; + anInt1682 = anInt1682 / j1 + k; + anInt1683 = anInt1683 / j1 + l; + return; + } else { + anInt1681 = j; + anInt1682 = k; + anInt1683 = l; + return; + } + } + if (i == 1) { + for (int k1 = 0; k1 < i1; k1++) { + int l2 = ai[k1]; + if (l2 < anIntArrayArray1657.length) { + int ai1[] = anIntArrayArray1657[l2]; + for (int element : ai1) { + int j5 = element; + anIntArray1627[j5] += j; + anIntArray1628[j5] += k; + anIntArray1629[j5] += l; + } + + } + } + + return; + } + if (i == 2) { + for (int l1 = 0; l1 < i1; l1++) { + int i3 = ai[l1]; + if (i3 < anIntArrayArray1657.length) { + int ai2[] = anIntArrayArray1657[i3]; + for (int element : ai2) { + int k5 = element; + anIntArray1627[k5] -= anInt1681; + anIntArray1628[k5] -= anInt1682; + anIntArray1629[k5] -= anInt1683; + int k6 = (j & 0xff) * 8; + int l6 = (k & 0xff) * 8; + int i7 = (l & 0xff) * 8; + if (i7 != 0) { + int j7 = modelIntArray1[i7]; + int i8 = modelIntArray2[i7]; + int l8 = anIntArray1628[k5] * j7 + anIntArray1627[k5] * i8 >> 16; + anIntArray1628[k5] = anIntArray1628[k5] * i8 - anIntArray1627[k5] * j7 >> 16; + anIntArray1627[k5] = l8; + } + if (k6 != 0) { + int k7 = modelIntArray1[k6]; + int j8 = modelIntArray2[k6]; + int i9 = anIntArray1628[k5] * j8 - anIntArray1629[k5] * k7 >> 16; + anIntArray1629[k5] = anIntArray1628[k5] * k7 + anIntArray1629[k5] * j8 >> 16; + anIntArray1628[k5] = i9; + } + if (l6 != 0) { + int l7 = modelIntArray1[l6]; + int k8 = modelIntArray2[l6]; + int j9 = anIntArray1629[k5] * l7 + anIntArray1627[k5] * k8 >> 16; + anIntArray1629[k5] = anIntArray1629[k5] * k8 - anIntArray1627[k5] * l7 >> 16; + anIntArray1627[k5] = j9; + } + anIntArray1627[k5] += anInt1681; + anIntArray1628[k5] += anInt1682; + anIntArray1629[k5] += anInt1683; + } + + } + } + + return; + } + if (i == 3) { + for (int i2 = 0; i2 < i1; i2++) { + int j3 = ai[i2]; + if (j3 < anIntArrayArray1657.length) { + int ai3[] = anIntArrayArray1657[j3]; + for (int element : ai3) { + int l5 = element; + anIntArray1627[l5] -= anInt1681; + anIntArray1628[l5] -= anInt1682; + anIntArray1629[l5] -= anInt1683; + anIntArray1627[l5] = anIntArray1627[l5] * j / 128; + anIntArray1628[l5] = anIntArray1628[l5] * k / 128; + anIntArray1629[l5] = anIntArray1629[l5] * l / 128; + anIntArray1627[l5] += anInt1681; + anIntArray1628[l5] += anInt1682; + anIntArray1629[l5] += anInt1683; + } + + } + } + + return; + } + if (i == 5 && anIntArrayArray1658 != null && anIntArray1639 != null) { + for (int j2 = 0; j2 < i1; j2++) { + int k3 = ai[j2]; + if (k3 < anIntArrayArray1658.length) { + int ai4[] = anIntArrayArray1658[k3]; + for (int element : ai4) { + int i6 = element; + anIntArray1639[i6] += j * 8; + if (anIntArray1639[i6] < 0) { + anIntArray1639[i6] = 0; + } + if (anIntArray1639[i6] > 255) { + anIntArray1639[i6] = 255; + } + } + + } + } + + } + } + + public void method473() { + for (int j = 0; j < anInt1626; j++) { + int k = anIntArray1627[j]; + anIntArray1627[j] = anIntArray1629[j]; + anIntArray1629[j] = -k; + } + + } + + public void method474(int i) { + int k = modelIntArray1[i]; + int l = modelIntArray2[i]; + for (int i1 = 0; i1 < anInt1626; i1++) { + int j1 = anIntArray1628[i1] * l - anIntArray1629[i1] * k >> 16; + anIntArray1629[i1] = anIntArray1628[i1] * k + anIntArray1629[i1] * l >> 16; + anIntArray1628[i1] = j1; + } + } + + public void method475(int i, int j, int l) { + for (int i1 = 0; i1 < anInt1626; i1++) { + anIntArray1627[i1] += i; + anIntArray1628[i1] += j; + anIntArray1629[i1] += l; + } + + } + + public void method476(int i, int j) { + for (int k = 0; k < anInt1630; k++) { + if (anIntArray1640[k] == i) { + anIntArray1640[k] = j; + } + } + + } + + public void method477() { + for (int j = 0; j < anInt1626; j++) { + anIntArray1629[j] = -anIntArray1629[j]; + } + + for (int k = 0; k < anInt1630; k++) { + int l = anIntArray1631[k]; + anIntArray1631[k] = anIntArray1633[k]; + anIntArray1633[k] = l; + } + } + + public void method478(int i, int j, int l) { + for (int i1 = 0; i1 < anInt1626; i1++) { + anIntArray1627[i1] = anIntArray1627[i1] * i / 128; + anIntArray1628[i1] = anIntArray1628[i1] * l / 128; + anIntArray1629[i1] = anIntArray1629[i1] * j / 128; + } + + } + + public void method479(int i, int j, int k, int l, int i1, boolean flag) { + int j1 = (int) Math.sqrt(k * k + l * l + i1 * i1); + int k1 = j * j1 >> 8; + if (anIntArray1634 == null) { + anIntArray1634 = new int[anInt1630]; + anIntArray1635 = new int[anInt1630]; + anIntArray1636 = new int[anInt1630]; + } + if (super.aClass33Array1425 == null) { + super.aClass33Array1425 = new Class33[anInt1626]; + for (int l1 = 0; l1 < anInt1626; l1++) { + super.aClass33Array1425[l1] = new Class33(); + } + + } + for (int i2 = 0; i2 < anInt1630; i2++) { + int j2 = anIntArray1631[i2]; + int l2 = anIntArray1632[i2]; + int i3 = anIntArray1633[i2]; + int j3 = anIntArray1627[l2] - anIntArray1627[j2]; + int k3 = anIntArray1628[l2] - anIntArray1628[j2]; + int l3 = anIntArray1629[l2] - anIntArray1629[j2]; + int i4 = anIntArray1627[i3] - anIntArray1627[j2]; + int j4 = anIntArray1628[i3] - anIntArray1628[j2]; + int k4 = anIntArray1629[i3] - anIntArray1629[j2]; + int l4 = k3 * k4 - j4 * l3; + int i5 = l3 * i4 - k4 * j3; + int j5; + for (j5 = j3 * j4 - i4 * k3; l4 > 8192 || i5 > 8192 || j5 > 8192 || l4 < -8192 || i5 < -8192 || j5 < -8192; j5 >>= 1) { + l4 >>= 1; + i5 >>= 1; + } + + int k5 = (int) Math.sqrt(l4 * l4 + i5 * i5 + j5 * j5); + if (k5 <= 0) { + k5 = 1; + } + l4 = l4 * 256 / k5; + i5 = i5 * 256 / k5; + j5 = j5 * 256 / k5; + if (anIntArray1637 == null || (anIntArray1637[i2] & 1) == 0) { + Class33 class33_2 = super.aClass33Array1425[j2]; + class33_2.anInt602 += l4; + class33_2.anInt603 += i5; + class33_2.anInt604 += j5; + class33_2.anInt605++; + class33_2 = super.aClass33Array1425[l2]; + class33_2.anInt602 += l4; + class33_2.anInt603 += i5; + class33_2.anInt604 += j5; + class33_2.anInt605++; + class33_2 = super.aClass33Array1425[i3]; + class33_2.anInt602 += l4; + class33_2.anInt603 += i5; + class33_2.anInt604 += j5; + class33_2.anInt605++; + } else { + int l5 = i + (k * l4 + l * i5 + i1 * j5) / (k1 + k1 / 2); + anIntArray1634[i2] = method481(anIntArray1640[i2], l5, anIntArray1637[i2]); + } + } + + if (flag) { + method480(i, k1, k, l, i1); + } else { + aClass33Array1660 = new Class33[anInt1626]; + for (int k2 = 0; k2 < anInt1626; k2++) { + Class33 class33 = super.aClass33Array1425[k2]; + Class33 class33_1 = aClass33Array1660[k2] = new Class33(); + class33_1.anInt602 = class33.anInt602; + class33_1.anInt603 = class33.anInt603; + class33_1.anInt604 = class33.anInt604; + class33_1.anInt605 = class33.anInt605; + } + + } + if (flag) { + method466(); + } else { + method468(); + } + } + + public void method480(int i, int j, int k, int l, int i1) { + for (int j1 = 0; j1 < anInt1630; j1++) { + int k1 = anIntArray1631[j1]; + int i2 = anIntArray1632[j1]; + int j2 = anIntArray1633[j1]; + if (anIntArray1637 == null) { + int i3 = anIntArray1640[j1]; + Class33 class33 = super.aClass33Array1425[k1]; + int k2 = i + (k * class33.anInt602 + l * class33.anInt603 + i1 * class33.anInt604) / (j * class33.anInt605); + anIntArray1634[j1] = method481(i3, k2, 0); + class33 = super.aClass33Array1425[i2]; + k2 = i + (k * class33.anInt602 + l * class33.anInt603 + i1 * class33.anInt604) / (j * class33.anInt605); + anIntArray1635[j1] = method481(i3, k2, 0); + class33 = super.aClass33Array1425[j2]; + k2 = i + (k * class33.anInt602 + l * class33.anInt603 + i1 * class33.anInt604) / (j * class33.anInt605); + anIntArray1636[j1] = method481(i3, k2, 0); + } else if ((anIntArray1637[j1] & 1) == 0) { + int j3 = anIntArray1640[j1]; + int k3 = anIntArray1637[j1]; + Class33 class33_1 = super.aClass33Array1425[k1]; + int l2 = i + (k * class33_1.anInt602 + l * class33_1.anInt603 + i1 * class33_1.anInt604) / (j * class33_1.anInt605); + anIntArray1634[j1] = method481(j3, l2, k3); + class33_1 = super.aClass33Array1425[i2]; + l2 = i + (k * class33_1.anInt602 + l * class33_1.anInt603 + i1 * class33_1.anInt604) / (j * class33_1.anInt605); + anIntArray1635[j1] = method481(j3, l2, k3); + class33_1 = super.aClass33Array1425[j2]; + l2 = i + (k * class33_1.anInt602 + l * class33_1.anInt603 + i1 * class33_1.anInt604) / (j * class33_1.anInt605); + anIntArray1636[j1] = method481(j3, l2, k3); + } + } + + super.aClass33Array1425 = null; + aClass33Array1660 = null; + anIntArray1655 = null; + anIntArray1656 = null; + if (anIntArray1637 != null) { + for (int l1 = 0; l1 < anInt1630; l1++) { + if ((anIntArray1637[l1] & 2) == 2) { + return; + } + } + + } + anIntArray1640 = null; + } + + private static int method481(int i, int j, int k) { + if ((k & 2) == 2) { + if (j < 0) { + j = 0; + } else if (j > 127) { + j = 127; + } + j = 127 - j; + return j; + } + j = j * (i & 0x7f) >> 7; + if (j < 2) { + j = 2; + } else if (j > 126) { + j = 126; + } + return (i & 0xff80) + j; + } + + public void method482(int j, int k, int l, int i1, int j1, int k1) { + int i = 0; // was a parameter + int l1 = Texture.textureInt1; + int i2 = Texture.textureInt2; + int j2 = modelIntArray1[i]; + int k2 = modelIntArray2[i]; + int l2 = modelIntArray1[j]; + int i3 = modelIntArray2[j]; + int j3 = modelIntArray1[k]; + int k3 = modelIntArray2[k]; + int l3 = modelIntArray1[l]; + int i4 = modelIntArray2[l]; + int j4 = j1 * l3 + k1 * i4 >> 16; + for (int k4 = 0; k4 < anInt1626; k4++) { + int l4 = anIntArray1627[k4]; + int i5 = anIntArray1628[k4]; + int j5 = anIntArray1629[k4]; + if (k != 0) { + int k5 = i5 * j3 + l4 * k3 >> 16; + i5 = i5 * k3 - l4 * j3 >> 16; + l4 = k5; + } + if (i != 0) { + int l5 = i5 * k2 - j5 * j2 >> 16; + j5 = i5 * j2 + j5 * k2 >> 16; + i5 = l5; + } + if (j != 0) { + int i6 = j5 * l2 + l4 * i3 >> 16; + j5 = j5 * i3 - l4 * l2 >> 16; + l4 = i6; + } + l4 += i1; + i5 += j1; + j5 += k1; + int j6 = i5 * i4 - j5 * l3 >> 16; + j5 = i5 * l3 + j5 * i4 >> 16; + i5 = j6; + anIntArray1667[k4] = j5 - j4; + anIntArray1665[k4] = l1 + (l4 << 9) / j5; + anIntArray1666[k4] = i2 + (i5 << 9) / j5; + if (anInt1642 > 0) { + anIntArray1668[k4] = l4; + anIntArray1669[k4] = i5; + anIntArray1670[k4] = j5; + } + } + + try { + method483(false, false, 0); + } catch (Exception _ex) { + } + } + + @Override + public void method443(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2) { + int j2 = l1 * i1 - j1 * l >> 16; + int k2 = k1 * j + j2 * k >> 16; + int l2 = anInt1650 * k >> 16; + int i3 = k2 + l2; + if (i3 <= 50 || k2 >= 3500) { + return; + } + int j3 = l1 * l + j1 * i1 >> 16; + int k3 = j3 - anInt1650 << 9; + if (k3 / i3 >= DrawingArea.centerY) { + return; + } + int l3 = j3 + anInt1650 << 9; + if (l3 / i3 <= -DrawingArea.centerY) { + return; + } + int i4 = k1 * k - j2 * j >> 16; + int j4 = anInt1650 * j >> 16; + int k4 = i4 + j4 << 9; + if (k4 / i3 <= -DrawingArea.anInt1387) { + return; + } + int l4 = j4 + (super.modelHeight * k >> 16); + int i5 = i4 - l4 << 9; + if (i5 / i3 >= DrawingArea.anInt1387) { + return; + } + int j5 = l2 + (super.modelHeight * j >> 16); + boolean flag = false; + if (k2 - j5 <= 50) { + flag = true; + } + boolean flag1 = false; + if (i2 > 0 && aBoolean1684) { + int k5 = k2 - l2; + if (k5 <= 50) { + k5 = 50; + } + if (j3 > 0) { + k3 /= i3; + l3 /= k5; + } else { + l3 /= i3; + k3 /= k5; + } + if (i4 > 0) { + i5 /= i3; + k4 /= k5; + } else { + k4 /= i3; + i5 /= k5; + } + int i6 = anInt1685 - Texture.textureInt1; + int k6 = anInt1686 - Texture.textureInt2; + if (i6 > k3 && i6 < l3 && k6 > i5 && k6 < k4) { + if (aBoolean1659) { + anIntArray1688[anInt1687++] = i2; + } else { + flag1 = true; + } + } + } + int l5 = Texture.textureInt1; + int j6 = Texture.textureInt2; + int l6 = 0; + int i7 = 0; + if (i != 0) { + l6 = modelIntArray1[i]; + i7 = modelIntArray2[i]; + } + for (int j7 = 0; j7 < anInt1626; j7++) { + int k7 = anIntArray1627[j7]; + int l7 = anIntArray1628[j7]; + int i8 = anIntArray1629[j7]; + if (i != 0) { + int j8 = i8 * l6 + k7 * i7 >> 16; + i8 = i8 * i7 - k7 * l6 >> 16; + k7 = j8; + } + k7 += j1; + l7 += k1; + i8 += l1; + int k8 = i8 * l + k7 * i1 >> 16; + i8 = i8 * i1 - k7 * l >> 16; + k7 = k8; + k8 = l7 * k - i8 * j >> 16; + i8 = l7 * j + i8 * k >> 16; + l7 = k8; + anIntArray1667[j7] = i8 - k2; + if (i8 >= 50) { + anIntArray1665[j7] = l5 + (k7 << 9) / i8; + anIntArray1666[j7] = j6 + (l7 << 9) / i8; + } else { + anIntArray1665[j7] = -5000; + flag = true; + } + if (flag || anInt1642 > 0) { + anIntArray1668[j7] = k7; + anIntArray1669[j7] = l7; + anIntArray1670[j7] = i8; + } + } + + try { + method483(flag, flag1, i2); + } catch (Exception _ex) { + } + } + + private void method483(boolean flag, boolean flag1, int i) { + for (int j = 0; j < anInt1652; j++) { + anIntArray1671[j] = 0; + } + + for (int k = 0; k < anInt1630; k++) { + if (anIntArray1637 == null || anIntArray1637[k] != -1) { + int l = anIntArray1631[k]; + int k1 = anIntArray1632[k]; + int j2 = anIntArray1633[k]; + int i3 = anIntArray1665[l]; + int l3 = anIntArray1665[k1]; + int k4 = anIntArray1665[j2]; + if (flag && (i3 == -5000 || l3 == -5000 || k4 == -5000)) { + aBooleanArray1664[k] = true; + int j5 = (anIntArray1667[l] + anIntArray1667[k1] + anIntArray1667[j2]) / 3 + anInt1653; + anIntArrayArray1672[j5][anIntArray1671[j5]++] = k; + } else { + if (flag1 && method486(anInt1685, anInt1686, anIntArray1666[l], anIntArray1666[k1], anIntArray1666[j2], i3, l3, k4)) { + anIntArray1688[anInt1687++] = i; + flag1 = false; + } + if ((i3 - l3) * (anIntArray1666[j2] - anIntArray1666[k1]) - (anIntArray1666[l] - anIntArray1666[k1]) * (k4 - l3) > 0) { + aBooleanArray1664[k] = false; + aBooleanArray1663[k] = i3 < 0 || l3 < 0 || k4 < 0 || i3 > DrawingArea.centerX || l3 > DrawingArea.centerX || k4 > DrawingArea.centerX; + int k5 = (anIntArray1667[l] + anIntArray1667[k1] + anIntArray1667[j2]) / 3 + anInt1653; + anIntArrayArray1672[k5][anIntArray1671[k5]++] = k; + } + } + } + } + + if (anIntArray1638 == null) { + for (int i1 = anInt1652 - 1; i1 >= 0; i1--) { + int l1 = anIntArray1671[i1]; + if (l1 > 0) { + int ai[] = anIntArrayArray1672[i1]; + for (int j3 = 0; j3 < l1; j3++) { + method484(ai[j3]); + } + + } + } + + return; + } + for (int j1 = 0; j1 < 12; j1++) { + anIntArray1673[j1] = 0; + anIntArray1677[j1] = 0; + } + + for (int i2 = anInt1652 - 1; i2 >= 0; i2--) { + int k2 = anIntArray1671[i2]; + if (k2 > 0) { + int ai1[] = anIntArrayArray1672[i2]; + for (int i4 = 0; i4 < k2; i4++) { + int l4 = ai1[i4]; + int l5 = anIntArray1638[l4]; + int j6 = anIntArray1673[l5]++; + anIntArrayArray1674[l5][j6] = l4; + if (l5 < 10) { + anIntArray1677[l5] += i2; + } else if (l5 == 10) { + anIntArray1675[j6] = i2; + } else { + anIntArray1676[j6] = i2; + } + } + + } + } + + int l2 = 0; + if (anIntArray1673[1] > 0 || anIntArray1673[2] > 0) { + l2 = (anIntArray1677[1] + anIntArray1677[2]) / (anIntArray1673[1] + anIntArray1673[2]); + } + int k3 = 0; + if (anIntArray1673[3] > 0 || anIntArray1673[4] > 0) { + k3 = (anIntArray1677[3] + anIntArray1677[4]) / (anIntArray1673[3] + anIntArray1673[4]); + } + int j4 = 0; + if (anIntArray1673[6] > 0 || anIntArray1673[8] > 0) { + j4 = (anIntArray1677[6] + anIntArray1677[8]) / (anIntArray1673[6] + anIntArray1673[8]); + } + int i6 = 0; + int k6 = anIntArray1673[10]; + int ai2[] = anIntArrayArray1674[10]; + int ai3[] = anIntArray1675; + if (i6 == k6) { + i6 = 0; + k6 = anIntArray1673[11]; + ai2 = anIntArrayArray1674[11]; + ai3 = anIntArray1676; + } + int i5; + if (i6 < k6) { + i5 = ai3[i6]; + } else { + i5 = -1000; + } + for (int l6 = 0; l6 < 10; l6++) { + while (l6 == 0 && i5 > l2) { + method484(ai2[i6++]); + if (i6 == k6 && ai2 != anIntArrayArray1674[11]) { + i6 = 0; + k6 = anIntArray1673[11]; + ai2 = anIntArrayArray1674[11]; + ai3 = anIntArray1676; + } + if (i6 < k6) { + i5 = ai3[i6]; + } else { + i5 = -1000; + } + } + while (l6 == 3 && i5 > k3) { + method484(ai2[i6++]); + if (i6 == k6 && ai2 != anIntArrayArray1674[11]) { + i6 = 0; + k6 = anIntArray1673[11]; + ai2 = anIntArrayArray1674[11]; + ai3 = anIntArray1676; + } + if (i6 < k6) { + i5 = ai3[i6]; + } else { + i5 = -1000; + } + } + while (l6 == 5 && i5 > j4) { + method484(ai2[i6++]); + if (i6 == k6 && ai2 != anIntArrayArray1674[11]) { + i6 = 0; + k6 = anIntArray1673[11]; + ai2 = anIntArrayArray1674[11]; + ai3 = anIntArray1676; + } + if (i6 < k6) { + i5 = ai3[i6]; + } else { + i5 = -1000; + } + } + int i7 = anIntArray1673[l6]; + int ai4[] = anIntArrayArray1674[l6]; + for (int j7 = 0; j7 < i7; j7++) { + method484(ai4[j7]); + } + + } + + while (i5 != -1000) { + method484(ai2[i6++]); + if (i6 == k6 && ai2 != anIntArrayArray1674[11]) { + i6 = 0; + ai2 = anIntArrayArray1674[11]; + k6 = anIntArray1673[11]; + ai3 = anIntArray1676; + } + if (i6 < k6) { + i5 = ai3[i6]; + } else { + i5 = -1000; + } + } + } + + private void method484(int i) { + if (aBooleanArray1664[i]) { + method485(i); + return; + } + int j = anIntArray1631[i]; + int k = anIntArray1632[i]; + int l = anIntArray1633[i]; + Texture.aBoolean1462 = aBooleanArray1663[i]; + if (anIntArray1639 == null) { + Texture.anInt1465 = 0; + } else { + Texture.anInt1465 = anIntArray1639[i]; + } + int i1; + if (anIntArray1637 == null) { + i1 = 0; + } else { + i1 = anIntArray1637[i] & 3; + } + if (i1 == 0) { + Texture.method374(anIntArray1666[j], anIntArray1666[k], anIntArray1666[l], anIntArray1665[j], anIntArray1665[k], anIntArray1665[l], anIntArray1634[i], anIntArray1635[i], anIntArray1636[i]); + return; + } + if (i1 == 1) { + Texture.method376(anIntArray1666[j], anIntArray1666[k], anIntArray1666[l], anIntArray1665[j], anIntArray1665[k], anIntArray1665[l], modelIntArray3[anIntArray1634[i]]); + return; + } + if (i1 == 2) { + int j1 = anIntArray1637[i] >> 2; + int l1 = anIntArray1643[j1]; + int j2 = anIntArray1644[j1]; + int l2 = anIntArray1645[j1]; + Texture.method378(anIntArray1666[j], anIntArray1666[k], anIntArray1666[l], anIntArray1665[j], anIntArray1665[k], anIntArray1665[l], anIntArray1634[i], anIntArray1635[i], anIntArray1636[i], anIntArray1668[l1], anIntArray1668[j2], anIntArray1668[l2], anIntArray1669[l1], anIntArray1669[j2], anIntArray1669[l2], anIntArray1670[l1], anIntArray1670[j2], anIntArray1670[l2], anIntArray1640[i]); + return; + } + if (i1 == 3) { + int k1 = anIntArray1637[i] >> 2; + int i2 = anIntArray1643[k1]; + int k2 = anIntArray1644[k1]; + int i3 = anIntArray1645[k1]; + Texture.method378(anIntArray1666[j], anIntArray1666[k], anIntArray1666[l], anIntArray1665[j], anIntArray1665[k], anIntArray1665[l], anIntArray1634[i], anIntArray1634[i], anIntArray1634[i], anIntArray1668[i2], anIntArray1668[k2], anIntArray1668[i3], anIntArray1669[i2], anIntArray1669[k2], anIntArray1669[i3], anIntArray1670[i2], anIntArray1670[k2], anIntArray1670[i3], anIntArray1640[i]); + } + } + + private void method485(int i) { + int j = Texture.textureInt1; + int k = Texture.textureInt2; + int l = 0; + int i1 = anIntArray1631[i]; + int j1 = anIntArray1632[i]; + int k1 = anIntArray1633[i]; + int l1 = anIntArray1670[i1]; + int i2 = anIntArray1670[j1]; + int j2 = anIntArray1670[k1]; + if (l1 >= 50) { + anIntArray1678[l] = anIntArray1665[i1]; + anIntArray1679[l] = anIntArray1666[i1]; + anIntArray1680[l++] = anIntArray1634[i]; + } else { + int k2 = anIntArray1668[i1]; + int k3 = anIntArray1669[i1]; + int k4 = anIntArray1634[i]; + if (j2 >= 50) { + int k5 = (50 - l1) * modelIntArray4[j2 - l1]; + anIntArray1678[l] = j + (k2 + ((anIntArray1668[k1] - k2) * k5 >> 16) << 9) / 50; + anIntArray1679[l] = k + (k3 + ((anIntArray1669[k1] - k3) * k5 >> 16) << 9) / 50; + anIntArray1680[l++] = k4 + ((anIntArray1636[i] - k4) * k5 >> 16); + } + if (i2 >= 50) { + int l5 = (50 - l1) * modelIntArray4[i2 - l1]; + anIntArray1678[l] = j + (k2 + ((anIntArray1668[j1] - k2) * l5 >> 16) << 9) / 50; + anIntArray1679[l] = k + (k3 + ((anIntArray1669[j1] - k3) * l5 >> 16) << 9) / 50; + anIntArray1680[l++] = k4 + ((anIntArray1635[i] - k4) * l5 >> 16); + } + } + if (i2 >= 50) { + anIntArray1678[l] = anIntArray1665[j1]; + anIntArray1679[l] = anIntArray1666[j1]; + anIntArray1680[l++] = anIntArray1635[i]; + } else { + int l2 = anIntArray1668[j1]; + int l3 = anIntArray1669[j1]; + int l4 = anIntArray1635[i]; + if (l1 >= 50) { + int i6 = (50 - i2) * modelIntArray4[l1 - i2]; + anIntArray1678[l] = j + (l2 + ((anIntArray1668[i1] - l2) * i6 >> 16) << 9) / 50; + anIntArray1679[l] = k + (l3 + ((anIntArray1669[i1] - l3) * i6 >> 16) << 9) / 50; + anIntArray1680[l++] = l4 + ((anIntArray1634[i] - l4) * i6 >> 16); + } + if (j2 >= 50) { + int j6 = (50 - i2) * modelIntArray4[j2 - i2]; + anIntArray1678[l] = j + (l2 + ((anIntArray1668[k1] - l2) * j6 >> 16) << 9) / 50; + anIntArray1679[l] = k + (l3 + ((anIntArray1669[k1] - l3) * j6 >> 16) << 9) / 50; + anIntArray1680[l++] = l4 + ((anIntArray1636[i] - l4) * j6 >> 16); + } + } + if (j2 >= 50) { + anIntArray1678[l] = anIntArray1665[k1]; + anIntArray1679[l] = anIntArray1666[k1]; + anIntArray1680[l++] = anIntArray1636[i]; + } else { + int i3 = anIntArray1668[k1]; + int i4 = anIntArray1669[k1]; + int i5 = anIntArray1636[i]; + if (i2 >= 50) { + int k6 = (50 - j2) * modelIntArray4[i2 - j2]; + anIntArray1678[l] = j + (i3 + ((anIntArray1668[j1] - i3) * k6 >> 16) << 9) / 50; + anIntArray1679[l] = k + (i4 + ((anIntArray1669[j1] - i4) * k6 >> 16) << 9) / 50; + anIntArray1680[l++] = i5 + ((anIntArray1635[i] - i5) * k6 >> 16); + } + if (l1 >= 50) { + int l6 = (50 - j2) * modelIntArray4[l1 - j2]; + anIntArray1678[l] = j + (i3 + ((anIntArray1668[i1] - i3) * l6 >> 16) << 9) / 50; + anIntArray1679[l] = k + (i4 + ((anIntArray1669[i1] - i4) * l6 >> 16) << 9) / 50; + anIntArray1680[l++] = i5 + ((anIntArray1634[i] - i5) * l6 >> 16); + } + } + int j3 = anIntArray1678[0]; + int j4 = anIntArray1678[1]; + int j5 = anIntArray1678[2]; + int i7 = anIntArray1679[0]; + int j7 = anIntArray1679[1]; + int k7 = anIntArray1679[2]; + if ((j3 - j4) * (k7 - j7) - (i7 - j7) * (j5 - j4) > 0) { + Texture.aBoolean1462 = false; + if (l == 3) { + if (j3 < 0 || j4 < 0 || j5 < 0 || j3 > DrawingArea.centerX || j4 > DrawingArea.centerX || j5 > DrawingArea.centerX) { + Texture.aBoolean1462 = true; + } + int l7; + if (anIntArray1637 == null) { + l7 = 0; + } else { + l7 = anIntArray1637[i] & 3; + } + if (l7 == 0) { + Texture.method374(i7, j7, k7, j3, j4, j5, anIntArray1680[0], anIntArray1680[1], anIntArray1680[2]); + } else if (l7 == 1) { + Texture.method376(i7, j7, k7, j3, j4, j5, modelIntArray3[anIntArray1634[i]]); + } else if (l7 == 2) { + int j8 = anIntArray1637[i] >> 2; + int k9 = anIntArray1643[j8]; + int k10 = anIntArray1644[j8]; + int k11 = anIntArray1645[j8]; + Texture.method378(i7, j7, k7, j3, j4, j5, anIntArray1680[0], anIntArray1680[1], anIntArray1680[2], anIntArray1668[k9], anIntArray1668[k10], anIntArray1668[k11], anIntArray1669[k9], anIntArray1669[k10], anIntArray1669[k11], anIntArray1670[k9], anIntArray1670[k10], anIntArray1670[k11], anIntArray1640[i]); + } else if (l7 == 3) { + int k8 = anIntArray1637[i] >> 2; + int l9 = anIntArray1643[k8]; + int l10 = anIntArray1644[k8]; + int l11 = anIntArray1645[k8]; + Texture.method378(i7, j7, k7, j3, j4, j5, anIntArray1634[i], anIntArray1634[i], anIntArray1634[i], anIntArray1668[l9], anIntArray1668[l10], anIntArray1668[l11], anIntArray1669[l9], anIntArray1669[l10], anIntArray1669[l11], anIntArray1670[l9], anIntArray1670[l10], anIntArray1670[l11], anIntArray1640[i]); + } + } + if (l == 4) { + if (j3 < 0 || j4 < 0 || j5 < 0 || j3 > DrawingArea.centerX || j4 > DrawingArea.centerX || j5 > DrawingArea.centerX || anIntArray1678[3] < 0 || anIntArray1678[3] > DrawingArea.centerX) { + Texture.aBoolean1462 = true; + } + int i8; + if (anIntArray1637 == null) { + i8 = 0; + } else { + i8 = anIntArray1637[i] & 3; + } + if (i8 == 0) { + Texture.method374(i7, j7, k7, j3, j4, j5, anIntArray1680[0], anIntArray1680[1], anIntArray1680[2]); + Texture.method374(i7, k7, anIntArray1679[3], j3, j5, anIntArray1678[3], anIntArray1680[0], anIntArray1680[2], anIntArray1680[3]); + return; + } + if (i8 == 1) { + int l8 = modelIntArray3[anIntArray1634[i]]; + Texture.method376(i7, j7, k7, j3, j4, j5, l8); + Texture.method376(i7, k7, anIntArray1679[3], j3, j5, anIntArray1678[3], l8); + return; + } + if (i8 == 2) { + int i9 = anIntArray1637[i] >> 2; + int i10 = anIntArray1643[i9]; + int i11 = anIntArray1644[i9]; + int i12 = anIntArray1645[i9]; + Texture.method378(i7, j7, k7, j3, j4, j5, anIntArray1680[0], anIntArray1680[1], anIntArray1680[2], anIntArray1668[i10], anIntArray1668[i11], anIntArray1668[i12], anIntArray1669[i10], anIntArray1669[i11], anIntArray1669[i12], anIntArray1670[i10], anIntArray1670[i11], anIntArray1670[i12], anIntArray1640[i]); + Texture.method378(i7, k7, anIntArray1679[3], j3, j5, anIntArray1678[3], anIntArray1680[0], anIntArray1680[2], anIntArray1680[3], anIntArray1668[i10], anIntArray1668[i11], anIntArray1668[i12], anIntArray1669[i10], anIntArray1669[i11], anIntArray1669[i12], anIntArray1670[i10], anIntArray1670[i11], anIntArray1670[i12], anIntArray1640[i]); + return; + } + if (i8 == 3) { + int j9 = anIntArray1637[i] >> 2; + int j10 = anIntArray1643[j9]; + int j11 = anIntArray1644[j9]; + int j12 = anIntArray1645[j9]; + Texture.method378(i7, j7, k7, j3, j4, j5, anIntArray1634[i], anIntArray1634[i], anIntArray1634[i], anIntArray1668[j10], anIntArray1668[j11], anIntArray1668[j12], anIntArray1669[j10], anIntArray1669[j11], anIntArray1669[j12], anIntArray1670[j10], anIntArray1670[j11], anIntArray1670[j12], anIntArray1640[i]); + Texture.method378(i7, k7, anIntArray1679[3], j3, j5, anIntArray1678[3], anIntArray1634[i], anIntArray1634[i], anIntArray1634[i], anIntArray1668[j10], anIntArray1668[j11], anIntArray1668[j12], anIntArray1669[j10], anIntArray1669[j11], anIntArray1669[j12], anIntArray1670[j10], anIntArray1670[j11], anIntArray1670[j12], anIntArray1640[i]); + } + } + } + } + + private boolean method486(int i, int j, int k, int l, int i1, int j1, int k1, int l1) { + if (j < k && j < l && j < i1) { + return false; + } + if (j > k && j > l && j > i1) { + return false; + } + return !(i < j1 && i < k1 && i < l1) && (i <= j1 || i <= k1 || i <= l1); + } + + public static final Model aModel_1621 = new Model(); + private static int[] anIntArray1622 = new int[2000]; + private static int[] anIntArray1623 = new int[2000]; + private static int[] anIntArray1624 = new int[2000]; + private static int[] anIntArray1625 = new int[2000]; + public int anInt1626; + public int anIntArray1627[]; + public int anIntArray1628[]; + public int anIntArray1629[]; + public int anInt1630; + public int anIntArray1631[]; + public int anIntArray1632[]; + public int anIntArray1633[]; + private int[] anIntArray1634; + private int[] anIntArray1635; + private int[] anIntArray1636; + public int anIntArray1637[]; + private int[] anIntArray1638; + private int[] anIntArray1639; + public int anIntArray1640[]; + private int anInt1641; + private int anInt1642; + private int[] anIntArray1643; + private int[] anIntArray1644; + private int[] anIntArray1645; + public int anInt1646; + public int anInt1647; + public int anInt1648; + public int anInt1649; + public int anInt1650; + public int anInt1651; + private int anInt1652; + private int anInt1653; + public int anInt1654; + private int[] anIntArray1655; + private int[] anIntArray1656; + public int anIntArrayArray1657[][]; + public int anIntArrayArray1658[][]; + public boolean aBoolean1659; + Class33 aClass33Array1660[]; + private static Class21[] aClass21Array1661; + private static OnDemandFetcherParent aOnDemandFetcherParent_1662; + private static boolean[] aBooleanArray1663 = new boolean[4096]; + private static boolean[] aBooleanArray1664 = new boolean[4096]; + private static int[] anIntArray1665 = new int[4096]; + private static int[] anIntArray1666 = new int[4096]; + private static int[] anIntArray1667 = new int[4096]; + private static int[] anIntArray1668 = new int[4096]; + private static int[] anIntArray1669 = new int[4096]; + private static int[] anIntArray1670 = new int[4096]; + private static int[] anIntArray1671 = new int[1500]; + private static int[][] anIntArrayArray1672 = new int[1500][512]; + private static int[] anIntArray1673 = new int[12]; + private static int[][] anIntArrayArray1674 = new int[12][2000]; + private static int[] anIntArray1675 = new int[2000]; + private static int[] anIntArray1676 = new int[2000]; + private static int[] anIntArray1677 = new int[12]; + private static final int[] anIntArray1678 = new int[10]; + private static final int[] anIntArray1679 = new int[10]; + private static final int[] anIntArray1680 = new int[10]; + private static int anInt1681; + private static int anInt1682; + private static int anInt1683; + public static boolean aBoolean1684; + public static int anInt1685; + public static int anInt1686; + public static int anInt1687; + public static final int[] anIntArray1688 = new int[1000]; + public static int modelIntArray1[]; + public static int modelIntArray2[]; + private static int[] modelIntArray3; + private static int[] modelIntArray4; + + static { + modelIntArray1 = Texture.anIntArray1470; + modelIntArray2 = Texture.anIntArray1471; + modelIntArray3 = Texture.anIntArray1482; + modelIntArray4 = Texture.anIntArray1469; + } +} diff --git a/2006Redone Client/src/MouseDetection.java b/2006Redone Client/src/MouseDetection.java new file mode 100644 index 00000000..432a77de --- /dev/null +++ b/2006Redone Client/src/MouseDetection.java @@ -0,0 +1,38 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class MouseDetection implements Runnable { + + @Override + public void run() { + while (running) { + synchronized (syncObject) { + if (coordsIndex < 500) { + coordsX[coordsIndex] = clientInstance.mouseX; + coordsY[coordsIndex] = clientInstance.mouseY; + coordsIndex++; + } + } + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + } + + public MouseDetection(Game client1) { + syncObject = new Object(); + coordsY = new int[500]; + running = true; + coordsX = new int[500]; + clientInstance = client1; + } + + private Game clientInstance; + public final Object syncObject; + public final int[] coordsY; + public boolean running; + public final int[] coordsX; + public int coordsIndex; +} diff --git a/2006Redone Client/src/NPC.java b/2006Redone Client/src/NPC.java new file mode 100644 index 00000000..fb3bc393 --- /dev/null +++ b/2006Redone Client/src/NPC.java @@ -0,0 +1,67 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class NPC extends Entity { + + private Model method450() { + if (super.anim >= 0 && super.anInt1529 == 0) { + int k = Animation.anims[super.anim].anIntArray353[super.anInt1527]; + int i1 = -1; + if (super.anInt1517 >= 0 && super.anInt1517 != super.anInt1511) { + i1 = Animation.anims[super.anInt1517].anIntArray353[super.anInt1518]; + } + return desc.method164(i1, k, Animation.anims[super.anim].anIntArray357); + } + int l = -1; + if (super.anInt1517 >= 0) { + l = Animation.anims[super.anInt1517].anIntArray353[super.anInt1518]; + } + return desc.method164(-1, l, null); + } + + @Override + public Model getRotatedModel() { + if (desc == null) { + return null; + } + Model model = method450(); + if (model == null) { + return null; + } + super.height = model.modelHeight; + if (super.anInt1520 != -1 && super.anInt1521 != -1) { + SpotAnim spotAnim = SpotAnim.cache[super.anInt1520]; + Model model_1 = spotAnim.getModel(); + if (model_1 != null) { + int j = spotAnim.aAnimation_407.anIntArray353[super.anInt1521]; + Model model_2 = new Model(true, Class36.method532(j), false, model_1); + model_2.method475(0, -super.anInt1524, 0); + model_2.method469(); + model_2.method470(j); + model_2.anIntArrayArray1658 = null; + model_2.anIntArrayArray1657 = null; + if (spotAnim.anInt410 != 128 || spotAnim.anInt411 != 128) { + model_2.method478(spotAnim.anInt410, spotAnim.anInt410, spotAnim.anInt411); + } + model_2.method479(64 + spotAnim.anInt413, 850 + spotAnim.anInt414, -30, -50, -30, true); + Model aModel[] = {model, model_2}; + model = new Model(aModel); + } + } + if (desc.aByte68 == 1) { + model.aBoolean1659 = true; + } + return model; + } + + @Override + public boolean isVisible() { + return desc != null; + } + + NPC() { + } + + public EntityDef desc; +} diff --git a/2006Redone Client/src/Node.java b/2006Redone Client/src/Node.java new file mode 100644 index 00000000..d1626f05 --- /dev/null +++ b/2006Redone Client/src/Node.java @@ -0,0 +1,23 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class Node { + + public final void unlink() { + if (next == null) { + } else { + next.prev = prev; + prev.next = next; + prev = null; + next = null; + } + } + + public Node() { + } + + public long id; + public Node prev; + public Node next; +} diff --git a/2006Redone Client/src/NodeCache.java b/2006Redone Client/src/NodeCache.java new file mode 100644 index 00000000..fecef72f --- /dev/null +++ b/2006Redone Client/src/NodeCache.java @@ -0,0 +1,50 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class NodeCache { + + public NodeCache() { + int i = 1024;// was parameter + size = i; + cache = new Node[i]; + for (int k = 0; k < i; k++) { + Node node = cache[k] = new Node(); + node.prev = node; + node.next = node; + } + + } + + public Node findNodeByID(long l) { + Node node = cache[(int) (l & size - 1)]; + for (Node node_1 = node.prev; node_1 != node; node_1 = node_1.prev) { + if (node_1.id == l) { + return node_1; + } + } + + return null; + } + + public void removeFromCache(Node node, long l) { + try { + if (node.next != null) { + node.unlink(); + } + Node node_1 = cache[(int) (l & size - 1)]; + node.next = node_1.next; + node.prev = node_1; + node.next.prev = node; + node.prev.next = node; + node.id = l; + return; + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("91499, " + node + ", " + l + ", " + (byte) 7 + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + private final int size; + private final Node[] cache; +} diff --git a/2006Redone Client/src/NodeList.java b/2006Redone Client/src/NodeList.java new file mode 100644 index 00000000..6a6b88bf --- /dev/null +++ b/2006Redone Client/src/NodeList.java @@ -0,0 +1,101 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class NodeList { + + public NodeList() { + head = new Node(); + head.prev = head; + head.next = head; + } + + public void insertHead(Node node) { + if (node.next != null) { + node.unlink(); + } + node.next = head.next; + node.prev = head; + node.next.prev = node; + node.prev.next = node; + } + + public void insertTail(Node node) { + if (node.next != null) { + node.unlink(); + } + node.next = head; + node.prev = head.prev; + node.next.prev = node; + node.prev.next = node; + } + + public Node popHead() { + Node node = head.prev; + if (node == head) { + return null; + } else { + node.unlink(); + return node; + } + } + + public Node reverseGetFirst() { + Node node = head.prev; + if (node == head) { + current = null; + return null; + } else { + current = node.prev; + return node; + } + } + + public Node getFirst() { + Node node = head.next; + if (node == head) { + current = null; + return null; + } else { + current = node.next; + return node; + } + } + + public Node reverseGetNext() { + Node node = current; + if (node == head) { + current = null; + return null; + } else { + current = node.prev; + return node; + } + } + + public Node getNext() { + Node node = current; + if (node == head) { + current = null; + return null; + } + current = node.next; + return node; + } + + public void removeAll() { + if (head.prev == head) { + return; + } + do { + Node node = head.prev; + if (node == head) { + return; + } + node.unlink(); + } while (true); + } + + private final Node head; + private Node current; +} diff --git a/2006Redone Client/src/NodeSub.java b/2006Redone Client/src/NodeSub.java new file mode 100644 index 00000000..5c3447c4 --- /dev/null +++ b/2006Redone Client/src/NodeSub.java @@ -0,0 +1,23 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class NodeSub extends Node { + + public final void unlinkSub() { + if (nextNodeSub == null) { + } else { + nextNodeSub.prevNodeSub = prevNodeSub; + prevNodeSub.nextNodeSub = nextNodeSub; + prevNodeSub = null; + nextNodeSub = null; + } + } + + public NodeSub() { + } + + public NodeSub prevNodeSub; + NodeSub nextNodeSub; + public static int anInt1305; +} diff --git a/2006Redone Client/src/NodeSubList.java b/2006Redone Client/src/NodeSubList.java new file mode 100644 index 00000000..d0088549 --- /dev/null +++ b/2006Redone Client/src/NodeSubList.java @@ -0,0 +1,66 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class NodeSubList { + + public NodeSubList() { + head = new NodeSub(); + head.prevNodeSub = head; + head.nextNodeSub = head; + } + + public void insertHead(NodeSub nodeSub) { + if (nodeSub.nextNodeSub != null) { + nodeSub.unlinkSub(); + } + nodeSub.nextNodeSub = head.nextNodeSub; + nodeSub.prevNodeSub = head; + nodeSub.nextNodeSub.prevNodeSub = nodeSub; + nodeSub.prevNodeSub.nextNodeSub = nodeSub; + } + + public NodeSub popTail() { + NodeSub nodeSub = head.prevNodeSub; + if (nodeSub == head) { + return null; + } else { + nodeSub.unlinkSub(); + return nodeSub; + } + } + + public NodeSub reverseGetFirst() { + NodeSub nodeSub = head.prevNodeSub; + if (nodeSub == head) { + current = null; + return null; + } else { + current = nodeSub.prevNodeSub; + return nodeSub; + } + } + + public NodeSub reverseGetNext() { + NodeSub nodeSub = current; + if (nodeSub == head) { + current = null; + return null; + } else { + current = nodeSub.prevNodeSub; + return nodeSub; + } + } + + public int getNodeCount() { + int i = 0; + for (NodeSub nodeSub = head.prevNodeSub; nodeSub != head; nodeSub = nodeSub.prevNodeSub) { + i++; + } + + return i; + } + + private final NodeSub head; + private NodeSub current; +} diff --git a/2006Redone Client/src/Object1.java b/2006Redone Client/src/Object1.java new file mode 100644 index 00000000..09f2c617 --- /dev/null +++ b/2006Redone Client/src/Object1.java @@ -0,0 +1,19 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Object1 { + + public Object1() { + } + + int anInt273; + int anInt274; + int anInt275; + int orientation; + int orientation1; + public Animable aClass30_Sub2_Sub4_278; + public Animable aClass30_Sub2_Sub4_279; + public int uid; + byte aByte281; +} diff --git a/2006Redone Client/src/Object2.java b/2006Redone Client/src/Object2.java new file mode 100644 index 00000000..4a5bbb89 --- /dev/null +++ b/2006Redone Client/src/Object2.java @@ -0,0 +1,18 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Object2 { + + public Object2() { + } + + int anInt499; + int anInt500; + int anInt501; + int anInt502; + int anInt503; + public Animable aClass30_Sub2_Sub4_504; + public int uid; + byte aByte506; +} diff --git a/2006Redone Client/src/Object3.java b/2006Redone Client/src/Object3.java new file mode 100644 index 00000000..e0d1ce91 --- /dev/null +++ b/2006Redone Client/src/Object3.java @@ -0,0 +1,16 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Object3 { + + public Object3() { + } + + int anInt811; + int anInt812; + int anInt813; + public Animable aClass30_Sub2_Sub4_814; + public int uid; + byte aByte816; +} diff --git a/2006Redone Client/src/Object4.java b/2006Redone Client/src/Object4.java new file mode 100644 index 00000000..e1c4fecf --- /dev/null +++ b/2006Redone Client/src/Object4.java @@ -0,0 +1,18 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Object4 { + + Object4() { + } + + int anInt45; + int anInt46; + int anInt47; + Animable aClass30_Sub2_Sub4_48; + Animable aClass30_Sub2_Sub4_49; + Animable aClass30_Sub2_Sub4_50; + int uid; + int anInt52; +} diff --git a/2006Redone Client/src/Object5.java b/2006Redone Client/src/Object5.java new file mode 100644 index 00000000..723c72f1 --- /dev/null +++ b/2006Redone Client/src/Object5.java @@ -0,0 +1,24 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Object5 { + + public Object5() { + } + + int anInt517; + int anInt518; + int anInt519; + int anInt520; + public Animable aClass30_Sub2_Sub4_521; + public int anInt522; + int anInt523; + int anInt524; + int anInt525; + int anInt526; + int anInt527; + int anInt528; + public int uid; + byte aByte530; +} diff --git a/2006Redone Client/src/ObjectDef.java b/2006Redone Client/src/ObjectDef.java new file mode 100644 index 00000000..88b0e59b --- /dev/null +++ b/2006Redone Client/src/ObjectDef.java @@ -0,0 +1,499 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class ObjectDef { + + public static ObjectDef forID(int i) { + for (int j = 0; j < 20; j++) { + if (cache[j].type == i) { + return cache[j]; + } + } + + cacheIndex = (cacheIndex + 1) % 20; + ObjectDef class46 = cache[cacheIndex]; + stream.currentOffset = streamIndices[i]; + class46.type = i; + class46.setDefaults(); + class46.readValues(stream); + if (i == 6) { + class46.actions[1] = "Load"; + class46.actions[2] = "Pick-up"; + } + switch (i) { + + } + return class46; + } + + private void setDefaults() { + anIntArray773 = null; + anIntArray776 = null; + name = null; + description = null; + modifiedModelColors = null; + originalModelColors = null; + anInt744 = 1; + anInt761 = 1; + aBoolean767 = true; + aBoolean757 = true; + hasActions = false; + aBoolean762 = false; + aBoolean769 = false; + aBoolean764 = false; + anInt781 = -1; + anInt775 = 16; + aByte737 = 0; + aByte742 = 0; + actions = null; + anInt746 = -1; + anInt758 = -1; + aBoolean751 = false; + aBoolean779 = true; + anInt748 = 128; + anInt772 = 128; + anInt740 = 128; + anInt768 = 0; + anInt738 = 0; + anInt745 = 0; + anInt783 = 0; + aBoolean736 = false; + aBoolean766 = false; + anInt760 = -1; + anInt774 = -1; + anInt749 = -1; + childrenIDs = null; + } + + public void method574(OnDemandFetcher class42_sub1) { + if (anIntArray773 == null) { + return; + } + for (int element : anIntArray773) { + class42_sub1.method560(element & 0xffff, 0); + } + } + + public static void nullLoader() { + mruNodes1 = null; + mruNodes2 = null; + streamIndices = null; + cache = null; + stream = null; + } + + public static void unpackConfig(StreamLoader streamLoader) { + stream = new Stream(streamLoader.getDataForName("loc.dat")); + Stream stream = new Stream(streamLoader.getDataForName("loc.idx")); + int totalObjects = stream.readUnsignedWord(); + streamIndices = new int[totalObjects]; + int i = 2; + for (int j = 0; j < totalObjects; j++) { + streamIndices[j] = i; + i += stream.readUnsignedWord(); + } + + cache = new ObjectDef[20]; + for (int k = 0; k < 20; k++) { + cache[k] = new ObjectDef(); + } + + } + + public boolean method577(int i) { + if (anIntArray776 == null) { + if (anIntArray773 == null) { + return true; + } + if (i != 10) { + return true; + } + boolean flag1 = true; + for (int element : anIntArray773) { + flag1 &= Model.method463(element & 0xffff); + } + + return flag1; + } + for (int j = 0; j < anIntArray776.length; j++) { + if (anIntArray776[j] == i) { + return Model.method463(anIntArray773[j] & 0xffff); + } + } + + return true; + } + + public Model method578(int i, int j, int k, int l, int i1, int j1, int k1) { + Model model = method581(i, k1, j); + if (model == null) { + return null; + } + if (aBoolean762 || aBoolean769) { + model = new Model(aBoolean762, aBoolean769, model); + } + if (aBoolean762) { + int l1 = (k + l + i1 + j1) / 4; + for (int i2 = 0; i2 < model.anInt1626; i2++) { + int j2 = model.anIntArray1627[i2]; + int k2 = model.anIntArray1629[i2]; + int l2 = k + (l - k) * (j2 + 64) / 128; + int i3 = j1 + (i1 - j1) * (j2 + 64) / 128; + int j3 = l2 + (i3 - l2) * (k2 + 64) / 128; + model.anIntArray1628[i2] += j3 - l1; + } + + model.method467(); + } + return model; + } + + public boolean method579() { + if (anIntArray773 == null) { + return true; + } + boolean flag1 = true; + for (int element : anIntArray773) { + flag1 &= Model.method463(element & 0xffff); + } + return flag1; + } + + public ObjectDef method580() { + int i = -1; + if (anInt774 != -1) { + VarBit varBit = VarBit.cache[anInt774]; + int j = varBit.anInt648; + int k = varBit.anInt649; + int l = varBit.anInt650; + int i1 = Game.anIntArray1232[l - k]; + i = clientInstance.variousSettings[j] >> k & i1; + } else if (anInt749 != -1) { + i = clientInstance.variousSettings[anInt749]; + } + if (i < 0 || i >= childrenIDs.length || childrenIDs[i] == -1) { + return null; + } else { + return forID(childrenIDs[i]); + } + } + + private Model method581(int j, int k, int l) { + Model model = null; + long l1; + if (anIntArray776 == null) { + if (j != 10) { + return null; + } + l1 = (type << 6) + l + ((long) (k + 1) << 32); + Model model_1 = (Model) mruNodes2.insertFromCache(l1); + if (model_1 != null) { + return model_1; + } + if (anIntArray773 == null) { + return null; + } + boolean flag1 = aBoolean751 ^ l > 3; + int k1 = anIntArray773.length; + for (int i2 = 0; i2 < k1; i2++) { + int l2 = anIntArray773[i2]; + if (flag1) { + l2 += 0x10000; + } + model = (Model) mruNodes1.insertFromCache(l2); + if (model == null) { + model = Model.method462(l2 & 0xffff); + if (model == null) { + return null; + } + if (flag1) { + model.method477(); + } + mruNodes1.removeFromCache(model, l2); + } + if (k1 > 1) { + aModelArray741s[i2] = model; + } + } + + if (k1 > 1) { + model = new Model(k1, aModelArray741s); + } + } else { + int i1 = -1; + for (int j1 = 0; j1 < anIntArray776.length; j1++) { + if (anIntArray776[j1] != j) { + continue; + } + i1 = j1; + break; + } + + if (i1 == -1) { + return null; + } + l1 = (type << 6) + (i1 << 3) + l + ((long) (k + 1) << 32); + Model model_2 = (Model) mruNodes2.insertFromCache(l1); + if (model_2 != null) { + return model_2; + } + int j2 = anIntArray773[i1]; + boolean flag3 = aBoolean751 ^ l > 3; + if (flag3) { + j2 += 0x10000; + } + model = (Model) mruNodes1.insertFromCache(j2); + if (model == null) { + model = Model.method462(j2 & 0xffff); + if (model == null) { + return null; + } + if (flag3) { + model.method477(); + } + mruNodes1.removeFromCache(model, j2); + } + } + boolean flag; + flag = anInt748 != 128 || anInt772 != 128 || anInt740 != 128; + boolean flag2; + flag2 = anInt738 != 0 || anInt745 != 0 || anInt783 != 0; + Model model_3 = new Model(modifiedModelColors == null, Class36.method532(k), l == 0 && k == -1 && !flag && !flag2, model); + if (k != -1) { + model_3.method469(); + model_3.method470(k); + model_3.anIntArrayArray1658 = null; + model_3.anIntArrayArray1657 = null; + } + while (l-- > 0) { + model_3.method473(); + } + if (modifiedModelColors != null) { + for (int k2 = 0; k2 < modifiedModelColors.length; k2++) { + model_3.method476(modifiedModelColors[k2], originalModelColors[k2]); + } + + } + if (flag) { + model_3.method478(anInt748, anInt740, anInt772); + } + if (flag2) { + model_3.method475(anInt738, anInt745, anInt783); + } + model_3.method479(64 + aByte737, 768 + aByte742 * 5, -50, -10, -50, !aBoolean769); + if (anInt760 == 1) { + model_3.anInt1654 = model_3.modelHeight; + } + mruNodes2.removeFromCache(model_3, l1); + return model_3; + } + + private void readValues(Stream stream) { + int i = -1; + label0 : do { + int j; + do { + j = stream.readUnsignedByte(); + if (j == 0) { + break label0; + } + if (j == 1) { + int k = stream.readUnsignedByte(); + if (k > 0) { + if (anIntArray773 == null || lowMem) { + anIntArray776 = new int[k]; + anIntArray773 = new int[k]; + for (int k1 = 0; k1 < k; k1++) { + anIntArray773[k1] = stream.readUnsignedWord(); + anIntArray776[k1] = stream.readUnsignedByte(); + } + + } else { + stream.currentOffset += k * 3; + } + } + } else if (j == 2) { + name = stream.readString(); + } else if (j == 3) { + description = stream.readBytes(); + } else if (j == 5) { + int l = stream.readUnsignedByte(); + if (l > 0) { + if (anIntArray773 == null || lowMem) { + anIntArray776 = null; + anIntArray773 = new int[l]; + for (int l1 = 0; l1 < l; l1++) { + anIntArray773[l1] = stream.readUnsignedWord(); + } + + } else { + stream.currentOffset += l * 2; + } + } + } else if (j == 14) { + anInt744 = stream.readUnsignedByte(); + } else if (j == 15) { + anInt761 = stream.readUnsignedByte(); + } else if (j == 17) { + aBoolean767 = false; + } else if (j == 18) { + aBoolean757 = false; + } else if (j == 19) { + i = stream.readUnsignedByte(); + if (i == 1) { + hasActions = true; + } + } else if (j == 21) { + aBoolean762 = true; + } else if (j == 22) { + aBoolean769 = true; + } else if (j == 23) { + aBoolean764 = true; + } else if (j == 24) { + anInt781 = stream.readUnsignedWord(); + if (anInt781 == 65535) { + anInt781 = -1; + } + } else if (j == 28) { + anInt775 = stream.readUnsignedByte(); + } else if (j == 29) { + aByte737 = stream.readSignedByte(); + } else if (j == 39) { + aByte742 = stream.readSignedByte(); + } else if (j >= 30 && j < 39) { + if (actions == null) { + actions = new String[5]; + } + actions[j - 30] = stream.readString(); + if (actions[j - 30].equalsIgnoreCase("hidden")) { + actions[j - 30] = null; + } + } else if (j == 40) { + int i1 = stream.readUnsignedByte(); + modifiedModelColors = new int[i1]; + originalModelColors = new int[i1]; + for (int i2 = 0; i2 < i1; i2++) { + modifiedModelColors[i2] = stream.readUnsignedWord(); + originalModelColors[i2] = stream.readUnsignedWord(); + } + + } else if (j == 60) { + anInt746 = stream.readUnsignedWord(); + } else if (j == 62) { + aBoolean751 = true; + } else if (j == 64) { + aBoolean779 = false; + } else if (j == 65) { + anInt748 = stream.readUnsignedWord(); + } else if (j == 66) { + anInt772 = stream.readUnsignedWord(); + } else if (j == 67) { + anInt740 = stream.readUnsignedWord(); + } else if (j == 68) { + anInt758 = stream.readUnsignedWord(); + } else if (j == 69) { + anInt768 = stream.readUnsignedByte(); + } else if (j == 70) { + anInt738 = stream.readSignedWord(); + } else if (j == 71) { + anInt745 = stream.readSignedWord(); + } else if (j == 72) { + anInt783 = stream.readSignedWord(); + } else if (j == 73) { + aBoolean736 = true; + } else if (j == 74) { + aBoolean766 = true; + } else { + if (j != 75) { + continue; + } + anInt760 = stream.readUnsignedByte(); + } + continue label0; + } while (j != 77); + anInt774 = stream.readUnsignedWord(); + if (anInt774 == 65535) { + anInt774 = -1; + } + anInt749 = stream.readUnsignedWord(); + if (anInt749 == 65535) { + anInt749 = -1; + } + int j1 = stream.readUnsignedByte(); + childrenIDs = new int[j1 + 1]; + for (int j2 = 0; j2 <= j1; j2++) { + childrenIDs[j2] = stream.readUnsignedWord(); + if (childrenIDs[j2] == 65535) { + childrenIDs[j2] = -1; + } + } + + } while (true); + if (i == -1) { + hasActions = anIntArray773 != null && (anIntArray776 == null || anIntArray776[0] == 10); + if (actions != null) { + hasActions = true; + } + } + if (aBoolean766) { + aBoolean767 = false; + aBoolean757 = false; + } + if (anInt760 == -1) { + anInt760 = aBoolean767 ? 1 : 0; + } + } + + private ObjectDef() { + type = -1; + } + + public boolean aBoolean736; + private byte aByte737; + private int anInt738; + public String name; + private int anInt740; + private static final Model[] aModelArray741s = new Model[4]; + private byte aByte742; + public int anInt744; + private int anInt745; + public int anInt746; + private int[] originalModelColors; + private int anInt748; + public int anInt749; + private boolean aBoolean751; + public static boolean lowMem; + private static Stream stream; + public int type; + private static int[] streamIndices; + public boolean aBoolean757; + public int anInt758; + public int childrenIDs[]; + private int anInt760; + public int anInt761; + public boolean aBoolean762; + public boolean aBoolean764; + public static Game clientInstance; + private boolean aBoolean766; + public boolean aBoolean767; + public int anInt768; + private boolean aBoolean769; + private static int cacheIndex; + private int anInt772; + private int[] anIntArray773; + public int anInt774; + public int anInt775; + private int[] anIntArray776; + public byte description[]; + public boolean hasActions; + public boolean aBoolean779; + public static MRUNodes mruNodes2 = new MRUNodes(30); + public int anInt781; + private static ObjectDef[] cache; + private int anInt783; + private int[] modifiedModelColors; + public static MRUNodes mruNodes1 = new MRUNodes(500); + public String actions[]; + +} diff --git a/2006Redone Client/src/ObjectManager.java b/2006Redone Client/src/ObjectManager.java new file mode 100644 index 00000000..84525e2c --- /dev/null +++ b/2006Redone Client/src/ObjectManager.java @@ -0,0 +1,1360 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class ObjectManager { + + public ObjectManager(byte abyte0[][][], int ai[][][]) { + anInt145 = 99; + anInt146 = 104; + anInt147 = 104; + anIntArrayArrayArray129 = ai; + aByteArrayArrayArray149 = abyte0; + aByteArrayArrayArray142 = new byte[4][anInt146][anInt147]; + aByteArrayArrayArray130 = new byte[4][anInt146][anInt147]; + aByteArrayArrayArray136 = new byte[4][anInt146][anInt147]; + aByteArrayArrayArray148 = new byte[4][anInt146][anInt147]; + anIntArrayArrayArray135 = new int[4][anInt146 + 1][anInt147 + 1]; + aByteArrayArrayArray134 = new byte[4][anInt146 + 1][anInt147 + 1]; + anIntArrayArray139 = new int[anInt146 + 1][anInt147 + 1]; + anIntArray124 = new int[anInt147]; + anIntArray125 = new int[anInt147]; + anIntArray126 = new int[anInt147]; + anIntArray127 = new int[anInt147]; + anIntArray128 = new int[anInt147]; + } + + private static int method170(int i, int j) { + int k = i + j * 57; + k = k << 13 ^ k; + int l = k * (k * k * 15731 + 0xc0ae5) + 0x5208dd0d & 0x7fffffff; + return l >> 19 & 0xff; + } + + public final void method171(CollisionMap aclass11[], WorldController worldController) { + for (int j = 0; j < 4; j++) { + for (int k = 0; k < 104; k++) { + for (int i1 = 0; i1 < 104; i1++) { + if ((aByteArrayArrayArray149[j][k][i1] & 1) == 1) { + int k1 = j; + if ((aByteArrayArrayArray149[1][k][i1] & 2) == 2) { + k1--; + } + if (k1 >= 0) { + aclass11[k1].method213(i1, k); + } + } + } + + } + + } + anInt123 += (int) (Math.random() * 5D) - 2; + if (anInt123 < -8) { + anInt123 = -8; + } + if (anInt123 > 8) { + anInt123 = 8; + } + anInt133 += (int) (Math.random() * 5D) - 2; + if (anInt133 < -16) { + anInt133 = -16; + } + if (anInt133 > 16) { + anInt133 = 16; + } + for (int l = 0; l < 4; l++) { + byte abyte0[][] = aByteArrayArrayArray134[l]; + byte byte0 = 96; + char c = '\u0300'; + byte byte1 = -50; + byte byte2 = -10; + byte byte3 = -50; + int j3 = (int) Math.sqrt(byte1 * byte1 + byte2 * byte2 + byte3 * byte3); + int l3 = c * j3 >> 8; + for (int j4 = 1; j4 < anInt147 - 1; j4++) { + for (int j5 = 1; j5 < anInt146 - 1; j5++) { + int k6 = anIntArrayArrayArray129[l][j5 + 1][j4] - anIntArrayArrayArray129[l][j5 - 1][j4]; + int l7 = anIntArrayArrayArray129[l][j5][j4 + 1] - anIntArrayArrayArray129[l][j5][j4 - 1]; + int j9 = (int) Math.sqrt(k6 * k6 + 0x10000 + l7 * l7); + int k12 = (k6 << 8) / j9; + int l13 = 0x10000 / j9; + int j15 = (l7 << 8) / j9; + int j16 = byte0 + (byte1 * k12 + byte2 * l13 + byte3 * j15) / l3; + int j17 = (abyte0[j5 - 1][j4] >> 2) + (abyte0[j5 + 1][j4] >> 3) + (abyte0[j5][j4 - 1] >> 2) + (abyte0[j5][j4 + 1] >> 3) + (abyte0[j5][j4] >> 1); + anIntArrayArray139[j5][j4] = j16 - j17; + } + + } + + for (int k5 = 0; k5 < anInt147; k5++) { + anIntArray124[k5] = 0; + anIntArray125[k5] = 0; + anIntArray126[k5] = 0; + anIntArray127[k5] = 0; + anIntArray128[k5] = 0; + } + + for (int l6 = -5; l6 < anInt146 + 5; l6++) { + for (int i8 = 0; i8 < anInt147; i8++) { + int k9 = l6 + 5; + if (k9 >= 0 && k9 < anInt146) { + int l12 = aByteArrayArrayArray142[l][k9][i8] & 0xff; + if (l12 > 0) { + Flo flo = Flo.cache[l12 - 1]; + anIntArray124[i8] += flo.anInt397; + anIntArray125[i8] += flo.anInt395; + anIntArray126[i8] += flo.anInt396; + anIntArray127[i8] += flo.anInt398; + anIntArray128[i8]++; + } + } + int i13 = l6 - 5; + if (i13 >= 0 && i13 < anInt146) { + int i14 = aByteArrayArrayArray142[l][i13][i8] & 0xff; + if (i14 > 0) { + Flo flo_1 = Flo.cache[i14 - 1]; + anIntArray124[i8] -= flo_1.anInt397; + anIntArray125[i8] -= flo_1.anInt395; + anIntArray126[i8] -= flo_1.anInt396; + anIntArray127[i8] -= flo_1.anInt398; + anIntArray128[i8]--; + } + } + } + + if (l6 >= 1 && l6 < anInt146 - 1) { + int l9 = 0; + int j13 = 0; + int j14 = 0; + int k15 = 0; + int k16 = 0; + for (int k17 = -5; k17 < anInt147 + 5; k17++) { + int j18 = k17 + 5; + if (j18 >= 0 && j18 < anInt147) { + l9 += anIntArray124[j18]; + j13 += anIntArray125[j18]; + j14 += anIntArray126[j18]; + k15 += anIntArray127[j18]; + k16 += anIntArray128[j18]; + } + int k18 = k17 - 5; + if (k18 >= 0 && k18 < anInt147) { + l9 -= anIntArray124[k18]; + j13 -= anIntArray125[k18]; + j14 -= anIntArray126[k18]; + k15 -= anIntArray127[k18]; + k16 -= anIntArray128[k18]; + } + if (k17 >= 1 && k17 < anInt147 - 1 && (!lowMem || (aByteArrayArrayArray149[0][l6][k17] & 2) != 0 || (aByteArrayArrayArray149[l][l6][k17] & 0x10) == 0 && method182(k17, l, l6) == anInt131)) { + if (l < anInt145) { + anInt145 = l; + } + int l18 = aByteArrayArrayArray142[l][l6][k17] & 0xff; + int i19 = aByteArrayArrayArray130[l][l6][k17] & 0xff; + if (l18 > 0 || i19 > 0) { + int j19 = anIntArrayArrayArray129[l][l6][k17]; + int k19 = anIntArrayArrayArray129[l][l6 + 1][k17]; + int l19 = anIntArrayArrayArray129[l][l6 + 1][k17 + 1]; + int i20 = anIntArrayArrayArray129[l][l6][k17 + 1]; + int j20 = anIntArrayArray139[l6][k17]; + int k20 = anIntArrayArray139[l6 + 1][k17]; + int l20 = anIntArrayArray139[l6 + 1][k17 + 1]; + int i21 = anIntArrayArray139[l6][k17 + 1]; + int j21 = -1; + int k21 = -1; + if (l18 > 0) { + int l21 = l9 * 256 / k15; + int j22 = j13 / k16; + int l22 = j14 / k16; + j21 = method177(l21, j22, l22); + l21 = l21 + anInt123 & 0xff; + l22 += anInt133; + if (l22 < 0) { + l22 = 0; + } else if (l22 > 255) { + l22 = 255; + } + k21 = method177(l21, j22, l22); + } + if (l > 0) { + boolean flag = true; + if (l18 == 0 && aByteArrayArrayArray136[l][l6][k17] != 0) { + flag = false; + } + if (i19 > 0 && !Flo.cache[i19 - 1].aBoolean393) { + flag = false; + } + if (flag && j19 == k19 && j19 == l19 && j19 == i20) { + anIntArrayArrayArray135[l][l6][k17] |= 0x924; + } + } + int i22 = 0; + if (j21 != -1) { + i22 = Texture.anIntArray1482[method187(k21, 96)]; + } + if (i19 == 0) { + worldController.method279(l, l6, k17, 0, 0, -1, j19, k19, l19, i20, method187(j21, j20), method187(j21, k20), method187(j21, l20), method187(j21, i21), 0, 0, 0, 0, i22, 0); + } else { + int k22 = aByteArrayArrayArray136[l][l6][k17] + 1; + byte byte4 = aByteArrayArrayArray148[l][l6][k17]; + Flo flo_2 = Flo.cache[i19 - 1]; + int i23 = flo_2.anInt391; + int j23; + int k23; + if (i23 >= 0) { + k23 = Texture.method369(i23); + j23 = -1; + } else if (flo_2.anInt390 == 0xff00ff) { + /*j23 = -2; + i23 = -1; + k23 = Texture.anIntArray1482[method185(flo_2.anInt399, 96)];*/ + k23 = 0; + j23 = -2; + i23 = -1; + } else if(flo_2.anInt390 == 0x333333) { + k23 = Texture.anIntArray1482[method185(flo_2.anInt399, 96)]; + j23 = -2; + i23 = -1; + } else { + j23 = method177(flo_2.anInt394, flo_2.anInt395, flo_2.anInt396); + k23 = Texture.anIntArray1482[method185(flo_2.anInt399, 96)]; + } + worldController.method279(l, l6, k17, k22, byte4, i23, j19, k19, l19, i20, method187(j21, j20), method187(j21, k20), method187(j21, l20), method187(j21, i21), method185(j23, j20), method185(j23, k20), method185(j23, l20), method185(j23, i21), i22, k23); + } + } + } + } + + } + } + + for (int j8 = 1; j8 < anInt147 - 1; j8++) { + for (int i10 = 1; i10 < anInt146 - 1; i10++) { + worldController.method278(l, i10, j8, method182(j8, l, i10)); + } + + } + + } + + worldController.method305(-10, -50, -50); + for (int j1 = 0; j1 < anInt146; j1++) { + for (int l1 = 0; l1 < anInt147; l1++) { + if ((aByteArrayArrayArray149[1][j1][l1] & 2) == 2) { + worldController.method276(l1, j1); + } + } + + } + + int i2 = 1; + int j2 = 2; + int k2 = 4; + for (int l2 = 0; l2 < 4; l2++) { + if (l2 > 0) { + i2 <<= 3; + j2 <<= 3; + k2 <<= 3; + } + for (int i3 = 0; i3 <= l2; i3++) { + for (int k3 = 0; k3 <= anInt147; k3++) { + for (int i4 = 0; i4 <= anInt146; i4++) { + if ((anIntArrayArrayArray135[i3][i4][k3] & i2) != 0) { + int k4 = k3; + int l5 = k3; + int i7 = i3; + int k8 = i3; + for (; k4 > 0 && (anIntArrayArrayArray135[i3][i4][k4 - 1] & i2) != 0; k4--) { + ; + } + for (; l5 < anInt147 && (anIntArrayArrayArray135[i3][i4][l5 + 1] & i2) != 0; l5++) { + ; + } + label0 : for (; i7 > 0; i7--) { + for (int j10 = k4; j10 <= l5; j10++) { + if ((anIntArrayArrayArray135[i7 - 1][i4][j10] & i2) == 0) { + break label0; + } + } + + } + + label1 : for (; k8 < l2; k8++) { + for (int k10 = k4; k10 <= l5; k10++) { + if ((anIntArrayArrayArray135[k8 + 1][i4][k10] & i2) == 0) { + break label1; + } + } + + } + + int l10 = (k8 + 1 - i7) * (l5 - k4 + 1); + if (l10 >= 8) { + char c1 = '\360'; + int k14 = anIntArrayArrayArray129[k8][i4][k4] - c1; + int l15 = anIntArrayArrayArray129[i7][i4][k4]; + WorldController.method277(l2, i4 * 128, l15, i4 * 128, l5 * 128 + 128, k14, k4 * 128, 1); + for (int l16 = i7; l16 <= k8; l16++) { + for (int l17 = k4; l17 <= l5; l17++) { + anIntArrayArrayArray135[l16][i4][l17] &= ~i2; + } + + } + + } + } + if ((anIntArrayArrayArray135[i3][i4][k3] & j2) != 0) { + int l4 = i4; + int i6 = i4; + int j7 = i3; + int l8 = i3; + for (; l4 > 0 && (anIntArrayArrayArray135[i3][l4 - 1][k3] & j2) != 0; l4--) { + ; + } + for (; i6 < anInt146 && (anIntArrayArrayArray135[i3][i6 + 1][k3] & j2) != 0; i6++) { + ; + } + label2 : for (; j7 > 0; j7--) { + for (int i11 = l4; i11 <= i6; i11++) { + if ((anIntArrayArrayArray135[j7 - 1][i11][k3] & j2) == 0) { + break label2; + } + } + + } + + label3 : for (; l8 < l2; l8++) { + for (int j11 = l4; j11 <= i6; j11++) { + if ((anIntArrayArrayArray135[l8 + 1][j11][k3] & j2) == 0) { + break label3; + } + } + + } + + int k11 = (l8 + 1 - j7) * (i6 - l4 + 1); + if (k11 >= 8) { + char c2 = '\360'; + int l14 = anIntArrayArrayArray129[l8][l4][k3] - c2; + int i16 = anIntArrayArrayArray129[j7][l4][k3]; + WorldController.method277(l2, l4 * 128, i16, i6 * 128 + 128, k3 * 128, l14, k3 * 128, 2); + for (int i17 = j7; i17 <= l8; i17++) { + for (int i18 = l4; i18 <= i6; i18++) { + anIntArrayArrayArray135[i17][i18][k3] &= ~j2; + } + + } + + } + } + if ((anIntArrayArrayArray135[i3][i4][k3] & k2) != 0) { + int i5 = i4; + int j6 = i4; + int k7 = k3; + int i9 = k3; + for (; k7 > 0 && (anIntArrayArrayArray135[i3][i4][k7 - 1] & k2) != 0; k7--) { + ; + } + for (; i9 < anInt147 && (anIntArrayArrayArray135[i3][i4][i9 + 1] & k2) != 0; i9++) { + ; + } + label4 : for (; i5 > 0; i5--) { + for (int l11 = k7; l11 <= i9; l11++) { + if ((anIntArrayArrayArray135[i3][i5 - 1][l11] & k2) == 0) { + break label4; + } + } + + } + + label5 : for (; j6 < anInt146; j6++) { + for (int i12 = k7; i12 <= i9; i12++) { + if ((anIntArrayArrayArray135[i3][j6 + 1][i12] & k2) == 0) { + break label5; + } + } + + } + + if ((j6 - i5 + 1) * (i9 - k7 + 1) >= 4) { + int j12 = anIntArrayArrayArray129[i3][i5][k7]; + WorldController.method277(l2, i5 * 128, j12, j6 * 128 + 128, i9 * 128 + 128, j12, k7 * 128, 4); + for (int k13 = i5; k13 <= j6; k13++) { + for (int i15 = k7; i15 <= i9; i15++) { + anIntArrayArrayArray135[i3][k13][i15] &= ~k2; + } + + } + + } + } + } + + } + + } + + } + + } + + private static int method172(int i, int j) { + int k = method176(i + 45365, j + 0x16713, 4) - 128 + (method176(i + 10294, j + 37821, 2) - 128 >> 1) + (method176(i, j, 1) - 128 >> 2); + k = (int) (k * 0.29999999999999999D) + 35; + if (k < 10) { + k = 10; + } else if (k > 60) { + k = 60; + } + return k; + } + + public static void method173(Stream stream, OnDemandFetcher class42_sub1) { + label0 : { + int i = -1; + do { + int j = stream.method422(); + if (j == 0) { + break label0; + } + i += j; + ObjectDef class46 = ObjectDef.forID(i); + class46.method574(class42_sub1); + do { + int k = stream.method422(); + if (k == 0) { + break; + } + stream.readUnsignedByte(); + } while (true); + } while (true); + } + } + + public final void method174(int i, int j, int l, int i1) { + for (int j1 = i; j1 <= i + j; j1++) { + for (int k1 = i1; k1 <= i1 + l; k1++) { + if (k1 >= 0 && k1 < anInt146 && j1 >= 0 && j1 < anInt147) { + aByteArrayArrayArray134[0][k1][j1] = 127; + if (k1 == i1 && k1 > 0) { + anIntArrayArrayArray129[0][k1][j1] = anIntArrayArrayArray129[0][k1 - 1][j1]; + } + if (k1 == i1 + l && k1 < anInt146 - 1) { + anIntArrayArrayArray129[0][k1][j1] = anIntArrayArrayArray129[0][k1 + 1][j1]; + } + if (j1 == i && j1 > 0) { + anIntArrayArrayArray129[0][k1][j1] = anIntArrayArrayArray129[0][k1][j1 - 1]; + } + if (j1 == i + j && j1 < anInt147 - 1) { + anIntArrayArrayArray129[0][k1][j1] = anIntArrayArrayArray129[0][k1][j1 + 1]; + } + } + } + + } + } + + private void method175(int i, WorldController worldController, CollisionMap class11, int j, int k, int l, int i1, int j1) { + if (lowMem && (aByteArrayArrayArray149[0][l][i] & 2) == 0) { + if ((aByteArrayArrayArray149[k][l][i] & 0x10) != 0) { + return; + } + if (method182(i, k, l) != anInt131) { + return; + } + } + if (k < anInt145) { + anInt145 = k; + } + int k1 = anIntArrayArrayArray129[k][l][i]; + int l1 = anIntArrayArrayArray129[k][l + 1][i]; + int i2 = anIntArrayArrayArray129[k][l + 1][i + 1]; + int j2 = anIntArrayArrayArray129[k][l][i + 1]; + int k2 = k1 + l1 + i2 + j2 >> 2; + ObjectDef class46 = ObjectDef.forID(i1); + int l2 = l + (i << 7) + (i1 << 14) + 0x40000000; + if (!class46.hasActions) { + l2 += 0x80000000; + } + byte byte0 = (byte) ((j1 << 6) + j); + if (j == 22) { + if (lowMem && !class46.hasActions && !class46.aBoolean736) { + return; + } + Object obj; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj = class46.method578(22, j1, k1, l1, i2, j2, -1); + } else { + obj = new Animable_Sub5(i1, j1, 22, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method280(k, k2, i, ((Animable) obj), byte0, l2, l); + if (class46.aBoolean767 && class46.hasActions && class11 != null) { + class11.method213(i, l); + } + return; + } + if (j == 10 || j == 11) { + Object obj1; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj1 = class46.method578(10, j1, k1, l1, i2, j2, -1); + } else { + obj1 = new Animable_Sub5(i1, j1, 10, l1, i2, k1, j2, class46.anInt781, true); + } + if (obj1 != null) { + int i5 = 0; + if (j == 11) { + i5 += 256; + } + int j4; + int l4; + if (j1 == 1 || j1 == 3) { + j4 = class46.anInt761; + l4 = class46.anInt744; + } else { + j4 = class46.anInt744; + l4 = class46.anInt761; + } + if (worldController.method284(l2, byte0, k2, l4, ((Animable) obj1), j4, k, i5, i, l) && class46.aBoolean779) { + Model model; + if (obj1 instanceof Model) { + model = (Model) obj1; + } else { + model = class46.method578(10, j1, k1, l1, i2, j2, -1); + } + if (model != null) { + for (int j5 = 0; j5 <= j4; j5++) { + for (int k5 = 0; k5 <= l4; k5++) { + int l5 = model.anInt1650 / 4; + if (l5 > 30) { + l5 = 30; + } + if (l5 > aByteArrayArrayArray134[k][l + j5][i + k5]) { + aByteArrayArrayArray134[k][l + j5][i + k5] = (byte) l5; + } + } + + } + + } + } + } + if (class46.aBoolean767 && class11 != null) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, l, i, j1); + } + return; + } + if (j >= 12) { + Object obj2; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj2 = class46.method578(j, j1, k1, l1, i2, j2, -1); + } else { + obj2 = new Animable_Sub5(i1, j1, j, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method284(l2, byte0, k2, 1, ((Animable) obj2), 1, k, 0, i, l); + if (j >= 12 && j <= 17 && j != 13 && k > 0) { + anIntArrayArrayArray135[k][l][i] |= 0x924; + } + if (class46.aBoolean767 && class11 != null) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, l, i, j1); + } + return; + } + if (j == 0) { + Object obj3; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj3 = class46.method578(0, j1, k1, l1, i2, j2, -1); + } else { + obj3 = new Animable_Sub5(i1, j1, 0, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method282(anIntArray152[j1], ((Animable) obj3), l2, i, byte0, l, null, k2, 0, k); + if (j1 == 0) { + if (class46.aBoolean779) { + aByteArrayArrayArray134[k][l][i] = 50; + aByteArrayArrayArray134[k][l][i + 1] = 50; + } + if (class46.aBoolean764) { + anIntArrayArrayArray135[k][l][i] |= 0x249; + } + } else if (j1 == 1) { + if (class46.aBoolean779) { + aByteArrayArrayArray134[k][l][i + 1] = 50; + aByteArrayArrayArray134[k][l + 1][i + 1] = 50; + } + if (class46.aBoolean764) { + anIntArrayArrayArray135[k][l][i + 1] |= 0x492; + } + } else if (j1 == 2) { + if (class46.aBoolean779) { + aByteArrayArrayArray134[k][l + 1][i] = 50; + aByteArrayArrayArray134[k][l + 1][i + 1] = 50; + } + if (class46.aBoolean764) { + anIntArrayArrayArray135[k][l + 1][i] |= 0x249; + } + } else if (j1 == 3) { + if (class46.aBoolean779) { + aByteArrayArrayArray134[k][l][i] = 50; + aByteArrayArrayArray134[k][l + 1][i] = 50; + } + if (class46.aBoolean764) { + anIntArrayArrayArray135[k][l][i] |= 0x492; + } + } + if (class46.aBoolean767 && class11 != null) { + class11.method211(i, j1, l, j, class46.aBoolean757); + } + if (class46.anInt775 != 16) { + worldController.method290(i, class46.anInt775, l, k); + } + return; + } + if (j == 1) { + Object obj4; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj4 = class46.method578(1, j1, k1, l1, i2, j2, -1); + } else { + obj4 = new Animable_Sub5(i1, j1, 1, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method282(anIntArray140[j1], ((Animable) obj4), l2, i, byte0, l, null, k2, 0, k); + if (class46.aBoolean779) { + if (j1 == 0) { + aByteArrayArrayArray134[k][l][i + 1] = 50; + } else if (j1 == 1) { + aByteArrayArrayArray134[k][l + 1][i + 1] = 50; + } else if (j1 == 2) { + aByteArrayArrayArray134[k][l + 1][i] = 50; + } else if (j1 == 3) { + aByteArrayArrayArray134[k][l][i] = 50; + } + } + if (class46.aBoolean767 && class11 != null) { + class11.method211(i, j1, l, j, class46.aBoolean757); + } + return; + } + if (j == 2) { + int i3 = j1 + 1 & 3; + Object obj11; + Object obj12; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj11 = class46.method578(2, 4 + j1, k1, l1, i2, j2, -1); + obj12 = class46.method578(2, i3, k1, l1, i2, j2, -1); + } else { + obj11 = new Animable_Sub5(i1, 4 + j1, 2, l1, i2, k1, j2, class46.anInt781, true); + obj12 = new Animable_Sub5(i1, i3, 2, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method282(anIntArray152[j1], ((Animable) obj11), l2, i, byte0, l, ((Animable) obj12), k2, anIntArray152[i3], k); + if (class46.aBoolean764) { + if (j1 == 0) { + anIntArrayArrayArray135[k][l][i] |= 0x249; + anIntArrayArrayArray135[k][l][i + 1] |= 0x492; + } else if (j1 == 1) { + anIntArrayArrayArray135[k][l][i + 1] |= 0x492; + anIntArrayArrayArray135[k][l + 1][i] |= 0x249; + } else if (j1 == 2) { + anIntArrayArrayArray135[k][l + 1][i] |= 0x249; + anIntArrayArrayArray135[k][l][i] |= 0x492; + } else if (j1 == 3) { + anIntArrayArrayArray135[k][l][i] |= 0x492; + anIntArrayArrayArray135[k][l][i] |= 0x249; + } + } + if (class46.aBoolean767 && class11 != null) { + class11.method211(i, j1, l, j, class46.aBoolean757); + } + if (class46.anInt775 != 16) { + worldController.method290(i, class46.anInt775, l, k); + } + return; + } + if (j == 3) { + Object obj5; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj5 = class46.method578(3, j1, k1, l1, i2, j2, -1); + } else { + obj5 = new Animable_Sub5(i1, j1, 3, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method282(anIntArray140[j1], ((Animable) obj5), l2, i, byte0, l, null, k2, 0, k); + if (class46.aBoolean779) { + if (j1 == 0) { + aByteArrayArrayArray134[k][l][i + 1] = 50; + } else if (j1 == 1) { + aByteArrayArrayArray134[k][l + 1][i + 1] = 50; + } else if (j1 == 2) { + aByteArrayArrayArray134[k][l + 1][i] = 50; + } else if (j1 == 3) { + aByteArrayArrayArray134[k][l][i] = 50; + } + } + if (class46.aBoolean767 && class11 != null) { + class11.method211(i, j1, l, j, class46.aBoolean757); + } + return; + } + if (j == 9) { + Object obj6; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj6 = class46.method578(j, j1, k1, l1, i2, j2, -1); + } else { + obj6 = new Animable_Sub5(i1, j1, j, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method284(l2, byte0, k2, 1, ((Animable) obj6), 1, k, 0, i, l); + if (class46.aBoolean767 && class11 != null) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, l, i, j1); + } + return; + } + if (class46.aBoolean762) { + if (j1 == 1) { + int j3 = j2; + j2 = i2; + i2 = l1; + l1 = k1; + k1 = j3; + } else if (j1 == 2) { + int k3 = j2; + j2 = l1; + l1 = k3; + k3 = i2; + i2 = k1; + k1 = k3; + } else if (j1 == 3) { + int l3 = j2; + j2 = k1; + k1 = l1; + l1 = i2; + i2 = l3; + } + } + if (j == 4) { + Object obj7; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj7 = class46.method578(4, 0, k1, l1, i2, j2, -1); + } else { + obj7 = new Animable_Sub5(i1, 0, 4, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method283(l2, i, j1 * 512, k, 0, k2, ((Animable) obj7), l, byte0, 0, anIntArray152[j1]); + return; + } + if (j == 5) { + int i4 = 16; + int k4 = worldController.method300(k, l, i); + if (k4 > 0) { + i4 = ObjectDef.forID(k4 >> 14 & 0x7fff).anInt775; + } + Object obj13; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj13 = class46.method578(4, 0, k1, l1, i2, j2, -1); + } else { + obj13 = new Animable_Sub5(i1, 0, 4, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method283(l2, i, j1 * 512, k, anIntArray137[j1] * i4, k2, ((Animable) obj13), l, byte0, anIntArray144[j1] * i4, anIntArray152[j1]); + return; + } + if (j == 6) { + Object obj8; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj8 = class46.method578(4, 0, k1, l1, i2, j2, -1); + } else { + obj8 = new Animable_Sub5(i1, 0, 4, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method283(l2, i, j1, k, 0, k2, ((Animable) obj8), l, byte0, 0, 256); + return; + } + if (j == 7) { + Object obj9; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj9 = class46.method578(4, 0, k1, l1, i2, j2, -1); + } else { + obj9 = new Animable_Sub5(i1, 0, 4, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method283(l2, i, j1, k, 0, k2, ((Animable) obj9), l, byte0, 0, 512); + return; + } + if (j == 8) { + Object obj10; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj10 = class46.method578(4, 0, k1, l1, i2, j2, -1); + } else { + obj10 = new Animable_Sub5(i1, 0, 4, l1, i2, k1, j2, class46.anInt781, true); + } + worldController.method283(l2, i, j1, k, 0, k2, ((Animable) obj10), l, byte0, 0, 768); + } + } + + private static int method176(int i, int j, int k) { + int l = i / k; + int i1 = i & k - 1; + int j1 = j / k; + int k1 = j & k - 1; + int l1 = method186(l, j1); + int i2 = method186(l + 1, j1); + int j2 = method186(l, j1 + 1); + int k2 = method186(l + 1, j1 + 1); + int l2 = method184(l1, i2, i1, k); + int i3 = method184(j2, k2, i1, k); + return method184(l2, i3, k1, k); + } + + private int method177(int i, int j, int k) { + if (k > 179) { + j /= 2; + } + if (k > 192) { + j /= 2; + } + if (k > 217) { + j /= 2; + } + if (k > 243) { + j /= 2; + } + return (i / 4 << 10) + (j / 32 << 7) + k / 2; + } + + public static boolean method178(int i, int j) { + ObjectDef class46 = ObjectDef.forID(i); + if (j == 11) { + j = 10; + } + if (j >= 5 && j <= 8) { + j = 4; + } + return class46.method577(j); + } + + public final void method179(int i, int j, CollisionMap aclass11[], int l, int i1, byte abyte0[], int j1, int k1, int l1) { + for (int i2 = 0; i2 < 8; i2++) { + for (int j2 = 0; j2 < 8; j2++) { + if (l + i2 > 0 && l + i2 < 103 && l1 + j2 > 0 && l1 + j2 < 103) { + aclass11[k1].anIntArrayArray294[l + i2][l1 + j2] &= 0xfeffffff; + } + } + + } + Stream stream = new Stream(abyte0); + for (int l2 = 0; l2 < 4; l2++) { + for (int i3 = 0; i3 < 64; i3++) { + for (int j3 = 0; j3 < 64; j3++) { + if (l2 == i && i3 >= i1 && i3 < i1 + 8 && j3 >= j1 && j3 < j1 + 8) { + method181(l1 + Class4.method156(j3 & 7, j, i3 & 7), 0, stream, l + Class4.method155(j, j3 & 7, i3 & 7), k1, j, 0); + } else { + method181(-1, 0, stream, -1, 0, 0, 0); + } + } + + } + + } + + } + + public final void method180(byte abyte0[], int i, int j, int k, int l, CollisionMap aclass11[]) { + for (int i1 = 0; i1 < 4; i1++) { + for (int j1 = 0; j1 < 64; j1++) { + for (int k1 = 0; k1 < 64; k1++) { + if (j + j1 > 0 && j + j1 < 103 && i + k1 > 0 && i + k1 < 103) { + aclass11[i1].anIntArrayArray294[j + j1][i + k1] &= 0xfeffffff; + } + } + + } + + } + + Stream stream = new Stream(abyte0); + for (int l1 = 0; l1 < 4; l1++) { + for (int i2 = 0; i2 < 64; i2++) { + for (int j2 = 0; j2 < 64; j2++) { + method181(j2 + i, l, stream, i2 + j, l1, 0, k); + } + + } + + } + } + + private void method181(int i, int j, Stream stream, int k, int l, int i1, int k1) { + if (k >= 0 && k < 104 && i >= 0 && i < 104) { + aByteArrayArrayArray149[l][k][i] = 0; + do { + int l1 = stream.readUnsignedByte(); + if (l1 == 0) { + if (l == 0) { + anIntArrayArrayArray129[0][k][i] = -method172(0xe3b7b + k + k1, 0x87cce + i + j) * 8; + return; + } else { + anIntArrayArrayArray129[l][k][i] = anIntArrayArrayArray129[l - 1][k][i] - 240; + return; + } + } + if (l1 == 1) { + int j2 = stream.readUnsignedByte(); + if (j2 == 1) { + j2 = 0; + } + if (l == 0) { + anIntArrayArrayArray129[0][k][i] = -j2 * 8; + return; + } else { + anIntArrayArrayArray129[l][k][i] = anIntArrayArrayArray129[l - 1][k][i] - j2 * 8; + return; + } + } + if (l1 <= 49) { + aByteArrayArrayArray130[l][k][i] = stream.readSignedByte(); + aByteArrayArrayArray136[l][k][i] = (byte) ((l1 - 2) / 4); + aByteArrayArrayArray148[l][k][i] = (byte) (l1 - 2 + i1 & 3); + } else if (l1 <= 81) { + aByteArrayArrayArray149[l][k][i] = (byte) (l1 - 49); + } else { + aByteArrayArrayArray142[l][k][i] = (byte) (l1 - 81); + } + } while (true); + } + do { + int i2 = stream.readUnsignedByte(); + if (i2 == 0) { + break; + } + if (i2 == 1) { + stream.readUnsignedByte(); + return; + } + if (i2 <= 49) { + stream.readUnsignedByte(); + } + } while (true); + } + + private int method182(int i, int j, int k) { + if ((aByteArrayArrayArray149[j][k][i] & 8) != 0) { + return 0; + } + if (j > 0 && (aByteArrayArrayArray149[1][k][i] & 2) != 0) { + return j - 1; + } else { + return j; + } + } + + public final void method183(CollisionMap aclass11[], WorldController worldController, int i, int j, int k, int l, byte abyte0[], int i1, int j1, int k1) { + label0 : { + Stream stream = new Stream(abyte0); + int l1 = -1; + do { + int i2 = stream.method422(); + if (i2 == 0) { + break label0; + } + l1 += i2; + int j2 = 0; + do { + int k2 = stream.method422(); + if (k2 == 0) { + break; + } + j2 += k2 - 1; + int l2 = j2 & 0x3f; + int i3 = j2 >> 6 & 0x3f; + int j3 = j2 >> 12; + int k3 = stream.readUnsignedByte(); + int l3 = k3 >> 2; + int i4 = k3 & 3; + if (j3 == i && i3 >= i1 && i3 < i1 + 8 && l2 >= k && l2 < k + 8) { + ObjectDef class46 = ObjectDef.forID(l1); + int j4 = j + Class4.method157(j1, class46.anInt761, i3 & 7, l2 & 7, class46.anInt744); + int k4 = k1 + Class4.method158(l2 & 7, class46.anInt761, j1, class46.anInt744, i3 & 7); + if (j4 > 0 && k4 > 0 && j4 < 103 && k4 < 103) { + int l4 = j3; + if ((aByteArrayArrayArray149[1][j4][k4] & 2) == 2) { + l4--; + } + CollisionMap class11 = null; + if (l4 >= 0) { + class11 = aclass11[l4]; + } + method175(k4, worldController, class11, l3, l, j4, l1, i4 + j1 & 3); + } + } + } while (true); + } while (true); + } + } + + private static int method184(int i, int j, int k, int l) { + int i1 = 0x10000 - Texture.anIntArray1471[k * 1024 / l] >> 1; + return (i * (0x10000 - i1) >> 16) + (j * i1 >> 16); + } + + private int method185(int i, int j) { + if (i == -2) { + return 0xbc614e; + } + if (i == -1) { + if (j < 0) { + j = 0; + } else if (j > 127) { + j = 127; + } + j = 127 - j; + return j; + } + j = j * (i & 0x7f) / 128; + if (j < 2) { + j = 2; + } else if (j > 126) { + j = 126; + } + return (i & 0xff80) + j; + } + + private static int method186(int i, int j) { + int k = method170(i - 1, j - 1) + method170(i + 1, j - 1) + method170(i - 1, j + 1) + method170(i + 1, j + 1); + int l = method170(i - 1, j) + method170(i + 1, j) + method170(i, j - 1) + method170(i, j + 1); + int i1 = method170(i, j); + return k / 16 + l / 8 + i1 / 4; + } + + private static int method187(int i, int j) { + if (i == -1) { + return 0xbc614e; + } + j = j * (i & 0x7f) / 128; + if (j < 2) { + j = 2; + } else if (j > 126) { + j = 126; + } + return (i & 0xff80) + j; + } + + public static void method188(WorldController worldController, int i, int j, int k, int l, CollisionMap class11, int ai[][][], int i1, int j1, int k1) { + int l1 = ai[l][i1][j]; + int i2 = ai[l][i1 + 1][j]; + int j2 = ai[l][i1 + 1][j + 1]; + int k2 = ai[l][i1][j + 1]; + int l2 = l1 + i2 + j2 + k2 >> 2; + ObjectDef class46 = ObjectDef.forID(j1); + int i3 = i1 + (j << 7) + (j1 << 14) + 0x40000000; + if (!class46.hasActions) { + i3 += 0x80000000; + } + byte byte1 = (byte) ((i << 6) + k); + if (k == 22) { + Object obj; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj = class46.method578(22, i, l1, i2, j2, k2, -1); + } else { + obj = new Animable_Sub5(j1, i, 22, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method280(k1, l2, j, ((Animable) obj), byte1, i3, i1); + if (class46.aBoolean767 && class46.hasActions) { + class11.method213(j, i1); + } + return; + } + if (k == 10 || k == 11) { + Object obj1; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj1 = class46.method578(10, i, l1, i2, j2, k2, -1); + } else { + obj1 = new Animable_Sub5(j1, i, 10, i2, j2, l1, k2, class46.anInt781, true); + } + if (obj1 != null) { + int j5 = 0; + if (k == 11) { + j5 += 256; + } + int k4; + int i5; + if (i == 1 || i == 3) { + k4 = class46.anInt761; + i5 = class46.anInt744; + } else { + k4 = class46.anInt744; + i5 = class46.anInt761; + } + worldController.method284(i3, byte1, l2, i5, ((Animable) obj1), k4, k1, j5, j, i1); + } + if (class46.aBoolean767) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, i1, j, i); + } + return; + } + if (k >= 12) { + Object obj2; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj2 = class46.method578(k, i, l1, i2, j2, k2, -1); + } else { + obj2 = new Animable_Sub5(j1, i, k, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method284(i3, byte1, l2, 1, ((Animable) obj2), 1, k1, 0, j, i1); + if (class46.aBoolean767) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, i1, j, i); + } + return; + } + if (k == 0) { + Object obj3; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj3 = class46.method578(0, i, l1, i2, j2, k2, -1); + } else { + obj3 = new Animable_Sub5(j1, i, 0, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method282(anIntArray152[i], ((Animable) obj3), i3, j, byte1, i1, null, l2, 0, k1); + if (class46.aBoolean767) { + class11.method211(j, i, i1, k, class46.aBoolean757); + } + return; + } + if (k == 1) { + Object obj4; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj4 = class46.method578(1, i, l1, i2, j2, k2, -1); + } else { + obj4 = new Animable_Sub5(j1, i, 1, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method282(anIntArray140[i], ((Animable) obj4), i3, j, byte1, i1, null, l2, 0, k1); + if (class46.aBoolean767) { + class11.method211(j, i, i1, k, class46.aBoolean757); + } + return; + } + if (k == 2) { + int j3 = i + 1 & 3; + Object obj11; + Object obj12; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj11 = class46.method578(2, 4 + i, l1, i2, j2, k2, -1); + obj12 = class46.method578(2, j3, l1, i2, j2, k2, -1); + } else { + obj11 = new Animable_Sub5(j1, 4 + i, 2, i2, j2, l1, k2, class46.anInt781, true); + obj12 = new Animable_Sub5(j1, j3, 2, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method282(anIntArray152[i], ((Animable) obj11), i3, j, byte1, i1, ((Animable) obj12), l2, anIntArray152[j3], k1); + if (class46.aBoolean767) { + class11.method211(j, i, i1, k, class46.aBoolean757); + } + return; + } + if (k == 3) { + Object obj5; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj5 = class46.method578(3, i, l1, i2, j2, k2, -1); + } else { + obj5 = new Animable_Sub5(j1, i, 3, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method282(anIntArray140[i], ((Animable) obj5), i3, j, byte1, i1, null, l2, 0, k1); + if (class46.aBoolean767) { + class11.method211(j, i, i1, k, class46.aBoolean757); + } + return; + } + if (k == 9) { + Object obj6; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj6 = class46.method578(k, i, l1, i2, j2, k2, -1); + } else { + obj6 = new Animable_Sub5(j1, i, k, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method284(i3, byte1, l2, 1, ((Animable) obj6), 1, k1, 0, j, i1); + if (class46.aBoolean767) { + class11.method212(class46.aBoolean757, class46.anInt744, class46.anInt761, i1, j, i); + } + return; + } + if (class46.aBoolean762) { + if (i == 1) { + int k3 = k2; + k2 = j2; + j2 = i2; + i2 = l1; + l1 = k3; + } else if (i == 2) { + int l3 = k2; + k2 = i2; + i2 = l3; + l3 = j2; + j2 = l1; + l1 = l3; + } else if (i == 3) { + int i4 = k2; + k2 = l1; + l1 = i2; + i2 = j2; + j2 = i4; + } + } + if (k == 4) { + Object obj7; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj7 = class46.method578(4, 0, l1, i2, j2, k2, -1); + } else { + obj7 = new Animable_Sub5(j1, 0, 4, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method283(i3, j, i * 512, k1, 0, l2, ((Animable) obj7), i1, byte1, 0, anIntArray152[i]); + return; + } + if (k == 5) { + int j4 = 16; + int l4 = worldController.method300(k1, i1, j); + if (l4 > 0) { + j4 = ObjectDef.forID(l4 >> 14 & 0x7fff).anInt775; + } + Object obj13; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj13 = class46.method578(4, 0, l1, i2, j2, k2, -1); + } else { + obj13 = new Animable_Sub5(j1, 0, 4, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method283(i3, j, i * 512, k1, anIntArray137[i] * j4, l2, ((Animable) obj13), i1, byte1, anIntArray144[i] * j4, anIntArray152[i]); + return; + } + if (k == 6) { + Object obj8; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj8 = class46.method578(4, 0, l1, i2, j2, k2, -1); + } else { + obj8 = new Animable_Sub5(j1, 0, 4, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method283(i3, j, i, k1, 0, l2, ((Animable) obj8), i1, byte1, 0, 256); + return; + } + if (k == 7) { + Object obj9; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj9 = class46.method578(4, 0, l1, i2, j2, k2, -1); + } else { + obj9 = new Animable_Sub5(j1, 0, 4, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method283(i3, j, i, k1, 0, l2, ((Animable) obj9), i1, byte1, 0, 512); + return; + } + if (k == 8) { + Object obj10; + if (class46.anInt781 == -1 && class46.childrenIDs == null) { + obj10 = class46.method578(4, 0, l1, i2, j2, k2, -1); + } else { + obj10 = new Animable_Sub5(j1, 0, 4, i2, j2, l1, k2, class46.anInt781, true); + } + worldController.method283(i3, j, i, k1, 0, l2, ((Animable) obj10), i1, byte1, 0, 768); + } + } + + public static boolean method189(int i, byte[] is, int i_250_) // xxx bad + // method, + // decompiled + // with JODE + { + boolean bool = true; + Stream stream = new Stream(is); + int i_252_ = -1; + for (;;) { + int i_253_ = stream.method422(); + if (i_253_ == 0) { + break; + } + i_252_ += i_253_; + int i_254_ = 0; + boolean bool_255_ = false; + for (;;) { + if (bool_255_) { + int i_256_ = stream.method422(); + if (i_256_ == 0) { + break; + } + stream.readUnsignedByte(); + } else { + int i_257_ = stream.method422(); + if (i_257_ == 0) { + break; + } + i_254_ += i_257_ - 1; + int i_258_ = i_254_ & 0x3f; + int i_259_ = i_254_ >> 6 & 0x3f; + int i_260_ = stream.readUnsignedByte() >> 2; + int i_261_ = i_259_ + i; + int i_262_ = i_258_ + i_250_; + if (i_261_ > 0 && i_262_ > 0 && i_261_ < 103 && i_262_ < 103) { + ObjectDef class46 = ObjectDef.forID(i_252_); + if (i_260_ != 22 || !lowMem || class46.hasActions || class46.aBoolean736) { + bool &= class46.method579(); + bool_255_ = true; + } + } + } + } + } + return bool; + } + + public final void method190(int i, CollisionMap aclass11[], int j, WorldController worldController, byte abyte0[]) { + label0 : { + Stream stream = new Stream(abyte0); + int l = -1; + do { + int i1 = stream.method422(); + if (i1 == 0) { + break label0; + } + l += i1; + int j1 = 0; + do { + int k1 = stream.method422(); + if (k1 == 0) { + break; + } + j1 += k1 - 1; + int l1 = j1 & 0x3f; + int i2 = j1 >> 6 & 0x3f; + int j2 = j1 >> 12; + int k2 = stream.readUnsignedByte(); + int l2 = k2 >> 2; + int i3 = k2 & 3; + int j3 = i2 + i; + int k3 = l1 + j; + if (j3 > 0 && k3 > 0 && j3 < 103 && k3 < 103) { + int l3 = j2; + if ((aByteArrayArrayArray149[1][j3][k3] & 2) == 2) { + l3--; + } + CollisionMap class11 = null; + if (l3 >= 0) { + class11 = aclass11[l3]; + } + method175(k3, worldController, class11, l2, j2, j3, l, i3); + } + } while (true); + } while (true); + } + } + + private static int anInt123 = (int) (Math.random() * 17D) - 8; + private final int[] anIntArray124; + private final int[] anIntArray125; + private final int[] anIntArray126; + private final int[] anIntArray127; + private final int[] anIntArray128; + private final int[][][] anIntArrayArrayArray129; + private final byte[][][] aByteArrayArrayArray130; + static int anInt131; + private static int anInt133 = (int) (Math.random() * 33D) - 16; + private final byte[][][] aByteArrayArrayArray134; + private final int[][][] anIntArrayArrayArray135; + private final byte[][][] aByteArrayArrayArray136; + private static final int anIntArray137[] = {1, 0, -1, 0}; + private final int[][] anIntArrayArray139; + private static final int anIntArray140[] = {16, 32, 64, 128}; + private final byte[][][] aByteArrayArrayArray142; + private static final int anIntArray144[] = {0, -1, 0, 1}; + static int anInt145 = 99; + private final int anInt146; + private final int anInt147; + private final byte[][][] aByteArrayArrayArray148; + private final byte[][][] aByteArrayArrayArray149; + static boolean lowMem = true; + private static final int anIntArray152[] = {1, 2, 4, 8}; + +} diff --git a/2006Redone Client/src/OnDemandData.java b/2006Redone Client/src/OnDemandData.java new file mode 100644 index 00000000..56ca4d21 --- /dev/null +++ b/2006Redone Client/src/OnDemandData.java @@ -0,0 +1,16 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class OnDemandData extends NodeSub { + + public OnDemandData() { + incomplete = true; + } + + int dataType; + byte buffer[]; + int ID; + boolean incomplete; + int loopCycle; +} diff --git a/2006Redone Client/src/OnDemandFetcher.java b/2006Redone Client/src/OnDemandFetcher.java new file mode 100644 index 00000000..5a5c95d8 --- /dev/null +++ b/2006Redone Client/src/OnDemandFetcher.java @@ -0,0 +1,682 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.zip.CRC32; +import java.util.zip.GZIPInputStream; + +public final class OnDemandFetcher extends OnDemandFetcherParent implements Runnable { + + /* private boolean crcMatches(int i, int j, byte abyte0[]) + { + //if(abyte0 == null || abyte0.length < 2) + //return false; + int k = abyte0.length - 2; + int l = ((abyte0[k] & 0xff) << 8) + (abyte0[k + 1] & 0xff); + crc32.reset(); + crc32.update(abyte0, 0, k); + int i1 = (int) crc32.getValue(); + //return l == i && i1 == j; + return true; + + }*/ + + // XXX: Fixed and refactored the crcMatches method. - Ryley + private boolean crcMatches(int type, int id, byte[] data) { + if (data == null || data.length < 2) { + return false; + } + int length = data.length - 2; + int hash = ((data[length] & 0xFF) << 8) + (data[length + 1] & 0xFF); + crc32.reset(); + crc32.update(data, 0, length); + int crc = (int) crc32.getValue(); + return hash == type && crc == id; + } + + private void readData() { + try { + int available = inputStream.available(); + if (expectedSize == 0 && available >= 6) { + waiting = true; + for (int k = 0; k < 6; k += inputStream.read(ioBuffer, k, 6 - k)) { + ; + } + int l = ioBuffer[0] & 0xff; + int j1 = ((ioBuffer[1] & 0xff) << 8) + (ioBuffer[2] & 0xff); + int l1 = ((ioBuffer[3] & 0xff) << 8) + (ioBuffer[4] & 0xff); + int i2 = ioBuffer[5] & 0xff; + current = null; + for (OnDemandData onDemandData = (OnDemandData) requested.reverseGetFirst(); onDemandData != null; onDemandData = (OnDemandData) requested.reverseGetNext()) { + if (onDemandData.dataType == l && onDemandData.ID == j1) { + current = onDemandData; + } + if (current != null) { + onDemandData.loopCycle = 0; + } + } + + if (current != null) { + loopCycle = 0; + if (l1 == 0) { + Signlink.reporterror("Rej: " + l + "," + j1); + current.buffer = null; + if (current.incomplete) { + synchronized (aClass19_1358) { + aClass19_1358.insertHead(current); + } + } else { + current.unlink(); + } + current = null; + } else { + if (current.buffer == null && i2 == 0) { + current.buffer = new byte[l1]; + } + if (current.buffer == null && i2 != 0) { + throw new IOException("missing start of file"); + } + } + } + completedSize = i2 * 500; + expectedSize = 500; + if (expectedSize > l1 - i2 * 500) { + expectedSize = l1 - i2 * 500; + } + } + if (expectedSize > 0 && available >= expectedSize) { + waiting = true; + byte abyte0[] = ioBuffer; + int i1 = 0; + if (current != null) { + abyte0 = current.buffer; + i1 = completedSize; + } + for (int k1 = 0; k1 < expectedSize; k1 += inputStream.read(abyte0, k1 + i1, expectedSize - k1)) { + ; + } + if (expectedSize + completedSize >= abyte0.length && current != null) { + if (clientInstance.decompressors[0] != null) { + clientInstance.decompressors[current.dataType + 1].method234(abyte0.length, abyte0, current.ID); + } + if (!current.incomplete && current.dataType == 3) { + current.incomplete = true; + current.dataType = 93; + } + if (current.incomplete) { + synchronized (aClass19_1358) { + aClass19_1358.insertHead(current); + } + } else { + current.unlink(); + } + } + expectedSize = 0; + } + } catch (IOException ioexception) { + try { + socket.close(); + } catch (Exception _ex) { + } + socket = null; + inputStream = null; + outputStream = null; + expectedSize = 0; + } + } + + public void start(StreamLoader streamLoader, Game client1) { + String as[] = {"model_version", "anim_version", "midi_version", "map_version"}; + for (int i = 0; i < 4; i++) { + byte abyte0[] = streamLoader.getDataForName(as[i]); + int j = abyte0.length / 2; + Stream stream = new Stream(abyte0); + versions[i] = new int[j]; + fileStatus[i] = new byte[j]; + for (int l = 0; l < j; l++) { + versions[i][l] = stream.readUnsignedWord(); + } + + } + + String as1[] = {"model_crc", "anim_crc", "midi_crc", "map_crc"}; + for (int k = 0; k < 4; k++) { + byte abyte1[] = streamLoader.getDataForName(as1[k]); + int i1 = abyte1.length / 4; + Stream stream_1 = new Stream(abyte1); + crcs[k] = new int[i1]; + for (int l1 = 0; l1 < i1; l1++) { + crcs[k][l1] = stream_1.readDWord(); + } + + } + + byte abyte2[] = streamLoader.getDataForName("model_index"); + int j1 = versions[0].length; + modelIndices = new byte[j1]; + for (int k1 = 0; k1 < j1; k1++) { + if (k1 < abyte2.length) { + modelIndices[k1] = abyte2[k1]; + } else { + modelIndices[k1] = 0; + } + } + + abyte2 = streamLoader.getDataForName("map_index"); + Stream stream2 = new Stream(abyte2); + j1 = abyte2.length / 7; + mapIndices1 = new int[j1]; + mapIndices2 = new int[j1]; + mapIndices3 = new int[j1]; + mapIndices4 = new int[j1]; + for (int i2 = 0; i2 < j1; i2++) { + mapIndices1[i2] = stream2.readUnsignedWord(); + mapIndices2[i2] = stream2.readUnsignedWord(); + mapIndices3[i2] = stream2.readUnsignedWord(); + mapIndices4[i2] = stream2.readUnsignedByte(); + } + + abyte2 = streamLoader.getDataForName("anim_index"); + stream2 = new Stream(abyte2); + j1 = abyte2.length / 2; + anIntArray1360 = new int[j1]; + for (int j2 = 0; j2 < j1; j2++) { + anIntArray1360[j2] = stream2.readUnsignedWord(); + } + + abyte2 = streamLoader.getDataForName("midi_index"); + stream2 = new Stream(abyte2); + j1 = abyte2.length; + anIntArray1348 = new int[j1]; + for (int k2 = 0; k2 < j1; k2++) { + anIntArray1348[k2] = stream2.readUnsignedByte(); + } + + clientInstance = client1; + running = true; + clientInstance.startRunnable(this, 2); + } + + public int getNodeCount() { + synchronized (nodeSubList) { + return nodeSubList.getNodeCount(); + } + } + + public void disable() { + running = false; + } + + public void method554(boolean flag) { + int j = mapIndices1.length; + for (int k = 0; k < j; k++) { + if (flag || mapIndices4[k] != 0) { + method563((byte) 2, 3, mapIndices3[k]); + method563((byte) 2, 3, mapIndices2[k]); + } + } + + } + + public int getVersionCount(int j) { + return versions[j].length; + } + + private void closeRequest(OnDemandData onDemandData) { + try { + if (socket == null) { + long l = System.currentTimeMillis(); + if (l - openSocketTime < 4000L) { + return; + } + openSocketTime = l; + socket = clientInstance.openSocket(43596 + Game.portOff); + inputStream = socket.getInputStream(); + outputStream = socket.getOutputStream(); + outputStream.write(15); + for (int j = 0; j < 8; j++) { + inputStream.read(); + } + + loopCycle = 0; + } + ioBuffer[0] = (byte) onDemandData.dataType; + ioBuffer[1] = (byte) (onDemandData.ID >> 8); + ioBuffer[2] = (byte) onDemandData.ID; + if (onDemandData.incomplete) { + ioBuffer[3] = 2; + } else if (!clientInstance.loggedIn) { + ioBuffer[3] = 1; + } else { + ioBuffer[3] = 0; + } + outputStream.write(ioBuffer, 0, 4); + writeLoopCycle = 0; + anInt1349 = -10000; + return; + } catch (IOException ioexception) { + } + try { + socket.close(); + } catch (Exception _ex) { + } + socket = null; + inputStream = null; + outputStream = null; + expectedSize = 0; + anInt1349++; + } + + public int getAnimCount() { + return anIntArray1360.length; + } + + public void method558(int i, int j) { + if (i < 0 || i > versions.length || j < 0 || j > versions[i].length) { + return; + } + if (versions[i][j] == 0) { + return; + } + synchronized (nodeSubList) { + for (OnDemandData onDemandData = (OnDemandData) nodeSubList.reverseGetFirst(); onDemandData != null; onDemandData = (OnDemandData) nodeSubList.reverseGetNext()) { + if (onDemandData.dataType == i && onDemandData.ID == j) { + return; + } + } + + OnDemandData onDemandData_1 = new OnDemandData(); + onDemandData_1.dataType = i; + onDemandData_1.ID = j; + onDemandData_1.incomplete = true; + synchronized (aClass19_1370) { + aClass19_1370.insertHead(onDemandData_1); + } + nodeSubList.insertHead(onDemandData_1); + } + } + + public int getModelIndex(int i) { + return modelIndices[i] & 0xff; + } + + @Override + public void run() { + try { + while (running) { + onDemandCycle++; + int i = 20; + if (anInt1332 == 0 && clientInstance.decompressors[0] != null) { + i = 50; + } + try { + Thread.sleep(i); + } catch (Exception _ex) { + } + waiting = true; + for (int j = 0; j < 100; j++) { + if (!waiting) { + break; + } + waiting = false; + checkReceived(); + handleFailed(); + if (uncompletedCount == 0 && j >= 5) { + break; + } + method568(); + if (inputStream != null) { + readData(); + } + } + + boolean flag = false; + for (OnDemandData onDemandData = (OnDemandData) requested.reverseGetFirst(); onDemandData != null; onDemandData = (OnDemandData) requested.reverseGetNext()) { + if (onDemandData.incomplete) { + flag = true; + onDemandData.loopCycle++; + if (onDemandData.loopCycle > 50) { + onDemandData.loopCycle = 0; + closeRequest(onDemandData); + } + } + } + + if (!flag) { + for (OnDemandData onDemandData_1 = (OnDemandData) requested.reverseGetFirst(); onDemandData_1 != null; onDemandData_1 = (OnDemandData) requested.reverseGetNext()) { + flag = true; + onDemandData_1.loopCycle++; + if (onDemandData_1.loopCycle > 50) { + onDemandData_1.loopCycle = 0; + closeRequest(onDemandData_1); + } + } + + } + if (flag) { + loopCycle++; + if (loopCycle > 750) { + try { + socket.close(); + } catch (Exception _ex) { + } + socket = null; + inputStream = null; + outputStream = null; + expectedSize = 0; + } + } else { + loopCycle = 0; + statusString = ""; + } + if (clientInstance.loggedIn && socket != null && outputStream != null && (anInt1332 > 0 || clientInstance.decompressors[0] == null)) { + writeLoopCycle++; + if (writeLoopCycle > 500) { + writeLoopCycle = 0; + ioBuffer[0] = 0; + ioBuffer[1] = 0; + ioBuffer[2] = 0; + ioBuffer[3] = 10; + try { + outputStream.write(ioBuffer, 0, 4); + } catch (IOException _ex) { + loopCycle = 5000; + } + } + } + } + } catch (Exception exception) { + Signlink.reporterror("od_ex " + exception.getMessage()); + } + } + + public void method560(int i, int j) { + if (clientInstance.decompressors[0] == null) { + return; + } + if (versions[j][i] == 0) { + return; + } + if (fileStatus[j][i] == 0) { + return; + } + if (anInt1332 == 0) { + return; + } + OnDemandData onDemandData = new OnDemandData(); + onDemandData.dataType = j; + onDemandData.ID = i; + onDemandData.incomplete = false; + synchronized (aClass19_1344) { + aClass19_1344.insertHead(onDemandData); + } + } + + public OnDemandData getNextNode() { + OnDemandData onDemandData; + synchronized (aClass19_1358) { + onDemandData = (OnDemandData) aClass19_1358.popHead(); + } + if (onDemandData == null) { + return null; + } + synchronized (nodeSubList) { + onDemandData.unlinkSub(); + } + if (onDemandData.buffer == null) { + return onDemandData; + } + int i = 0; + try { + GZIPInputStream gzipinputstream = new GZIPInputStream(new ByteArrayInputStream(onDemandData.buffer)); + do { + if (i == gzipInputBuffer.length) { + throw new RuntimeException("buffer overflow!"); + } + int k = gzipinputstream.read(gzipInputBuffer, i, gzipInputBuffer.length - i); + if (k == -1) { + break; + } + i += k; + } while (true); + } catch (IOException _ex) { + throw new RuntimeException("error unzipping"); + } + onDemandData.buffer = new byte[i]; + System.arraycopy(gzipInputBuffer, 0, onDemandData.buffer, 0, i); + + return onDemandData; + } + + public int method562(int i, int k, int l) { + int i1 = (l << 8) + k; + for (int j1 = 0; j1 < mapIndices1.length; j1++) { + if (mapIndices1[j1] == i1) { + if (i == 0) { + return mapIndices2[j1]; + } else { + return mapIndices3[j1]; + } + } + } + return -1; + } + + @Override + public void method548(int i) { + method558(0, i); + } + + public void method563(byte byte0, int i, int j) { + if (clientInstance.decompressors[0] == null) { + return; + } + if (versions[i][j] == 0) { + return; + } + byte abyte0[] = clientInstance.decompressors[i + 1].decompress(j); + if (crcMatches(versions[i][j], crcs[i][j], abyte0)) { + return; + } + fileStatus[i][j] = byte0; + if (byte0 > anInt1332) { + anInt1332 = byte0; + } + totalFiles++; + } + + public boolean method564(int i) { + for (int k = 0; k < mapIndices1.length; k++) { + if (mapIndices3[k] == i) { + return true; + } + } + return false; + } + + private void handleFailed() { + uncompletedCount = 0; + completedCount = 0; + for (OnDemandData onDemandData = (OnDemandData) requested.reverseGetFirst(); onDemandData != null; onDemandData = (OnDemandData) requested.reverseGetNext()) { + if (onDemandData.incomplete) { + uncompletedCount++; + } else { + completedCount++; + } + } + + while (uncompletedCount < 10) { + OnDemandData onDemandData_1 = (OnDemandData) aClass19_1368.popHead(); + if (onDemandData_1 == null) { + break; + } + if (fileStatus[onDemandData_1.dataType][onDemandData_1.ID] != 0) { + filesLoaded++; + } + fileStatus[onDemandData_1.dataType][onDemandData_1.ID] = 0; + requested.insertHead(onDemandData_1); + uncompletedCount++; + closeRequest(onDemandData_1); + waiting = true; + } + } + + public void method566() { + synchronized (aClass19_1344) { + aClass19_1344.removeAll(); + } + } + + private void checkReceived() { + OnDemandData onDemandData; + synchronized (aClass19_1370) { + onDemandData = (OnDemandData) aClass19_1370.popHead(); + } + while (onDemandData != null) { + waiting = true; + byte abyte0[] = null; + if (clientInstance.decompressors[0] != null) { + abyte0 = clientInstance.decompressors[onDemandData.dataType + 1].decompress(onDemandData.ID); + } + if (!crcMatches(versions[onDemandData.dataType][onDemandData.ID], crcs[onDemandData.dataType][onDemandData.ID], abyte0)) { + abyte0 = null; + } + synchronized (aClass19_1370) { + if (abyte0 == null) { + aClass19_1368.insertHead(onDemandData); + } else { + onDemandData.buffer = abyte0; + synchronized (aClass19_1358) { + aClass19_1358.insertHead(onDemandData); + } + } + onDemandData = (OnDemandData) aClass19_1370.popHead(); + } + } + } + + private void method568() { + while (uncompletedCount == 0 && completedCount < 10) { + if (anInt1332 == 0) { + break; + } + OnDemandData onDemandData; + synchronized (aClass19_1344) { + onDemandData = (OnDemandData) aClass19_1344.popHead(); + } + while (onDemandData != null) { + if (fileStatus[onDemandData.dataType][onDemandData.ID] != 0) { + fileStatus[onDemandData.dataType][onDemandData.ID] = 0; + requested.insertHead(onDemandData); + closeRequest(onDemandData); + waiting = true; + if (filesLoaded < totalFiles) { + filesLoaded++; + } + statusString = "Loading extra files - " + filesLoaded * 100 / totalFiles + "%"; + completedCount++; + if (completedCount == 10) { + return; + } + } + synchronized (aClass19_1344) { + onDemandData = (OnDemandData) aClass19_1344.popHead(); + } + } + for (int j = 0; j < 4; j++) { + byte abyte0[] = fileStatus[j]; + int k = abyte0.length; + for (int l = 0; l < k; l++) { + if (abyte0[l] == anInt1332) { + abyte0[l] = 0; + OnDemandData onDemandData_1 = new OnDemandData(); + onDemandData_1.dataType = j; + onDemandData_1.ID = l; + onDemandData_1.incomplete = false; + requested.insertHead(onDemandData_1); + closeRequest(onDemandData_1); + waiting = true; + if (filesLoaded < totalFiles) { + filesLoaded++; + } + statusString = "Loading extra files - " + filesLoaded * 100 / totalFiles + "%"; + completedCount++; + if (completedCount == 10) { + return; + } + } + } + + } + + anInt1332--; + } + } + + public boolean method569(int i) { + return anIntArray1348[i] == 1; + } + + public OnDemandFetcher() { + requested = new NodeList(); + statusString = ""; + crc32 = new CRC32(); + ioBuffer = new byte[500]; + fileStatus = new byte[4][]; + aClass19_1344 = new NodeList(); + running = true; + waiting = false; + aClass19_1358 = new NodeList(); + gzipInputBuffer = new byte[65000]; + nodeSubList = new NodeSubList(); + versions = new int[4][]; + crcs = new int[4][]; + aClass19_1368 = new NodeList(); + aClass19_1370 = new NodeList(); + } + + private int totalFiles; + private final NodeList requested; + private int anInt1332; + public String statusString; + private int writeLoopCycle; + private long openSocketTime; + private int[] mapIndices3; + private final CRC32 crc32; + private final byte[] ioBuffer; + public int onDemandCycle; + private final byte[][] fileStatus; + private Game clientInstance; + private final NodeList aClass19_1344; + private int completedSize; + private int expectedSize; + int[] anIntArray1348; + public int anInt1349; + private int[] mapIndices2; + private int filesLoaded; + private boolean running; + private OutputStream outputStream; + private int[] mapIndices4; + private boolean waiting; + private final NodeList aClass19_1358; + private final byte[] gzipInputBuffer; + private int[] anIntArray1360; + private final NodeSubList nodeSubList; + private InputStream inputStream; + private Socket socket; + public final int[][] versions; + public final int[][] crcs; + private int uncompletedCount; + private int completedCount; + private final NodeList aClass19_1368; + private OnDemandData current; + private final NodeList aClass19_1370; + private int[] mapIndices1; + private byte[] modelIndices; + private int loopCycle; +} diff --git a/2006Redone Client/src/OnDemandFetcherParent.java b/2006Redone Client/src/OnDemandFetcherParent.java new file mode 100644 index 00000000..1952d07c --- /dev/null +++ b/2006Redone Client/src/OnDemandFetcherParent.java @@ -0,0 +1,13 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public class OnDemandFetcherParent { + + public void method548(int i) { + } + + OnDemandFetcherParent() { + } + +} diff --git a/2006Redone Client/src/Player.java b/2006Redone Client/src/Player.java new file mode 100644 index 00000000..93c2de42 --- /dev/null +++ b/2006Redone Client/src/Player.java @@ -0,0 +1,376 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Player extends Entity { + + @Override + public Model getRotatedModel() { + if (!visible) { + return null; + } + Model model = method452(); + if (model == null) { + return null; + } + super.height = model.modelHeight; + model.aBoolean1659 = true; + if (aBoolean1699) { + return model; + } + if (super.anInt1520 != -1 && super.anInt1521 != -1) { + SpotAnim spotAnim = SpotAnim.cache[super.anInt1520]; + Model model_2 = spotAnim.getModel(); + if (model_2 != null) { + Model model_3 = new Model(true, Class36.method532(super.anInt1521), false, model_2); + model_3.method475(0, -super.anInt1524, 0); + model_3.method469(); + model_3.method470(spotAnim.aAnimation_407.anIntArray353[super.anInt1521]); + model_3.anIntArrayArray1658 = null; + model_3.anIntArrayArray1657 = null; + if (spotAnim.anInt410 != 128 || spotAnim.anInt411 != 128) { + model_3.method478(spotAnim.anInt410, spotAnim.anInt410, spotAnim.anInt411); + } + model_3.method479(64 + spotAnim.anInt413, 850 + spotAnim.anInt414, -30, -50, -30, true); + Model aclass30_sub2_sub4_sub6_1s[] = {model, model_3}; + model = new Model(aclass30_sub2_sub4_sub6_1s); + } + } + if (aModel_1714 != null) { + if (Game.loopCycle >= anInt1708) { + aModel_1714 = null; + } + if (Game.loopCycle >= anInt1707 && Game.loopCycle < anInt1708) { + Model model_1 = aModel_1714; + model_1.method475(anInt1711 - super.x, anInt1712 - anInt1709, anInt1713 - super.y); + if (super.turnDirection == 512) { + model_1.method473(); + model_1.method473(); + model_1.method473(); + } else if (super.turnDirection == 1024) { + model_1.method473(); + model_1.method473(); + } else if (super.turnDirection == 1536) { + model_1.method473(); + } + Model aclass30_sub2_sub4_sub6s[] = {model, model_1}; + model = new Model(aclass30_sub2_sub4_sub6s); + if (super.turnDirection == 512) { + model_1.method473(); + } else if (super.turnDirection == 1024) { + model_1.method473(); + model_1.method473(); + } else if (super.turnDirection == 1536) { + model_1.method473(); + model_1.method473(); + model_1.method473(); + } + model_1.method475(super.x - anInt1711, anInt1709 - anInt1712, super.y - anInt1713); + } + } + model.aBoolean1659 = true; + return model; + } + + public void updatePlayer(Stream stream) { + stream.currentOffset = 0; + anInt1702 = stream.readUnsignedByte(); + headIcon = stream.readUnsignedByte(); + skullIcon = stream.readUnsignedByte(); + desc = null; + team = 0; + for (int j = 0; j < 12; j++) { + int k = stream.readUnsignedByte(); + if (k == 0) { + equipment[j] = 0; + continue; + } + int i1 = stream.readUnsignedByte(); + equipment[j] = (k << 8) + i1; + if (j == 0 && equipment[0] == 65535) { + desc = EntityDef.forID(stream.readUnsignedWord()); + break; + } + if (equipment[j] >= 512 && equipment[j] - 512 < ItemDef.totalItems) { + int l1 = ItemDef.forID(equipment[j] - 512).team; + if (l1 != 0) { + team = l1; + } + } + } + + for (int l = 0; l < 5; l++) { + int j1 = stream.readUnsignedByte(); + if (j1 < 0 || j1 >= Game.anIntArrayArray1003[l].length) { + j1 = 0; + } + anIntArray1700[l] = j1; + } + + super.anInt1511 = stream.readUnsignedWord(); + if (super.anInt1511 == 65535) { + super.anInt1511 = -1; + } + super.anInt1512 = stream.readUnsignedWord(); + if (super.anInt1512 == 65535) { + super.anInt1512 = -1; + } + super.anInt1554 = stream.readUnsignedWord(); + if (super.anInt1554 == 65535) { + super.anInt1554 = -1; + } + super.anInt1555 = stream.readUnsignedWord(); + if (super.anInt1555 == 65535) { + super.anInt1555 = -1; + } + super.anInt1556 = stream.readUnsignedWord(); + if (super.anInt1556 == 65535) { + super.anInt1556 = -1; + } + super.anInt1557 = stream.readUnsignedWord(); + if (super.anInt1557 == 65535) { + super.anInt1557 = -1; + } + super.anInt1505 = stream.readUnsignedWord(); + if (super.anInt1505 == 65535) { + super.anInt1505 = -1; + } + name = TextClass.fixName(TextClass.nameForLong(stream.readQWord())); + combatLevel = stream.readUnsignedByte(); + skill = stream.readUnsignedWord(); + visible = true; + aLong1718 = 0L; + for (int k1 = 0; k1 < 12; k1++) { + aLong1718 <<= 4; + if (equipment[k1] >= 256) { + aLong1718 += equipment[k1] - 256; + } + } + + if (equipment[0] >= 256) { + aLong1718 += equipment[0] - 256 >> 4; + } + if (equipment[1] >= 256) { + aLong1718 += equipment[1] - 256 >> 8; + } + for (int i2 = 0; i2 < 5; i2++) { + aLong1718 <<= 3; + aLong1718 += anIntArray1700[i2]; + } + + aLong1718 <<= 1; + aLong1718 += anInt1702; + } + + private Model method452() { + if (desc != null) { + int j = -1; + if (super.anim >= 0 && super.anInt1529 == 0) { + j = Animation.anims[super.anim].anIntArray353[super.anInt1527]; + } else if (super.anInt1517 >= 0) { + j = Animation.anims[super.anInt1517].anIntArray353[super.anInt1518]; + } + Model model = desc.method164(-1, j, null); + return model; + } + long l = aLong1718; + int k = -1; + int i1 = -1; + int j1 = -1; + int k1 = -1; + if (super.anim >= 0 && super.anInt1529 == 0) { + Animation animation = Animation.anims[super.anim]; + k = animation.anIntArray353[super.anInt1527]; + if (super.anInt1517 >= 0 && super.anInt1517 != super.anInt1511) { + i1 = Animation.anims[super.anInt1517].anIntArray353[super.anInt1518]; + } + if (animation.anInt360 >= 0) { + j1 = animation.anInt360; + l += j1 - equipment[5] << 40; + } + if (animation.anInt361 >= 0) { + k1 = animation.anInt361; + l += k1 - equipment[3] << 48; + } + } else if (super.anInt1517 >= 0) { + k = Animation.anims[super.anInt1517].anIntArray353[super.anInt1518]; + } + Model model_1 = (Model) mruNodes.insertFromCache(l); + if (model_1 == null) { + boolean flag = false; + for (int i2 = 0; i2 < 12; i2++) { + int k2 = equipment[i2]; + if (k1 >= 0 && i2 == 3) { + k2 = k1; + } + if (j1 >= 0 && i2 == 5) { + k2 = j1; + } + if (k2 >= 256 && k2 < 512 && !IDK.cache[k2 - 256].method537()) { + flag = true; + } + if (k2 >= 512 && !ItemDef.forID(k2 - 512).method195(anInt1702)) { + flag = true; + } + } + + if (flag) { + if (aLong1697 != -1L) { + model_1 = (Model) mruNodes.insertFromCache(aLong1697); + } + if (model_1 == null) { + return null; + } + } + } + if (model_1 == null) { + Model aclass30_sub2_sub4_sub6s[] = new Model[12]; + int j2 = 0; + for (int l2 = 0; l2 < 12; l2++) { + int i3 = equipment[l2]; + if (k1 >= 0 && l2 == 3) { + i3 = k1; + } + if (j1 >= 0 && l2 == 5) { + i3 = j1; + } + if (i3 >= 256 && i3 < 512) { + Model model_3 = IDK.cache[i3 - 256].method538(); + if (model_3 != null) { + aclass30_sub2_sub4_sub6s[j2++] = model_3; + } + } + if (i3 >= 512) { + Model model_4 = ItemDef.forID(i3 - 512).method196(anInt1702); + if (model_4 != null) { + aclass30_sub2_sub4_sub6s[j2++] = model_4; + } + } + } + + model_1 = new Model(j2, aclass30_sub2_sub4_sub6s); + for (int j3 = 0; j3 < 5; j3++) { + if (anIntArray1700[j3] != 0) { + model_1.method476(Game.anIntArrayArray1003[j3][0], Game.anIntArrayArray1003[j3][anIntArray1700[j3]]); + if (j3 == 1) { + model_1.method476(Game.anIntArray1204[0], Game.anIntArray1204[anIntArray1700[j3]]); + } + } + } + + model_1.method469(); + model_1.method479(64, 850, -30, -50, -30, true); + mruNodes.removeFromCache(model_1, l); + aLong1697 = l; + } + if (aBoolean1699) { + return model_1; + } + Model model_2 = Model.aModel_1621; + model_2.method464(model_1, Class36.method532(k) & Class36.method532(i1)); + if (k != -1 && i1 != -1) { + model_2.method471(Animation.anims[super.anim].anIntArray357, i1, k); + } else if (k != -1) { + model_2.method470(k); + } + model_2.method466(); + model_2.anIntArrayArray1658 = null; + model_2.anIntArrayArray1657 = null; + return model_2; + } + + @Override + public boolean isVisible() { + return visible; + } + + public int privelage; + public Model method453() { + if (!visible) { + return null; + } + if (desc != null) { + return desc.method160(); + } + boolean flag = false; + for (int i = 0; i < 12; i++) { + int j = equipment[i]; + if (j >= 256 && j < 512 && !IDK.cache[j - 256].method539()) { + flag = true; + } + if (j >= 512 && !ItemDef.forID(j - 512).method192(anInt1702)) { + flag = true; + } + } + + if (flag) { + return null; + } + Model aclass30_sub2_sub4_sub6s[] = new Model[12]; + int k = 0; + for (int l = 0; l < 12; l++) { + int i1 = equipment[l]; + if (i1 >= 256 && i1 < 512) { + Model model_1 = IDK.cache[i1 - 256].method540(); + if (model_1 != null) { + aclass30_sub2_sub4_sub6s[k++] = model_1; + } + } + if (i1 >= 512) { + Model model_2 = ItemDef.forID(i1 - 512).method194(anInt1702); + if (model_2 != null) { + aclass30_sub2_sub4_sub6s[k++] = model_2; + } + } + } + + Model model = new Model(k, aclass30_sub2_sub4_sub6s); + for (int j1 = 0; j1 < 5; j1++) { + if (anIntArray1700[j1] != 0) { + model.method476(Game.anIntArrayArray1003[j1][0], Game.anIntArrayArray1003[j1][anIntArray1700[j1]]); + if (j1 == 1) { + model.method476(Game.anIntArray1204[0], Game.anIntArray1204[anIntArray1700[j1]]); + } + } + } + + return model; + } + + Player() { + aLong1697 = -1L; + aBoolean1699 = false; + anIntArray1700 = new int[5]; + visible = false; + equipment = new int[12]; + } + + private long aLong1697; + public EntityDef desc; + boolean aBoolean1699; + final int[] anIntArray1700; + public int team; + private int anInt1702; + public String name; + static MRUNodes mruNodes = new MRUNodes(260); + public int combatLevel; + public int headIcon; + public int skullIcon; + public int hintIcon; + public int anInt1707; + int anInt1708; + int anInt1709; + boolean visible; + int anInt1711; + int anInt1712; + int anInt1713; + Model aModel_1714; + public final int[] equipment; + private long aLong1718; + int anInt1719; + int anInt1720; + int anInt1721; + int anInt1722; + int skill; + +} diff --git a/2006Redone Client/src/RSApplet.java b/2006Redone Client/src/RSApplet.java new file mode 100644 index 00000000..47d03532 --- /dev/null +++ b/2006Redone Client/src/RSApplet.java @@ -0,0 +1,539 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.applet.Applet; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; + +@SuppressWarnings("serial") +public class RSApplet extends Applet implements Runnable, MouseListener, MouseMotionListener, KeyListener, FocusListener, WindowListener { + + final void createClientFrame(int i, int j) { + myWidth = j; + myHeight = i; + gameFrame = new RSFrame(this, myWidth, myHeight); + graphics = getGameComponent().getGraphics(); + fullGameScreen = new RSImageProducer(myWidth, myHeight, getGameComponent()); + startRunnable(this, 1); + } + + final void initClientFrame(int i, int j) { + myWidth = j; + myHeight = i; + graphics = getGameComponent().getGraphics(); + fullGameScreen = new RSImageProducer(myWidth, myHeight, getGameComponent()); + startRunnable(this, 1); + } + + @Override + public void run() { + getGameComponent().addMouseListener(this); + getGameComponent().addMouseMotionListener(this); + getGameComponent().addKeyListener(this); + getGameComponent().addFocusListener(this); + if (gameFrame != null) { + gameFrame.addWindowListener(this); + } + drawLoadingText(0, "Loading..."); + startUp(); + int i = 0; + int j = 256; + int k = 1; + int i1 = 0; + int j1 = 0; + for (int k1 = 0; k1 < 10; k1++) { + aLongArray7[k1] = System.currentTimeMillis(); + } + + System.currentTimeMillis(); + while (anInt4 >= 0) { + if (anInt4 > 0) { + anInt4--; + if (anInt4 == 0) { + exit(); + return; + } + } + int i2 = j; + int j2 = k; + j = 300; + k = 1; + long l1 = System.currentTimeMillis(); + if (aLongArray7[i] == 0L) { + j = i2; + k = j2; + } else if (l1 > aLongArray7[i]) { + j = (int) (2560 * delayTime / (l1 - aLongArray7[i])); + } + if (j < 25) { + j = 25; + } + if (j > 256) { + j = 256; + k = (int) (delayTime - (l1 - aLongArray7[i]) / 10L); + } + if (k > delayTime) { + k = delayTime; + } + aLongArray7[i] = l1; + i = (i + 1) % 10; + if (k > 1) { + for (int k2 = 0; k2 < 10; k2++) { + if (aLongArray7[k2] != 0L) { + aLongArray7[k2] += k; + } + } + + } + if (k < minDelay) { + k = minDelay; + } + try { + Thread.sleep(k); + } catch (InterruptedException _ex) { + j1++; + } + for (; i1 < 256; i1 += j) { + clickMode3 = clickMode1; + saveClickX = clickX; + saveClickY = clickY; + aLong29 = clickTime; + clickMode1 = 0; + processGameLoop(); + readIndex = writeIndex; + } + + i1 &= 0xff; + if (delayTime > 0) { + fps = 1000 * j / (delayTime * 256); + } + processDrawing(); + if (shouldDebug) { + System.out.println("ntime:" + l1); + for (int l2 = 0; l2 < 10; l2++) { + int i3 = (i - l2 - 1 + 20) % 10; + System.out.println("otim" + i3 + ":" + aLongArray7[i3]); + } + + System.out.println("fps:" + fps + " ratio:" + j + " count:" + i1); + System.out.println("del:" + k + " deltime:" + delayTime + " mindel:" + minDelay); + System.out.println("intex:" + j1 + " opos:" + i); + shouldDebug = false; + j1 = 0; + } + } + if (anInt4 == -1) { + exit(); + } + } + + private void exit() { + anInt4 = -2; + cleanUpForQuit(); + if (gameFrame != null) { + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + try { + System.exit(0); + } catch (Throwable _ex) { + } + } + } + + final void method4(int i) { + delayTime = 1000 / i; + } + + @Override + public final void start() { + if (anInt4 >= 0) { + anInt4 = 0; + } + } + + @Override + public final void stop() { + if (anInt4 >= 0) { + anInt4 = 4000 / delayTime; + } + } + + @Override + public final void destroy() { + anInt4 = -1; + try { + Thread.sleep(5000L); + } catch (Exception _ex) { + } + if (anInt4 == -1) { + exit(); + } + } + + @Override + public final void update(Graphics g) { + if (graphics == null) { + graphics = g; + } + shouldClearScreen = true; + raiseWelcomeScreen(); + } + + @Override + public final void paint(Graphics g) { + if (graphics == null) { + graphics = g; + } + shouldClearScreen = true; + raiseWelcomeScreen(); + } + + @Override + public final void mousePressed(MouseEvent mouseevent) { + int i = mouseevent.getX(); + int j = mouseevent.getY(); + if (gameFrame != null) { + i -= 4; + j -= 22; + } + idleTime = 0; + clickX = i; + clickY = j; + clickTime = System.currentTimeMillis(); + if (mouseevent.isMetaDown()) { + clickMode1 = 2; + clickMode2 = 2; + } else { + clickMode1 = 1; + clickMode2 = 1; + } + } + + @Override + public final void mouseReleased(MouseEvent mouseevent) { + idleTime = 0; + clickMode2 = 0; + } + + @Override + public final void mouseClicked(MouseEvent mouseevent) { + } + + @Override + public final void mouseEntered(MouseEvent mouseevent) { + } + + @Override + public final void mouseExited(MouseEvent mouseevent) { + idleTime = 0; + mouseX = -1; + mouseY = -1; + } + + @Override + public final void mouseDragged(MouseEvent mouseevent) { + int i = mouseevent.getX(); + int j = mouseevent.getY(); + if (gameFrame != null) { + i -= 4; + j -= 22; + } + idleTime = 0; + mouseX = i; + mouseY = j; + } + + @Override + public final void mouseMoved(MouseEvent mouseevent) { + int i = mouseevent.getX(); + int j = mouseevent.getY(); + if (gameFrame != null) { + i -= 4; + j -= 22; + } + idleTime = 0; + mouseX = i; + mouseY = j; + } + + @Override + public final void keyPressed(KeyEvent keyevent) { + idleTime = 0; + int i = keyevent.getKeyCode(); + int j = keyevent.getKeyChar(); + if (j < 30) { + j = 0; + } + if (i == 37) { + j = 1; + } + if (i == 39) { + j = 2; + } + if (i == 38) { + j = 3; + } + if (i == 40) { + j = 4; + } + if (i == 17) { + j = 5; + } + if (i == 8) { + j = 8; + } + if (i == 127) { + j = 8; + } + if (i == 9) { + j = 9; + } + if (i == 10) { + j = 10; + } + if (i >= 112 && i <= 123) { + j = 1008 + i - 112; + } + if (i == 36) { + j = 1000; + } + if (i == 35) { + j = 1001; + } + if (i == 33) { + j = 1002; + } + if (i == 34) { + j = 1003; + } + if (j > 0 && j < 128) { + keyArray[j] = 1; + } + if (j > 4) { + charQueue[writeIndex] = j; + writeIndex = writeIndex + 1 & 0x7f; + } + } + + @Override + public final void keyReleased(KeyEvent keyevent) { + idleTime = 0; + int i = keyevent.getKeyCode(); + char c = keyevent.getKeyChar(); + if (c < '\036') { + c = '\0'; + } + if (i == 37) { + c = '\001'; + } + if (i == 39) { + c = '\002'; + } + if (i == 38) { + c = '\003'; + } + if (i == 40) { + c = '\004'; + } + if (i == 17) { + c = '\005'; + } + if (i == 8) { + c = '\b'; + } + if (i == 127) { + c = '\b'; + } + if (i == 9) { + c = '\t'; + } + if (i == 10) { + c = '\n'; + } + if (c > 0 && c < '\200') { + keyArray[c] = 0; + } + } + + @Override + public final void keyTyped(KeyEvent keyevent) { + } + + final int readChar(int dummy) { + while (dummy >= 0) { + for (int j = 1; j > 0; j++) { + ; + } + } + int k = -1; + if (writeIndex != readIndex) { + k = charQueue[readIndex]; + readIndex = readIndex + 1 & 0x7f; + } + return k; + } + + @Override + public final void focusGained(FocusEvent focusevent) { + awtFocus = true; + shouldClearScreen = true; + raiseWelcomeScreen(); + } + + @Override + public final void focusLost(FocusEvent focusevent) { + awtFocus = false; + for (int i = 0; i < 128; i++) { + keyArray[i] = 0; + } + + } + + @Override + public final void windowActivated(WindowEvent windowevent) { + } + + @Override + public final void windowClosed(WindowEvent windowevent) { + } + + @Override + public final void windowClosing(WindowEvent windowevent) { + destroy(); + } + + @Override + public final void windowDeactivated(WindowEvent windowevent) { + } + + @Override + public final void windowDeiconified(WindowEvent windowevent) { + } + + @Override + public final void windowIconified(WindowEvent windowevent) { + } + + @Override + public final void windowOpened(WindowEvent windowevent) { + } + + void startUp() { + } + + void processGameLoop() { + } + + void cleanUpForQuit() { + } + + void processDrawing() { + } + + void raiseWelcomeScreen() { + } + + Component getGameComponent() { + if (gameFrame != null) { + return gameFrame; + } else { + return this; + } + } + + public void startRunnable(Runnable runnable, int priority) { + Thread thread = new Thread(runnable); + thread.start(); + thread.setPriority(priority); + } + + void drawLoadingText(int i, String s) { + while (graphics == null) { + graphics = getGameComponent().getGraphics(); + try { + getGameComponent().repaint(); + } catch (Exception _ex) { + } + try { + Thread.sleep(1000L); + } catch (Exception _ex) { + } + } + Font font = new Font("Helvetica", 1, 13); + FontMetrics fontmetrics = getGameComponent().getFontMetrics(font); + Font font1 = new Font("Helvetica", 0, 13); + getGameComponent().getFontMetrics(font1); + if (shouldClearScreen) { + graphics.setColor(Color.black); + graphics.fillRect(0, 0, myWidth, myHeight); + shouldClearScreen = false; + } + Color color = new Color(140, 17, 17); + int j = myHeight / 2 - 18; + graphics.setColor(color); + graphics.drawRect(myWidth / 2 - 152, j, 304, 34); + graphics.fillRect(myWidth / 2 - 150, j + 2, i * 3, 30); + graphics.setColor(Color.black); + graphics.fillRect(myWidth / 2 - 150 + i * 3, j + 2, 300 - i * 3, 30); + graphics.setFont(font); + graphics.setColor(Color.white); + graphics.drawString(s, (myWidth - fontmetrics.stringWidth(s)) / 2, j + 22); + } + + RSApplet() { + delayTime = 20; + minDelay = 1; + aLongArray7 = new long[10]; + shouldDebug = false; + shouldClearScreen = true; + awtFocus = true; + keyArray = new int[128]; + charQueue = new int[128]; + } + + private int anInt4; + private int delayTime; + int minDelay; + private final long[] aLongArray7; + int fps; + boolean shouldDebug; + int myWidth; + int myHeight; + Graphics graphics; + RSImageProducer fullGameScreen; + RSFrame gameFrame; + private boolean shouldClearScreen; + boolean awtFocus; + int idleTime; + int clickMode2; + public int mouseX; + public int mouseY; + private int clickMode1; + private int clickX; + private int clickY; + private long clickTime; + int clickMode3; + int saveClickX; + int saveClickY; + long aLong29; + final int[] keyArray; + private final int[] charQueue; + private int readIndex; + private int writeIndex; + public static int anInt34; +} diff --git a/2006Redone Client/src/RSFrame.java b/2006Redone Client/src/RSFrame.java new file mode 100644 index 00000000..dbfa1f47 --- /dev/null +++ b/2006Redone Client/src/RSFrame.java @@ -0,0 +1,39 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.awt.Frame; +import java.awt.Graphics; + +@SuppressWarnings("serial") +final class RSFrame extends Frame { + + public RSFrame(RSApplet RSApplet_, int i, int j) { + rsApplet = RSApplet_; + setTitle(ClientSettings.SERVER_NAME); + setResizable(false); + setVisible(true); + toFront(); + setSize(i + 8, j + 28); + setLocationRelativeTo(null); + } + + @Override + public Graphics getGraphics() { + Graphics g = super.getGraphics(); + g.translate(4, 24); + return g; + } + + @Override + public void update(Graphics g) { + rsApplet.update(g); + } + + @Override + public void paint(Graphics g) { + rsApplet.paint(g); + } + + private final RSApplet rsApplet; +} diff --git a/2006Redone Client/src/RSImageProducer.java b/2006Redone Client/src/RSImageProducer.java new file mode 100644 index 00000000..b0160264 --- /dev/null +++ b/2006Redone Client/src/RSImageProducer.java @@ -0,0 +1,89 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.image.ColorModel; +import java.awt.image.DirectColorModel; +import java.awt.image.ImageConsumer; +import java.awt.image.ImageObserver; +import java.awt.image.ImageProducer; + +final class RSImageProducer implements ImageProducer, ImageObserver { + + public RSImageProducer(int i, int j, Component component) { + anInt316 = i; + anInt317 = j; + anIntArray315 = new int[i * j]; + aColorModel318 = new DirectColorModel(32, 0xff0000, 65280, 255); + anImage320 = component.createImage(this); + method239(); + component.prepareImage(anImage320, this); + method239(); + component.prepareImage(anImage320, this); + method239(); + component.prepareImage(anImage320, this); + initDrawingArea(); + } + + public void initDrawingArea() { + DrawingArea.initDrawingArea(anInt317, anInt316, anIntArray315); + } + + public void drawGraphics(int i, Graphics g, int k) { + method239(); + g.drawImage(anImage320, k, i, this); + } + + @Override + public synchronized void addConsumer(ImageConsumer imageconsumer) { + anImageConsumer319 = imageconsumer; + imageconsumer.setDimensions(anInt316, anInt317); + imageconsumer.setProperties(null); + imageconsumer.setColorModel(aColorModel318); + imageconsumer.setHints(14); + } + + @Override + public synchronized boolean isConsumer(ImageConsumer imageconsumer) { + return anImageConsumer319 == imageconsumer; + } + + @Override + public synchronized void removeConsumer(ImageConsumer imageconsumer) { + if (anImageConsumer319 == imageconsumer) { + anImageConsumer319 = null; + } + } + + @Override + public void startProduction(ImageConsumer imageconsumer) { + addConsumer(imageconsumer); + } + + @Override + public void requestTopDownLeftRightResend(ImageConsumer imageconsumer) { + System.out.println("TDLR"); + } + + private synchronized void method239() { + if (anImageConsumer319 != null) { + anImageConsumer319.setPixels(0, 0, anInt316, anInt317, aColorModel318, anIntArray315, 0, anInt316); + anImageConsumer319.imageComplete(2); + } + } + + @Override + public boolean imageUpdate(Image image, int i, int j, int k, int l, int i1) { + return true; + } + + public final int[] anIntArray315; + private final int anInt316; + private final int anInt317; + private final ColorModel aColorModel318; + private ImageConsumer anImageConsumer319; + private final Image anImage320; +} diff --git a/2006Redone Client/src/RSInterface.java b/2006Redone Client/src/RSInterface.java new file mode 100644 index 00000000..c38b9941 --- /dev/null +++ b/2006Redone Client/src/RSInterface.java @@ -0,0 +1,383 @@ +public final class RSInterface { + + public void swapInventoryItems(int i, int j) { + int k = inv[i]; + inv[i] = inv[j]; + inv[j] = k; + k = invStackSizes[i]; + invStackSizes[i] = invStackSizes[j]; + invStackSizes[j] = k; + } + + public static void unpack(StreamLoader streamLoader, TextDrawingArea textDrawingAreas[], StreamLoader streamLoader_1) { + aMRUNodes_238 = new MRUNodes(50000); + Stream stream = new Stream(streamLoader.getDataForName("data")); + int i = -1; + int j = stream.readUnsignedWord(); + interfaceCache = new RSInterface[j]; + while (stream.currentOffset < stream.buffer.length) { + int k = stream.readUnsignedWord(); + if (k == 65535) { + i = stream.readUnsignedWord(); + k = stream.readUnsignedWord(); + } + RSInterface rsInterface = interfaceCache[k] = new RSInterface(); + rsInterface.id = k; + rsInterface.parentID = i; + rsInterface.type = stream.readUnsignedByte(); + //if(rsInterface.type == 0) + // System.out.println(rsInterface.parentID+":"+k); + rsInterface.atActionType = stream.readUnsignedByte(); + rsInterface.anInt214 = stream.readUnsignedWord(); + rsInterface.width = stream.readUnsignedWord(); + rsInterface.height = stream.readUnsignedWord(); + rsInterface.aByte254 = (byte) stream.readUnsignedByte(); + rsInterface.anInt230 = stream.readUnsignedByte(); + if (rsInterface.anInt230 != 0) { + rsInterface.anInt230 = (rsInterface.anInt230 - 1 << 8) + stream.readUnsignedByte(); + } else { + rsInterface.anInt230 = -1; + } + int i1 = stream.readUnsignedByte(); + if (i1 > 0) { + rsInterface.anIntArray245 = new int[i1]; + rsInterface.anIntArray212 = new int[i1]; + for (int j1 = 0; j1 < i1; j1++) { + rsInterface.anIntArray245[j1] = stream.readUnsignedByte(); + rsInterface.anIntArray212[j1] = stream.readUnsignedWord(); + } + + } + int k1 = stream.readUnsignedByte(); + if (k1 > 0) { + rsInterface.valueIndexArray = new int[k1][]; + for (int l1 = 0; l1 < k1; l1++) { + int i3 = stream.readUnsignedWord(); + rsInterface.valueIndexArray[l1] = new int[i3]; + for (int l4 = 0; l4 < i3; l4++) { + rsInterface.valueIndexArray[l1][l4] = stream.readUnsignedWord(); + } + + } + + } + if (rsInterface.type == 0) { + rsInterface.scrollMax = stream.readUnsignedWord(); + rsInterface.aBoolean266 = stream.readUnsignedByte() == 1; + int i2 = stream.readUnsignedWord(); + rsInterface.children = new int[i2]; + rsInterface.childX = new int[i2]; + rsInterface.childY = new int[i2]; + for (int j3 = 0; j3 < i2; j3++) { + rsInterface.children[j3] = stream.readUnsignedWord(); + rsInterface.childX[j3] = stream.readSignedWord(); + rsInterface.childY[j3] = stream.readSignedWord(); + } + + } + if (rsInterface.type == 1) { + stream.readUnsignedWord(); + stream.readUnsignedByte(); + } + if (rsInterface.type == 2) { + rsInterface.inv = new int[rsInterface.width * rsInterface.height]; + rsInterface.invStackSizes = new int[rsInterface.width * rsInterface.height]; + rsInterface.aBoolean259 = stream.readUnsignedByte() == 1; + rsInterface.isInventoryInterface = stream.readUnsignedByte() == 1; + rsInterface.usableItemInterface = stream.readUnsignedByte() == 1; + rsInterface.aBoolean235 = stream.readUnsignedByte() == 1; + rsInterface.invSpritePadX = stream.readUnsignedByte(); + rsInterface.invSpritePadY = stream.readUnsignedByte(); + rsInterface.spritesX = new int[20]; + rsInterface.spritesY = new int[20]; + rsInterface.sprites = new Sprite[20]; + for (int j2 = 0; j2 < 20; j2++) { + int k3 = stream.readUnsignedByte(); + if (k3 == 1) { + rsInterface.spritesX[j2] = stream.readSignedWord(); + rsInterface.spritesY[j2] = stream.readSignedWord(); + String s1 = stream.readString(); + if (streamLoader_1 != null && s1.length() > 0) { + int i5 = s1.lastIndexOf(","); + rsInterface.sprites[j2] = method207(Integer.parseInt(s1.substring(i5 + 1)), streamLoader_1, s1.substring(0, i5)); + } + } + } + + rsInterface.actions = new String[5]; + for (int l3 = 0; l3 < 5; l3++) { + rsInterface.actions[l3] = stream.readString(); + if (rsInterface.actions[l3].length() == 0) { + rsInterface.actions[l3] = null; + } + } + } + if (rsInterface.type == 3) { + rsInterface.aBoolean227 = stream.readUnsignedByte() == 1; + } + if (rsInterface.type == 4 || rsInterface.type == 1) { + rsInterface.aBoolean223 = stream.readUnsignedByte() == 1; + int k2 = stream.readUnsignedByte(); + if (textDrawingAreas != null) { + rsInterface.textDrawingAreas = textDrawingAreas[k2]; + } + rsInterface.aBoolean268 = stream.readUnsignedByte() == 1; + } + if (rsInterface.type == 4) { + rsInterface.disabledText = stream.readString().replaceAll("RuneScape", ClientSettings.SERVER_NAME); + rsInterface.enabledText = stream.readString(); + } + if (rsInterface.type == 1 || rsInterface.type == 3 || rsInterface.type == 4) { + rsInterface.textColor = stream.readDWord(); + } + if (rsInterface.type == 3 || rsInterface.type == 4) { + rsInterface.anInt219 = stream.readDWord(); + rsInterface.anInt216 = stream.readDWord(); + rsInterface.anInt239 = stream.readDWord(); + } + if (rsInterface.type == 5) { + String s = stream.readString(); + if (streamLoader_1 != null && s.length() > 0) { + int i4 = s.lastIndexOf(","); + rsInterface.sprite1 = method207(Integer.parseInt(s.substring(i4 + 1)), streamLoader_1, s.substring(0, i4)); + } + s = stream.readString(); + if (streamLoader_1 != null && s.length() > 0) { + int j4 = s.lastIndexOf(","); + rsInterface.sprite2 = method207(Integer.parseInt(s.substring(j4 + 1)), streamLoader_1, s.substring(0, j4)); + } + } + if (rsInterface.type == 6) { + int l = stream.readUnsignedByte(); + if (l != 0) { + rsInterface.anInt233 = 1; + rsInterface.mediaID = (l - 1 << 8) + stream.readUnsignedByte(); + } + l = stream.readUnsignedByte(); + if (l != 0) { + rsInterface.anInt255 = 1; + rsInterface.anInt256 = (l - 1 << 8) + stream.readUnsignedByte(); + } + l = stream.readUnsignedByte(); + if (l != 0) { + rsInterface.anInt257 = (l - 1 << 8) + stream.readUnsignedByte(); + } else { + rsInterface.anInt257 = -1; + } + l = stream.readUnsignedByte(); + if (l != 0) { + rsInterface.anInt258 = (l - 1 << 8) + stream.readUnsignedByte(); + } else { + rsInterface.anInt258 = -1; + } + rsInterface.anInt269 = stream.readUnsignedWord(); + rsInterface.anInt270 = stream.readUnsignedWord(); + rsInterface.anInt271 = stream.readUnsignedWord(); + } + if (rsInterface.type == 7) { + rsInterface.inv = new int[rsInterface.width * rsInterface.height]; + rsInterface.invStackSizes = new int[rsInterface.width * rsInterface.height]; + rsInterface.aBoolean223 = stream.readUnsignedByte() == 1; + int l2 = stream.readUnsignedByte(); + if (textDrawingAreas != null) { + rsInterface.textDrawingAreas = textDrawingAreas[l2]; + } + rsInterface.aBoolean268 = stream.readUnsignedByte() == 1; + rsInterface.textColor = stream.readDWord(); + rsInterface.invSpritePadX = stream.readSignedWord(); + rsInterface.invSpritePadY = stream.readSignedWord(); + rsInterface.isInventoryInterface = stream.readUnsignedByte() == 1; + rsInterface.actions = new String[5]; + for (int k4 = 0; k4 < 5; k4++) { + rsInterface.actions[k4] = stream.readString(); + if (rsInterface.actions[k4].length() == 0) { + rsInterface.actions[k4] = null; + } + } + + } + if (rsInterface.atActionType == 2 || rsInterface.type == 2) { + rsInterface.selectedActionName = stream.readString(); + rsInterface.spellName = stream.readString(); + rsInterface.spellUsableOn = stream.readUnsignedWord(); + } + if (rsInterface.type == 8) { + rsInterface.disabledText = stream.readString(); + } + if (rsInterface.atActionType == 1 || rsInterface.atActionType == 4 || rsInterface.atActionType == 5 || rsInterface.atActionType == 6) { + rsInterface.tooltip = stream.readString(); + if (rsInterface.tooltip.length() == 0) { + if (rsInterface.atActionType == 1) { + rsInterface.tooltip = "Ok"; + } + if (rsInterface.atActionType == 4) { + rsInterface.tooltip = "Select"; + } + if (rsInterface.atActionType == 5) { + rsInterface.tooltip = "Select"; + } + if (rsInterface.atActionType == 6) { + rsInterface.tooltip = "Continue"; + } + } + } + } + aMRUNodes_238 = null; + } + + private Model method206(int i, int j) { + ItemDef itemDefinition = null; + if (type == 4) { + itemDefinition = ItemDef.forID(id); + lightness += itemDefinition.anInt196; + shading += itemDefinition.anInt184; + } + Model model = (Model) aMRUNodes_264.insertFromCache((i << 16) + j); + if (model != null) + return model; + if (i == 1) + model = Model.method462(j); + if (i == 2) + model = EntityDef.forID(j).method160(); + if (i == 3) + model = Game.myPlayer.method453(); + if (i == 4) + model = ItemDef.forID(j).method202(50); + if (i == 5) + model = null; + if (model != null) + aMRUNodes_264.removeFromCache(model, (i << 16) + j); + return model; + } + + private static Sprite method207(int i, StreamLoader streamLoader, String s) { + long l = (TextClass.method585(s) << 8) + i; + Sprite sprite = (Sprite) aMRUNodes_238.insertFromCache(l); + if (sprite != null) { + return sprite; + } + try { + sprite = new Sprite(streamLoader, s, i); + aMRUNodes_238.removeFromCache(sprite, l); + } catch (Exception _ex) { + return null; + } + return sprite; + } + + public static void discardInterface(int i) { + if (i == -1) + return; + for (int j = 0; j < interfaceCache.length; j++) + if (interfaceCache[j] != null + && interfaceCache[j].parentID == i + && interfaceCache[j].type != 2) + interfaceCache[j] = null; + + } + + public static void method208(Model model, int id, int type) { + aMRUNodes_264.unlinkAll(); + if (model != null && type != 4) { + aMRUNodes_264.removeFromCache(model, (type << 16) + id); + } + } + + public Model method209(int j, int k, boolean flag) { + lightness = 64; + shading = 768; + Model model; + if (flag) { + model = method206(anInt255, anInt256); + } else { + model = method206(anInt233, mediaID); + } + if (model == null) { + return null; + } + if (k == -1 && j == -1 && model.anIntArray1640 == null) { + return model; + } + Model model_1 = new Model(true, Class36.method532(k) & Class36.method532(j), false, model); + if (k != -1 || j != -1) { + model_1.method469(); + } + if (k != -1) { + model_1.method470(k); + } + if (j != -1) { + model_1.method470(j); + } + model_1.method479(lightness, shading, -50, -10, -50, true); + return model_1; + } + + public RSInterface() { + } + + public Sprite sprite1; + public int anInt208; + public Sprite sprites[]; + public static RSInterface interfaceCache[]; + public int anIntArray212[]; + public int anInt214; + public int spritesX[]; + public int anInt216; + public int atActionType; + public String spellName; + public int anInt219; + public int width; + public String tooltip; + public String selectedActionName; + public boolean aBoolean223; + public int scrollPosition; + public String actions[]; + public int valueIndexArray[][]; + public boolean aBoolean227; + public String enabledText; + public int anInt230; + public int invSpritePadX; + public int textColor; + public int anInt233; + public int mediaID; + public boolean aBoolean235; + public int parentID; + public int spellUsableOn; + private static MRUNodes aMRUNodes_238; + public int anInt239; + public int children[]; + public int childX[]; + public boolean usableItemInterface; + public TextDrawingArea textDrawingAreas; + public int invSpritePadY; + public int anIntArray245[]; + public int anInt246; + public int spritesY[]; + public String disabledText; + public boolean isInventoryInterface; + public int id; + public int invStackSizes[]; + public int inv[]; + public byte aByte254; + private int anInt255; + private int anInt256; + public int anInt257; + public int anInt258; + public boolean aBoolean259; + public Sprite sprite2; + public int scrollMax; + public int type; + public int anInt263; + private static final MRUNodes aMRUNodes_264 = new MRUNodes(30); + public int anInt265; + public boolean aBoolean266; + public int height; + public static int shading; + public static int lightness; + public boolean aBoolean268; + public int anInt269; + public int anInt270; + public int anInt271; + public int childY[]; + +} diff --git a/2006Redone Client/src/RSSocket.java b/2006Redone Client/src/RSSocket.java new file mode 100644 index 00000000..d0935639 --- /dev/null +++ b/2006Redone Client/src/RSSocket.java @@ -0,0 +1,168 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; + +final class RSSocket implements Runnable { + + public RSSocket(RSApplet RSApplet_, Socket socket1) throws IOException { + closed = false; + isWriter = false; + hasIOError = false; + rsApplet = RSApplet_; + socket = socket1; + socket.setSoTimeout(30000); + socket.setTcpNoDelay(true); + inputStream = socket.getInputStream(); + outputStream = socket.getOutputStream(); + } + + public void close() { + closed = true; + try { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + if (socket != null) { + socket.close(); + } + } catch (IOException _ex) { + System.out.println("Error closing stream"); + } + isWriter = false; + synchronized (this) { + notify(); + } + buffer = null; + } + + public int read() throws IOException { + if (closed) { + return 0; + } else { + return inputStream.read(); + } + } + + public int available() throws IOException { + if (closed) { + return 0; + } else { + return inputStream.available(); + } + } + + public void flushInputStream(byte abyte0[], int j) throws IOException { + int i = 0;// was parameter + if (closed) { + return; + } + int k; + for (; j > 0; j -= k) { + k = inputStream.read(abyte0, i, j); + if (k <= 0) { + throw new IOException("EOF"); + } + i += k; + } + + } + + public void queueBytes(int i, byte abyte0[]) throws IOException { + if (closed) { + return; + } + if (hasIOError) { + hasIOError = false; + throw new IOException("Error in writer thread"); + } + if (buffer == null) { + buffer = new byte[5000]; + } + synchronized (this) { + for (int l = 0; l < i; l++) { + buffer[buffIndex] = abyte0[l]; + buffIndex = (buffIndex + 1) % 5000; + if (buffIndex == (writeIndex + 4900) % 5000) { + throw new IOException("buffer overflow"); + } + } + + if (!isWriter) { + isWriter = true; + rsApplet.startRunnable(this, 3); + } + notify(); + } + } + + @Override + public void run() { + while (isWriter) { + int i; + int j; + synchronized (this) { + if (buffIndex == writeIndex) { + try { + wait(); + } catch (InterruptedException _ex) { + } + } + if (!isWriter) { + return; + } + j = writeIndex; + if (buffIndex >= writeIndex) { + i = buffIndex - writeIndex; + } else { + i = 5000 - writeIndex; + } + } + if (i > 0) { + try { + outputStream.write(buffer, j, i); + } catch (IOException _ex) { + hasIOError = true; + } + writeIndex = (writeIndex + i) % 5000; + try { + if (buffIndex == writeIndex) { + outputStream.flush(); + } + } catch (IOException _ex) { + hasIOError = true; + } + } + } + } + + public void printDebug() { + System.out.println("dummy:" + closed); + System.out.println("tcycl:" + writeIndex); + System.out.println("tnum:" + buffIndex); + System.out.println("writer:" + isWriter); + System.out.println("ioerror:" + hasIOError); + try { + System.out.println("available:" + available()); + } catch (IOException _ex) { + } + } + + private InputStream inputStream; + private OutputStream outputStream; + private final Socket socket; + private boolean closed; + private final RSApplet rsApplet; + private byte[] buffer; + private int writeIndex; + private int buffIndex; + private boolean isWriter; + private boolean hasIOError; +} diff --git a/2006Redone Client/src/Runnable_Impl1.java b/2006Redone Client/src/Runnable_Impl1.java new file mode 100644 index 00000000..1e5222ac --- /dev/null +++ b/2006Redone Client/src/Runnable_Impl1.java @@ -0,0 +1,18 @@ +/* Runnable_Impl1 - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ + +public interface Runnable_Impl1 extends Runnable +{ + public void method10(int[] is, int i); + + public void method11(boolean bool); + + public void method12(boolean bool); + + public void close(); + + public int method14(int i); + + public void method15(byte i); +} diff --git a/2006Redone Client/src/Signlink.java b/2006Redone Client/src/Signlink.java new file mode 100644 index 00000000..df95fc78 --- /dev/null +++ b/2006Redone Client/src/Signlink.java @@ -0,0 +1,420 @@ +import java.applet.Applet; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.net.InetAddress; +import java.net.Socket; +import java.net.URL; + +import javax.sound.midi.MidiChannel; +import javax.sound.midi.MidiSystem; +import javax.sound.midi.Sequence; +import javax.sound.midi.Sequencer; +import javax.sound.midi.ShortMessage; +import javax.sound.midi.Synthesizer; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.FloatControl; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.UnsupportedAudioFileException; + +public final class Signlink implements Runnable { + + public static final void startpriv(InetAddress inetaddress) { + threadliveid = (int) (Math.random() * 99999999D); + if (active) { + try { + Thread.sleep(500L); + } catch (Exception _ex) { + } + active = false; + } + socketreq = 0; + threadreq = null; + dnsreq = null; + saveReq = null; + urlreq = null; + socketip = inetaddress; + Thread thread = new Thread(new Signlink()); + thread.setDaemon(true); + thread.start(); + while (!active) { + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + } + + enum Position { + LEFT, RIGHT, NORMAL + }; + + private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb + private Position curPosition; + + @Override + public void run() { + active = true; + String s = findcachedir(); + try { + cache_dat = new RandomAccessFile(s + "main_file_cache.dat", "rw"); + for (int j = 0; j < 5; j++) + cache_idx[j] = new RandomAccessFile(s + "main_file_cache.idx" + j, "rw"); + } catch (Exception exception) { + exception.printStackTrace(); + } + for (int i = threadliveid; threadliveid == i;) { + if (socketreq != 0) { + try { + socket = new Socket(socketip, socketreq); + } catch (Exception _ex) { + socket = null; + } + socketreq = 0; + } else if (threadreq != null) { + Thread thread = new Thread(threadreq); + thread.setDaemon(true); + thread.start(); + thread.setPriority(threadreqpri); + threadreq = null; + } else if (dnsreq != null) { + try { + dns = InetAddress.getByName(dnsreq).getHostName(); + } catch (Exception _ex) { + dns = "unknown"; + } + dnsreq = null; + } else if (saveReq != null) { + if (savebuf != null) + try { + FileOutputStream fileoutputstream = new FileOutputStream(s + saveReq); + fileoutputstream.write(savebuf, 0, savelen); + fileoutputstream.close(); + } catch (Exception _ex) { + } + if (waveplay) { + String wave = s + saveReq; + waveplay = false; + AudioInputStream audioInputStream = null; + try { + audioInputStream = AudioSystem.getAudioInputStream(new File(wave)); + } catch (UnsupportedAudioFileException e1) { + e1.printStackTrace(); + return; + } catch (IOException e1) { + e1.printStackTrace(); + return; + } + AudioFormat format = audioInputStream.getFormat(); + SourceDataLine auline = null; + DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); + try { + auline = (SourceDataLine) AudioSystem.getLine(info); + auline.open(format); + } catch (LineUnavailableException e) { + e.printStackTrace(); + return; + } catch (Exception e) { + e.printStackTrace(); + return; + } + if (auline.isControlSupported(FloatControl.Type.PAN)) { + FloatControl pan = (FloatControl) auline.getControl(FloatControl.Type.PAN); + if (curPosition == Position.RIGHT) + pan.setValue(1.0f); + else if (curPosition == Position.LEFT) + pan.setValue(-1.0f); + } + auline.start(); + int nBytesRead = 0; + byte[] abData = new byte[EXTERNAL_BUFFER_SIZE]; + try { + while (nBytesRead != -1) { + nBytesRead = audioInputStream.read(abData, 0, + abData.length); + if (nBytesRead >= 0) + auline.write(abData, 0, nBytesRead); + } + } catch (IOException e) { + e.printStackTrace(); + return; + } finally { + auline.drain(); + auline.close(); + } + } + if (play) { + midi = s + saveReq; + try { + if (music != null) { + music.stop(); + music.close(); + } + playMidi(midi); + } catch (Exception ex) { + ex.printStackTrace(); + } + play = false; + } + saveReq = null; + } else if (urlreq != null) { + try { + System.out.println("urlstream"); + urlstream = new DataInputStream((new URL(mainapp.getCodeBase(), urlreq)).openStream()); + } catch (Exception _ex) { + urlstream = null; + } + urlreq = null; + } + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + } + + /** + * Plays the specified midi sequence. + * @param location + */ + private void playMidi(String location) { + music = null; + synthesizer = null; + sequence = null; + File midiFile = new File(location); + try { + sequence = MidiSystem.getSequence(midiFile); + music = MidiSystem.getSequencer(); + music.open(); + music.setSequence(sequence); + } catch (Exception e) { + System.err.println("Problem loading MIDI file."); + e.printStackTrace(); + return; + } + if (music instanceof Synthesizer) { + synthesizer = (Synthesizer) music; + } else { + try { + synthesizer = MidiSystem.getSynthesizer(); + synthesizer.open(); + if (synthesizer.getDefaultSoundbank() == null) { + music.getTransmitter().setReceiver(MidiSystem.getReceiver()); + } else { + music.getTransmitter().setReceiver(synthesizer.getReceiver()); + } + } catch (Exception e) { + e.printStackTrace(); + return; + } + } + music.setLoopCount(Sequencer.LOOP_CONTINUOUSLY); + music.start(); + setVolume(midiVolume); + } + + /** + * Sets the volume for the midi synthesizer. + * @param value + */ + public static boolean setVolume(int value) { + if (synthesizer == null) { + return false; + } + int CHANGE_VOLUME = 7; + midiVolume = value; + if (synthesizer.getDefaultSoundbank() == null) { + try { + ShortMessage volumeMessage = new ShortMessage(); + for (int i = 0; i < 16; i++) { + volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, CHANGE_VOLUME, midiVolume); + volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, 39, midiVolume); + MidiSystem.getReceiver().send(volumeMessage, -1); + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } else { + try { + MidiChannel[] channels = synthesizer.getChannels(); + for (int c = 0; channels != null && c < channels.length; c++) { + channels[c].controlChange(CHANGE_VOLUME, midiVolume); + channels[c].controlChange(39, midiVolume); + } + } catch (Exception e){ + e.printStackTrace(); + return false; + } + } + return true; + } + + /** + * Fades the volume of the midi out. + * Stops the current midi playing. + */ + public static void fadeOut() { + if (music == null) { + return; + } + int volume = midiVolume; + if (music.isRunning()) { + for (int index = midiVolume; index > 0 && volume > 0; index--) { + volume--; + setVolume(volume); + } + } + } + + public static Sequencer music = null; + public static Sequence sequence = null; + public static Synthesizer synthesizer = null; + + public static String findcachedir() { + String path = System.getProperty("user.home") + "/.2006redone_file_system/"; + File file = new File(path); + if (!file.exists()) { + if (!file.mkdirs()) { + return secondDir(); + } + } + return path; + } + + public static String secondDir() { + File file = new File("C:/.2006redone_file_system/"); + if (!file.exists()) { + file.mkdirs(); + } + return file.toString(); + } + + public static synchronized Socket opensocket(int i) throws IOException { + for (socketreq = i; socketreq != 0;) { + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + + if (socket == null) { + throw new IOException("could not open socket"); + } else { + return socket; + } + } + + public static synchronized DataInputStream openurl(String s) throws IOException { + for (urlreq = s; urlreq != null;) { + try { + Thread.sleep(50L); + } catch (Exception _ex) { + } + } + + if (urlstream == null) { + throw new IOException("could not open: " + s); + } else { + return urlstream; + } + } + + public static synchronized void dnslookup(String s) { + dns = s; + dnsreq = s; + } + + public static synchronized void startthread(Runnable runnable, int i) { + threadreqpri = i; + threadreq = runnable; + } + + public static synchronized boolean wavesave(byte abyte0[], int i) { + if (i > 0x1e8480) { + return false; + } + if (saveReq != null) { + return false; + } else { + wavepos = (wavepos + 1) % 5; + savelen = i; + savebuf = abyte0; + waveplay = true; + saveReq = "sound" + wavepos + ".wav"; + return true; + } + } + + public static synchronized boolean wavereplay() { + if (saveReq != null) { + return false; + } else { + savebuf = null; + waveplay = true; + saveReq = "sound" + wavepos + ".wav"; + return true; + } + } + + public static synchronized void saveMidi(byte abyte0[], int i) { + if (i > 0x1e8480) { + return; + } + if (saveReq != null) { + } else { + midiPos = (midiPos + 1) % 5; + savelen = i; + savebuf = abyte0; + play = true; + saveReq = "jingle" + midiPos + ".mid"; + } + } + + public static void reporterror(String s) { + System.out.println("Error: " + s); + } + + private Signlink() { + } + + public static final int clientversion = 317; + public static int storeid = 32; + public static RandomAccessFile cache_dat = null; + public static final RandomAccessFile[] cache_idx = new RandomAccessFile[5]; + public static boolean sunjava; + public static Applet mainapp = null; + private static boolean active; + private static int threadliveid; + private static InetAddress socketip; + private static int socketreq; + private static Socket socket = null; + private static int threadreqpri = 1; + private static Runnable threadreq = null; + private static String dnsreq = null; + public static String dns = null; + private static String urlreq = null; + private static DataInputStream urlstream = null; + public static boolean reporterror = true; + public static String errorname = ""; + public static Midi midii = new Midi(); + private static int savelen; + private static String saveReq = null; + private static byte savebuf[] = null; + public static boolean play; + private static int midiPos; + public static String midi = null; + public static int midiVolume; + public static int midifade; + private static boolean waveplay; + private static int wavepos; + public static String wave = null; + public static int wavevol; + +} \ No newline at end of file diff --git a/2006Redone Client/src/SizeConstants.java b/2006Redone Client/src/SizeConstants.java new file mode 100644 index 00000000..c3e68400 --- /dev/null +++ b/2006Redone Client/src/SizeConstants.java @@ -0,0 +1,64 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + + +final class SizeConstants { + + public static final int[] anIntArray552 = { + 6, 21, 25, 33, 254, 127, 183, 87, 216, 215, + 211, 48, 15, 195, 149, 233, 162, 102, 104, 179, + 222, 103, 224, 81, 152, 89, 45, 11, 197, 187, + 210, 37, 135, 220, 137, 128, 63, 188, 207, 144, + 201, 161, 28, 192, 206, 32, 115, 57, 196, 22, + 132, 226, 227, 169, 237, 105, 174, 109, 5, 55, + 205, 156, 8, 34, 113, 176, 209, 3, 50, 117, + 122, 189, 101, 142, 246, 163, 238, 76, 74, 84, + 91, 217, 58, 23, 118, 66, 35, 164, 114, 138, + 96, 110, 29, 235, 147, 249, 214, 198, 242, 56, + 94, 248, 59, 253, 150, 16, 13, 46, 24, 130, + 232, 153, 167, 229, 79, 134, 26, 191, 0, 213, + 204, 241, 160, 39, 180, 49, 250, 47, 140, 193, + 202, 108, 120, 247, 106, 194, 65, 27, 93, 143, + 186, 171, 125, 54, 155, 190, 139, 165, 77, 178, + 72, 99, 61, 141, 116, 100, 80, 184, 154, 145, + 131, 12, 90, 42, 255, 75, 44, 78, 172, 107, + 52, 7, 119, 146, 38, 218, 10, 223, 182, 240, + 159, 88, 158, 64, 221, 200, 1, 43, 252, 62, + 40, 230, 129, 18, 111, 51, 17, 53, 136, 20, + 60, 225, 30, 9, 239, 97, 234, 41, 203, 236, + 36, 185, 212, 19, 245, 251, 208, 175, 243, 86, + 2, 69, 181, 151, 14, 166, 70, 98, 124, 126, + 67, 157, 199, 112, 123, 177, 82, 168, 71, 170, + 95, 31, 92, 4, 231, 219, 73, 85, 244, 148, + 173, 228, 121, 83, 133, 68, 0 + }; + public static final int[] packetSizes = { + 0, 0, 0, 0, 6, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 4, 3, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, + 9, 0, 0, -2, 0, 0, 0, 0, 0, 0, + -2, 1, 0, 0, 2, -2, 0, 0, 0, 0, + 6, 3, 2, 4, 2, 4, 0, 0, 0, 4, + 0, -2, 0, 0, 7, 2, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, + 0, 2, 0, 0, -1, 4, 1, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 15, 0, 0, + 0, 4, 4, 0, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 14, 0, 0, + 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 2, 0, 6, 0, 0, 0, + 0, 3, 0, 0, 5, 0, 10, 6, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 3, 0, 2, 0, + 0, 0, 0, 0, -2, 7, 0, 0, 2, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, -2, 0, 0, 0, 0, 6, 0, 4, 3, + 0, 0, 0, -1, 6, 0, 0 + }; +} diff --git a/2006Redone Client/src/Skills.java b/2006Redone Client/src/Skills.java new file mode 100644 index 00000000..9d4dabfc --- /dev/null +++ b/2006Redone Client/src/Skills.java @@ -0,0 +1,11 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Skills { + + public static final int skillsCount = 25; + public static final String[] skillNames = {"attack", "defence", "strength", "hitpoints", "ranged", "prayer", "magic", "cooking", "woodcutting", "fletching", "fishing", "firemaking", "crafting", "smithing", "mining", "herblore", "agility", "thieving", "slayer", "farming", "runecraft", "-unused-", "-unused-", "-unused-", "-unused-"}; + public static final boolean[] skillEnabled = {true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false}; + +} diff --git a/2006Redone Client/src/SoundPlayer.java b/2006Redone Client/src/SoundPlayer.java new file mode 100644 index 00000000..59e0ad80 --- /dev/null +++ b/2006Redone Client/src/SoundPlayer.java @@ -0,0 +1,115 @@ +import java.io.InputStream; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.FloatControl; + +import sun.audio.AudioPlayer; + +public class SoundPlayer implements Runnable { + + private AudioInputStream stream; + private DataLine.Info info; + private Clip sound; + + private InputStream soundStream; + private Thread player; + private int delay; + private int soundLevel; + private InputStream arg0; + public static int volume; + + /** + * Initializes the sound player. + * @param stream + * @param level + * @param delay + */ + public SoundPlayer(InputStream stream, int level, int delay) { + if (level == 0 || volume == 4 || level - volume <= 0) { + return; + } + this.soundStream = stream; + this.soundLevel = level; + this.delay = delay; + player = new Thread(this); + player.start(); + } + + /** + * Plays the sound. + */ + public void run() { + try { + AudioPlayer.player.start(arg0); + stream = AudioSystem.getAudioInputStream(soundStream); + info = new DataLine.Info(Clip.class, stream.getFormat()); + sound = (Clip) AudioSystem.getLine(info); + sound.open(stream); + FloatControl volume = (FloatControl) sound.getControl(FloatControl.Type.MASTER_GAIN); + volume.setValue(getDecibels(soundLevel - getVolume())); + if (delay > 0) { + Thread.sleep(delay); + } + sound.start(); + while (sound.isActive()) { + Thread.sleep(250); + } + Thread.sleep(10000); + sound.close(); + stream.close(); + player.interrupt(); + } catch (Exception e) { + player.interrupt(); + e.printStackTrace(); + } + } + + /** + * Sets the client's volume level. + * @param level + */ + public static void setVolume(int level) { + volume = level; + } + + /** + * Returns the client's volume level. + */ + public static int getVolume() { + return volume; + } + + /** + * Returns the decibels for a given volume level. + * @param level + * @return + */ + public float getDecibels(int level) { + switch (level) { + case 1: + return (float) -80.0; + case 2: + return (float) -70.0; + case 3: + return (float) -60.0; + case 4: + return (float) -50.0; + case 5: + return (float) -40.0; + case 6: + return (float) -30.0; + case 7: + return (float) -20.0; + case 8: + return (float) -10.0; + case 9: + return (float) -0.0; + case 10: + return (float) 6.0; + default: + return (float) 0.0; + } + } +} \ No newline at end of file diff --git a/2006Redone Client/src/Sounds.java b/2006Redone Client/src/Sounds.java new file mode 100644 index 00000000..b977be6c --- /dev/null +++ b/2006Redone Client/src/Sounds.java @@ -0,0 +1,157 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Sounds { + + private Sounds() { + aClass6Array329 = new Class6[10]; + } + + public static void unpack(Stream stream) { + aByteArray327 = new byte[0x6baa8]; + aStream_328 = new Stream(aByteArray327); + Class6.method166(); + do { + int j = stream.readUnsignedWord(); + if (j == 65535) { + return; + } + aSoundsArray325s[j] = new Sounds(); + aSoundsArray325s[j].method242(stream); + anIntArray326[j] = aSoundsArray325s[j].method243(); + } while (true); + } + + public static Stream method241(int i, int j) { + if (aSoundsArray325s[j] != null) { + Sounds sounds = aSoundsArray325s[j]; + return sounds.method244(i); + } else { + return null; + } + } + + private void method242(Stream stream) { + for (int i = 0; i < 10; i++) { + int j = stream.readUnsignedByte(); + if (j != 0) { + stream.currentOffset--; + aClass6Array329[i] = new Class6(); + aClass6Array329[i].method169(stream); + } + } + anInt330 = stream.readUnsignedWord(); + anInt331 = stream.readUnsignedWord(); + } + + private int method243() { + int j = 0x98967f; + for (int k = 0; k < 10; k++) { + if (aClass6Array329[k] != null && aClass6Array329[k].anInt114 / 20 < j) { + j = aClass6Array329[k].anInt114 / 20; + } + } + + if (anInt330 < anInt331 && anInt330 / 20 < j) { + j = anInt330 / 20; + } + if (j == 0x98967f || j == 0) { + return 0; + } + for (int l = 0; l < 10; l++) { + if (aClass6Array329[l] != null) { + aClass6Array329[l].anInt114 -= j * 20; + } + } + + if (anInt330 < anInt331) { + anInt330 -= j * 20; + anInt331 -= j * 20; + } + return j; + } + + private Stream method244(int i) { + int k = method245(i); + aStream_328.currentOffset = 0; + aStream_328.writeDWord(0x52494646); + aStream_328.method403(36 + k); + aStream_328.writeDWord(0x57415645); + aStream_328.writeDWord(0x666d7420); + aStream_328.method403(16); + aStream_328.method400(1); + aStream_328.method400(1); + aStream_328.method403(22050); + aStream_328.method403(22050); + aStream_328.method400(1); + aStream_328.method400(8); + aStream_328.writeDWord(0x64617461); + aStream_328.method403(k); + aStream_328.currentOffset += k; + return aStream_328; + } + + private int method245(int i) { + int j = 0; + for (int k = 0; k < 10; k++) { + if (aClass6Array329[k] != null && aClass6Array329[k].anInt113 + aClass6Array329[k].anInt114 > j) { + j = aClass6Array329[k].anInt113 + aClass6Array329[k].anInt114; + } + } + + if (j == 0) { + return 0; + } + int l = 22050 * j / 1000; + int i1 = 22050 * anInt330 / 1000; + int j1 = 22050 * anInt331 / 1000; + if (i1 < 0 || i1 > l || j1 < 0 || j1 > l || i1 >= j1) { + i = 0; + } + int k1 = l + (j1 - i1) * (i - 1); + for (int l1 = 44; l1 < k1 + 44; l1++) { + aByteArray327[l1] = -128; + } + + for (int i2 = 0; i2 < 10; i2++) { + if (aClass6Array329[i2] != null) { + int j2 = aClass6Array329[i2].anInt113 * 22050 / 1000; + int i3 = aClass6Array329[i2].anInt114 * 22050 / 1000; + int ai[] = aClass6Array329[i2].method167(j2, aClass6Array329[i2].anInt113); + for (int l3 = 0; l3 < j2; l3++) { + aByteArray327[l3 + i3 + 44] += (byte) (ai[l3] >> 8); + } + + } + } + + if (i > 1) { + i1 += 44; + j1 += 44; + l += 44; + int k2 = (k1 += 44) - l; + for (int j3 = l - 1; j3 >= j1; j3--) { + aByteArray327[j3 + k2] = aByteArray327[j3]; + } + + for (int k3 = 1; k3 < i; k3++) { + int l2 = (j1 - i1) * k3; + System.arraycopy(aByteArray327, i1, aByteArray327, i1 + l2, j1 - i1); + + } + + k1 -= 44; + } + return k1; + } + + private static final Sounds[] aSoundsArray325s = new Sounds[5000]; + public static final int[] anIntArray326 = new int[5000]; + private static byte[] aByteArray327; + private static Stream aStream_328; + private final Class6[] aClass6Array329; + private int anInt330; + private int anInt331; + +} diff --git a/2006Redone Client/src/SpotAnim.java b/2006Redone Client/src/SpotAnim.java new file mode 100644 index 00000000..98922cee --- /dev/null +++ b/2006Redone Client/src/SpotAnim.java @@ -0,0 +1,97 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class SpotAnim { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("spotanim.dat")); + int length = stream.readUnsignedWord(); + if (cache == null) { + cache = new SpotAnim[length]; + } + for (int j = 0; j < length; j++) { + if (cache[j] == null) { + cache[j] = new SpotAnim(); + } + cache[j].anInt404 = j; + cache[j].readValues(stream); + } + + } + + private void readValues(Stream stream) { + do { + int i = stream.readUnsignedByte(); + if (i == 0) { + return; + } + if (i == 1) { + anInt405 = stream.readUnsignedWord(); + } else if (i == 2) { + anInt406 = stream.readUnsignedWord(); + if (Animation.anims != null) { + aAnimation_407 = Animation.anims[anInt406]; + } + } else if (i == 4) { + anInt410 = stream.readUnsignedWord(); + } else if (i == 5) { + anInt411 = stream.readUnsignedWord(); + } else if (i == 6) { + anInt412 = stream.readUnsignedWord(); + } else if (i == 7) { + anInt413 = stream.readUnsignedByte(); + } else if (i == 8) { + anInt414 = stream.readUnsignedByte(); + } else if (i >= 40 && i < 50) { + anIntArray408[i - 40] = stream.readUnsignedWord(); + } else if (i >= 50 && i < 60) { + anIntArray409[i - 50] = stream.readUnsignedWord(); + } else { + System.out.println("Error unrecognised spotanim config code: " + i); + } + } while (true); + } + + public Model getModel() { + Model model = (Model) aMRUNodes_415.insertFromCache(anInt404); + if (model != null) { + return model; + } + model = Model.method462(anInt405); + if (model == null) { + return null; + } + for (int i = 0; i < 6; i++) { + if (anIntArray408[0] != 0) { + model.method476(anIntArray408[i], anIntArray409[i]); + } + } + + aMRUNodes_415.removeFromCache(model, anInt404); + return model; + } + + private SpotAnim() { + anInt406 = -1; + anIntArray408 = new int[6]; + anIntArray409 = new int[6]; + anInt410 = 128; + anInt411 = 128; + } + + public static SpotAnim cache[]; + private int anInt404; + private int anInt405; + private int anInt406; + public Animation aAnimation_407; + private final int[] anIntArray408; + private final int[] anIntArray409; + public int anInt410; + public int anInt411; + public int anInt412; + public int anInt413; + public int anInt414; + public static MRUNodes aMRUNodes_415 = new MRUNodes(30); + +} diff --git a/2006Redone Client/src/Sprite.java b/2006Redone Client/src/Sprite.java new file mode 100644 index 00000000..2ba9dcf2 --- /dev/null +++ b/2006Redone Client/src/Sprite.java @@ -0,0 +1,517 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.awt.Component; +import java.awt.Image; +import java.awt.MediaTracker; +import java.awt.Toolkit; +import java.awt.image.PixelGrabber; + +public final class Sprite extends DrawingArea { + + public Sprite(int i, int j) { + pixels = new int[i * j]; + width = trimWidth = i; + height = trimHeight = j; + anInt1442 = anInt1443 = 0; + } + + public Sprite(byte abyte0[], Component component) { + try { + // Image image = + // Toolkit.getDefaultToolkit().getImage(signlink.findcachedir()+"mopar.jpg"); + Image image = Toolkit.getDefaultToolkit().createImage(abyte0); + MediaTracker mediatracker = new MediaTracker(component); + mediatracker.addImage(image, 0); + mediatracker.waitForAll(); + width = image.getWidth(component); + height = image.getHeight(component); + trimWidth = width; + trimHeight = height; + anInt1442 = 0; + anInt1443 = 0; + pixels = new int[width * height]; + PixelGrabber pixelgrabber = new PixelGrabber(image, 0, 0, width, height, pixels, 0, width); + pixelgrabber.grabPixels(); + } catch (Exception _ex) { + System.out.println("Error converting jpg"); + } + } + + public Sprite(StreamLoader streamLoader, String s, int i) { + Stream stream = new Stream(streamLoader.getDataForName(s + ".dat")); + Stream stream_1 = new Stream(streamLoader.getDataForName("index.dat")); + stream_1.currentOffset = stream.readUnsignedWord(); + trimWidth = stream_1.readUnsignedWord(); + trimHeight = stream_1.readUnsignedWord(); + int j = stream_1.readUnsignedByte(); + int ai[] = new int[j]; + for (int k = 0; k < j - 1; k++) { + ai[k + 1] = stream_1.read3Bytes(); + if (ai[k + 1] == 0) { + ai[k + 1] = 1; + } + } + + for (int l = 0; l < i; l++) { + stream_1.currentOffset += 2; + stream.currentOffset += stream_1.readUnsignedWord() * stream_1.readUnsignedWord(); + stream_1.currentOffset++; + } + + anInt1442 = stream_1.readUnsignedByte(); + anInt1443 = stream_1.readUnsignedByte(); + width = stream_1.readUnsignedWord(); + height = stream_1.readUnsignedWord(); + int i1 = stream_1.readUnsignedByte(); + int j1 = width * height; + pixels = new int[j1]; + if (i1 == 0) { + for (int k1 = 0; k1 < j1; k1++) { + pixels[k1] = ai[stream.readUnsignedByte()]; + } + + return; + } + if (i1 == 1) { + for (int l1 = 0; l1 < width; l1++) { + for (int i2 = 0; i2 < height; i2++) { + pixels[l1 + i2 * width] = ai[stream.readUnsignedByte()]; + } + + } + + } + } + + public void method343() { + DrawingArea.initDrawingArea(height, width, pixels); + } + + public void method344(int i, int j, int k) { + for (int i1 = 0; i1 < pixels.length; i1++) { + int j1 = pixels[i1]; + if (j1 != 0) { + int k1 = j1 >> 16 & 0xff; + k1 += i; + if (k1 < 1) { + k1 = 1; + } else if (k1 > 255) { + k1 = 255; + } + int l1 = j1 >> 8 & 0xff; + l1 += j; + if (l1 < 1) { + l1 = 1; + } else if (l1 > 255) { + l1 = 255; + } + int i2 = j1 & 0xff; + i2 += k; + if (i2 < 1) { + i2 = 1; + } else if (i2 > 255) { + i2 = 255; + } + pixels[i1] = (k1 << 16) + (l1 << 8) + i2; + } + } + + } + + public void method345() { + /*int ai[] = new int[trimWidth * trimHeight]; + for (int j = 0; j < height; j++) { + System.arraycopy(pixels, j * width, ai, j + anInt1443 * trimWidth + anInt1442, width); + } + + pixels = ai; + width = trimWidth; + height = trimHeight; + anInt1442 = 0; + anInt1443 = 0;*/ + int ai[] = new int[trimWidth * trimHeight]; + for (int j = 0; j < height; j++) { + for (int k = 0; k < width; k++) + ai[(j + anInt1443) * trimWidth + (k + anInt1442)] = pixels[j + * width + k]; + } + pixels = ai; + width = trimWidth; + height = trimHeight; + anInt1442 = 0; + anInt1443 = 0; + } + + public void method346(int i, int j) { + i += anInt1442; + j += anInt1443; + int l = i + j * DrawingArea.width; + int i1 = 0; + int j1 = height; + int k1 = width; + int l1 = DrawingArea.width - k1; + int i2 = 0; + if (j < DrawingArea.topY) { + int j2 = DrawingArea.topY - j; + j1 -= j2; + j = DrawingArea.topY; + i1 += j2 * k1; + l += j2 * DrawingArea.width; + } + if (j + j1 > DrawingArea.bottomY) { + j1 -= j + j1 - DrawingArea.bottomY; + } + if (i < DrawingArea.topX) { + int k2 = DrawingArea.topX - i; + k1 -= k2; + i = DrawingArea.topX; + i1 += k2; + l += k2; + i2 += k2; + l1 += k2; + } + if (i + k1 > DrawingArea.bottomX) { + int l2 = i + k1 - DrawingArea.bottomX; + k1 -= l2; + i2 += l2; + l1 += l2; + } + if (k1 <= 0 || j1 <= 0) { + } else { + method347(l, k1, j1, i2, i1, l1, pixels, DrawingArea.pixels); + } + } + + private void method347(int i, int j, int k, int l, int i1, int k1, int ai[], int ai1[]) { + int l1 = -(j >> 2); + j = -(j & 3); + for (int i2 = -k; i2 < 0; i2++) { + for (int j2 = l1; j2 < 0; j2++) { + ai1[i++] = ai[i1++]; + ai1[i++] = ai[i1++]; + ai1[i++] = ai[i1++]; + ai1[i++] = ai[i1++]; + } + + for (int k2 = j; k2 < 0; k2++) { + ai1[i++] = ai[i1++]; + } + + i += k1; + i1 += l; + } + } + + public void drawSprite1(int i, int j) { + int k = 128;// was parameter + i += anInt1442; + j += anInt1443; + int i1 = i + j * DrawingArea.width; + int j1 = 0; + int k1 = height; + int l1 = width; + int i2 = DrawingArea.width - l1; + int j2 = 0; + if (j < DrawingArea.topY) { + int k2 = DrawingArea.topY - j; + k1 -= k2; + j = DrawingArea.topY; + j1 += k2 * l1; + i1 += k2 * DrawingArea.width; + } + if (j + k1 > DrawingArea.bottomY) { + k1 -= j + k1 - DrawingArea.bottomY; + } + if (i < DrawingArea.topX) { + int l2 = DrawingArea.topX - i; + l1 -= l2; + i = DrawingArea.topX; + j1 += l2; + i1 += l2; + j2 += l2; + i2 += l2; + } + if (i + l1 > DrawingArea.bottomX) { + int i3 = i + l1 - DrawingArea.bottomX; + l1 -= i3; + j2 += i3; + i2 += i3; + } + if (!(l1 <= 0 || k1 <= 0)) { + method351(j1, l1, DrawingArea.pixels, pixels, j2, k1, i2, k, i1); + } + } + + public void drawSprite(int i, int k) { + i += anInt1442; + k += anInt1443; + int l = i + k * DrawingArea.width; + int i1 = 0; + int j1 = height; + int k1 = width; + int l1 = DrawingArea.width - k1; + int i2 = 0; + if (k < DrawingArea.topY) { + int j2 = DrawingArea.topY - k; + j1 -= j2; + k = DrawingArea.topY; + i1 += j2 * k1; + l += j2 * DrawingArea.width; + } + if (k + j1 > DrawingArea.bottomY) { + j1 -= k + j1 - DrawingArea.bottomY; + } + if (i < DrawingArea.topX) { + int k2 = DrawingArea.topX - i; + k1 -= k2; + i = DrawingArea.topX; + i1 += k2; + l += k2; + i2 += k2; + l1 += k2; + } + if (i + k1 > DrawingArea.bottomX) { + int l2 = i + k1 - DrawingArea.bottomX; + k1 -= l2; + i2 += l2; + l1 += l2; + } + if (!(k1 <= 0 || j1 <= 0)) { + method349(DrawingArea.pixels, pixels, i1, l, k1, j1, l1, i2); + } + } + + private void method349(int ai[], int ai1[], int j, int k, int l, int i1, int j1, int k1) { + int i;// was parameter + int l1 = -(l >> 2); + l = -(l & 3); + for (int i2 = -i1; i2 < 0; i2++) { + for (int j2 = l1; j2 < 0; j2++) { + i = ai1[j++]; + if (i != 0) { + ai[k++] = i; + } else { + k++; + } + i = ai1[j++]; + if (i != 0) { + ai[k++] = i; + } else { + k++; + } + i = ai1[j++]; + if (i != 0) { + ai[k++] = i; + } else { + k++; + } + i = ai1[j++]; + if (i != 0) { + ai[k++] = i; + } else { + k++; + } + } + + for (int k2 = l; k2 < 0; k2++) { + i = ai1[j++]; + if (i != 0) { + ai[k++] = i; + } else { + k++; + } + } + + k += j1; + j += k1; + } + + } + + private void method351(int i, int j, int ai[], int ai1[], int l, int i1, int j1, int k1, int l1) { + int k;// was parameter + int j2 = 256 - k1; + for (int k2 = -i1; k2 < 0; k2++) { + for (int l2 = -j; l2 < 0; l2++) { + k = ai1[i++]; + if (k != 0) { + int i3 = ai[l1]; + ai[l1++] = ((k & 0xff00ff) * k1 + (i3 & 0xff00ff) * j2 & 0xff00ff00) + ((k & 0xff00) * k1 + (i3 & 0xff00) * j2 & 0xff0000) >> 8; + } else { + l1++; + } + } + + l1 += j1; + i += l; + } + } + + public void method352(int i, int j, int ai[], int k, int ai1[], int i1, int j1, int k1, int l1, int i2) { + try { + int j2 = -l1 / 2; + int k2 = -i / 2; + int l2 = (int) (Math.sin(j / 326.11000000000001D) * 65536D); + int i3 = (int) (Math.cos(j / 326.11000000000001D) * 65536D); + l2 = l2 * k >> 8; + i3 = i3 * k >> 8; + int j3 = (i2 << 16) + k2 * l2 + j2 * i3; + int k3 = (i1 << 16) + k2 * i3 - j2 * l2; + int l3 = k1 + j1 * DrawingArea.width; + for (j1 = 0; j1 < i; j1++) { + int i4 = ai1[j1]; + int j4 = l3 + i4; + int k4 = j3 + i3 * i4; + int l4 = k3 - l2 * i4; + for (k1 = -ai[j1]; k1 < 0; k1++) { + DrawingArea.pixels[j4++] = pixels[(k4 >> 16) + (l4 >> 16) * width]; + k4 += i3; + l4 -= l2; + } + + j3 += l2; + k3 += i3; + l3 += DrawingArea.width; + } + + } catch (Exception _ex) { + } + } + + public void method353(int i, double d, int l1) { + // all of the following were parameters + int j = 15; + int k = 20; + int l = 15; + int j1 = 256; + int k1 = 20; + // all of the previous were parameters + try { + int i2 = -k / 2; + int j2 = -k1 / 2; + int k2 = (int) (Math.sin(d) * 65536D); + int l2 = (int) (Math.cos(d) * 65536D); + k2 = k2 * j1 >> 8; + l2 = l2 * j1 >> 8; + int i3 = (l << 16) + j2 * k2 + i2 * l2; + int j3 = (j << 16) + j2 * l2 - i2 * k2; + int k3 = l1 + i * DrawingArea.width; + for (i = 0; i < k1; i++) { + int l3 = k3; + int i4 = i3; + int j4 = j3; + for (l1 = -k; l1 < 0; l1++) { + int k4 = pixels[(i4 >> 16) + (j4 >> 16) * width]; + if (k4 != 0) { + DrawingArea.pixels[l3++] = k4; + } else { + l3++; + } + i4 += l2; + j4 -= k2; + } + + i3 += k2; + j3 += l2; + k3 += DrawingArea.width; + } + + } catch (Exception _ex) { + } + } + + public void method354(Background background, int i, int j) { + j += anInt1442; + i += anInt1443; + int k = j + i * DrawingArea.width; + int l = 0; + int i1 = height; + int j1 = width; + int k1 = DrawingArea.width - j1; + int l1 = 0; + if (i < DrawingArea.topY) { + int i2 = DrawingArea.topY - i; + i1 -= i2; + i = DrawingArea.topY; + l += i2 * j1; + k += i2 * DrawingArea.width; + } + if (i + i1 > DrawingArea.bottomY) { + i1 -= i + i1 - DrawingArea.bottomY; + } + if (j < DrawingArea.topX) { + int j2 = DrawingArea.topX - j; + j1 -= j2; + j = DrawingArea.topX; + l += j2; + k += j2; + l1 += j2; + k1 += j2; + } + if (j + j1 > DrawingArea.bottomX) { + int k2 = j + j1 - DrawingArea.bottomX; + j1 -= k2; + l1 += k2; + k1 += k2; + } + if (!(j1 <= 0 || i1 <= 0)) { + method355(pixels, j1, background.aByteArray1450, i1, DrawingArea.pixels, 0, k1, k, l1, l); + } + } + + private void method355(int ai[], int i, byte abyte0[], int j, int ai1[], int k, int l, int i1, int j1, int k1) { + int l1 = -(i >> 2); + i = -(i & 3); + for (int j2 = -j; j2 < 0; j2++) { + for (int k2 = l1; k2 < 0; k2++) { + k = ai[k1++]; + if (k != 0 && abyte0[i1] == 0) { + ai1[i1++] = k; + } else { + i1++; + } + k = ai[k1++]; + if (k != 0 && abyte0[i1] == 0) { + ai1[i1++] = k; + } else { + i1++; + } + k = ai[k1++]; + if (k != 0 && abyte0[i1] == 0) { + ai1[i1++] = k; + } else { + i1++; + } + k = ai[k1++]; + if (k != 0 && abyte0[i1] == 0) { + ai1[i1++] = k; + } else { + i1++; + } + } + + for (int l2 = i; l2 < 0; l2++) { + k = ai[k1++]; + if (k != 0 && abyte0[i1] == 0) { + ai1[i1++] = k; + } else { + i1++; + } + } + + i1 += l; + k1 += j1; + } + + } + + public int pixels[]; + public int width; + public int height; + private int anInt1442; + private int anInt1443; + public int trimWidth; + public int trimHeight; +} diff --git a/2006Redone Client/src/Stream.java b/2006Redone Client/src/Stream.java new file mode 100644 index 00000000..3310b7ee --- /dev/null +++ b/2006Redone Client/src/Stream.java @@ -0,0 +1,336 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.math.BigInteger; + +public final class Stream extends NodeSub { + + public static Stream create() { + synchronized (nodeList) { + Stream stream = null; + if (anInt1412 > 0) { + anInt1412--; + stream = (Stream) nodeList.popHead(); + } + if (stream != null) { + stream.currentOffset = 0; + return stream; + } + } + Stream stream_1 = new Stream(null); + stream_1.currentOffset = 0; + stream_1.buffer = new byte[5000]; + return stream_1; + } + + public int method426() { + return buffer[currentOffset++] - 128 & 0xff; + } + + public Stream(byte abyte0[]) { + buffer = abyte0; + currentOffset = 0; + } + + public void createFrame(int i) { + buffer[currentOffset++] = (byte) (i + encryption.getNextKey()); + } + + public void writeWordBigEndian(int i) { + buffer[currentOffset++] = (byte) i; + } + + public void writeWord(int i) { + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void method400(int i) { + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + } + + public void writeDWordBigEndian(int i) { + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void writeDWord(int i) { + buffer[currentOffset++] = (byte) (i >> 24); + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void method403(int j) { + buffer[currentOffset++] = (byte) j; + buffer[currentOffset++] = (byte) (j >> 8); + buffer[currentOffset++] = (byte) (j >> 16); + buffer[currentOffset++] = (byte) (j >> 24); + } + + public void writeQWord(long l) { + try { + buffer[currentOffset++] = (byte) (int) (l >> 56); + buffer[currentOffset++] = (byte) (int) (l >> 48); + buffer[currentOffset++] = (byte) (int) (l >> 40); + buffer[currentOffset++] = (byte) (int) (l >> 32); + buffer[currentOffset++] = (byte) (int) (l >> 24); + buffer[currentOffset++] = (byte) (int) (l >> 16); + buffer[currentOffset++] = (byte) (int) (l >> 8); + buffer[currentOffset++] = (byte) (int) l; + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("14395, " + 5 + ", " + l + ", " + runtimeexception.toString()); + throw new RuntimeException(); + } + } + + public void writeString(String s) { + // s.getBytes(0, s.length(), buffer, currentOffset); //deprecated + System.arraycopy(s.getBytes(), 0, buffer, currentOffset, s.length()); + currentOffset += s.length(); + buffer[currentOffset++] = 10; + } + + public void writeBytes(byte abyte0[], int i, int j) { + for (int k = j; k < j + i; k++) { + buffer[currentOffset++] = abyte0[k]; + } + + } + + public void writeBytes(int i) { + buffer[currentOffset - i - 1] = (byte) i; + } + + public int readUnsignedByte() { + return buffer[currentOffset++] & 0xff; + } + + public byte readSignedByte() { + return buffer[currentOffset++]; + } + + public int readUnsignedWord() { + currentOffset += 2; + return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + } + + public int readSignedWord() { + currentOffset += 2; + int i = ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int read3Bytes() { + currentOffset += 3; + return ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + } + + public int readDWord() { + currentOffset += 4; + return ((buffer[currentOffset - 4] & 0xff) << 24) + ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + } + + public long readQWord() { + long l = readDWord() & 0xffffffffL; + long l1 = readDWord() & 0xffffffffL; + return (l << 32) + l1; + } + + public String readString() { + int i = currentOffset; + while (buffer[currentOffset++] != 10) { + ; + } + return new String(buffer, i, currentOffset - i - 1); + } + + public byte[] readBytes() { + int i = currentOffset; + while (buffer[currentOffset++] != 10) { + ; + } + byte abyte0[] = new byte[currentOffset - i - 1]; + System.arraycopy(buffer, i, abyte0, i - i, currentOffset - 1 - i); + return abyte0; + } + + public void readBytes(int i, int j, byte abyte0[]) { + for (int l = j; l < j + i; l++) { + abyte0[l] = buffer[currentOffset++]; + } + } + + public void initBitAccess() { + bitPosition = currentOffset * 8; + } + + public int readBits(int i) { + int k = bitPosition >> 3; + int l = 8 - (bitPosition & 7); + int i1 = 0; + bitPosition += i; + for (; i > l; l = 8) { + i1 += (buffer[k++] & anIntArray1409[l]) << i - l; + i -= l; + } + if (i == l) { + i1 += buffer[k] & anIntArray1409[l]; + } else { + i1 += buffer[k] >> l - i & anIntArray1409[i]; + } + return i1; + } + + public void finishBitAccess() { + currentOffset = (bitPosition + 7) / 8; + } + + public int method421() { + int i = buffer[currentOffset] & 0xff; + if (i < 128) { + return readUnsignedByte() - 64; + } else { + return readUnsignedWord() - 49152; + } + } + + public int method422() { + int i = buffer[currentOffset] & 0xff; + if (i < 128) { + return readUnsignedByte(); + } else { + return readUnsignedWord() - 32768; + } + } + + public void doKeys() { + int i = currentOffset; + currentOffset = 0; + byte abyte0[] = new byte[i]; + readBytes(i, 0, abyte0); + BigInteger biginteger2 = new BigInteger(abyte0); + BigInteger biginteger3 = biginteger2.modPow(ClientSettings.RSA_EXPONENT, ClientSettings.RSA_MODULUS); + byte abyte1[] = biginteger3.toByteArray(); + currentOffset = 0; + writeWordBigEndian(abyte1.length); + writeBytes(abyte1, abyte1.length, 0); + } + + + public void method424(int i) { + buffer[currentOffset++] = (byte) -i; + } + + public void method425(int j) { + buffer[currentOffset++] = (byte) (128 - j); + } + + public int readUnsignedByteA() { + return buffer[currentOffset++] - 128 & 0xff; + } + + public int method427() { + return -buffer[currentOffset++] & 0xff; + } + + public int method428() { + return 128 - buffer[currentOffset++] & 0xff; + } + + public byte method429() { + return (byte) -buffer[currentOffset++]; + } + + public byte method430() { + return (byte) (128 - buffer[currentOffset++]); + } + + public void method431(int i) { + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + } + + public void method432(int j) { + buffer[currentOffset++] = (byte) (j >> 8); + buffer[currentOffset++] = (byte) (j + 128); + } + + public void method433(int j) { + buffer[currentOffset++] = (byte) (j + 128); + buffer[currentOffset++] = (byte) (j >> 8); + } + + public int method434() { + currentOffset += 2; + return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff); + } + + public int method435() { + currentOffset += 2; + return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] - 128 & 0xff); + } + + public int method436() { + currentOffset += 2; + return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff); + } + + public int method437() { + currentOffset += 2; + int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff); + if (j > 32767) { + j -= 0x10000; + } + return j; + } + + public int method438() { + currentOffset += 2; + int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff); + if (j > 32767) { + j -= 0x10000; + } + return j; + } + + public int method439() { + currentOffset += 4; + return ((buffer[currentOffset - 2] & 0xff) << 24) + ((buffer[currentOffset - 1] & 0xff) << 16) + ((buffer[currentOffset - 4] & 0xff) << 8) + (buffer[currentOffset - 3] & 0xff); + } + + public int method440() { + currentOffset += 4; + return ((buffer[currentOffset - 3] & 0xff) << 24) + ((buffer[currentOffset - 4] & 0xff) << 16) + ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff); + } + + public void method441(int i, byte abyte0[], int j) { + for (int k = i + j - 1; k >= i; k--) { + buffer[currentOffset++] = (byte) (abyte0[k] + 128); + } + + } + + public void method442(int i, int j, byte abyte0[]) { + for (int k = j + i - 1; k >= j; k--) { + abyte0[k] = buffer[currentOffset++]; + } + + } + + public byte buffer[]; + public int currentOffset; + public int bitPosition; + private static final int[] anIntArray1409 = {0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, -1}; + public ISAACRandomGen encryption; + private static int anInt1412; + private static final NodeList nodeList = new NodeList(); + + // removed useless static initializer +} diff --git a/2006Redone Client/src/StreamLoader.java b/2006Redone Client/src/StreamLoader.java new file mode 100644 index 00000000..fc22da67 --- /dev/null +++ b/2006Redone Client/src/StreamLoader.java @@ -0,0 +1,69 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class StreamLoader { + + public StreamLoader(byte abyte0[]) { + Stream stream = new Stream(abyte0); + int i = stream.read3Bytes(); + int j = stream.read3Bytes(); + if (j != i) { + byte abyte1[] = new byte[i]; + Class13.method225(abyte1, i, abyte0, j, 6); + aByteArray726 = abyte1; + stream = new Stream(aByteArray726); + aBoolean732 = true; + } else { + aByteArray726 = abyte0; + aBoolean732 = false; + } + dataSize = stream.readUnsignedWord(); + anIntArray728 = new int[dataSize]; + anIntArray729 = new int[dataSize]; + anIntArray730 = new int[dataSize]; + anIntArray731 = new int[dataSize]; + int k = stream.currentOffset + dataSize * 10; + for (int l = 0; l < dataSize; l++) { + anIntArray728[l] = stream.readDWord(); + anIntArray729[l] = stream.read3Bytes(); + anIntArray730[l] = stream.read3Bytes(); + anIntArray731[l] = k; + k += anIntArray730[l]; + } + } + + public byte[] getDataForName(String s) { + byte abyte0[] = null; // was a parameter + int i = 0; + s = s.toUpperCase(); + for (int j = 0; j < s.length(); j++) { + i = i * 61 + s.charAt(j) - 32; + } + + for (int k = 0; k < dataSize; k++) { + if (anIntArray728[k] == i) { + if (abyte0 == null) { + abyte0 = new byte[anIntArray729[k]]; + } + if (!aBoolean732) { + Class13.method225(abyte0, anIntArray729[k], aByteArray726, anIntArray730[k], anIntArray731[k]); + } else { + System.arraycopy(aByteArray726, anIntArray731[k], abyte0, 0, anIntArray729[k]); + + } + return abyte0; + } + } + + return null; + } + + private final byte[] aByteArray726; + private final int dataSize; + private final int[] anIntArray728; + private final int[] anIntArray729; + private final int[] anIntArray730; + private final int[] anIntArray731; + private final boolean aBoolean732; +} diff --git a/2006Redone Client/src/TextClass.java b/2006Redone Client/src/TextClass.java new file mode 100644 index 00000000..fac7a6b6 --- /dev/null +++ b/2006Redone Client/src/TextClass.java @@ -0,0 +1,94 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class TextClass { + + public static long longForName(String s) { + long l = 0L; + for (int i = 0; i < s.length() && i < 12; i++) { + char c = s.charAt(i); + l *= 37L; + if (c >= 'A' && c <= 'Z') { + l += 1 + c - 65; + } else if (c >= 'a' && c <= 'z') { + l += 1 + c - 97; + } else if (c >= '0' && c <= '9') { + l += 27 + c - 48; + } + } + + for (; l % 37L == 0L && l != 0L; l /= 37L) { + ; + } + return l; + } + + public static String nameForLong(long l) { + try { + if (l <= 0L || l >= 0x5b5b57f8a98a5dd1L) { + return "invalid_name"; + } + if (l % 37L == 0L) { + return "invalid_name"; + } + int i = 0; + char ac[] = new char[12]; + while (l != 0L) { + long l1 = l; + l /= 37L; + ac[11 - i++] = validChars[(int) (l1 - l * 37L)]; + } + return new String(ac, 12 - i, i); + } catch (RuntimeException runtimeexception) { + Signlink.reporterror("81570, " + l + ", " + (byte) -99 + ", " + runtimeexception.toString()); + } + throw new RuntimeException(); + } + + public static long method585(String s) { + s = s.toUpperCase(); + long l = 0L; + for (int i = 0; i < s.length(); i++) { + l = l * 61L + s.charAt(i) - 32L; + l = l + (l >> 56) & 0xffffffffffffffL; + } + return l; + } + + public static String method586(int i) { + return (i >> 24 & 0xff) + "." + (i >> 16 & 0xff) + "." + (i >> 8 & 0xff) + "." + (i & 0xff); + } + + public static String fixName(String s) { + if (s.length() > 0) { + char ac[] = s.toCharArray(); + for (int j = 0; j < ac.length; j++) { + if (ac[j] == '_') { + ac[j] = ' '; + if (j + 1 < ac.length && ac[j + 1] >= 'a' && ac[j + 1] <= 'z') { + ac[j + 1] = (char) (ac[j + 1] + 65 - 97); + } + } + } + + if (ac[0] >= 'a' && ac[0] <= 'z') { + ac[0] = (char) (ac[0] + 65 - 97); + } + return new String(ac); + } else { + return s; + } + } + + public static String passwordAsterisks(String s) { + StringBuffer stringbuffer = new StringBuffer(); + for (int j = 0; j < s.length(); j++) { + stringbuffer.append("*"); + } + return stringbuffer.toString(); + } + + private static final char[] validChars = {'_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + +} diff --git a/2006Redone Client/src/TextDrawingArea.java b/2006Redone Client/src/TextDrawingArea.java new file mode 100644 index 00000000..abc6682b --- /dev/null +++ b/2006Redone Client/src/TextDrawingArea.java @@ -0,0 +1,443 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +import java.util.Random; + +public final class TextDrawingArea extends DrawingArea { + + public TextDrawingArea(boolean flag, String s, StreamLoader streamLoader) { + aByteArrayArray1491 = new byte[256][]; + anIntArray1492 = new int[256]; + anIntArray1493 = new int[256]; + anIntArray1494 = new int[256]; + anIntArray1495 = new int[256]; + anIntArray1496 = new int[256]; + aRandom1498 = new Random(); + aBoolean1499 = false; + Stream stream = new Stream(streamLoader.getDataForName(s + ".dat")); + Stream stream_1 = new Stream(streamLoader.getDataForName("index.dat")); + stream_1.currentOffset = stream.readUnsignedWord() + 4; + int k = stream_1.readUnsignedByte(); + if (k > 0) { + stream_1.currentOffset += 3 * (k - 1); + } + for (int l = 0; l < 256; l++) { + anIntArray1494[l] = stream_1.readUnsignedByte(); + anIntArray1495[l] = stream_1.readUnsignedByte(); + int i1 = anIntArray1492[l] = stream_1.readUnsignedWord(); + int j1 = anIntArray1493[l] = stream_1.readUnsignedWord(); + int k1 = stream_1.readUnsignedByte(); + int l1 = i1 * j1; + aByteArrayArray1491[l] = new byte[l1]; + if (k1 == 0) { + for (int i2 = 0; i2 < l1; i2++) { + aByteArrayArray1491[l][i2] = stream.readSignedByte(); + } + + } else if (k1 == 1) { + for (int j2 = 0; j2 < i1; j2++) { + for (int l2 = 0; l2 < j1; l2++) { + aByteArrayArray1491[l][j2 + l2 * i1] = stream.readSignedByte(); + } + + } + + } + if (j1 > anInt1497 && l < 128) { + anInt1497 = j1; + } + anIntArray1494[l] = 1; + anIntArray1496[l] = i1 + 2; + int k2 = 0; + for (int i3 = j1 / 7; i3 < j1; i3++) { + k2 += aByteArrayArray1491[l][i3 * i1]; + } + + if (k2 <= j1 / 7) { + anIntArray1496[l]--; + anIntArray1494[l] = 0; + } + k2 = 0; + for (int j3 = j1 / 7; j3 < j1; j3++) { + k2 += aByteArrayArray1491[l][i1 - 1 + j3 * i1]; + } + + if (k2 <= j1 / 7) { + anIntArray1496[l]--; + } + } + + if (flag) { + anIntArray1496[32] = anIntArray1496[73]; + } else { + anIntArray1496[32] = anIntArray1496[105]; + } + } + + public void method380(String s, int i, int j, int k) { + method385(j, s, k, i - method384(s)); + } + + public void drawText(int i, String s, int k, int l) { + method385(i, s, k, l - method384(s) / 2); + } + + public void method382(int i, int j, String s, int l, boolean flag) { + method389(flag, j - getTextWidth(s) / 2, i, s, l); + } + + public int getTextWidth(String s) { + if (s == null) { + return 0; + } + int j = 0; + for (int k = 0; k < s.length(); k++) { + if (s.charAt(k) == '@' && k + 4 < s.length() && s.charAt(k + 4) == '@') { + k += 4; + } else { + j += anIntArray1496[s.charAt(k)]; + } + } + + return j; + } + + public int method384(String s) { + if (s == null) { + return 0; + } + int j = 0; + for (int k = 0; k < s.length(); k++) { + j += anIntArray1496[s.charAt(k)]; + } + return j; + } + + public void method385(int i, String s, int j, int l) { + if (s == null) { + return; + } + j -= anInt1497; + for (int i1 = 0; i1 < s.length(); i1++) { + char c = s.charAt(i1); + if (c != ' ') { + method392(aByteArrayArray1491[c], l + anIntArray1494[c], j + anIntArray1495[c], anIntArray1492[c], anIntArray1493[c], i); + } + l += anIntArray1496[c]; + } + } + + public void method386(int i, String s, int j, int k, int l) { + if (s == null) { + return; + } + j -= method384(s) / 2; + l -= anInt1497; + for (int i1 = 0; i1 < s.length(); i1++) { + char c = s.charAt(i1); + if (c != ' ') { + method392(aByteArrayArray1491[c], j + anIntArray1494[c], l + anIntArray1495[c] + (int) (Math.sin(i1 / 2D + k / 5D) * 5D), anIntArray1492[c], anIntArray1493[c], i); + } + j += anIntArray1496[c]; + } + + } + + public void method387(int i, String s, int j, int k, int l) { + if (s == null) { + return; + } + i -= method384(s) / 2; + k -= anInt1497; + for (int i1 = 0; i1 < s.length(); i1++) { + char c = s.charAt(i1); + if (c != ' ') { + method392(aByteArrayArray1491[c], i + anIntArray1494[c] + (int) (Math.sin(i1 / 5D + j / 5D) * 5D), k + anIntArray1495[c] + (int) (Math.sin(i1 / 3D + j / 5D) * 5D), anIntArray1492[c], anIntArray1493[c], l); + } + i += anIntArray1496[c]; + } + + } + + public void method388(int i, String s, int j, int k, int l, int i1) { + if (s == null) { + return; + } + double d = 7D - i / 8D; + if (d < 0.0D) { + d = 0.0D; + } + l -= method384(s) / 2; + k -= anInt1497; + for (int k1 = 0; k1 < s.length(); k1++) { + char c = s.charAt(k1); + if (c != ' ') { + method392(aByteArrayArray1491[c], l + anIntArray1494[c], k + anIntArray1495[c] + (int) (Math.sin(k1 / 1.5D + j) * d), anIntArray1492[c], anIntArray1493[c], i1); + } + l += anIntArray1496[c]; + } + + } + + public void method389(boolean flag1, int i, int j, String s, int k) { + aBoolean1499 = false; + int l = i; + if (s == null) { + return; + } + k -= anInt1497; + for (int i1 = 0; i1 < s.length(); i1++) { + if (s.charAt(i1) == '@' && i1 + 4 < s.length() && s.charAt(i1 + 4) == '@') { + int j1 = getColorByName(s.substring(i1 + 1, i1 + 4)); + if (j1 != -1) { + j = j1; + } + i1 += 4; + } else { + char c = s.charAt(i1); + if (c != ' ') { + if (flag1) { + method392(aByteArrayArray1491[c], i + anIntArray1494[c] + 1, k + anIntArray1495[c] + 1, anIntArray1492[c], anIntArray1493[c], 0); + } + method392(aByteArrayArray1491[c], i + anIntArray1494[c], k + anIntArray1495[c], anIntArray1492[c], anIntArray1493[c], j); + } + i += anIntArray1496[c]; + } + } + if (aBoolean1499) { + DrawingArea.method339(k + (int) (anInt1497 * 0.69999999999999996D), 0x800000, i - l, l); + } + } + + public void method390(int i, int j, String s, int k, int i1) { + if (s == null) { + return; + } + aRandom1498.setSeed(k); + int j1 = 192 + (aRandom1498.nextInt() & 0x1f); + i1 -= anInt1497; + for (int k1 = 0; k1 < s.length(); k1++) { + if (s.charAt(k1) == '@' && k1 + 4 < s.length() && s.charAt(k1 + 4) == '@') { + int l1 = getColorByName(s.substring(k1 + 1, k1 + 4)); + if (l1 != -1) { + j = l1; + } + k1 += 4; + } else { + char c = s.charAt(k1); + if (c != ' ') { + method394(192, i + anIntArray1494[c] + 1, aByteArrayArray1491[c], anIntArray1492[c], i1 + anIntArray1495[c] + 1, anIntArray1493[c], 0); + method394(j1, i + anIntArray1494[c], aByteArrayArray1491[c], anIntArray1492[c], i1 + anIntArray1495[c], anIntArray1493[c], j); + } + i += anIntArray1496[c]; + if ((aRandom1498.nextInt() & 3) == 0) { + i++; + } + } + } + + } + + private int getColorByName(String s) { + if (s.equals("red")) { + return 0xff0000; + } + if (s.equals("gre")) { + return 65280; + } + if (s.equals("blu")) { + return 255; + } + if (s.equals("yel")) { + return 0xffff00; + } + if (s.equals("cya")) { + return 65535; + } + if (s.equals("mag")) { + return 0xff00ff; + } + if (s.equals("whi")) { + return 0xffffff; + } + if (s.equals("bla")) { + return 0; + } + if (s.equals("lre")) { + return 0xff9040; + } + if (s.equals("dre")) { + return 0x800000; + } + if (s.equals("dbl")) { + return 128; + } + if (s.equals("or1")) { + return 0xffb000; + } + if (s.equals("or2")) { + return 0xff7000; + } + if (s.equals("or3")) { + return 0xff3000; + } + if (s.equals("gr1")) { + return 0xc0ff00; + } + if (s.equals("gr2")) { + return 0x80ff00; + } + if (s.equals("gr3")) { + return 0x40ff00; + } + if (s.equals("str")) { + aBoolean1499 = true; + } + if (s.equals("end")) { + aBoolean1499 = false; + } + return -1; + } + + private void method392(byte abyte0[], int i, int j, int k, int l, int i1) { + int j1 = i + j * DrawingArea.width; + int k1 = DrawingArea.width - k; + int l1 = 0; + int i2 = 0; + if (j < DrawingArea.topY) { + int j2 = DrawingArea.topY - j; + l -= j2; + j = DrawingArea.topY; + i2 += j2 * k; + j1 += j2 * DrawingArea.width; + } + if (j + l >= DrawingArea.bottomY) { + l -= j + l - DrawingArea.bottomY + 1; + } + if (i < DrawingArea.topX) { + int k2 = DrawingArea.topX - i; + k -= k2; + i = DrawingArea.topX; + i2 += k2; + j1 += k2; + l1 += k2; + k1 += k2; + } + if (i + k >= DrawingArea.bottomX) { + int l2 = i + k - DrawingArea.bottomX + 1; + k -= l2; + l1 += l2; + k1 += l2; + } + if (!(k <= 0 || l <= 0)) { + method393(DrawingArea.pixels, abyte0, i1, i2, j1, k, l, k1, l1); + } + } + + private void method393(int ai[], byte abyte0[], int i, int j, int k, int l, int i1, int j1, int k1) { + int l1 = -(l >> 2); + l = -(l & 3); + for (int i2 = -i1; i2 < 0; i2++) { + for (int j2 = l1; j2 < 0; j2++) { + if (abyte0[j++] != 0) { + ai[k++] = i; + } else { + k++; + } + if (abyte0[j++] != 0) { + ai[k++] = i; + } else { + k++; + } + if (abyte0[j++] != 0) { + ai[k++] = i; + } else { + k++; + } + if (abyte0[j++] != 0) { + ai[k++] = i; + } else { + k++; + } + } + + for (int k2 = l; k2 < 0; k2++) { + if (abyte0[j++] != 0) { + ai[k++] = i; + } else { + k++; + } + } + + k += j1; + j += k1; + } + + } + + private void method394(int i, int j, byte abyte0[], int k, int l, int i1, int j1) { + int k1 = j + l * DrawingArea.width; + int l1 = DrawingArea.width - k; + int i2 = 0; + int j2 = 0; + if (l < DrawingArea.topY) { + int k2 = DrawingArea.topY - l; + i1 -= k2; + l = DrawingArea.topY; + j2 += k2 * k; + k1 += k2 * DrawingArea.width; + } + if (l + i1 >= DrawingArea.bottomY) { + i1 -= l + i1 - DrawingArea.bottomY + 1; + } + if (j < DrawingArea.topX) { + int l2 = DrawingArea.topX - j; + k -= l2; + j = DrawingArea.topX; + j2 += l2; + k1 += l2; + i2 += l2; + l1 += l2; + } + if (j + k >= DrawingArea.bottomX) { + int i3 = j + k - DrawingArea.bottomX + 1; + k -= i3; + i2 += i3; + l1 += i3; + } + if (k <= 0 || i1 <= 0) { + return; + } + method395(abyte0, i1, k1, DrawingArea.pixels, j2, k, i2, l1, j1, i); + } + + private void method395(byte abyte0[], int i, int j, int ai[], int l, int i1, int j1, int k1, int l1, int i2) { + l1 = ((l1 & 0xff00ff) * i2 & 0xff00ff00) + ((l1 & 0xff00) * i2 & 0xff0000) >> 8; + i2 = 256 - i2; + for (int j2 = -i; j2 < 0; j2++) { + for (int k2 = -i1; k2 < 0; k2++) { + if (abyte0[l++] != 0) { + int l2 = ai[j]; + ai[j++] = (((l2 & 0xff00ff) * i2 & 0xff00ff00) + ((l2 & 0xff00) * i2 & 0xff0000) >> 8) + l1; + } else { + j++; + } + } + + j += k1; + l += j1; + } + + } + + private final byte[][] aByteArrayArray1491; + private final int[] anIntArray1492; + private final int[] anIntArray1493; + private final int[] anIntArray1494; + private final int[] anIntArray1495; + private final int[] anIntArray1496; + public int anInt1497; + private final Random aRandom1498; + private boolean aBoolean1499; +} diff --git a/2006Redone Client/src/TextInput.java b/2006Redone Client/src/TextInput.java new file mode 100644 index 00000000..2e73814d --- /dev/null +++ b/2006Redone Client/src/TextInput.java @@ -0,0 +1,102 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class TextInput { + + public static String method525(int i, Stream stream) { + int j = 0; + int k = -1; + for (int l = 0; l < i; l++) { + int i1 = stream.readUnsignedByte(); + int j1 = i1 >> 4 & 0xf; + if (k == -1) { + if (j1 < 13) { + aCharArray631[j++] = validChars[j1]; + } else { + k = j1; + } + } else { + aCharArray631[j++] = validChars[(k << 4) + j1 - 195]; + k = -1; + } + j1 = i1 & 0xf; + if (k == -1) { + if (j1 < 13) { + aCharArray631[j++] = validChars[j1]; + } else { + k = j1; + } + } else { + aCharArray631[j++] = validChars[(k << 4) + j1 - 195]; + k = -1; + } + } + + boolean flag1 = true; + for (int k1 = 0; k1 < j; k1++) { + char c = aCharArray631[k1]; + if (flag1 && c >= 'a' && c <= 'z') { + aCharArray631[k1] += '\uFFE0'; + flag1 = false; + } + if (c == '.' || c == '!' || c == '?') { + flag1 = true; + } + } + return new String(aCharArray631, 0, j); + } + + public static void method526(String s, Stream stream) { + if (s.length() > 80) { + s = s.substring(0, 80); + } + s = s.toLowerCase(); + int i = -1; + for (int j = 0; j < s.length(); j++) { + char c = s.charAt(j); + int k = 0; + for (int l = 0; l < validChars.length; l++) { + if (c != validChars[l]) { + continue; + } + k = l; + break; + } + + if (k > 12) { + k += 195; + } + if (i == -1) { + if (k < 13) { + i = k; + } else { + stream.writeWordBigEndian(k); + } + } else if (k < 13) { + stream.writeWordBigEndian((i << 4) + k); + i = -1; + } else { + stream.writeWordBigEndian((i << 4) + (k >> 4)); + i = k & 0xf; + } + } + if (i != -1) { + stream.writeWordBigEndian(i << 4); + } + } + + public static String processText(String s) { + stream.currentOffset = 0; + method526(s, stream); + int j = stream.currentOffset; + stream.currentOffset = 0; + String s1 = method525(j, stream); + return s1; + } + + private static final char[] aCharArray631 = new char[100]; + private static final Stream stream = new Stream(new byte[100]); + private static final char[] validChars = {' ', 'e', 't', 'a', 'o', 'i', 'h', 'n', 's', 'r', 'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p', 'b', 'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '!', '?', '.', ',', ':', ';', '(', ')', '-', '&', '*', '\\', '\'', '@', '#', '+', '=', '\243', '$', '%', '"', '[', ']'}; + +} diff --git a/2006Redone Client/src/Texture.java b/2006Redone Client/src/Texture.java new file mode 100644 index 00000000..d8f22f88 --- /dev/null +++ b/2006Redone Client/src/Texture.java @@ -0,0 +1,2071 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class Texture extends DrawingArea { + + public static void nullLoader() { + anIntArray1468 = null; + anIntArray1468 = null; + anIntArray1470 = null; + anIntArray1471 = null; + lineOffsets = null; + aBackgroundArray1474s = null; + aBooleanArray1475 = null; + anIntArray1476 = null; + anIntArrayArray1478 = null; + anIntArrayArray1479 = null; + anIntArray1480 = null; + anIntArray1482 = null; + anIntArrayArray1483 = null; + } + + public static void method364() { + lineOffsets = new int[DrawingArea.height]; + for (int j = 0; j < DrawingArea.height; j++) { + lineOffsets[j] = DrawingArea.width * j; + } + + textureInt1 = DrawingArea.width / 2; + textureInt2 = DrawingArea.height / 2; + } + + public static void method365(int j, int k) { + lineOffsets = new int[k]; + for (int l = 0; l < k; l++) { + lineOffsets[l] = j * l; + } + + textureInt1 = j / 2; + textureInt2 = k / 2; + } + + public static void method366() { + anIntArrayArray1478 = null; + for (int j = 0; j < 50; j++) { + anIntArrayArray1479[j] = null; + } + + } + + public static void method367() { + if (anIntArrayArray1478 == null) { + anInt1477 = 20;// was parameter + if (lowMem) { + anIntArrayArray1478 = new int[anInt1477][16384]; + } else { + anIntArrayArray1478 = new int[anInt1477][0x10000]; + } + for (int k = 0; k < 50; k++) { + anIntArrayArray1479[k] = null; + } + + } + } + + public static void method368(StreamLoader streamLoader) { + anInt1473 = 0; + for (int j = 0; j < 50; j++) { + try { + aBackgroundArray1474s[j] = new Background(streamLoader, String.valueOf(j), 0); + if (lowMem && aBackgroundArray1474s[j].anInt1456 == 128) { + aBackgroundArray1474s[j].method356(); + } else { + aBackgroundArray1474s[j].method357(); + } + anInt1473++; + } catch (Exception _ex) { + } + } + + } + + public static int method369(int i) { + if (anIntArray1476[i] != 0) { + return anIntArray1476[i]; + } + int k = 0; + int l = 0; + int i1 = 0; + int j1 = anIntArrayArray1483[i].length; + for (int k1 = 0; k1 < j1; k1++) { + k += anIntArrayArray1483[i][k1] >> 16 & 0xff; + l += anIntArrayArray1483[i][k1] >> 8 & 0xff; + i1 += anIntArrayArray1483[i][k1] & 0xff; + } + + int l1 = (k / j1 << 16) + (l / j1 << 8) + i1 / j1; + l1 = method373(l1, 1.3999999999999999D); + if (l1 == 0) { + l1 = 1; + } + anIntArray1476[i] = l1; + return l1; + } + + public static void method370(int i) { + if (anIntArrayArray1479[i] == null) { + return; + } + anIntArrayArray1478[anInt1477++] = anIntArrayArray1479[i]; + anIntArrayArray1479[i] = null; + } + + private static int[] method371(int i) { + anIntArray1480[i] = anInt1481++; + if (anIntArrayArray1479[i] != null) { + return anIntArrayArray1479[i]; + } + int ai[]; + if (anInt1477 > 0) { + ai = anIntArrayArray1478[--anInt1477]; + anIntArrayArray1478[anInt1477] = null; + } else { + int j = 0; + int k = -1; + for (int l = 0; l < anInt1473; l++) { + if (anIntArrayArray1479[l] != null && (anIntArray1480[l] < j || k == -1)) { + j = anIntArray1480[l]; + k = l; + } + } + + ai = anIntArrayArray1479[k]; + anIntArrayArray1479[k] = null; + } + anIntArrayArray1479[i] = ai; + Background background = aBackgroundArray1474s[i]; + int ai1[] = anIntArrayArray1483[i]; + if (lowMem) { + aBooleanArray1475[i] = false; + for (int i1 = 0; i1 < 4096; i1++) { + int i2 = ai[i1] = ai1[background.aByteArray1450[i1]] & 0xf8f8ff; + if (i2 == 0) { + aBooleanArray1475[i] = true; + } + ai[4096 + i1] = i2 - (i2 >>> 3) & 0xf8f8ff; + ai[8192 + i1] = i2 - (i2 >>> 2) & 0xf8f8ff; + ai[12288 + i1] = i2 - (i2 >>> 2) - (i2 >>> 3) & 0xf8f8ff; + } + + } else { + if (background.anInt1452 == 64) { + for (int j1 = 0; j1 < 128; j1++) { + for (int j2 = 0; j2 < 128; j2++) { + ai[j2 + (j1 << 7)] = ai1[background.aByteArray1450[(j2 >> 1) + (j1 >> 1 << 6)]]; + } + + } + + } else { + for (int k1 = 0; k1 < 16384; k1++) { + ai[k1] = ai1[background.aByteArray1450[k1]]; + } + + } + aBooleanArray1475[i] = false; + for (int l1 = 0; l1 < 16384; l1++) { + ai[l1] &= 0xf8f8ff; + int k2 = ai[l1]; + if (k2 == 0) { + aBooleanArray1475[i] = true; + } + ai[16384 + l1] = k2 - (k2 >>> 3) & 0xf8f8ff; + ai[32768 + l1] = k2 - (k2 >>> 2) & 0xf8f8ff; + ai[49152 + l1] = k2 - (k2 >>> 2) - (k2 >>> 3) & 0xf8f8ff; + } + + } + return ai; + } + + public static void method372(double d) { + d += Math.random() * 0.029999999999999999D - 0.014999999999999999D; + int j = 0; + for (int k = 0; k < 512; k++) { + double d1 = k / 8 / 64D + 0.0078125D; + double d2 = (k & 7) / 8D + 0.0625D; + for (int k1 = 0; k1 < 128; k1++) { + double d3 = k1 / 128D; + double d4 = d3; + double d5 = d3; + double d6 = d3; + if (d2 != 0.0D) { + double d7; + if (d3 < 0.5D) { + d7 = d3 * (1.0D + d2); + } else { + d7 = d3 + d2 - d3 * d2; + } + double d8 = 2D * d3 - d7; + double d9 = d1 + 0.33333333333333331D; + if (d9 > 1.0D) { + d9--; + } + double d10 = d1; + double d11 = d1 - 0.33333333333333331D; + if (d11 < 0.0D) { + d11++; + } + if (6D * d9 < 1.0D) { + d4 = d8 + (d7 - d8) * 6D * d9; + } else if (2D * d9 < 1.0D) { + d4 = d7; + } else if (3D * d9 < 2D) { + d4 = d8 + (d7 - d8) * (0.66666666666666663D - d9) * 6D; + } else { + d4 = d8; + } + if (6D * d10 < 1.0D) { + d5 = d8 + (d7 - d8) * 6D * d10; + } else if (2D * d10 < 1.0D) { + d5 = d7; + } else if (3D * d10 < 2D) { + d5 = d8 + (d7 - d8) * (0.66666666666666663D - d10) * 6D; + } else { + d5 = d8; + } + if (6D * d11 < 1.0D) { + d6 = d8 + (d7 - d8) * 6D * d11; + } else if (2D * d11 < 1.0D) { + d6 = d7; + } else if (3D * d11 < 2D) { + d6 = d8 + (d7 - d8) * (0.66666666666666663D - d11) * 6D; + } else { + d6 = d8; + } + } + int l1 = (int) (d4 * 256D); + int i2 = (int) (d5 * 256D); + int j2 = (int) (d6 * 256D); + int k2 = (l1 << 16) + (i2 << 8) + j2; + k2 = method373(k2, d); + if (k2 == 0) { + k2 = 1; + } + anIntArray1482[j++] = k2; + } + + } + + for (int l = 0; l < 50; l++) { + if (aBackgroundArray1474s[l] != null) { + int ai[] = aBackgroundArray1474s[l].anIntArray1451; + anIntArrayArray1483[l] = new int[ai.length]; + for (int j1 = 0; j1 < ai.length; j1++) { + anIntArrayArray1483[l][j1] = method373(ai[j1], d); + if ((anIntArrayArray1483[l][j1] & 0xf8f8ff) == 0 && j1 != 0) { + anIntArrayArray1483[l][j1] = 1; + } + } + + } + } + + for (int i1 = 0; i1 < 50; i1++) { + method370(i1); + } + + } + + private static int method373(int i, double d) { + double d1 = (i >> 16) / 256D; + double d2 = (i >> 8 & 0xff) / 256D; + double d3 = (i & 0xff) / 256D; + d1 = Math.pow(d1, d); + d2 = Math.pow(d2, d); + d3 = Math.pow(d3, d); + int j = (int) (d1 * 256D); + int k = (int) (d2 * 256D); + int l = (int) (d3 * 256D); + return (j << 16) + (k << 8) + l; + } + + public static void method374(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2) { + int j2 = 0; + int k2 = 0; + if (j != i) { + j2 = (i1 - l << 16) / (j - i); + k2 = (l1 - k1 << 15) / (j - i); + } + int l2 = 0; + int i3 = 0; + if (k != j) { + l2 = (j1 - i1 << 16) / (k - j); + i3 = (i2 - l1 << 15) / (k - j); + } + int j3 = 0; + int k3 = 0; + if (k != i) { + j3 = (l - j1 << 16) / (i - k); + k3 = (k1 - i2 << 15) / (i - k); + } + if (i <= j && i <= k) { + if (i >= DrawingArea.bottomY) { + return; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (j < k) { + j1 = l <<= 16; + i2 = k1 <<= 15; + if (i < 0) { + j1 -= j3 * i; + l -= j2 * i; + i2 -= k3 * i; + k1 -= k2 * i; + i = 0; + } + i1 <<= 16; + l1 <<= 15; + if (j < 0) { + i1 -= l2 * j; + l1 -= i3 * j; + j = 0; + } + if (i != j && j3 < j2 || i == j && j3 > l2) { + k -= j; + j -= i; + for (i = lineOffsets[i]; --j >= 0; i += DrawingArea.width) { + method375(DrawingArea.pixels, i, j1 >> 16, l >> 16, i2 >> 7, k1 >> 7); + j1 += j3; + l += j2; + i2 += k3; + k1 += k2; + } + + while (--k >= 0) { + method375(DrawingArea.pixels, i, j1 >> 16, i1 >> 16, i2 >> 7, l1 >> 7); + j1 += j3; + i1 += l2; + i2 += k3; + l1 += i3; + i += DrawingArea.width; + } + return; + } + k -= j; + j -= i; + for (i = lineOffsets[i]; --j >= 0; i += DrawingArea.width) { + method375(DrawingArea.pixels, i, l >> 16, j1 >> 16, k1 >> 7, i2 >> 7); + j1 += j3; + l += j2; + i2 += k3; + k1 += k2; + } + + while (--k >= 0) { + method375(DrawingArea.pixels, i, i1 >> 16, j1 >> 16, l1 >> 7, i2 >> 7); + j1 += j3; + i1 += l2; + i2 += k3; + l1 += i3; + i += DrawingArea.width; + } + return; + } + i1 = l <<= 16; + l1 = k1 <<= 15; + if (i < 0) { + i1 -= j3 * i; + l -= j2 * i; + l1 -= k3 * i; + k1 -= k2 * i; + i = 0; + } + j1 <<= 16; + i2 <<= 15; + if (k < 0) { + j1 -= l2 * k; + i2 -= i3 * k; + k = 0; + } + if (i != k && j3 < j2 || i == k && l2 > j2) { + j -= k; + k -= i; + for (i = lineOffsets[i]; --k >= 0; i += DrawingArea.width) { + method375(DrawingArea.pixels, i, i1 >> 16, l >> 16, l1 >> 7, k1 >> 7); + i1 += j3; + l += j2; + l1 += k3; + k1 += k2; + } + + while (--j >= 0) { + method375(DrawingArea.pixels, i, j1 >> 16, l >> 16, i2 >> 7, k1 >> 7); + j1 += l2; + l += j2; + i2 += i3; + k1 += k2; + i += DrawingArea.width; + } + return; + } + j -= k; + k -= i; + for (i = lineOffsets[i]; --k >= 0; i += DrawingArea.width) { + method375(DrawingArea.pixels, i, l >> 16, i1 >> 16, k1 >> 7, l1 >> 7); + i1 += j3; + l += j2; + l1 += k3; + k1 += k2; + } + + while (--j >= 0) { + method375(DrawingArea.pixels, i, l >> 16, j1 >> 16, k1 >> 7, i2 >> 7); + j1 += l2; + l += j2; + i2 += i3; + k1 += k2; + i += DrawingArea.width; + } + return; + } + if (j <= k) { + if (j >= DrawingArea.bottomY) { + return; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (k < i) { + l = i1 <<= 16; + k1 = l1 <<= 15; + if (j < 0) { + l -= j2 * j; + i1 -= l2 * j; + k1 -= k2 * j; + l1 -= i3 * j; + j = 0; + } + j1 <<= 16; + i2 <<= 15; + if (k < 0) { + j1 -= j3 * k; + i2 -= k3 * k; + k = 0; + } + if (j != k && j2 < l2 || j == k && j2 > j3) { + i -= k; + k -= j; + for (j = lineOffsets[j]; --k >= 0; j += DrawingArea.width) { + method375(DrawingArea.pixels, j, l >> 16, i1 >> 16, k1 >> 7, l1 >> 7); + l += j2; + i1 += l2; + k1 += k2; + l1 += i3; + } + + while (--i >= 0) { + method375(DrawingArea.pixels, j, l >> 16, j1 >> 16, k1 >> 7, i2 >> 7); + l += j2; + j1 += j3; + k1 += k2; + i2 += k3; + j += DrawingArea.width; + } + return; + } + i -= k; + k -= j; + for (j = lineOffsets[j]; --k >= 0; j += DrawingArea.width) { + method375(DrawingArea.pixels, j, i1 >> 16, l >> 16, l1 >> 7, k1 >> 7); + l += j2; + i1 += l2; + k1 += k2; + l1 += i3; + } + + while (--i >= 0) { + method375(DrawingArea.pixels, j, j1 >> 16, l >> 16, i2 >> 7, k1 >> 7); + l += j2; + j1 += j3; + k1 += k2; + i2 += k3; + j += DrawingArea.width; + } + return; + } + j1 = i1 <<= 16; + i2 = l1 <<= 15; + if (j < 0) { + j1 -= j2 * j; + i1 -= l2 * j; + i2 -= k2 * j; + l1 -= i3 * j; + j = 0; + } + l <<= 16; + k1 <<= 15; + if (i < 0) { + l -= j3 * i; + k1 -= k3 * i; + i = 0; + } + if (j2 < l2) { + k -= i; + i -= j; + for (j = lineOffsets[j]; --i >= 0; j += DrawingArea.width) { + method375(DrawingArea.pixels, j, j1 >> 16, i1 >> 16, i2 >> 7, l1 >> 7); + j1 += j2; + i1 += l2; + i2 += k2; + l1 += i3; + } + + while (--k >= 0) { + method375(DrawingArea.pixels, j, l >> 16, i1 >> 16, k1 >> 7, l1 >> 7); + l += j3; + i1 += l2; + k1 += k3; + l1 += i3; + j += DrawingArea.width; + } + return; + } + k -= i; + i -= j; + for (j = lineOffsets[j]; --i >= 0; j += DrawingArea.width) { + method375(DrawingArea.pixels, j, i1 >> 16, j1 >> 16, l1 >> 7, i2 >> 7); + j1 += j2; + i1 += l2; + i2 += k2; + l1 += i3; + } + + while (--k >= 0) { + method375(DrawingArea.pixels, j, i1 >> 16, l >> 16, l1 >> 7, k1 >> 7); + l += j3; + i1 += l2; + k1 += k3; + l1 += i3; + j += DrawingArea.width; + } + return; + } + if (k >= DrawingArea.bottomY) { + return; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (i < j) { + i1 = j1 <<= 16; + l1 = i2 <<= 15; + if (k < 0) { + i1 -= l2 * k; + j1 -= j3 * k; + l1 -= i3 * k; + i2 -= k3 * k; + k = 0; + } + l <<= 16; + k1 <<= 15; + if (i < 0) { + l -= j2 * i; + k1 -= k2 * i; + i = 0; + } + if (l2 < j3) { + j -= i; + i -= k; + for (k = lineOffsets[k]; --i >= 0; k += DrawingArea.width) { + method375(DrawingArea.pixels, k, i1 >> 16, j1 >> 16, l1 >> 7, i2 >> 7); + i1 += l2; + j1 += j3; + l1 += i3; + i2 += k3; + } + + while (--j >= 0) { + method375(DrawingArea.pixels, k, i1 >> 16, l >> 16, l1 >> 7, k1 >> 7); + i1 += l2; + l += j2; + l1 += i3; + k1 += k2; + k += DrawingArea.width; + } + return; + } + j -= i; + i -= k; + for (k = lineOffsets[k]; --i >= 0; k += DrawingArea.width) { + method375(DrawingArea.pixels, k, j1 >> 16, i1 >> 16, i2 >> 7, l1 >> 7); + i1 += l2; + j1 += j3; + l1 += i3; + i2 += k3; + } + + while (--j >= 0) { + method375(DrawingArea.pixels, k, l >> 16, i1 >> 16, k1 >> 7, l1 >> 7); + i1 += l2; + l += j2; + l1 += i3; + k1 += k2; + k += DrawingArea.width; + } + return; + } + l = j1 <<= 16; + k1 = i2 <<= 15; + if (k < 0) { + l -= l2 * k; + j1 -= j3 * k; + k1 -= i3 * k; + i2 -= k3 * k; + k = 0; + } + i1 <<= 16; + l1 <<= 15; + if (j < 0) { + i1 -= j2 * j; + l1 -= k2 * j; + j = 0; + } + if (l2 < j3) { + i -= j; + j -= k; + for (k = lineOffsets[k]; --j >= 0; k += DrawingArea.width) { + method375(DrawingArea.pixels, k, l >> 16, j1 >> 16, k1 >> 7, i2 >> 7); + l += l2; + j1 += j3; + k1 += i3; + i2 += k3; + } + + while (--i >= 0) { + method375(DrawingArea.pixels, k, i1 >> 16, j1 >> 16, l1 >> 7, i2 >> 7); + i1 += j2; + j1 += j3; + l1 += k2; + i2 += k3; + k += DrawingArea.width; + } + return; + } + i -= j; + j -= k; + for (k = lineOffsets[k]; --j >= 0; k += DrawingArea.width) { + method375(DrawingArea.pixels, k, j1 >> 16, l >> 16, i2 >> 7, k1 >> 7); + l += l2; + j1 += j3; + k1 += i3; + i2 += k3; + } + + while (--i >= 0) { + method375(DrawingArea.pixels, k, j1 >> 16, i1 >> 16, i2 >> 7, l1 >> 7); + i1 += j2; + j1 += j3; + l1 += k2; + i2 += k3; + k += DrawingArea.width; + } + } + + private static void method375(int ai[], int i, int l, int i1, int j1, int k1) { + int j;// was parameter + int k;// was parameter + if (aBoolean1464) { + int l1; + if (aBoolean1462) { + if (i1 - l > 3) { + l1 = (k1 - j1) / (i1 - l); + } else { + l1 = 0; + } + if (i1 > DrawingArea.centerX) { + i1 = DrawingArea.centerX; + } + if (l < 0) { + j1 -= l * l1; + l = 0; + } + if (l >= i1) { + return; + } + i += l; + k = i1 - l >> 2; + l1 <<= 2; + } else { + if (l >= i1) { + return; + } + i += l; + k = i1 - l >> 2; + if (k > 0) { + l1 = (k1 - j1) * anIntArray1468[k] >> 15; + } else { + l1 = 0; + } + } + if (anInt1465 == 0) { + while (--k >= 0) { + j = anIntArray1482[j1 >> 8]; + j1 += l1; + ai[i++] = j; + ai[i++] = j; + ai[i++] = j; + ai[i++] = j; + } + k = i1 - l & 3; + if (k > 0) { + j = anIntArray1482[j1 >> 8]; + do { + ai[i++] = j; + } while (--k > 0); + return; + } + } else { + int j2 = anInt1465; + int l2 = 256 - anInt1465; + while (--k >= 0) { + j = anIntArray1482[j1 >> 8]; + j1 += l1; + j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00); + } + k = i1 - l & 3; + if (k > 0) { + j = anIntArray1482[j1 >> 8]; + j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00); + do { + ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00); + } while (--k > 0); + } + } + return; + } + if (l >= i1) { + return; + } + int i2 = (k1 - j1) / (i1 - l); + if (aBoolean1462) { + if (i1 > DrawingArea.centerX) { + i1 = DrawingArea.centerX; + } + if (l < 0) { + j1 -= l * i2; + l = 0; + } + if (l >= i1) { + return; + } + } + i += l; + k = i1 - l; + if (anInt1465 == 0) { + do { + ai[i++] = anIntArray1482[j1 >> 8]; + j1 += i2; + } while (--k > 0); + return; + } + int k2 = anInt1465; + int i3 = 256 - anInt1465; + do { + j = anIntArray1482[j1 >> 8]; + j1 += i2; + j = ((j & 0xff00ff) * i3 >> 8 & 0xff00ff) + ((j & 0xff00) * i3 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * k2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * k2 >> 8 & 0xff00); + } while (--k > 0); + } + + public static void method376(int i, int j, int k, int l, int i1, int j1, int k1) { + int l1 = 0; + if (j != i) { + l1 = (i1 - l << 16) / (j - i); + } + int i2 = 0; + if (k != j) { + i2 = (j1 - i1 << 16) / (k - j); + } + int j2 = 0; + if (k != i) { + j2 = (l - j1 << 16) / (i - k); + } + if (i <= j && i <= k) { + if (i >= DrawingArea.bottomY) { + return; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (j < k) { + j1 = l <<= 16; + if (i < 0) { + j1 -= j2 * i; + l -= l1 * i; + i = 0; + } + i1 <<= 16; + if (j < 0) { + i1 -= i2 * j; + j = 0; + } + if (i != j && j2 < l1 || i == j && j2 > i2) { + k -= j; + j -= i; + for (i = lineOffsets[i]; --j >= 0; i += DrawingArea.width) { + method377(DrawingArea.pixels, i, k1, j1 >> 16, l >> 16); + j1 += j2; + l += l1; + } + + while (--k >= 0) { + method377(DrawingArea.pixels, i, k1, j1 >> 16, i1 >> 16); + j1 += j2; + i1 += i2; + i += DrawingArea.width; + } + return; + } + k -= j; + j -= i; + for (i = lineOffsets[i]; --j >= 0; i += DrawingArea.width) { + method377(DrawingArea.pixels, i, k1, l >> 16, j1 >> 16); + j1 += j2; + l += l1; + } + + while (--k >= 0) { + method377(DrawingArea.pixels, i, k1, i1 >> 16, j1 >> 16); + j1 += j2; + i1 += i2; + i += DrawingArea.width; + } + return; + } + i1 = l <<= 16; + if (i < 0) { + i1 -= j2 * i; + l -= l1 * i; + i = 0; + } + j1 <<= 16; + if (k < 0) { + j1 -= i2 * k; + k = 0; + } + if (i != k && j2 < l1 || i == k && i2 > l1) { + j -= k; + k -= i; + for (i = lineOffsets[i]; --k >= 0; i += DrawingArea.width) { + method377(DrawingArea.pixels, i, k1, i1 >> 16, l >> 16); + i1 += j2; + l += l1; + } + + while (--j >= 0) { + method377(DrawingArea.pixels, i, k1, j1 >> 16, l >> 16); + j1 += i2; + l += l1; + i += DrawingArea.width; + } + return; + } + j -= k; + k -= i; + for (i = lineOffsets[i]; --k >= 0; i += DrawingArea.width) { + method377(DrawingArea.pixels, i, k1, l >> 16, i1 >> 16); + i1 += j2; + l += l1; + } + + while (--j >= 0) { + method377(DrawingArea.pixels, i, k1, l >> 16, j1 >> 16); + j1 += i2; + l += l1; + i += DrawingArea.width; + } + return; + } + if (j <= k) { + if (j >= DrawingArea.bottomY) { + return; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (k < i) { + l = i1 <<= 16; + if (j < 0) { + l -= l1 * j; + i1 -= i2 * j; + j = 0; + } + j1 <<= 16; + if (k < 0) { + j1 -= j2 * k; + k = 0; + } + if (j != k && l1 < i2 || j == k && l1 > j2) { + i -= k; + k -= j; + for (j = lineOffsets[j]; --k >= 0; j += DrawingArea.width) { + method377(DrawingArea.pixels, j, k1, l >> 16, i1 >> 16); + l += l1; + i1 += i2; + } + + while (--i >= 0) { + method377(DrawingArea.pixels, j, k1, l >> 16, j1 >> 16); + l += l1; + j1 += j2; + j += DrawingArea.width; + } + return; + } + i -= k; + k -= j; + for (j = lineOffsets[j]; --k >= 0; j += DrawingArea.width) { + method377(DrawingArea.pixels, j, k1, i1 >> 16, l >> 16); + l += l1; + i1 += i2; + } + + while (--i >= 0) { + method377(DrawingArea.pixels, j, k1, j1 >> 16, l >> 16); + l += l1; + j1 += j2; + j += DrawingArea.width; + } + return; + } + j1 = i1 <<= 16; + if (j < 0) { + j1 -= l1 * j; + i1 -= i2 * j; + j = 0; + } + l <<= 16; + if (i < 0) { + l -= j2 * i; + i = 0; + } + if (l1 < i2) { + k -= i; + i -= j; + for (j = lineOffsets[j]; --i >= 0; j += DrawingArea.width) { + method377(DrawingArea.pixels, j, k1, j1 >> 16, i1 >> 16); + j1 += l1; + i1 += i2; + } + + while (--k >= 0) { + method377(DrawingArea.pixels, j, k1, l >> 16, i1 >> 16); + l += j2; + i1 += i2; + j += DrawingArea.width; + } + return; + } + k -= i; + i -= j; + for (j = lineOffsets[j]; --i >= 0; j += DrawingArea.width) { + method377(DrawingArea.pixels, j, k1, i1 >> 16, j1 >> 16); + j1 += l1; + i1 += i2; + } + + while (--k >= 0) { + method377(DrawingArea.pixels, j, k1, i1 >> 16, l >> 16); + l += j2; + i1 += i2; + j += DrawingArea.width; + } + return; + } + if (k >= DrawingArea.bottomY) { + return; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (i < j) { + i1 = j1 <<= 16; + if (k < 0) { + i1 -= i2 * k; + j1 -= j2 * k; + k = 0; + } + l <<= 16; + if (i < 0) { + l -= l1 * i; + i = 0; + } + if (i2 < j2) { + j -= i; + i -= k; + for (k = lineOffsets[k]; --i >= 0; k += DrawingArea.width) { + method377(DrawingArea.pixels, k, k1, i1 >> 16, j1 >> 16); + i1 += i2; + j1 += j2; + } + + while (--j >= 0) { + method377(DrawingArea.pixels, k, k1, i1 >> 16, l >> 16); + i1 += i2; + l += l1; + k += DrawingArea.width; + } + return; + } + j -= i; + i -= k; + for (k = lineOffsets[k]; --i >= 0; k += DrawingArea.width) { + method377(DrawingArea.pixels, k, k1, j1 >> 16, i1 >> 16); + i1 += i2; + j1 += j2; + } + + while (--j >= 0) { + method377(DrawingArea.pixels, k, k1, l >> 16, i1 >> 16); + i1 += i2; + l += l1; + k += DrawingArea.width; + } + return; + } + l = j1 <<= 16; + if (k < 0) { + l -= i2 * k; + j1 -= j2 * k; + k = 0; + } + i1 <<= 16; + if (j < 0) { + i1 -= l1 * j; + j = 0; + } + if (i2 < j2) { + i -= j; + j -= k; + for (k = lineOffsets[k]; --j >= 0; k += DrawingArea.width) { + method377(DrawingArea.pixels, k, k1, l >> 16, j1 >> 16); + l += i2; + j1 += j2; + } + + while (--i >= 0) { + method377(DrawingArea.pixels, k, k1, i1 >> 16, j1 >> 16); + i1 += l1; + j1 += j2; + k += DrawingArea.width; + } + return; + } + i -= j; + j -= k; + for (k = lineOffsets[k]; --j >= 0; k += DrawingArea.width) { + method377(DrawingArea.pixels, k, k1, j1 >> 16, l >> 16); + l += i2; + j1 += j2; + } + + while (--i >= 0) { + method377(DrawingArea.pixels, k, k1, j1 >> 16, i1 >> 16); + i1 += l1; + j1 += j2; + k += DrawingArea.width; + } + } + + private static void method377(int ai[], int i, int j, int l, int i1) { + int k;// was parameter + if (aBoolean1462) { + if (i1 > DrawingArea.centerX) { + i1 = DrawingArea.centerX; + } + if (l < 0) { + l = 0; + } + } + if (l >= i1) { + return; + } + i += l; + k = i1 - l >> 2; + if (anInt1465 == 0) { + while (--k >= 0) { + ai[i++] = j; + ai[i++] = j; + ai[i++] = j; + ai[i++] = j; + } + for (k = i1 - l & 3; --k >= 0;) { + ai[i++] = j; + } + + return; + } + int j1 = anInt1465; + int k1 = 256 - anInt1465; + j = ((j & 0xff00ff) * k1 >> 8 & 0xff00ff) + ((j & 0xff00) * k1 >> 8 & 0xff00); + while (--k >= 0) { + ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00); + ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00); + } + for (k = i1 - l & 3; --k >= 0;) { + ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00); + } + + } + + public static void method378(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2, int i3, int j3, int k3, int l3, int i4, int j4, int k4) { + int ai[] = method371(k4); + aBoolean1463 = !aBooleanArray1475[k4]; + k2 = j2 - k2; + j3 = i3 - j3; + i4 = l3 - i4; + l2 -= j2; + k3 -= i3; + j4 -= l3; + int l4 = l2 * i3 - k3 * j2 << 14; + int i5 = k3 * l3 - j4 * i3 << 8; + int j5 = j4 * j2 - l2 * l3 << 5; + int k5 = k2 * i3 - j3 * j2 << 14; + int l5 = j3 * l3 - i4 * i3 << 8; + int i6 = i4 * j2 - k2 * l3 << 5; + int j6 = j3 * l2 - k2 * k3 << 14; + int k6 = i4 * k3 - j3 * j4 << 8; + int l6 = k2 * j4 - i4 * l2 << 5; + int i7 = 0; + int j7 = 0; + if (j != i) { + i7 = (i1 - l << 16) / (j - i); + j7 = (l1 - k1 << 16) / (j - i); + } + int k7 = 0; + int l7 = 0; + if (k != j) { + k7 = (j1 - i1 << 16) / (k - j); + l7 = (i2 - l1 << 16) / (k - j); + } + int i8 = 0; + int j8 = 0; + if (k != i) { + i8 = (l - j1 << 16) / (i - k); + j8 = (k1 - i2 << 16) / (i - k); + } + if (i <= j && i <= k) { + if (i >= DrawingArea.bottomY) { + return; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (j < k) { + j1 = l <<= 16; + i2 = k1 <<= 16; + if (i < 0) { + j1 -= i8 * i; + l -= i7 * i; + i2 -= j8 * i; + k1 -= j7 * i; + i = 0; + } + i1 <<= 16; + l1 <<= 16; + if (j < 0) { + i1 -= k7 * j; + l1 -= l7 * j; + j = 0; + } + int k8 = i - textureInt2; + l4 += j5 * k8; + k5 += i6 * k8; + j6 += l6 * k8; + if (i != j && i8 < i7 || i == j && i8 > k7) { + k -= j; + j -= i; + i = lineOffsets[i]; + while (--j >= 0) { + method379(DrawingArea.pixels, ai, i, j1 >> 16, l >> 16, i2 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i8; + l += i7; + i2 += j8; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--k >= 0) { + method379(DrawingArea.pixels, ai, i, j1 >> 16, i1 >> 16, i2 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i8; + i1 += k7; + i2 += j8; + l1 += l7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + k -= j; + j -= i; + i = lineOffsets[i]; + while (--j >= 0) { + method379(DrawingArea.pixels, ai, i, l >> 16, j1 >> 16, k1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i8; + l += i7; + i2 += j8; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--k >= 0) { + method379(DrawingArea.pixels, ai, i, i1 >> 16, j1 >> 16, l1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i8; + i1 += k7; + i2 += j8; + l1 += l7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + i1 = l <<= 16; + l1 = k1 <<= 16; + if (i < 0) { + i1 -= i8 * i; + l -= i7 * i; + l1 -= j8 * i; + k1 -= j7 * i; + i = 0; + } + j1 <<= 16; + i2 <<= 16; + if (k < 0) { + j1 -= k7 * k; + i2 -= l7 * k; + k = 0; + } + int l8 = i - textureInt2; + l4 += j5 * l8; + k5 += i6 * l8; + j6 += l6 * l8; + if (i != k && i8 < i7 || i == k && k7 > i7) { + j -= k; + k -= i; + i = lineOffsets[i]; + while (--k >= 0) { + method379(DrawingArea.pixels, ai, i, i1 >> 16, l >> 16, l1 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += i8; + l += i7; + l1 += j8; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--j >= 0) { + method379(DrawingArea.pixels, ai, i, j1 >> 16, l >> 16, i2 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + j1 += k7; + l += i7; + i2 += l7; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + j -= k; + k -= i; + i = lineOffsets[i]; + while (--k >= 0) { + method379(DrawingArea.pixels, ai, i, l >> 16, i1 >> 16, k1 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += i8; + l += i7; + l1 += j8; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--j >= 0) { + method379(DrawingArea.pixels, ai, i, l >> 16, j1 >> 16, k1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + j1 += k7; + l += i7; + i2 += l7; + k1 += j7; + i += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + if (j <= k) { + if (j >= DrawingArea.bottomY) { + return; + } + if (k > DrawingArea.bottomY) { + k = DrawingArea.bottomY; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (k < i) { + l = i1 <<= 16; + k1 = l1 <<= 16; + if (j < 0) { + l -= i7 * j; + i1 -= k7 * j; + k1 -= j7 * j; + l1 -= l7 * j; + j = 0; + } + j1 <<= 16; + i2 <<= 16; + if (k < 0) { + j1 -= i8 * k; + i2 -= j8 * k; + k = 0; + } + int i9 = j - textureInt2; + l4 += j5 * i9; + k5 += i6 * i9; + j6 += l6 * i9; + if (j != k && i7 < k7 || j == k && i7 > i8) { + i -= k; + k -= j; + j = lineOffsets[j]; + while (--k >= 0) { + method379(DrawingArea.pixels, ai, j, l >> 16, i1 >> 16, k1 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + l += i7; + i1 += k7; + k1 += j7; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--i >= 0) { + method379(DrawingArea.pixels, ai, j, l >> 16, j1 >> 16, k1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + l += i7; + j1 += i8; + k1 += j7; + i2 += j8; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + i -= k; + k -= j; + j = lineOffsets[j]; + while (--k >= 0) { + method379(DrawingArea.pixels, ai, j, i1 >> 16, l >> 16, l1 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + l += i7; + i1 += k7; + k1 += j7; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--i >= 0) { + method379(DrawingArea.pixels, ai, j, j1 >> 16, l >> 16, i2 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + l += i7; + j1 += i8; + k1 += j7; + i2 += j8; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + j1 = i1 <<= 16; + i2 = l1 <<= 16; + if (j < 0) { + j1 -= i7 * j; + i1 -= k7 * j; + i2 -= j7 * j; + l1 -= l7 * j; + j = 0; + } + l <<= 16; + k1 <<= 16; + if (i < 0) { + l -= i8 * i; + k1 -= j8 * i; + i = 0; + } + int j9 = j - textureInt2; + l4 += j5 * j9; + k5 += i6 * j9; + j6 += l6 * j9; + if (i7 < k7) { + k -= i; + i -= j; + j = lineOffsets[j]; + while (--i >= 0) { + method379(DrawingArea.pixels, ai, j, j1 >> 16, i1 >> 16, i2 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i7; + i1 += k7; + i2 += j7; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--k >= 0) { + method379(DrawingArea.pixels, ai, j, l >> 16, i1 >> 16, k1 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + l += i8; + i1 += k7; + k1 += j8; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + k -= i; + i -= j; + j = lineOffsets[j]; + while (--i >= 0) { + method379(DrawingArea.pixels, ai, j, i1 >> 16, j1 >> 16, l1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + j1 += i7; + i1 += k7; + i2 += j7; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--k >= 0) { + method379(DrawingArea.pixels, ai, j, i1 >> 16, l >> 16, l1 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + l += i8; + i1 += k7; + k1 += j8; + l1 += l7; + j += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + if (k >= DrawingArea.bottomY) { + return; + } + if (i > DrawingArea.bottomY) { + i = DrawingArea.bottomY; + } + if (j > DrawingArea.bottomY) { + j = DrawingArea.bottomY; + } + if (i < j) { + i1 = j1 <<= 16; + l1 = i2 <<= 16; + if (k < 0) { + i1 -= k7 * k; + j1 -= i8 * k; + l1 -= l7 * k; + i2 -= j8 * k; + k = 0; + } + l <<= 16; + k1 <<= 16; + if (i < 0) { + l -= i7 * i; + k1 -= j7 * i; + i = 0; + } + int k9 = k - textureInt2; + l4 += j5 * k9; + k5 += i6 * k9; + j6 += l6 * k9; + if (k7 < i8) { + j -= i; + i -= k; + k = lineOffsets[k]; + while (--i >= 0) { + method379(DrawingArea.pixels, ai, k, i1 >> 16, j1 >> 16, l1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + i1 += k7; + j1 += i8; + l1 += l7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--j >= 0) { + method379(DrawingArea.pixels, ai, k, i1 >> 16, l >> 16, l1 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += k7; + l += i7; + l1 += l7; + k1 += j7; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + j -= i; + i -= k; + k = lineOffsets[k]; + while (--i >= 0) { + method379(DrawingArea.pixels, ai, k, j1 >> 16, i1 >> 16, i2 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += k7; + j1 += i8; + l1 += l7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--j >= 0) { + method379(DrawingArea.pixels, ai, k, l >> 16, i1 >> 16, k1 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += k7; + l += i7; + l1 += l7; + k1 += j7; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + l = j1 <<= 16; + k1 = i2 <<= 16; + if (k < 0) { + l -= k7 * k; + j1 -= i8 * k; + k1 -= l7 * k; + i2 -= j8 * k; + k = 0; + } + i1 <<= 16; + l1 <<= 16; + if (j < 0) { + i1 -= i7 * j; + l1 -= j7 * j; + j = 0; + } + int l9 = k - textureInt2; + l4 += j5 * l9; + k5 += i6 * l9; + j6 += l6 * l9; + if (k7 < i8) { + i -= j; + j -= k; + k = lineOffsets[k]; + while (--j >= 0) { + method379(DrawingArea.pixels, ai, k, l >> 16, j1 >> 16, k1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + l += k7; + j1 += i8; + k1 += l7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--i >= 0) { + method379(DrawingArea.pixels, ai, k, i1 >> 16, j1 >> 16, l1 >> 8, i2 >> 8, l4, k5, j6, i5, l5, k6); + i1 += i7; + j1 += i8; + l1 += j7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + return; + } + i -= j; + j -= k; + k = lineOffsets[k]; + while (--j >= 0) { + method379(DrawingArea.pixels, ai, k, j1 >> 16, l >> 16, i2 >> 8, k1 >> 8, l4, k5, j6, i5, l5, k6); + l += k7; + j1 += i8; + k1 += l7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + while (--i >= 0) { + method379(DrawingArea.pixels, ai, k, j1 >> 16, i1 >> 16, i2 >> 8, l1 >> 8, l4, k5, j6, i5, l5, k6); + i1 += i7; + j1 += i8; + l1 += j7; + i2 += j8; + k += DrawingArea.width; + l4 += j5; + k5 += i6; + j6 += l6; + } + } + + private static void method379(int ai[], int ai1[], int k, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2, int i3) { + int i = 0;// was parameter + int j = 0;// was parameter + if (l >= i1) { + return; + } + int j3; + int k3; + if (aBoolean1462) { + j3 = (k1 - j1) / (i1 - l); + if (i1 > DrawingArea.centerX) { + i1 = DrawingArea.centerX; + } + if (l < 0) { + j1 -= l * j3; + l = 0; + } + if (l >= i1) { + return; + } + k3 = i1 - l >> 3; + j3 <<= 12; + j1 <<= 9; + } else { + if (i1 - l > 7) { + k3 = i1 - l >> 3; + j3 = (k1 - j1) * anIntArray1468[k3] >> 6; + } else { + k3 = 0; + j3 = 0; + } + j1 <<= 9; + } + k += l; + if (lowMem) { + int i4 = 0; + int k4 = 0; + int k6 = l - textureInt1; + l1 += (k2 >> 3) * k6; + i2 += (l2 >> 3) * k6; + j2 += (i3 >> 3) * k6; + int i5 = j2 >> 12; + if (i5 != 0) { + i = l1 / i5; + j = i2 / i5; + if (i < 0) { + i = 0; + } else if (i > 4032) { + i = 4032; + } + } + l1 += k2; + i2 += l2; + j2 += i3; + i5 = j2 >> 12; + if (i5 != 0) { + i4 = l1 / i5; + k4 = i2 / i5; + if (i4 < 7) { + i4 = 7; + } else if (i4 > 4032) { + i4 = 4032; + } + } + int i7 = i4 - i >> 3; + int k7 = k4 - j >> 3; + i += (j1 & 0x600000) >> 3; + int i8 = j1 >> 23; + if (aBoolean1463) { + while (k3-- > 0) { + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i = i4; + j = k4; + l1 += k2; + i2 += l2; + j2 += i3; + int j5 = j2 >> 12; + if (j5 != 0) { + i4 = l1 / j5; + k4 = i2 / j5; + if (i4 < 7) { + i4 = 7; + } else if (i4 > 4032) { + i4 = 4032; + } + } + i7 = i4 - i >> 3; + k7 = k4 - j >> 3; + j1 += j3; + i += (j1 & 0x600000) >> 3; + i8 = j1 >> 23; + } + for (k3 = i1 - l & 7; k3-- > 0;) { + ai[k++] = ai1[(j & 0xfc0) + (i >> 6)] >>> i8; + i += i7; + j += k7; + } + + return; + } + while (k3-- > 0) { + int k8; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i += i7; + j += k7; + if ((k8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = k8; + } + k++; + i = i4; + j = k4; + l1 += k2; + i2 += l2; + j2 += i3; + int k5 = j2 >> 12; + if (k5 != 0) { + i4 = l1 / k5; + k4 = i2 / k5; + if (i4 < 7) { + i4 = 7; + } else if (i4 > 4032) { + i4 = 4032; + } + } + i7 = i4 - i >> 3; + k7 = k4 - j >> 3; + j1 += j3; + i += (j1 & 0x600000) >> 3; + i8 = j1 >> 23; + } + for (k3 = i1 - l & 7; k3-- > 0;) { + int l8; + if ((l8 = ai1[(j & 0xfc0) + (i >> 6)] >>> i8) != 0) { + ai[k] = l8; + } + k++; + i += i7; + j += k7; + } + + return; + } + int j4 = 0; + int l4 = 0; + int l6 = l - textureInt1; + l1 += (k2 >> 3) * l6; + i2 += (l2 >> 3) * l6; + j2 += (i3 >> 3) * l6; + int l5 = j2 >> 14; + if (l5 != 0) { + i = l1 / l5; + j = i2 / l5; + if (i < 0) { + i = 0; + } else if (i > 16256) { + i = 16256; + } + } + l1 += k2; + i2 += l2; + j2 += i3; + l5 = j2 >> 14; + if (l5 != 0) { + j4 = l1 / l5; + l4 = i2 / l5; + if (j4 < 7) { + j4 = 7; + } else if (j4 > 16256) { + j4 = 16256; + } + } + int j7 = j4 - i >> 3; + int l7 = l4 - j >> 3; + i += j1 & 0x600000; + int j8 = j1 >> 23; + if (aBoolean1463) { + while (k3-- > 0) { + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i = j4; + j = l4; + l1 += k2; + i2 += l2; + j2 += i3; + int i6 = j2 >> 14; + if (i6 != 0) { + j4 = l1 / i6; + l4 = i2 / i6; + if (j4 < 7) { + j4 = 7; + } else if (j4 > 16256) { + j4 = 16256; + } + } + j7 = j4 - i >> 3; + l7 = l4 - j >> 3; + j1 += j3; + i += j1 & 0x600000; + j8 = j1 >> 23; + } + for (k3 = i1 - l & 7; k3-- > 0;) { + ai[k++] = ai1[(j & 0x3f80) + (i >> 7)] >>> j8; + i += j7; + j += l7; + } + + return; + } + while (k3-- > 0) { + int i9; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i += j7; + j += l7; + if ((i9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = i9; + } + k++; + i = j4; + j = l4; + l1 += k2; + i2 += l2; + j2 += i3; + int j6 = j2 >> 14; + if (j6 != 0) { + j4 = l1 / j6; + l4 = i2 / j6; + if (j4 < 7) { + j4 = 7; + } else if (j4 > 16256) { + j4 = 16256; + } + } + j7 = j4 - i >> 3; + l7 = l4 - j >> 3; + j1 += j3; + i += j1 & 0x600000; + j8 = j1 >> 23; + } + for (int l3 = i1 - l & 7; l3-- > 0;) { + int j9; + if ((j9 = ai1[(j & 0x3f80) + (i >> 7)] >>> j8) != 0) { + ai[k] = j9; + } + k++; + i += j7; + j += l7; + } + + } + + public static final int anInt1459 = -477; + public static boolean lowMem = true; + static boolean aBoolean1462; + private static boolean aBoolean1463; + public static boolean aBoolean1464 = true; + public static int anInt1465; + public static int textureInt1; + public static int textureInt2; + private static int[] anIntArray1468; + public static final int[] anIntArray1469; + public static int anIntArray1470[]; + public static int anIntArray1471[]; + public static int lineOffsets[]; + private static int anInt1473; + public static Background aBackgroundArray1474s[] = new Background[50]; + private static boolean[] aBooleanArray1475 = new boolean[50]; + private static int[] anIntArray1476 = new int[50]; + private static int anInt1477; + private static int[][] anIntArrayArray1478; + private static int[][] anIntArrayArray1479 = new int[50][]; + public static int anIntArray1480[] = new int[50]; + public static int anInt1481; + public static int anIntArray1482[] = new int[0x10000]; + private static int[][] anIntArrayArray1483 = new int[50][]; + + static { + anIntArray1468 = new int[512]; + anIntArray1469 = new int[2048]; + anIntArray1470 = new int[2048]; + anIntArray1471 = new int[2048]; + for (int i = 1; i < 512; i++) { + anIntArray1468[i] = 32768 / i; + } + + for (int j = 1; j < 2048; j++) { + anIntArray1469[j] = 0x10000 / j; + } + + for (int k = 0; k < 2048; k++) { + anIntArray1470[k] = (int) (65536D * Math.sin(k * 0.0030679614999999999D)); + anIntArray1471[k] = (int) (65536D * Math.cos(k * 0.0030679614999999999D)); + } + + } +} diff --git a/2006Redone Client/src/VarBit.java b/2006Redone Client/src/VarBit.java new file mode 100644 index 00000000..301a586f --- /dev/null +++ b/2006Redone Client/src/VarBit.java @@ -0,0 +1,61 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class VarBit { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("varbit.dat")); + int cacheSize = stream.readUnsignedWord(); + if (cache == null) { + cache = new VarBit[cacheSize]; + } + for (int j = 0; j < cacheSize; j++) { + if (cache[j] == null) { + cache[j] = new VarBit(); + } + cache[j].readValues(stream); + if (cache[j].aBoolean651) { + Varp.cache[cache[j].anInt648].aBoolean713 = true; + } + } + + if (stream.currentOffset != stream.buffer.length) { + System.out.println("varbit load mismatch"); + } + } + + private void readValues(Stream stream) { + do { + int j = stream.readUnsignedByte(); + if (j == 0) { + return; + } + if (j == 1) { + anInt648 = stream.readUnsignedWord(); + anInt649 = stream.readUnsignedByte(); + anInt650 = stream.readUnsignedByte(); + } else if (j == 10) { + stream.readString(); + } else if (j == 2) { + aBoolean651 = true; + } else if (j == 3) { + stream.readDWord(); + } else if (j == 4) { + stream.readDWord(); + } else { + System.out.println("Error unrecognised config code: " + j); + } + } while (true); + } + + private VarBit() { + aBoolean651 = false; + } + + public static VarBit cache[]; + public int anInt648; + public int anInt649; + public int anInt650; + private boolean aBoolean651; +} diff --git a/2006Redone Client/src/Varp.java b/2006Redone Client/src/Varp.java new file mode 100644 index 00000000..78d2d556 --- /dev/null +++ b/2006Redone Client/src/Varp.java @@ -0,0 +1,71 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +public final class Varp { + + public static void unpackConfig(StreamLoader streamLoader) { + Stream stream = new Stream(streamLoader.getDataForName("varp.dat")); + anInt702 = 0; + int cacheSize = stream.readUnsignedWord(); + if (cache == null) { + cache = new Varp[cacheSize]; + } + if (anIntArray703 == null) { + anIntArray703 = new int[cacheSize]; + } + for (int j = 0; j < cacheSize; j++) { + if (cache[j] == null) { + cache[j] = new Varp(); + } + cache[j].readValues(stream, j); + } + if (stream.currentOffset != stream.buffer.length) { + System.out.println("varptype load mismatch"); + } + } + + private void readValues(Stream stream, int i) { + do { + int j = stream.readUnsignedByte(); + if (j == 0) { + return; + } + if (j == 1) { + stream.readUnsignedByte(); + } else if (j == 2) { + stream.readUnsignedByte(); + } else if (j == 3) { + anIntArray703[anInt702++] = i; + } else if (j == 4) { + } else if (j == 5) { + anInt709 = stream.readUnsignedWord(); + } else if (j == 6) { + } else if (j == 7) { + stream.readDWord(); + } else if (j == 8) { + aBoolean713 = true; + } else if (j == 10) { + stream.readString(); + } else if (j == 11) { + aBoolean713 = true; + } else if (j == 12) { + stream.readDWord(); + } else if (j == 13) { + } else { + System.out.println("Error unrecognised config code: " + j); + } + } while (true); + } + + private Varp() { + aBoolean713 = false; + } + + public static Varp cache[]; + private static int anInt702; + private static int[] anIntArray703; + public int anInt709; + public boolean aBoolean713; + +} diff --git a/2006Redone Client/src/WorldController.java b/2006Redone Client/src/WorldController.java new file mode 100644 index 00000000..c320c837 --- /dev/null +++ b/2006Redone Client/src/WorldController.java @@ -0,0 +1,2120 @@ +// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) + +final class WorldController { + + public WorldController(int ai[][][]) { + int i = 104;// was parameter + int j = 104;// was parameter + int k = 4;// was parameter + aBoolean434 = true; + obj5Cache = new Object5[5000]; + anIntArray486 = new int[10000]; + anIntArray487 = new int[10000]; + anInt437 = k; + anInt438 = j; + anInt439 = i; + groundArray = new Ground[k][j][i]; + anIntArrayArrayArray445 = new int[k][j + 1][i + 1]; + anIntArrayArrayArray440 = ai; + initToNull(); + } + + public static void nullLoader() { + aClass28Array462 = null; + anIntArray473 = null; + aClass47ArrayArray474 = null; + aClass19_477 = null; + aBooleanArrayArrayArrayArray491 = null; + aBooleanArrayArray492 = null; + } + + public void initToNull() { + for (int j = 0; j < anInt437; j++) { + for (int k = 0; k < anInt438; k++) { + for (int i1 = 0; i1 < anInt439; i1++) { + groundArray[j][k][i1] = null; + } + + } + + } + for (int l = 0; l < anInt472; l++) { + for (int j1 = 0; j1 < anIntArray473[l]; j1++) { + aClass47ArrayArray474[l][j1] = null; + } + + anIntArray473[l] = 0; + } + + for (int k1 = 0; k1 < obj5CacheCurrPos; k1++) { + obj5Cache[k1] = null; + } + + obj5CacheCurrPos = 0; + for (int l1 = 0; l1 < aClass28Array462.length; l1++) { + aClass28Array462[l1] = null; + } + + } + + public void method275(int i) { + anInt442 = i; + for (int k = 0; k < anInt438; k++) { + for (int l = 0; l < anInt439; l++) { + if (groundArray[i][k][l] == null) { + groundArray[i][k][l] = new Ground(i, k, l); + } + } + + } + + } + + public void method276(int i, int j) { + Ground class30_sub3 = groundArray[0][j][i]; + for (int l = 0; l < 3; l++) { + Ground class30_sub3_1 = groundArray[l][j][i] = groundArray[l + 1][j][i]; + if (class30_sub3_1 != null) { + class30_sub3_1.anInt1307--; + for (int j1 = 0; j1 < class30_sub3_1.anInt1317; j1++) { + Object5 class28 = class30_sub3_1.obj5Array[j1]; + if ((class28.uid >> 29 & 3) == 2 && class28.anInt523 == j && class28.anInt525 == i) { + class28.anInt517--; + } + } + + } + } + if (groundArray[0][j][i] == null) { + groundArray[0][j][i] = new Ground(0, j, i); + } + groundArray[0][j][i].aClass30_Sub3_1329 = class30_sub3; + groundArray[3][j][i] = null; + } + + public static void method277(int i, int j, int k, int l, int i1, int j1, int l1, int i2) { + Class47 class47 = new Class47(); + class47.anInt787 = j / 128; + class47.anInt788 = l / 128; + class47.anInt789 = l1 / 128; + class47.anInt790 = i1 / 128; + class47.anInt791 = i2; + class47.anInt792 = j; + class47.anInt793 = l; + class47.anInt794 = l1; + class47.anInt795 = i1; + class47.anInt796 = j1; + class47.anInt797 = k; + aClass47ArrayArray474[i][anIntArray473[i]++] = class47; + } + + public void method278(int i, int j, int k, int l) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 != null) { + groundArray[i][j][k].anInt1321 = l; + } + } + + public void method279(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2, int i3, int j3, int k3, int l3, int i4, int j4, int k4, int l4) { + if (l == 0) { + Class43 class43 = new Class43(k2, l2, i3, j3, -1, k4, false); + for (int i5 = i; i5 >= 0; i5--) { + if (groundArray[i5][j][k] == null) { + groundArray[i5][j][k] = new Ground(i5, j, k); + } + } + + groundArray[i][j][k].aClass43_1311 = class43; + return; + } + if (l == 1) { + Class43 class43_1 = new Class43(k3, l3, i4, j4, j1, l4, k1 == l1 && k1 == i2 && k1 == j2); + for (int j5 = i; j5 >= 0; j5--) { + if (groundArray[j5][j][k] == null) { + groundArray[j5][j][k] = new Ground(j5, j, k); + } + } + + groundArray[i][j][k].aClass43_1311 = class43_1; + return; + } + Class40 class40 = new Class40(k, k3, j3, i2, j1, i4, i1, k2, k4, i3, j2, l1, k1, l, j4, l3, l2, j, l4); + for (int k5 = i; k5 >= 0; k5--) { + if (groundArray[k5][j][k] == null) { + groundArray[k5][j][k] = new Ground(k5, j, k); + } + } + + groundArray[i][j][k].aClass40_1312 = class40; + } + + public void method280(int i, int j, int k, Animable class30_sub2_sub4, byte byte0, int i1, int j1) { + if (class30_sub2_sub4 == null) { + return; + } + Object3 class49 = new Object3(); + class49.aClass30_Sub2_Sub4_814 = class30_sub2_sub4; + class49.anInt812 = j1 * 128 + 64; + class49.anInt813 = k * 128 + 64; + class49.anInt811 = j; + class49.uid = i1; + class49.aByte816 = byte0; + if (groundArray[i][j1][k] == null) { + groundArray[i][j1][k] = new Ground(i, j1, k); + } + groundArray[i][j1][k].obj3 = class49; + } + + public void method281(int i, int j, Animable class30_sub2_sub4, int k, Animable class30_sub2_sub4_1, Animable class30_sub2_sub4_2, int l, int i1) { + Object4 object4 = new Object4(); + object4.aClass30_Sub2_Sub4_48 = class30_sub2_sub4_2; + object4.anInt46 = i * 128 + 64; + object4.anInt47 = i1 * 128 + 64; + object4.anInt45 = k; + object4.uid = j; + object4.aClass30_Sub2_Sub4_49 = class30_sub2_sub4; + object4.aClass30_Sub2_Sub4_50 = class30_sub2_sub4_1; + int j1 = 0; + Ground class30_sub3 = groundArray[l][i][i1]; + if (class30_sub3 != null) { + for (int k1 = 0; k1 < class30_sub3.anInt1317; k1++) { + if (class30_sub3.obj5Array[k1].aClass30_Sub2_Sub4_521 instanceof Model) { + int l1 = ((Model) class30_sub3.obj5Array[k1].aClass30_Sub2_Sub4_521).anInt1654; + if (l1 > j1) { + j1 = l1; + } + } + } + + } + object4.anInt52 = j1; + if (groundArray[l][i][i1] == null) { + groundArray[l][i][i1] = new Ground(l, i, i1); + } + groundArray[l][i][i1].obj4 = object4; + } + + public void method282(int i, Animable class30_sub2_sub4, int j, int k, byte byte0, int l, Animable class30_sub2_sub4_1, int i1, int j1, int k1) { + if (class30_sub2_sub4 == null && class30_sub2_sub4_1 == null) { + return; + } + Object1 object1 = new Object1(); + object1.uid = j; + object1.aByte281 = byte0; + object1.anInt274 = l * 128 + 64; + object1.anInt275 = k * 128 + 64; + object1.anInt273 = i1; + object1.aClass30_Sub2_Sub4_278 = class30_sub2_sub4; + object1.aClass30_Sub2_Sub4_279 = class30_sub2_sub4_1; + object1.orientation = i; + object1.orientation1 = j1; + for (int l1 = k1; l1 >= 0; l1--) { + if (groundArray[l1][l][k] == null) { + groundArray[l1][l][k] = new Ground(l1, l, k); + } + } + + groundArray[k1][l][k].obj1 = object1; + } + + public void method283(int i, int j, int k, int i1, int j1, int k1, Animable class30_sub2_sub4, int l1, byte byte0, int i2, int j2) { + if (class30_sub2_sub4 == null) { + return; + } + Object2 class26 = new Object2(); + class26.uid = i; + class26.aByte506 = byte0; + class26.anInt500 = l1 * 128 + 64 + j1; + class26.anInt501 = j * 128 + 64 + i2; + class26.anInt499 = k1; + class26.aClass30_Sub2_Sub4_504 = class30_sub2_sub4; + class26.anInt502 = j2; + class26.anInt503 = k; + for (int k2 = i1; k2 >= 0; k2--) { + if (groundArray[k2][l1][j] == null) { + groundArray[k2][l1][j] = new Ground(k2, l1, j); + } + } + + groundArray[i1][l1][j].obj2 = class26; + } + + public boolean method284(int i, byte byte0, int j, int k, Animable class30_sub2_sub4, int l, int i1, int j1, int k1, int l1) { + if (class30_sub2_sub4 == null) { + return true; + } else { + int i2 = l1 * 128 + 64 * l; + int j2 = k1 * 128 + 64 * k; + return method287(i1, l1, k1, l, k, i2, j2, j, class30_sub2_sub4, j1, false, i, byte0); + } + } + + public boolean method285(int i, int j, int k, int l, int i1, int j1, int k1, Animable class30_sub2_sub4, boolean flag) { + if (class30_sub2_sub4 == null) { + return true; + } + int l1 = k1 - j1; + int i2 = i1 - j1; + int j2 = k1 + j1; + int k2 = i1 + j1; + if (flag) { + if (j > 640 && j < 1408) { + k2 += 128; + } + if (j > 1152 && j < 1920) { + j2 += 128; + } + if (j > 1664 || j < 384) { + i2 -= 128; + } + if (j > 128 && j < 896) { + l1 -= 128; + } + } + l1 /= 128; + i2 /= 128; + j2 /= 128; + k2 /= 128; + return method287(i, l1, i2, j2 - l1 + 1, k2 - i2 + 1, k1, i1, k, class30_sub2_sub4, j, true, l, (byte) 0); + } + + public boolean method286(int j, int k, Animable class30_sub2_sub4, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2) { + return class30_sub2_sub4 == null || method287(j, l1, k2, i2 - l1 + 1, i1 - k2 + 1, j1, k, k1, class30_sub2_sub4, l, true, j2, (byte) 0); + } + + private boolean method287(int i, int j, int k, int l, int i1, int j1, int k1, int l1, Animable class30_sub2_sub4, int i2, boolean flag, int j2, byte byte0) { + for (int k2 = j; k2 < j + l; k2++) { + for (int l2 = k; l2 < k + i1; l2++) { + if (k2 < 0 || l2 < 0 || k2 >= anInt438 || l2 >= anInt439) { + return false; + } + Ground class30_sub3 = groundArray[i][k2][l2]; + if (class30_sub3 != null && class30_sub3.anInt1317 >= 5) { + return false; + } + } + + } + + Object5 class28 = new Object5(); + class28.uid = j2; + class28.aByte530 = byte0; + class28.anInt517 = i; + class28.anInt519 = j1; + class28.anInt520 = k1; + class28.anInt518 = l1; + class28.aClass30_Sub2_Sub4_521 = class30_sub2_sub4; + class28.anInt522 = i2; + class28.anInt523 = j; + class28.anInt525 = k; + class28.anInt524 = j + l - 1; + class28.anInt526 = k + i1 - 1; + for (int i3 = j; i3 < j + l; i3++) { + for (int j3 = k; j3 < k + i1; j3++) { + int k3 = 0; + if (i3 > j) { + k3++; + } + if (i3 < j + l - 1) { + k3 += 4; + } + if (j3 > k) { + k3 += 8; + } + if (j3 < k + i1 - 1) { + k3 += 2; + } + for (int l3 = i; l3 >= 0; l3--) { + if (groundArray[l3][i3][j3] == null) { + groundArray[l3][i3][j3] = new Ground(l3, i3, j3); + } + } + + Ground class30_sub3_1 = groundArray[i][i3][j3]; + class30_sub3_1.obj5Array[class30_sub3_1.anInt1317] = class28; + class30_sub3_1.anIntArray1319[class30_sub3_1.anInt1317] = k3; + class30_sub3_1.anInt1320 |= k3; + class30_sub3_1.anInt1317++; + } + + } + + if (flag) { + obj5Cache[obj5CacheCurrPos++] = class28; + } + return true; + } + + public void clearObj5Cache() { + for (int i = 0; i < obj5CacheCurrPos; i++) { + Object5 object5 = obj5Cache[i]; + method289(object5); + obj5Cache[i] = null; + } + + obj5CacheCurrPos = 0; + } + + private void method289(Object5 class28) { + for (int j = class28.anInt523; j <= class28.anInt524; j++) { + for (int k = class28.anInt525; k <= class28.anInt526; k++) { + Ground class30_sub3 = groundArray[class28.anInt517][j][k]; + if (class30_sub3 != null) { + for (int l = 0; l < class30_sub3.anInt1317; l++) { + if (class30_sub3.obj5Array[l] != class28) { + continue; + } + class30_sub3.anInt1317--; + for (int i1 = l; i1 < class30_sub3.anInt1317; i1++) { + class30_sub3.obj5Array[i1] = class30_sub3.obj5Array[i1 + 1]; + class30_sub3.anIntArray1319[i1] = class30_sub3.anIntArray1319[i1 + 1]; + } + + class30_sub3.obj5Array[class30_sub3.anInt1317] = null; + break; + } + + class30_sub3.anInt1320 = 0; + for (int j1 = 0; j1 < class30_sub3.anInt1317; j1++) { + class30_sub3.anInt1320 |= class30_sub3.anIntArray1319[j1]; + } + + } + } + + } + + } + + public void method290(int i, int k, int l, int i1) { + Ground class30_sub3 = groundArray[i1][l][i]; + if (class30_sub3 == null) { + return; + } + Object2 class26 = class30_sub3.obj2; + if (class26 != null) { + int j1 = l * 128 + 64; + int k1 = i * 128 + 64; + class26.anInt500 = j1 + (class26.anInt500 - j1) * k / 16; + class26.anInt501 = k1 + (class26.anInt501 - k1) * k / 16; + } + } + + public void method291(int i, int j, int k, byte byte0) { + Ground class30_sub3 = groundArray[j][i][k]; + if (byte0 != -119) { + aBoolean434 = !aBoolean434; + } + if (class30_sub3 != null) { + class30_sub3.obj1 = null; + } + } + + public void method292(int j, int k, int l) { + Ground class30_sub3 = groundArray[k][l][j]; + if (class30_sub3 != null) { + class30_sub3.obj2 = null; + } + } + + public void method293(int i, int k, int l) { + Ground class30_sub3 = groundArray[i][k][l]; + if (class30_sub3 == null) { + return; + } + for (int j1 = 0; j1 < class30_sub3.anInt1317; j1++) { + Object5 class28 = class30_sub3.obj5Array[j1]; + if ((class28.uid >> 29 & 3) == 2 && class28.anInt523 == k && class28.anInt525 == l) { + method289(class28); + return; + } + } + + } + + public void method294(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][k][j]; + if (class30_sub3 == null) { + return; + } + class30_sub3.obj3 = null; + } + + public void method295(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 != null) { + class30_sub3.obj4 = null; + } + } + + public Object1 method296(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 == null) { + return null; + } else { + return class30_sub3.obj1; + } + } + + public Object2 method297(int i, int k, int l) { + Ground class30_sub3 = groundArray[l][i][k]; + if (class30_sub3 == null) { + return null; + } else { + return class30_sub3.obj2; + } + } + + public Object5 method298(int i, int j, int k) { + Ground class30_sub3 = groundArray[k][i][j]; + if (class30_sub3 == null) { + return null; + } + for (int l = 0; l < class30_sub3.anInt1317; l++) { + Object5 class28 = class30_sub3.obj5Array[l]; + if ((class28.uid >> 29 & 3) == 2 && class28.anInt523 == i && class28.anInt525 == j) { + return class28; + } + } + return null; + } + + public Object3 method299(int i, int j, int k) { + Ground class30_sub3 = groundArray[k][j][i]; + if (class30_sub3 == null || class30_sub3.obj3 == null) { + return null; + } else { + return class30_sub3.obj3; + } + } + + public int method300(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 == null || class30_sub3.obj1 == null) { + return 0; + } else { + return class30_sub3.obj1.uid; + } + } + + public int method301(int i, int j, int l) { + Ground class30_sub3 = groundArray[i][j][l]; + if (class30_sub3 == null || class30_sub3.obj2 == null) { + return 0; + } else { + return class30_sub3.obj2.uid; + } + } + + public int method302(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 == null) { + return 0; + } + for (int l = 0; l < class30_sub3.anInt1317; l++) { + Object5 class28 = class30_sub3.obj5Array[l]; + if ((class28.uid >> 29 & 3) == 2 && class28.anInt523 == j && class28.anInt525 == k) { + return class28.uid; + } + } + + return 0; + } + + public int method303(int i, int j, int k) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 == null || class30_sub3.obj3 == null) { + return 0; + } else { + return class30_sub3.obj3.uid; + } + } + + public int method304(int i, int j, int k, int l) { + Ground class30_sub3 = groundArray[i][j][k]; + if (class30_sub3 == null) { + return -1; + } + if (class30_sub3.obj1 != null && class30_sub3.obj1.uid == l) { + return class30_sub3.obj1.aByte281 & 0xff; + } + if (class30_sub3.obj2 != null && class30_sub3.obj2.uid == l) { + return class30_sub3.obj2.aByte506 & 0xff; + } + if (class30_sub3.obj3 != null && class30_sub3.obj3.uid == l) { + return class30_sub3.obj3.aByte816 & 0xff; + } + for (int i1 = 0; i1 < class30_sub3.anInt1317; i1++) { + if (class30_sub3.obj5Array[i1].uid == l) { + return class30_sub3.obj5Array[i1].aByte530 & 0xff; + } + } + + return -1; + } + + public void method305(int i, int k, int i1) { + int j = 64;// was parameter + int l = 768;// was parameter + int j1 = (int) Math.sqrt(k * k + i * i + i1 * i1); + int k1 = l * j1 >> 8; + for (int l1 = 0; l1 < anInt437; l1++) { + for (int i2 = 0; i2 < anInt438; i2++) { + for (int j2 = 0; j2 < anInt439; j2++) { + Ground class30_sub3 = groundArray[l1][i2][j2]; + if (class30_sub3 != null) { + Object1 class10 = class30_sub3.obj1; + if (class10 != null && class10.aClass30_Sub2_Sub4_278 != null && class10.aClass30_Sub2_Sub4_278.aClass33Array1425 != null) { + method307(l1, 1, 1, i2, j2, (Model) class10.aClass30_Sub2_Sub4_278); + if (class10.aClass30_Sub2_Sub4_279 != null && class10.aClass30_Sub2_Sub4_279.aClass33Array1425 != null) { + method307(l1, 1, 1, i2, j2, (Model) class10.aClass30_Sub2_Sub4_279); + method308((Model) class10.aClass30_Sub2_Sub4_278, (Model) class10.aClass30_Sub2_Sub4_279, 0, 0, 0, false); + ((Model) class10.aClass30_Sub2_Sub4_279).method480(j, k1, k, i, i1); + } + ((Model) class10.aClass30_Sub2_Sub4_278).method480(j, k1, k, i, i1); + } + for (int k2 = 0; k2 < class30_sub3.anInt1317; k2++) { + Object5 class28 = class30_sub3.obj5Array[k2]; + if (class28 != null && class28.aClass30_Sub2_Sub4_521 != null && class28.aClass30_Sub2_Sub4_521.aClass33Array1425 != null) { + method307(l1, class28.anInt524 - class28.anInt523 + 1, class28.anInt526 - class28.anInt525 + 1, i2, j2, (Model) class28.aClass30_Sub2_Sub4_521); + ((Model) class28.aClass30_Sub2_Sub4_521).method480(j, k1, k, i, i1); + } + } + + Object3 class49 = class30_sub3.obj3; + if (class49 != null && class49.aClass30_Sub2_Sub4_814.aClass33Array1425 != null) { + method306(i2, l1, (Model) class49.aClass30_Sub2_Sub4_814, j2); + ((Model) class49.aClass30_Sub2_Sub4_814).method480(j, k1, k, i, i1); + } + } + } + + } + + } + + } + + private void method306(int i, int j, Model model, int k) { + if (i < anInt438) { + Ground class30_sub3 = groundArray[j][i + 1][k]; + if (class30_sub3 != null && class30_sub3.obj3 != null && class30_sub3.obj3.aClass30_Sub2_Sub4_814.aClass33Array1425 != null) { + method308(model, (Model) class30_sub3.obj3.aClass30_Sub2_Sub4_814, 128, 0, 0, true); + } + } + if (k < anInt438) { + Ground class30_sub3_1 = groundArray[j][i][k + 1]; + if (class30_sub3_1 != null && class30_sub3_1.obj3 != null && class30_sub3_1.obj3.aClass30_Sub2_Sub4_814.aClass33Array1425 != null) { + method308(model, (Model) class30_sub3_1.obj3.aClass30_Sub2_Sub4_814, 0, 0, 128, true); + } + } + if (i < anInt438 && k < anInt439) { + Ground class30_sub3_2 = groundArray[j][i + 1][k + 1]; + if (class30_sub3_2 != null && class30_sub3_2.obj3 != null && class30_sub3_2.obj3.aClass30_Sub2_Sub4_814.aClass33Array1425 != null) { + method308(model, (Model) class30_sub3_2.obj3.aClass30_Sub2_Sub4_814, 128, 0, 128, true); + } + } + if (i < anInt438 && k > 0) { + Ground class30_sub3_3 = groundArray[j][i + 1][k - 1]; + if (class30_sub3_3 != null && class30_sub3_3.obj3 != null && class30_sub3_3.obj3.aClass30_Sub2_Sub4_814.aClass33Array1425 != null) { + method308(model, (Model) class30_sub3_3.obj3.aClass30_Sub2_Sub4_814, 128, 0, -128, true); + } + } + } + + private void method307(int i, int j, int k, int l, int i1, Model model) { + boolean flag = true; + int j1 = l; + int k1 = l + j; + int l1 = i1 - 1; + int i2 = i1 + k; + for (int j2 = i; j2 <= i + 1; j2++) { + if (j2 != anInt437) { + for (int k2 = j1; k2 <= k1; k2++) { + if (k2 >= 0 && k2 < anInt438) { + for (int l2 = l1; l2 <= i2; l2++) { + if (l2 >= 0 && l2 < anInt439 && (!flag || k2 >= k1 || l2 >= i2 || l2 < i1 && k2 != l)) { + Ground class30_sub3 = groundArray[j2][k2][l2]; + if (class30_sub3 != null) { + int i3 = (anIntArrayArrayArray440[j2][k2][l2] + anIntArrayArrayArray440[j2][k2 + 1][l2] + anIntArrayArrayArray440[j2][k2][l2 + 1] + anIntArrayArrayArray440[j2][k2 + 1][l2 + 1]) / 4 - (anIntArrayArrayArray440[i][l][i1] + anIntArrayArrayArray440[i][l + 1][i1] + anIntArrayArrayArray440[i][l][i1 + 1] + anIntArrayArrayArray440[i][l + 1][i1 + 1]) / 4; + Object1 class10 = class30_sub3.obj1; + if (class10 != null && class10.aClass30_Sub2_Sub4_278 != null && class10.aClass30_Sub2_Sub4_278.aClass33Array1425 != null) { + method308(model, (Model) class10.aClass30_Sub2_Sub4_278, (k2 - l) * 128 + (1 - j) * 64, i3, (l2 - i1) * 128 + (1 - k) * 64, flag); + } + if (class10 != null && class10.aClass30_Sub2_Sub4_279 != null && class10.aClass30_Sub2_Sub4_279.aClass33Array1425 != null) { + method308(model, (Model) class10.aClass30_Sub2_Sub4_279, (k2 - l) * 128 + (1 - j) * 64, i3, (l2 - i1) * 128 + (1 - k) * 64, flag); + } + for (int j3 = 0; j3 < class30_sub3.anInt1317; j3++) { + Object5 class28 = class30_sub3.obj5Array[j3]; + if (class28 != null && class28.aClass30_Sub2_Sub4_521 != null && class28.aClass30_Sub2_Sub4_521.aClass33Array1425 != null) { + int k3 = class28.anInt524 - class28.anInt523 + 1; + int l3 = class28.anInt526 - class28.anInt525 + 1; + method308(model, (Model) class28.aClass30_Sub2_Sub4_521, (class28.anInt523 - l) * 128 + (k3 - j) * 64, i3, (class28.anInt525 - i1) * 128 + (l3 - k) * 64, flag); + } + } + + } + } + } + + } + } + + j1--; + flag = false; + } + } + + } + + private void method308(Model model, Model model_1, int i, int j, int k, boolean flag) { + anInt488++; + int l = 0; + int ai[] = model_1.anIntArray1627; + int i1 = model_1.anInt1626; + for (int j1 = 0; j1 < model.anInt1626; j1++) { + Class33 class33 = model.aClass33Array1425[j1]; + Class33 class33_1 = model.aClass33Array1660[j1]; + if (class33_1.anInt605 != 0) { + int i2 = model.anIntArray1628[j1] - j; + if (i2 <= model_1.anInt1651) { + int j2 = model.anIntArray1627[j1] - i; + if (j2 >= model_1.anInt1646 && j2 <= model_1.anInt1647) { + int k2 = model.anIntArray1629[j1] - k; + if (k2 >= model_1.anInt1649 && k2 <= model_1.anInt1648) { + for (int l2 = 0; l2 < i1; l2++) { + Class33 class33_2 = model_1.aClass33Array1425[l2]; + Class33 class33_3 = model_1.aClass33Array1660[l2]; + if (j2 == ai[l2] && k2 == model_1.anIntArray1629[l2] && i2 == model_1.anIntArray1628[l2] && class33_3.anInt605 != 0) { + class33.anInt602 += class33_3.anInt602; + class33.anInt603 += class33_3.anInt603; + class33.anInt604 += class33_3.anInt604; + class33.anInt605 += class33_3.anInt605; + class33_2.anInt602 += class33_1.anInt602; + class33_2.anInt603 += class33_1.anInt603; + class33_2.anInt604 += class33_1.anInt604; + class33_2.anInt605 += class33_1.anInt605; + l++; + anIntArray486[j1] = anInt488; + anIntArray487[l2] = anInt488; + } + } + + } + } + } + } + } + + if (l < 3 || !flag) { + return; + } + for (int k1 = 0; k1 < model.anInt1630; k1++) { + if (anIntArray486[model.anIntArray1631[k1]] == anInt488 && anIntArray486[model.anIntArray1632[k1]] == anInt488 && anIntArray486[model.anIntArray1633[k1]] == anInt488) { + model.anIntArray1637[k1] = -1; + } + } + + for (int l1 = 0; l1 < model_1.anInt1630; l1++) { + if (anIntArray487[model_1.anIntArray1631[l1]] == anInt488 && anIntArray487[model_1.anIntArray1632[l1]] == anInt488 && anIntArray487[model_1.anIntArray1633[l1]] == anInt488) { + model_1.anIntArray1637[l1] = -1; + } + } + + } + + public void method309(int ai[], int i, int k, int l, int i1) { + int j = 512;// was parameter + Ground class30_sub3 = groundArray[k][l][i1]; + if (class30_sub3 == null) { + return; + } + Class43 class43 = class30_sub3.aClass43_1311; + if (class43 != null) { + int j1 = class43.anInt722; + if (j1 == 0) { + return; + } + for (int k1 = 0; k1 < 4; k1++) { + ai[i] = j1; + ai[i + 1] = j1; + ai[i + 2] = j1; + ai[i + 3] = j1; + i += j; + } + + return; + } + Class40 class40 = class30_sub3.aClass40_1312; + if (class40 == null) { + return; + } + int l1 = class40.anInt684; + int i2 = class40.anInt685; + int j2 = class40.anInt686; + int k2 = class40.anInt687; + int ai1[] = anIntArrayArray489[l1]; + int ai2[] = anIntArrayArray490[i2]; + int l2 = 0; + if (j2 != 0) { + for (int i3 = 0; i3 < 4; i3++) { + ai[i] = ai1[ai2[l2++]] != 0 ? k2 : j2; + ai[i + 1] = ai1[ai2[l2++]] != 0 ? k2 : j2; + ai[i + 2] = ai1[ai2[l2++]] != 0 ? k2 : j2; + ai[i + 3] = ai1[ai2[l2++]] != 0 ? k2 : j2; + i += j; + } + + return; + } + for (int j3 = 0; j3 < 4; j3++) { + if (ai1[ai2[l2++]] != 0) { + ai[i] = k2; + } + if (ai1[ai2[l2++]] != 0) { + ai[i + 1] = k2; + } + if (ai1[ai2[l2++]] != 0) { + ai[i + 2] = k2; + } + if (ai1[ai2[l2++]] != 0) { + ai[i + 3] = k2; + } + i += j; + } + + } + + public static void method310(int i, int j, int k, int l, int ai[]) { + anInt495 = 0; + anInt496 = 0; + anInt497 = k; + anInt498 = l; + anInt493 = k / 2; + anInt494 = l / 2; + boolean aflag[][][][] = new boolean[9][32][53][53]; + for (int i1 = 128; i1 <= 384; i1 += 32) { + for (int j1 = 0; j1 < 2048; j1 += 64) { + anInt458 = Model.modelIntArray1[i1]; + anInt459 = Model.modelIntArray2[i1]; + anInt460 = Model.modelIntArray1[j1]; + anInt461 = Model.modelIntArray2[j1]; + int l1 = (i1 - 128) / 32; + int j2 = j1 / 64; + for (int l2 = -26; l2 <= 26; l2++) { + for (int j3 = -26; j3 <= 26; j3++) { + int k3 = l2 * 128; + int i4 = j3 * 128; + boolean flag2 = false; + for (int k4 = -i; k4 <= j; k4 += 128) { + if (!method311(ai[l1] + k4, i4, k3)) { + continue; + } + flag2 = true; + break; + } + + aflag[l1][j2][l2 + 25 + 1][j3 + 25 + 1] = flag2; + } + + } + + } + + } + + for (int k1 = 0; k1 < 8; k1++) { + for (int i2 = 0; i2 < 32; i2++) { + for (int k2 = -25; k2 < 25; k2++) { + for (int i3 = -25; i3 < 25; i3++) { + boolean flag1 = false; + label0 : for (int l3 = -1; l3 <= 1; l3++) { + for (int j4 = -1; j4 <= 1; j4++) { + if (aflag[k1][i2][k2 + l3 + 25 + 1][i3 + j4 + 25 + 1]) { + flag1 = true; + } else if (aflag[k1][(i2 + 1) % 31][k2 + l3 + 25 + 1][i3 + j4 + 25 + 1]) { + flag1 = true; + } else if (aflag[k1 + 1][i2][k2 + l3 + 25 + 1][i3 + j4 + 25 + 1]) { + flag1 = true; + } else { + if (!aflag[k1 + 1][(i2 + 1) % 31][k2 + l3 + 25 + 1][i3 + j4 + 25 + 1]) { + continue; + } + flag1 = true; + } + break label0; + } + + } + + aBooleanArrayArrayArrayArray491[k1][i2][k2 + 25][i3 + 25] = flag1; + } + + } + + } + + } + + } + + private static boolean method311(int i, int j, int k) { + int l = j * anInt460 + k * anInt461 >> 16; + int i1 = j * anInt461 - k * anInt460 >> 16; + int j1 = i * anInt458 + i1 * anInt459 >> 16; + int k1 = i * anInt459 - i1 * anInt458 >> 16; + if (j1 < 50 || j1 > 3500) { + return false; + } + int l1 = anInt493 + (l << 9) / j1; + int i2 = anInt494 + (k1 << 9) / j1; + return l1 >= anInt495 && l1 <= anInt497 && i2 >= anInt496 && i2 <= anInt498; + } + + public void method312(int i, int j) { + aBoolean467 = true; + anInt468 = j; + anInt469 = i; + anInt470 = -1; + anInt471 = -1; + } + + public void method313(int i, int j, int k, int l, int i1, int j1) { + if (i < 0) { + i = 0; + } else if (i >= anInt438 * 128) { + i = anInt438 * 128 - 1; + } + if (j < 0) { + j = 0; + } else if (j >= anInt439 * 128) { + j = anInt439 * 128 - 1; + } + anInt448++; + anInt458 = Model.modelIntArray1[j1]; + anInt459 = Model.modelIntArray2[j1]; + anInt460 = Model.modelIntArray1[k]; + anInt461 = Model.modelIntArray2[k]; + aBooleanArrayArray492 = aBooleanArrayArrayArrayArray491[(j1 - 128) / 32][k / 64]; + anInt455 = i; + anInt456 = l; + anInt457 = j; + anInt453 = i / 128; + anInt454 = j / 128; + anInt447 = i1; + anInt449 = anInt453 - 25; + if (anInt449 < 0) { + anInt449 = 0; + } + anInt451 = anInt454 - 25; + if (anInt451 < 0) { + anInt451 = 0; + } + anInt450 = anInt453 + 25; + if (anInt450 > anInt438) { + anInt450 = anInt438; + } + anInt452 = anInt454 + 25; + if (anInt452 > anInt439) { + anInt452 = anInt439; + } + method319(); + anInt446 = 0; + for (int k1 = anInt442; k1 < anInt437; k1++) { + Ground aclass30_sub3[][] = groundArray[k1]; + for (int i2 = anInt449; i2 < anInt450; i2++) { + for (int k2 = anInt451; k2 < anInt452; k2++) { + Ground class30_sub3 = aclass30_sub3[i2][k2]; + if (class30_sub3 != null) { + if (class30_sub3.anInt1321 > i1 || !aBooleanArrayArray492[i2 - anInt453 + 25][k2 - anInt454 + 25] && anIntArrayArrayArray440[k1][i2][k2] - l < 2000) { + class30_sub3.aBoolean1322 = false; + class30_sub3.aBoolean1323 = false; + class30_sub3.anInt1325 = 0; + } else { + class30_sub3.aBoolean1322 = true; + class30_sub3.aBoolean1323 = true; + class30_sub3.aBoolean1324 = class30_sub3.anInt1317 > 0; + anInt446++; + } + } + } + + } + + } + + for (int l1 = anInt442; l1 < anInt437; l1++) { + Ground aclass30_sub3_1[][] = groundArray[l1]; + for (int l2 = -25; l2 <= 0; l2++) { + int i3 = anInt453 + l2; + int k3 = anInt453 - l2; + if (i3 >= anInt449 || k3 < anInt450) { + for (int i4 = -25; i4 <= 0; i4++) { + int k4 = anInt454 + i4; + int i5 = anInt454 - i4; + if (i3 >= anInt449) { + if (k4 >= anInt451) { + Ground class30_sub3_1 = aclass30_sub3_1[i3][k4]; + if (class30_sub3_1 != null && class30_sub3_1.aBoolean1322) { + method314(class30_sub3_1, true); + } + } + if (i5 < anInt452) { + Ground class30_sub3_2 = aclass30_sub3_1[i3][i5]; + if (class30_sub3_2 != null && class30_sub3_2.aBoolean1322) { + method314(class30_sub3_2, true); + } + } + } + if (k3 < anInt450) { + if (k4 >= anInt451) { + Ground class30_sub3_3 = aclass30_sub3_1[k3][k4]; + if (class30_sub3_3 != null && class30_sub3_3.aBoolean1322) { + method314(class30_sub3_3, true); + } + } + if (i5 < anInt452) { + Ground class30_sub3_4 = aclass30_sub3_1[k3][i5]; + if (class30_sub3_4 != null && class30_sub3_4.aBoolean1322) { + method314(class30_sub3_4, true); + } + } + } + if (anInt446 == 0) { + aBoolean467 = false; + return; + } + } + + } + } + + } + + for (int j2 = anInt442; j2 < anInt437; j2++) { + Ground aclass30_sub3_2[][] = groundArray[j2]; + for (int j3 = -25; j3 <= 0; j3++) { + int l3 = anInt453 + j3; + int j4 = anInt453 - j3; + if (l3 >= anInt449 || j4 < anInt450) { + for (int l4 = -25; l4 <= 0; l4++) { + int j5 = anInt454 + l4; + int k5 = anInt454 - l4; + if (l3 >= anInt449) { + if (j5 >= anInt451) { + Ground class30_sub3_5 = aclass30_sub3_2[l3][j5]; + if (class30_sub3_5 != null && class30_sub3_5.aBoolean1322) { + method314(class30_sub3_5, false); + } + } + if (k5 < anInt452) { + Ground class30_sub3_6 = aclass30_sub3_2[l3][k5]; + if (class30_sub3_6 != null && class30_sub3_6.aBoolean1322) { + method314(class30_sub3_6, false); + } + } + } + if (j4 < anInt450) { + if (j5 >= anInt451) { + Ground class30_sub3_7 = aclass30_sub3_2[j4][j5]; + if (class30_sub3_7 != null && class30_sub3_7.aBoolean1322) { + method314(class30_sub3_7, false); + } + } + if (k5 < anInt452) { + Ground class30_sub3_8 = aclass30_sub3_2[j4][k5]; + if (class30_sub3_8 != null && class30_sub3_8.aBoolean1322) { + method314(class30_sub3_8, false); + } + } + } + if (anInt446 == 0) { + aBoolean467 = false; + return; + } + } + + } + } + + } + + aBoolean467 = false; + } + + private void method314(Ground class30_sub3, boolean flag) { + aClass19_477.insertHead(class30_sub3); + do { + Ground class30_sub3_1; + do { + class30_sub3_1 = (Ground) aClass19_477.popHead(); + if (class30_sub3_1 == null) { + return; + } + } while (!class30_sub3_1.aBoolean1323); + int i = class30_sub3_1.anInt1308; + int j = class30_sub3_1.anInt1309; + int k = class30_sub3_1.anInt1307; + int l = class30_sub3_1.anInt1310; + Ground aclass30_sub3[][] = groundArray[k]; + if (class30_sub3_1.aBoolean1322) { + if (flag) { + if (k > 0) { + Ground class30_sub3_2 = groundArray[k - 1][i][j]; + if (class30_sub3_2 != null && class30_sub3_2.aBoolean1323) { + continue; + } + } + if (i <= anInt453 && i > anInt449) { + Ground class30_sub3_3 = aclass30_sub3[i - 1][j]; + if (class30_sub3_3 != null && class30_sub3_3.aBoolean1323 && (class30_sub3_3.aBoolean1322 || (class30_sub3_1.anInt1320 & 1) == 0)) { + continue; + } + } + if (i >= anInt453 && i < anInt450 - 1) { + Ground class30_sub3_4 = aclass30_sub3[i + 1][j]; + if (class30_sub3_4 != null && class30_sub3_4.aBoolean1323 && (class30_sub3_4.aBoolean1322 || (class30_sub3_1.anInt1320 & 4) == 0)) { + continue; + } + } + if (j <= anInt454 && j > anInt451) { + Ground class30_sub3_5 = aclass30_sub3[i][j - 1]; + if (class30_sub3_5 != null && class30_sub3_5.aBoolean1323 && (class30_sub3_5.aBoolean1322 || (class30_sub3_1.anInt1320 & 8) == 0)) { + continue; + } + } + if (j >= anInt454 && j < anInt452 - 1) { + Ground class30_sub3_6 = aclass30_sub3[i][j + 1]; + if (class30_sub3_6 != null && class30_sub3_6.aBoolean1323 && (class30_sub3_6.aBoolean1322 || (class30_sub3_1.anInt1320 & 2) == 0)) { + continue; + } + } + } else { + flag = true; + } + class30_sub3_1.aBoolean1322 = false; + if (class30_sub3_1.aClass30_Sub3_1329 != null) { + Ground class30_sub3_7 = class30_sub3_1.aClass30_Sub3_1329; + if (class30_sub3_7.aClass43_1311 != null) { + if (!method320(0, i, j)) { + method315(class30_sub3_7.aClass43_1311, 0, anInt458, anInt459, anInt460, anInt461, i, j); + } + } else if (class30_sub3_7.aClass40_1312 != null && !method320(0, i, j)) { + method316(i, anInt458, anInt460, class30_sub3_7.aClass40_1312, anInt459, j, anInt461); + } + Object1 class10 = class30_sub3_7.obj1; + if (class10 != null) { + class10.aClass30_Sub2_Sub4_278.method443(0, anInt458, anInt459, anInt460, anInt461, class10.anInt274 - anInt455, class10.anInt273 - anInt456, class10.anInt275 - anInt457, class10.uid); + } + for (int i2 = 0; i2 < class30_sub3_7.anInt1317; i2++) { + Object5 class28 = class30_sub3_7.obj5Array[i2]; + if (class28 != null) { + class28.aClass30_Sub2_Sub4_521.method443(class28.anInt522, anInt458, anInt459, anInt460, anInt461, class28.anInt519 - anInt455, class28.anInt518 - anInt456, class28.anInt520 - anInt457, class28.uid); + } + } + + } + boolean flag1 = false; + if (class30_sub3_1.aClass43_1311 != null) { + if (!method320(l, i, j)) { + flag1 = true; + method315(class30_sub3_1.aClass43_1311, l, anInt458, anInt459, anInt460, anInt461, i, j); + } + } else if (class30_sub3_1.aClass40_1312 != null && !method320(l, i, j)) { + flag1 = true; + method316(i, anInt458, anInt460, class30_sub3_1.aClass40_1312, anInt459, j, anInt461); + } + int j1 = 0; + int j2 = 0; + Object1 class10_3 = class30_sub3_1.obj1; + Object2 class26_1 = class30_sub3_1.obj2; + if (class10_3 != null || class26_1 != null) { + if (anInt453 == i) { + j1++; + } else if (anInt453 < i) { + j1 += 2; + } + if (anInt454 == j) { + j1 += 3; + } else if (anInt454 > j) { + j1 += 6; + } + j2 = anIntArray478[j1]; + class30_sub3_1.anInt1328 = anIntArray480[j1]; + } + if (class10_3 != null) { + if ((class10_3.orientation & anIntArray479[j1]) != 0) { + if (class10_3.orientation == 16) { + class30_sub3_1.anInt1325 = 3; + class30_sub3_1.anInt1326 = anIntArray481[j1]; + class30_sub3_1.anInt1327 = 3 - class30_sub3_1.anInt1326; + } else if (class10_3.orientation == 32) { + class30_sub3_1.anInt1325 = 6; + class30_sub3_1.anInt1326 = anIntArray482[j1]; + class30_sub3_1.anInt1327 = 6 - class30_sub3_1.anInt1326; + } else if (class10_3.orientation == 64) { + class30_sub3_1.anInt1325 = 12; + class30_sub3_1.anInt1326 = anIntArray483[j1]; + class30_sub3_1.anInt1327 = 12 - class30_sub3_1.anInt1326; + } else { + class30_sub3_1.anInt1325 = 9; + class30_sub3_1.anInt1326 = anIntArray484[j1]; + class30_sub3_1.anInt1327 = 9 - class30_sub3_1.anInt1326; + } + } else { + class30_sub3_1.anInt1325 = 0; + } + if ((class10_3.orientation & j2) != 0 && !method321(l, i, j, class10_3.orientation)) { + class10_3.aClass30_Sub2_Sub4_278.method443(0, anInt458, anInt459, anInt460, anInt461, class10_3.anInt274 - anInt455, class10_3.anInt273 - anInt456, class10_3.anInt275 - anInt457, class10_3.uid); + } + if ((class10_3.orientation1 & j2) != 0 && !method321(l, i, j, class10_3.orientation1)) { + class10_3.aClass30_Sub2_Sub4_279.method443(0, anInt458, anInt459, anInt460, anInt461, class10_3.anInt274 - anInt455, class10_3.anInt273 - anInt456, class10_3.anInt275 - anInt457, class10_3.uid); + } + } + if (class26_1 != null && !method322(l, i, j, class26_1.aClass30_Sub2_Sub4_504.modelHeight)) { + if ((class26_1.anInt502 & j2) != 0) { + class26_1.aClass30_Sub2_Sub4_504.method443(class26_1.anInt503, anInt458, anInt459, anInt460, anInt461, class26_1.anInt500 - anInt455, class26_1.anInt499 - anInt456, class26_1.anInt501 - anInt457, class26_1.uid); + } else if ((class26_1.anInt502 & 0x300) != 0) { + int j4 = class26_1.anInt500 - anInt455; + int l5 = class26_1.anInt499 - anInt456; + int k6 = class26_1.anInt501 - anInt457; + int i8 = class26_1.anInt503; + int k9; + if (i8 == 1 || i8 == 2) { + k9 = -j4; + } else { + k9 = j4; + } + int k10; + if (i8 == 2 || i8 == 3) { + k10 = -k6; + } else { + k10 = k6; + } + if ((class26_1.anInt502 & 0x100) != 0 && k10 < k9) { + int i11 = j4 + anIntArray463[i8]; + int k11 = k6 + anIntArray464[i8]; + class26_1.aClass30_Sub2_Sub4_504.method443(i8 * 512 + 256, anInt458, anInt459, anInt460, anInt461, i11, l5, k11, class26_1.uid); + } + if ((class26_1.anInt502 & 0x200) != 0 && k10 > k9) { + int j11 = j4 + anIntArray465[i8]; + int l11 = k6 + anIntArray466[i8]; + class26_1.aClass30_Sub2_Sub4_504.method443(i8 * 512 + 1280 & 0x7ff, anInt458, anInt459, anInt460, anInt461, j11, l5, l11, class26_1.uid); + } + } + } + if (flag1) { + Object3 class49 = class30_sub3_1.obj3; + if (class49 != null) { + class49.aClass30_Sub2_Sub4_814.method443(0, anInt458, anInt459, anInt460, anInt461, class49.anInt812 - anInt455, class49.anInt811 - anInt456, class49.anInt813 - anInt457, class49.uid); + } + Object4 object4_1 = class30_sub3_1.obj4; + if (object4_1 != null && object4_1.anInt52 == 0) { + if (object4_1.aClass30_Sub2_Sub4_49 != null) { + object4_1.aClass30_Sub2_Sub4_49.method443(0, anInt458, anInt459, anInt460, anInt461, object4_1.anInt46 - anInt455, object4_1.anInt45 - anInt456, object4_1.anInt47 - anInt457, object4_1.uid); + } + if (object4_1.aClass30_Sub2_Sub4_50 != null) { + object4_1.aClass30_Sub2_Sub4_50.method443(0, anInt458, anInt459, anInt460, anInt461, object4_1.anInt46 - anInt455, object4_1.anInt45 - anInt456, object4_1.anInt47 - anInt457, object4_1.uid); + } + if (object4_1.aClass30_Sub2_Sub4_48 != null) { + object4_1.aClass30_Sub2_Sub4_48.method443(0, anInt458, anInt459, anInt460, anInt461, object4_1.anInt46 - anInt455, object4_1.anInt45 - anInt456, object4_1.anInt47 - anInt457, object4_1.uid); + } + } + } + int k4 = class30_sub3_1.anInt1320; + if (k4 != 0) { + if (i < anInt453 && (k4 & 4) != 0) { + Ground class30_sub3_17 = aclass30_sub3[i + 1][j]; + if (class30_sub3_17 != null && class30_sub3_17.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_17); + } + } + if (j < anInt454 && (k4 & 2) != 0) { + Ground class30_sub3_18 = aclass30_sub3[i][j + 1]; + if (class30_sub3_18 != null && class30_sub3_18.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_18); + } + } + if (i > anInt453 && (k4 & 1) != 0) { + Ground class30_sub3_19 = aclass30_sub3[i - 1][j]; + if (class30_sub3_19 != null && class30_sub3_19.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_19); + } + } + if (j > anInt454 && (k4 & 8) != 0) { + Ground class30_sub3_20 = aclass30_sub3[i][j - 1]; + if (class30_sub3_20 != null && class30_sub3_20.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_20); + } + } + } + } + if (class30_sub3_1.anInt1325 != 0) { + boolean flag2 = true; + for (int k1 = 0; k1 < class30_sub3_1.anInt1317; k1++) { + if (class30_sub3_1.obj5Array[k1].anInt528 == anInt448 || (class30_sub3_1.anIntArray1319[k1] & class30_sub3_1.anInt1325) != class30_sub3_1.anInt1326) { + continue; + } + flag2 = false; + break; + } + + if (flag2) { + Object1 class10_1 = class30_sub3_1.obj1; + if (!method321(l, i, j, class10_1.orientation)) { + class10_1.aClass30_Sub2_Sub4_278.method443(0, anInt458, anInt459, anInt460, anInt461, class10_1.anInt274 - anInt455, class10_1.anInt273 - anInt456, class10_1.anInt275 - anInt457, class10_1.uid); + } + class30_sub3_1.anInt1325 = 0; + } + } + if (class30_sub3_1.aBoolean1324) { + try { + int i1 = class30_sub3_1.anInt1317; + class30_sub3_1.aBoolean1324 = false; + int l1 = 0; + label0 : for (int k2 = 0; k2 < i1; k2++) { + Object5 class28_1 = class30_sub3_1.obj5Array[k2]; + if (class28_1.anInt528 == anInt448) { + continue; + } + for (int k3 = class28_1.anInt523; k3 <= class28_1.anInt524; k3++) { + for (int l4 = class28_1.anInt525; l4 <= class28_1.anInt526; l4++) { + Ground class30_sub3_21 = aclass30_sub3[k3][l4]; + if (class30_sub3_21.aBoolean1322) { + class30_sub3_1.aBoolean1324 = true; + } else { + if (class30_sub3_21.anInt1325 == 0) { + continue; + } + int l6 = 0; + if (k3 > class28_1.anInt523) { + l6++; + } + if (k3 < class28_1.anInt524) { + l6 += 4; + } + if (l4 > class28_1.anInt525) { + l6 += 8; + } + if (l4 < class28_1.anInt526) { + l6 += 2; + } + if ((l6 & class30_sub3_21.anInt1325) != class30_sub3_1.anInt1327) { + continue; + } + class30_sub3_1.aBoolean1324 = true; + } + continue label0; + } + + } + + aClass28Array462[l1++] = class28_1; + int i5 = anInt453 - class28_1.anInt523; + int i6 = class28_1.anInt524 - anInt453; + if (i6 > i5) { + i5 = i6; + } + int i7 = anInt454 - class28_1.anInt525; + int j8 = class28_1.anInt526 - anInt454; + if (j8 > i7) { + class28_1.anInt527 = i5 + j8; + } else { + class28_1.anInt527 = i5 + i7; + } + } + + while (l1 > 0) { + int i3 = -50; + int l3 = -1; + for (int j5 = 0; j5 < l1; j5++) { + Object5 class28_2 = aClass28Array462[j5]; + if (class28_2.anInt528 != anInt448) { + if (class28_2.anInt527 > i3) { + i3 = class28_2.anInt527; + l3 = j5; + } else if (class28_2.anInt527 == i3) { + int j7 = class28_2.anInt519 - anInt455; + int k8 = class28_2.anInt520 - anInt457; + int l9 = aClass28Array462[l3].anInt519 - anInt455; + int l10 = aClass28Array462[l3].anInt520 - anInt457; + if (j7 * j7 + k8 * k8 > l9 * l9 + l10 * l10) { + l3 = j5; + } + } + } + } + + if (l3 == -1) { + break; + } + Object5 class28_3 = aClass28Array462[l3]; + class28_3.anInt528 = anInt448; + if (!method323(l, class28_3.anInt523, class28_3.anInt524, class28_3.anInt525, class28_3.anInt526, class28_3.aClass30_Sub2_Sub4_521.modelHeight)) { + class28_3.aClass30_Sub2_Sub4_521.method443(class28_3.anInt522, anInt458, anInt459, anInt460, anInt461, class28_3.anInt519 - anInt455, class28_3.anInt518 - anInt456, class28_3.anInt520 - anInt457, class28_3.uid); + } + for (int k7 = class28_3.anInt523; k7 <= class28_3.anInt524; k7++) { + for (int l8 = class28_3.anInt525; l8 <= class28_3.anInt526; l8++) { + Ground class30_sub3_22 = aclass30_sub3[k7][l8]; + if (class30_sub3_22.anInt1325 != 0) { + aClass19_477.insertHead(class30_sub3_22); + } else if ((k7 != i || l8 != j) && class30_sub3_22.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_22); + } + } + + } + + } + if (class30_sub3_1.aBoolean1324) { + continue; + } + } catch (Exception _ex) { + class30_sub3_1.aBoolean1324 = false; + } + } + if (!class30_sub3_1.aBoolean1323 || class30_sub3_1.anInt1325 != 0) { + continue; + } + if (i <= anInt453 && i > anInt449) { + Ground class30_sub3_8 = aclass30_sub3[i - 1][j]; + if (class30_sub3_8 != null && class30_sub3_8.aBoolean1323) { + continue; + } + } + if (i >= anInt453 && i < anInt450 - 1) { + Ground class30_sub3_9 = aclass30_sub3[i + 1][j]; + if (class30_sub3_9 != null && class30_sub3_9.aBoolean1323) { + continue; + } + } + if (j <= anInt454 && j > anInt451) { + Ground class30_sub3_10 = aclass30_sub3[i][j - 1]; + if (class30_sub3_10 != null && class30_sub3_10.aBoolean1323) { + continue; + } + } + if (j >= anInt454 && j < anInt452 - 1) { + Ground class30_sub3_11 = aclass30_sub3[i][j + 1]; + if (class30_sub3_11 != null && class30_sub3_11.aBoolean1323) { + continue; + } + } + class30_sub3_1.aBoolean1323 = false; + anInt446--; + Object4 object4 = class30_sub3_1.obj4; + if (object4 != null && object4.anInt52 != 0) { + if (object4.aClass30_Sub2_Sub4_49 != null) { + object4.aClass30_Sub2_Sub4_49.method443(0, anInt458, anInt459, anInt460, anInt461, object4.anInt46 - anInt455, object4.anInt45 - anInt456 - object4.anInt52, object4.anInt47 - anInt457, object4.uid); + } + if (object4.aClass30_Sub2_Sub4_50 != null) { + object4.aClass30_Sub2_Sub4_50.method443(0, anInt458, anInt459, anInt460, anInt461, object4.anInt46 - anInt455, object4.anInt45 - anInt456 - object4.anInt52, object4.anInt47 - anInt457, object4.uid); + } + if (object4.aClass30_Sub2_Sub4_48 != null) { + object4.aClass30_Sub2_Sub4_48.method443(0, anInt458, anInt459, anInt460, anInt461, object4.anInt46 - anInt455, object4.anInt45 - anInt456 - object4.anInt52, object4.anInt47 - anInt457, object4.uid); + } + } + if (class30_sub3_1.anInt1328 != 0) { + Object2 class26 = class30_sub3_1.obj2; + if (class26 != null && !method322(l, i, j, class26.aClass30_Sub2_Sub4_504.modelHeight)) { + if ((class26.anInt502 & class30_sub3_1.anInt1328) != 0) { + class26.aClass30_Sub2_Sub4_504.method443(class26.anInt503, anInt458, anInt459, anInt460, anInt461, class26.anInt500 - anInt455, class26.anInt499 - anInt456, class26.anInt501 - anInt457, class26.uid); + } else if ((class26.anInt502 & 0x300) != 0) { + int l2 = class26.anInt500 - anInt455; + int j3 = class26.anInt499 - anInt456; + int i4 = class26.anInt501 - anInt457; + int k5 = class26.anInt503; + int j6; + if (k5 == 1 || k5 == 2) { + j6 = -l2; + } else { + j6 = l2; + } + int l7; + if (k5 == 2 || k5 == 3) { + l7 = -i4; + } else { + l7 = i4; + } + if ((class26.anInt502 & 0x100) != 0 && l7 >= j6) { + int i9 = l2 + anIntArray463[k5]; + int i10 = i4 + anIntArray464[k5]; + class26.aClass30_Sub2_Sub4_504.method443(k5 * 512 + 256, anInt458, anInt459, anInt460, anInt461, i9, j3, i10, class26.uid); + } + if ((class26.anInt502 & 0x200) != 0 && l7 <= j6) { + int j9 = l2 + anIntArray465[k5]; + int j10 = i4 + anIntArray466[k5]; + class26.aClass30_Sub2_Sub4_504.method443(k5 * 512 + 1280 & 0x7ff, anInt458, anInt459, anInt460, anInt461, j9, j3, j10, class26.uid); + } + } + } + Object1 class10_2 = class30_sub3_1.obj1; + if (class10_2 != null) { + if ((class10_2.orientation1 & class30_sub3_1.anInt1328) != 0 && !method321(l, i, j, class10_2.orientation1)) { + class10_2.aClass30_Sub2_Sub4_279.method443(0, anInt458, anInt459, anInt460, anInt461, class10_2.anInt274 - anInt455, class10_2.anInt273 - anInt456, class10_2.anInt275 - anInt457, class10_2.uid); + } + if ((class10_2.orientation & class30_sub3_1.anInt1328) != 0 && !method321(l, i, j, class10_2.orientation)) { + class10_2.aClass30_Sub2_Sub4_278.method443(0, anInt458, anInt459, anInt460, anInt461, class10_2.anInt274 - anInt455, class10_2.anInt273 - anInt456, class10_2.anInt275 - anInt457, class10_2.uid); + } + } + } + if (k < anInt437 - 1) { + Ground class30_sub3_12 = groundArray[k + 1][i][j]; + if (class30_sub3_12 != null && class30_sub3_12.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_12); + } + } + if (i < anInt453) { + Ground class30_sub3_13 = aclass30_sub3[i + 1][j]; + if (class30_sub3_13 != null && class30_sub3_13.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_13); + } + } + if (j < anInt454) { + Ground class30_sub3_14 = aclass30_sub3[i][j + 1]; + if (class30_sub3_14 != null && class30_sub3_14.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_14); + } + } + if (i > anInt453) { + Ground class30_sub3_15 = aclass30_sub3[i - 1][j]; + if (class30_sub3_15 != null && class30_sub3_15.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_15); + } + } + if (j > anInt454) { + Ground class30_sub3_16 = aclass30_sub3[i][j - 1]; + if (class30_sub3_16 != null && class30_sub3_16.aBoolean1323) { + aClass19_477.insertHead(class30_sub3_16); + } + } + } while (true); + } + + private void method315(Class43 class43, int i, int j, int k, int l, int i1, int j1, int k1) { + int l1; + int i2 = l1 = (j1 << 7) - anInt455; + int j2; + int k2 = j2 = (k1 << 7) - anInt457; + int l2; + int i3 = l2 = i2 + 128; + int j3; + int k3 = j3 = k2 + 128; + int l3 = anIntArrayArrayArray440[i][j1][k1] - anInt456; + int i4 = anIntArrayArrayArray440[i][j1 + 1][k1] - anInt456; + int j4 = anIntArrayArrayArray440[i][j1 + 1][k1 + 1] - anInt456; + int k4 = anIntArrayArrayArray440[i][j1][k1 + 1] - anInt456; + int l4 = k2 * l + i2 * i1 >> 16; + k2 = k2 * i1 - i2 * l >> 16; + i2 = l4; + l4 = l3 * k - k2 * j >> 16; + k2 = l3 * j + k2 * k >> 16; + l3 = l4; + if (k2 < 50) { + return; + } + l4 = j2 * l + i3 * i1 >> 16; + j2 = j2 * i1 - i3 * l >> 16; + i3 = l4; + l4 = i4 * k - j2 * j >> 16; + j2 = i4 * j + j2 * k >> 16; + i4 = l4; + if (j2 < 50) { + return; + } + l4 = k3 * l + l2 * i1 >> 16; + k3 = k3 * i1 - l2 * l >> 16; + l2 = l4; + l4 = j4 * k - k3 * j >> 16; + k3 = j4 * j + k3 * k >> 16; + j4 = l4; + if (k3 < 50) { + return; + } + l4 = j3 * l + l1 * i1 >> 16; + j3 = j3 * i1 - l1 * l >> 16; + l1 = l4; + l4 = k4 * k - j3 * j >> 16; + j3 = k4 * j + j3 * k >> 16; + k4 = l4; + if (j3 < 50) { + return; + } + int i5 = Texture.textureInt1 + (i2 << 9) / k2; + int j5 = Texture.textureInt2 + (l3 << 9) / k2; + int k5 = Texture.textureInt1 + (i3 << 9) / j2; + int l5 = Texture.textureInt2 + (i4 << 9) / j2; + int i6 = Texture.textureInt1 + (l2 << 9) / k3; + int j6 = Texture.textureInt2 + (j4 << 9) / k3; + int k6 = Texture.textureInt1 + (l1 << 9) / j3; + int l6 = Texture.textureInt2 + (k4 << 9) / j3; + Texture.anInt1465 = 0; + if ((i6 - k6) * (l5 - l6) - (j6 - l6) * (k5 - k6) > 0) { + Texture.aBoolean1462 = i6 < 0 || k6 < 0 || k5 < 0 || i6 > DrawingArea.centerX || k6 > DrawingArea.centerX || k5 > DrawingArea.centerX; + if (aBoolean467 && method318(anInt468, anInt469, j6, l6, l5, i6, k6, k5)) { + anInt470 = j1; + anInt471 = k1; + } + if (class43.anInt720 == -1) { + if (class43.anInt718 != 0xbc614e) { + Texture.method374(j6, l6, l5, i6, k6, k5, class43.anInt718, class43.anInt719, class43.anInt717); + } + } else if (!lowMem) { + if (class43.aBoolean721) { + Texture.method378(j6, l6, l5, i6, k6, k5, class43.anInt718, class43.anInt719, class43.anInt717, i2, i3, l1, l3, i4, k4, k2, j2, j3, class43.anInt720); + } else { + Texture.method378(j6, l6, l5, i6, k6, k5, class43.anInt718, class43.anInt719, class43.anInt717, l2, l1, i3, j4, k4, i4, k3, j3, j2, class43.anInt720); + } + } else { + int i7 = anIntArray485[class43.anInt720]; + Texture.method374(j6, l6, l5, i6, k6, k5, method317(i7, class43.anInt718), method317(i7, class43.anInt719), method317(i7, class43.anInt717)); + } + } + if ((i5 - k5) * (l6 - l5) - (j5 - l5) * (k6 - k5) > 0) { + Texture.aBoolean1462 = i5 < 0 || k5 < 0 || k6 < 0 || i5 > DrawingArea.centerX || k5 > DrawingArea.centerX || k6 > DrawingArea.centerX; + if (aBoolean467 && method318(anInt468, anInt469, j5, l5, l6, i5, k5, k6)) { + anInt470 = j1; + anInt471 = k1; + } + if (class43.anInt720 == -1) { + if (class43.anInt716 != 0xbc614e) { + Texture.method374(j5, l5, l6, i5, k5, k6, class43.anInt716, class43.anInt717, class43.anInt719); + } + } else { + if (!lowMem) { + Texture.method378(j5, l5, l6, i5, k5, k6, class43.anInt716, class43.anInt717, class43.anInt719, i2, i3, l1, l3, i4, k4, k2, j2, j3, class43.anInt720); + return; + } + int j7 = anIntArray485[class43.anInt720]; + Texture.method374(j5, l5, l6, i5, k5, k6, method317(j7, class43.anInt716), method317(j7, class43.anInt717), method317(j7, class43.anInt719)); + } + } + } + + private void method316(int i, int j, int k, Class40 class40, int l, int i1, int j1) { + int k1 = class40.anIntArray673.length; + for (int l1 = 0; l1 < k1; l1++) { + int i2 = class40.anIntArray673[l1] - anInt455; + int k2 = class40.anIntArray674[l1] - anInt456; + int i3 = class40.anIntArray675[l1] - anInt457; + int k3 = i3 * k + i2 * j1 >> 16; + i3 = i3 * j1 - i2 * k >> 16; + i2 = k3; + k3 = k2 * l - i3 * j >> 16; + i3 = k2 * j + i3 * l >> 16; + k2 = k3; + if (i3 < 50) { + return; + } + if (class40.anIntArray682 != null) { + Class40.anIntArray690[l1] = i2; + Class40.anIntArray691[l1] = k2; + Class40.anIntArray692[l1] = i3; + } + Class40.anIntArray688[l1] = Texture.textureInt1 + (i2 << 9) / i3; + Class40.anIntArray689[l1] = Texture.textureInt2 + (k2 << 9) / i3; + } + + Texture.anInt1465 = 0; + k1 = class40.anIntArray679.length; + for (int j2 = 0; j2 < k1; j2++) { + int l2 = class40.anIntArray679[j2]; + int j3 = class40.anIntArray680[j2]; + int l3 = class40.anIntArray681[j2]; + int i4 = Class40.anIntArray688[l2]; + int j4 = Class40.anIntArray688[j3]; + int k4 = Class40.anIntArray688[l3]; + int l4 = Class40.anIntArray689[l2]; + int i5 = Class40.anIntArray689[j3]; + int j5 = Class40.anIntArray689[l3]; + if ((i4 - j4) * (j5 - i5) - (l4 - i5) * (k4 - j4) > 0) { + Texture.aBoolean1462 = i4 < 0 || j4 < 0 || k4 < 0 || i4 > DrawingArea.centerX || j4 > DrawingArea.centerX || k4 > DrawingArea.centerX; + if (aBoolean467 && method318(anInt468, anInt469, l4, i5, j5, i4, j4, k4)) { + anInt470 = i; + anInt471 = i1; + } + if (class40.anIntArray682 == null || class40.anIntArray682[j2] == -1) { + if (class40.anIntArray676[j2] != 0xbc614e) { + Texture.method374(l4, i5, j5, i4, j4, k4, class40.anIntArray676[j2], class40.anIntArray677[j2], class40.anIntArray678[j2]); + } + } else if (!lowMem) { + if (class40.aBoolean683) { + Texture.method378(l4, i5, j5, i4, j4, k4, class40.anIntArray676[j2], class40.anIntArray677[j2], class40.anIntArray678[j2], Class40.anIntArray690[0], Class40.anIntArray690[1], Class40.anIntArray690[3], Class40.anIntArray691[0], Class40.anIntArray691[1], Class40.anIntArray691[3], Class40.anIntArray692[0], Class40.anIntArray692[1], Class40.anIntArray692[3], class40.anIntArray682[j2]); + } else { + Texture.method378(l4, i5, j5, i4, j4, k4, class40.anIntArray676[j2], class40.anIntArray677[j2], class40.anIntArray678[j2], Class40.anIntArray690[l2], Class40.anIntArray690[j3], Class40.anIntArray690[l3], Class40.anIntArray691[l2], Class40.anIntArray691[j3], Class40.anIntArray691[l3], Class40.anIntArray692[l2], Class40.anIntArray692[j3], Class40.anIntArray692[l3], class40.anIntArray682[j2]); + } + } else { + int k5 = anIntArray485[class40.anIntArray682[j2]]; + Texture.method374(l4, i5, j5, i4, j4, k4, method317(k5, class40.anIntArray676[j2]), method317(k5, class40.anIntArray677[j2]), method317(k5, class40.anIntArray678[j2])); + } + } + } + + } + + private int method317(int j, int k) { + k = 127 - k; + k = k * (j & 0x7f) / 160; + if (k < 2) { + k = 2; + } else if (k > 126) { + k = 126; + } + return (j & 0xff80) + k; + } + + private boolean method318(int i, int j, int k, int l, int i1, int j1, int k1, int l1) { + if (j < k && j < l && j < i1) { + return false; + } + if (j > k && j > l && j > i1) { + return false; + } + if (i < j1 && i < k1 && i < l1) { + return false; + } + if (i > j1 && i > k1 && i > l1) { + return false; + } + int i2 = (j - k) * (k1 - j1) - (i - j1) * (l - k); + int j2 = (j - i1) * (j1 - l1) - (i - l1) * (k - i1); + int k2 = (j - l) * (l1 - k1) - (i - k1) * (i1 - l); + return i2 * k2 > 0 && k2 * j2 > 0; + } + + private void method319() { + int j = anIntArray473[anInt447]; + Class47 aclass47[] = aClass47ArrayArray474[anInt447]; + anInt475 = 0; + for (int k = 0; k < j; k++) { + Class47 class47 = aclass47[k]; + if (class47.anInt791 == 1) { + int l = class47.anInt787 - anInt453 + 25; + if (l < 0 || l > 50) { + continue; + } + int k1 = class47.anInt789 - anInt454 + 25; + if (k1 < 0) { + k1 = 0; + } + int j2 = class47.anInt790 - anInt454 + 25; + if (j2 > 50) { + j2 = 50; + } + boolean flag = false; + while (k1 <= j2) { + if (aBooleanArrayArray492[l][k1++]) { + flag = true; + break; + } + } + if (!flag) { + continue; + } + int j3 = anInt455 - class47.anInt792; + if (j3 > 32) { + class47.anInt798 = 1; + } else { + if (j3 >= -32) { + continue; + } + class47.anInt798 = 2; + j3 = -j3; + } + class47.anInt801 = (class47.anInt794 - anInt457 << 8) / j3; + class47.anInt802 = (class47.anInt795 - anInt457 << 8) / j3; + class47.anInt803 = (class47.anInt796 - anInt456 << 8) / j3; + class47.anInt804 = (class47.anInt797 - anInt456 << 8) / j3; + aClass47Array476[anInt475++] = class47; + continue; + } + if (class47.anInt791 == 2) { + int i1 = class47.anInt789 - anInt454 + 25; + if (i1 < 0 || i1 > 50) { + continue; + } + int l1 = class47.anInt787 - anInt453 + 25; + if (l1 < 0) { + l1 = 0; + } + int k2 = class47.anInt788 - anInt453 + 25; + if (k2 > 50) { + k2 = 50; + } + boolean flag1 = false; + while (l1 <= k2) { + if (aBooleanArrayArray492[l1++][i1]) { + flag1 = true; + break; + } + } + if (!flag1) { + continue; + } + int k3 = anInt457 - class47.anInt794; + if (k3 > 32) { + class47.anInt798 = 3; + } else { + if (k3 >= -32) { + continue; + } + class47.anInt798 = 4; + k3 = -k3; + } + class47.anInt799 = (class47.anInt792 - anInt455 << 8) / k3; + class47.anInt800 = (class47.anInt793 - anInt455 << 8) / k3; + class47.anInt803 = (class47.anInt796 - anInt456 << 8) / k3; + class47.anInt804 = (class47.anInt797 - anInt456 << 8) / k3; + aClass47Array476[anInt475++] = class47; + } else if (class47.anInt791 == 4) { + int j1 = class47.anInt796 - anInt456; + if (j1 > 128) { + int i2 = class47.anInt789 - anInt454 + 25; + if (i2 < 0) { + i2 = 0; + } + int l2 = class47.anInt790 - anInt454 + 25; + if (l2 > 50) { + l2 = 50; + } + if (i2 <= l2) { + int i3 = class47.anInt787 - anInt453 + 25; + if (i3 < 0) { + i3 = 0; + } + int l3 = class47.anInt788 - anInt453 + 25; + if (l3 > 50) { + l3 = 50; + } + boolean flag2 = false; + label0 : for (int i4 = i3; i4 <= l3; i4++) { + for (int j4 = i2; j4 <= l2; j4++) { + if (!aBooleanArrayArray492[i4][j4]) { + continue; + } + flag2 = true; + break label0; + } + + } + + if (flag2) { + class47.anInt798 = 5; + class47.anInt799 = (class47.anInt792 - anInt455 << 8) / j1; + class47.anInt800 = (class47.anInt793 - anInt455 << 8) / j1; + class47.anInt801 = (class47.anInt794 - anInt457 << 8) / j1; + class47.anInt802 = (class47.anInt795 - anInt457 << 8) / j1; + aClass47Array476[anInt475++] = class47; + } + } + } + } + } + + } + + private boolean method320(int i, int j, int k) { + int l = anIntArrayArrayArray445[i][j][k]; + if (l == -anInt448) { + return false; + } + if (l == anInt448) { + return true; + } + int i1 = j << 7; + int j1 = k << 7; + if (method324(i1 + 1, anIntArrayArrayArray440[i][j][k], j1 + 1) && method324(i1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][k], j1 + 1) && method324(i1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][k + 1], j1 + 128 - 1) && method324(i1 + 1, anIntArrayArrayArray440[i][j][k + 1], j1 + 128 - 1)) { + anIntArrayArrayArray445[i][j][k] = anInt448; + return true; + } else { + anIntArrayArrayArray445[i][j][k] = -anInt448; + return false; + } + } + + private boolean method321(int i, int j, int k, int l) { + if (!method320(i, j, k)) { + return false; + } + int i1 = j << 7; + int j1 = k << 7; + int k1 = anIntArrayArrayArray440[i][j][k] - 1; + int l1 = k1 - 120; + int i2 = k1 - 230; + int j2 = k1 - 238; + if (l < 16) { + if (l == 1) { + if (i1 > anInt455) { + if (!method324(i1, k1, j1)) { + return false; + } + if (!method324(i1, k1, j1 + 128)) { + return false; + } + } + if (i > 0) { + if (!method324(i1, l1, j1)) { + return false; + } + if (!method324(i1, l1, j1 + 128)) { + return false; + } + } + return method324(i1, i2, j1) && method324(i1, i2, j1 + 128); + } + if (l == 2) { + if (j1 < anInt457) { + if (!method324(i1, k1, j1 + 128)) { + return false; + } + if (!method324(i1 + 128, k1, j1 + 128)) { + return false; + } + } + if (i > 0) { + if (!method324(i1, l1, j1 + 128)) { + return false; + } + if (!method324(i1 + 128, l1, j1 + 128)) { + return false; + } + } + return method324(i1, i2, j1 + 128) && method324(i1 + 128, i2, j1 + 128); + } + if (l == 4) { + if (i1 < anInt455) { + if (!method324(i1 + 128, k1, j1)) { + return false; + } + if (!method324(i1 + 128, k1, j1 + 128)) { + return false; + } + } + if (i > 0) { + if (!method324(i1 + 128, l1, j1)) { + return false; + } + if (!method324(i1 + 128, l1, j1 + 128)) { + return false; + } + } + return method324(i1 + 128, i2, j1) && method324(i1 + 128, i2, j1 + 128); + } + if (l == 8) { + if (j1 > anInt457) { + if (!method324(i1, k1, j1)) { + return false; + } + if (!method324(i1 + 128, k1, j1)) { + return false; + } + } + if (i > 0) { + if (!method324(i1, l1, j1)) { + return false; + } + if (!method324(i1 + 128, l1, j1)) { + return false; + } + } + return method324(i1, i2, j1) && method324(i1 + 128, i2, j1); + } + } + if (!method324(i1 + 64, j2, j1 + 64)) { + return false; + } + if (l == 16) { + return method324(i1, i2, j1 + 128); + } + if (l == 32) { + return method324(i1 + 128, i2, j1 + 128); + } + if (l == 64) { + return method324(i1 + 128, i2, j1); + } + if (l == 128) { + return method324(i1, i2, j1); + } else { + System.out.println("Warning unsupported wall type"); + return true; + } + } + + private boolean method322(int i, int j, int k, int l) { + if (!method320(i, j, k)) { + return false; + } + int i1 = j << 7; + int j1 = k << 7; + return method324(i1 + 1, anIntArrayArrayArray440[i][j][k] - l, j1 + 1) && method324(i1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][k] - l, j1 + 1) && method324(i1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][k + 1] - l, j1 + 128 - 1) && method324(i1 + 1, anIntArrayArrayArray440[i][j][k + 1] - l, j1 + 128 - 1); + } + + private boolean method323(int i, int j, int k, int l, int i1, int j1) { + if (j == k && l == i1) { + if (!method320(i, j, l)) { + return false; + } + int k1 = j << 7; + int i2 = l << 7; + return method324(k1 + 1, anIntArrayArrayArray440[i][j][l] - j1, i2 + 1) && method324(k1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][l] - j1, i2 + 1) && method324(k1 + 128 - 1, anIntArrayArrayArray440[i][j + 1][l + 1] - j1, i2 + 128 - 1) && method324(k1 + 1, anIntArrayArrayArray440[i][j][l + 1] - j1, i2 + 128 - 1); + } + for (int l1 = j; l1 <= k; l1++) { + for (int j2 = l; j2 <= i1; j2++) { + if (anIntArrayArrayArray445[i][l1][j2] == -anInt448) { + return false; + } + } + + } + + int k2 = (j << 7) + 1; + int l2 = (l << 7) + 2; + int i3 = anIntArrayArrayArray440[i][j][l] - j1; + if (!method324(k2, i3, l2)) { + return false; + } + int j3 = (k << 7) - 1; + if (!method324(j3, i3, l2)) { + return false; + } + int k3 = (i1 << 7) - 1; + return method324(k2, i3, k3) && method324(j3, i3, k3); + } + + private boolean method324(int i, int j, int k) { + for (int l = 0; l < anInt475; l++) { + Class47 class47 = aClass47Array476[l]; + if (class47.anInt798 == 1) { + int i1 = class47.anInt792 - i; + if (i1 > 0) { + int j2 = class47.anInt794 + (class47.anInt801 * i1 >> 8); + int k3 = class47.anInt795 + (class47.anInt802 * i1 >> 8); + int l4 = class47.anInt796 + (class47.anInt803 * i1 >> 8); + int i6 = class47.anInt797 + (class47.anInt804 * i1 >> 8); + if (k >= j2 && k <= k3 && j >= l4 && j <= i6) { + return true; + } + } + } else if (class47.anInt798 == 2) { + int j1 = i - class47.anInt792; + if (j1 > 0) { + int k2 = class47.anInt794 + (class47.anInt801 * j1 >> 8); + int l3 = class47.anInt795 + (class47.anInt802 * j1 >> 8); + int i5 = class47.anInt796 + (class47.anInt803 * j1 >> 8); + int j6 = class47.anInt797 + (class47.anInt804 * j1 >> 8); + if (k >= k2 && k <= l3 && j >= i5 && j <= j6) { + return true; + } + } + } else if (class47.anInt798 == 3) { + int k1 = class47.anInt794 - k; + if (k1 > 0) { + int l2 = class47.anInt792 + (class47.anInt799 * k1 >> 8); + int i4 = class47.anInt793 + (class47.anInt800 * k1 >> 8); + int j5 = class47.anInt796 + (class47.anInt803 * k1 >> 8); + int k6 = class47.anInt797 + (class47.anInt804 * k1 >> 8); + if (i >= l2 && i <= i4 && j >= j5 && j <= k6) { + return true; + } + } + } else if (class47.anInt798 == 4) { + int l1 = k - class47.anInt794; + if (l1 > 0) { + int i3 = class47.anInt792 + (class47.anInt799 * l1 >> 8); + int j4 = class47.anInt793 + (class47.anInt800 * l1 >> 8); + int k5 = class47.anInt796 + (class47.anInt803 * l1 >> 8); + int l6 = class47.anInt797 + (class47.anInt804 * l1 >> 8); + if (i >= i3 && i <= j4 && j >= k5 && j <= l6) { + return true; + } + } + } else if (class47.anInt798 == 5) { + int i2 = j - class47.anInt796; + if (i2 > 0) { + int j3 = class47.anInt792 + (class47.anInt799 * i2 >> 8); + int k4 = class47.anInt793 + (class47.anInt800 * i2 >> 8); + int l5 = class47.anInt794 + (class47.anInt801 * i2 >> 8); + int i7 = class47.anInt795 + (class47.anInt802 * i2 >> 8); + if (i >= j3 && i <= k4 && k >= l5 && k <= i7) { + return true; + } + } + } + } + + return false; + } + + private boolean aBoolean434; + public static boolean lowMem = true; + private final int anInt437; + private final int anInt438; + private final int anInt439; + private final int[][][] anIntArrayArrayArray440; + private final Ground[][][] groundArray; + private int anInt442; + private int obj5CacheCurrPos; + private final Object5[] obj5Cache; + private final int[][][] anIntArrayArrayArray445; + private static int anInt446; + private static int anInt447; + private static int anInt448; + private static int anInt449; + private static int anInt450; + private static int anInt451; + private static int anInt452; + private static int anInt453; + private static int anInt454; + private static int anInt455; + private static int anInt456; + private static int anInt457; + private static int anInt458; + private static int anInt459; + private static int anInt460; + private static int anInt461; + private static Object5[] aClass28Array462 = new Object5[100]; + private static final int[] anIntArray463 = {53, -53, -53, 53}; + private static final int[] anIntArray464 = {-53, -53, 53, 53}; + private static final int[] anIntArray465 = {-45, 45, 45, -45}; + private static final int[] anIntArray466 = {45, 45, -45, -45}; + private static boolean aBoolean467; + private static int anInt468; + private static int anInt469; + public static int anInt470 = -1; + public static int anInt471 = -1; + private static final int anInt472; + private static int[] anIntArray473; + private static Class47[][] aClass47ArrayArray474; + private static int anInt475; + private static final Class47[] aClass47Array476 = new Class47[500]; + private static NodeList aClass19_477 = new NodeList(); + private static final int[] anIntArray478 = {19, 55, 38, 155, 255, 110, 137, 205, 76}; + private static final int[] anIntArray479 = {160, 192, 80, 96, 0, 144, 80, 48, 160}; + private static final int[] anIntArray480 = {76, 8, 137, 4, 0, 1, 38, 2, 19}; + private static final int[] anIntArray481 = {0, 0, 2, 0, 0, 2, 1, 1, 0}; + private static final int[] anIntArray482 = {2, 0, 0, 2, 0, 0, 0, 4, 4}; + private static final int[] anIntArray483 = {0, 4, 4, 8, 0, 0, 8, 0, 0}; + private static final int[] anIntArray484 = {1, 1, 0, 0, 0, 8, 0, 0, 8}; + private static final int[] anIntArray485 = {41, 39248, 41, 4643, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43086, 41, 41, 41, 41, 41, 41, 41, 8602, 41, 28992, 41, 41, 41, 41, 41, 5056, 41, 41, 41, 7079, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 3131, 41, 41, 41}; + private final int[] anIntArray486; + private final int[] anIntArray487; + private int anInt488; + private final int[][] anIntArrayArray489 = {new int[16], {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1}, {1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1}}; + private final int[][] anIntArrayArray490 = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {12, 8, 4, 0, 13, 9, 5, 1, 14, 10, 6, 2, 15, 11, 7, 3}, {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, {3, 7, 11, 15, 2, 6, 10, 14, 1, 5, 9, 13, 0, 4, 8, 12}}; + private static boolean[][][][] aBooleanArrayArrayArrayArray491 = new boolean[8][32][51][51]; + private static boolean[][] aBooleanArrayArray492; + private static int anInt493; + private static int anInt494; + private static int anInt495; + private static int anInt496; + private static int anInt497; + private static int anInt498; + + static { + anInt472 = 4; + anIntArray473 = new int[anInt472]; + aClass47ArrayArray474 = new Class47[anInt472][500]; + } +} diff --git a/2006Redone Server/.classpath b/2006Redone Server/.classpath new file mode 100644 index 00000000..022d4bf7 --- /dev/null +++ b/2006Redone Server/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/2006Redone Server/.project b/2006Redone Server/.project new file mode 100644 index 00000000..b6e8033e --- /dev/null +++ b/2006Redone Server/.project @@ -0,0 +1,17 @@ + + + 2006Redone + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/2006Redone Server/.settings/org.eclipse.jdt.core.prefs b/2006Redone Server/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..f13ff237 --- /dev/null +++ b/2006Redone Server/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,291 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=80 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/2006Redone Server/.settings/org.eclipse.jdt.ui.prefs b/2006Redone Server/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000..3ddf46a3 --- /dev/null +++ b/2006Redone Server/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +formatter_profile=_2006Redone +formatter_settings_version=12 diff --git a/2006Redone Server/.settings/org.eclipse.ltk.core.refactoring.prefs b/2006Redone Server/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 00000000..cfcd1d3c --- /dev/null +++ b/2006Redone Server/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/2006Redone Server/bin/redone/Connection.class b/2006Redone Server/bin/redone/Connection.class new file mode 100644 index 00000000..28d10857 Binary files /dev/null and b/2006Redone Server/bin/redone/Connection.class differ diff --git a/2006Redone Server/bin/redone/Constants.class b/2006Redone Server/bin/redone/Constants.class new file mode 100644 index 00000000..a8356a8d Binary files /dev/null and b/2006Redone Server/bin/redone/Constants.class differ diff --git a/2006Redone Server/bin/redone/Server.class b/2006Redone Server/bin/redone/Server.class new file mode 100644 index 00000000..ff73f3cc Binary files /dev/null and b/2006Redone Server/bin/redone/Server.class differ diff --git a/2006Redone Server/bin/redone/event/CycleEvent.class b/2006Redone Server/bin/redone/event/CycleEvent.class new file mode 100644 index 00000000..fd13a491 Binary files /dev/null and b/2006Redone Server/bin/redone/event/CycleEvent.class differ diff --git a/2006Redone Server/bin/redone/event/CycleEventContainer.class b/2006Redone Server/bin/redone/event/CycleEventContainer.class new file mode 100644 index 00000000..2bdda6cd Binary files /dev/null and b/2006Redone Server/bin/redone/event/CycleEventContainer.class differ diff --git a/2006Redone Server/bin/redone/event/CycleEventHandler.class b/2006Redone Server/bin/redone/event/CycleEventHandler.class new file mode 100644 index 00000000..d5146bfb Binary files /dev/null and b/2006Redone Server/bin/redone/event/CycleEventHandler.class differ diff --git a/2006Redone Server/bin/redone/event/Task.class b/2006Redone Server/bin/redone/event/Task.class new file mode 100644 index 00000000..b0bf85a9 Binary files /dev/null and b/2006Redone Server/bin/redone/event/Task.class differ diff --git a/2006Redone Server/bin/redone/event/TaskScheduler$1.class b/2006Redone Server/bin/redone/event/TaskScheduler$1.class new file mode 100644 index 00000000..75088091 Binary files /dev/null and b/2006Redone Server/bin/redone/event/TaskScheduler$1.class differ diff --git a/2006Redone Server/bin/redone/event/TaskScheduler.class b/2006Redone Server/bin/redone/event/TaskScheduler.class new file mode 100644 index 00000000..0a1c0fcf Binary files /dev/null and b/2006Redone Server/bin/redone/event/TaskScheduler.class differ diff --git a/2006Redone Server/bin/redone/game/content/BankPin.class b/2006Redone Server/bin/redone/game/content/BankPin.class new file mode 100644 index 00000000..c55f98c5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/BankPin.class differ diff --git a/2006Redone Server/bin/redone/game/content/EmoteHandler$Emotes.class b/2006Redone Server/bin/redone/game/content/EmoteHandler$Emotes.class new file mode 100644 index 00000000..6447f4f9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/EmoteHandler$Emotes.class differ diff --git a/2006Redone Server/bin/redone/game/content/EmoteHandler.class b/2006Redone Server/bin/redone/game/content/EmoteHandler.class new file mode 100644 index 00000000..9a481b1c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/EmoteHandler.class differ diff --git a/2006Redone Server/bin/redone/game/content/MemberShipHandler$1.class b/2006Redone Server/bin/redone/game/content/MemberShipHandler$1.class new file mode 100644 index 00000000..5d3a5cc8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/MemberShipHandler$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/MemberShipHandler.class b/2006Redone Server/bin/redone/game/content/MemberShipHandler.class new file mode 100644 index 00000000..42681397 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/MemberShipHandler.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/CombatAssistant.class b/2006Redone Server/bin/redone/game/content/combat/CombatAssistant.class new file mode 100644 index 00000000..0144b1a6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/CombatAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/Specials$specialAttack.class b/2006Redone Server/bin/redone/game/content/combat/Specials$specialAttack.class new file mode 100644 index 00000000..bb076262 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/Specials$specialAttack.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/Specials.class b/2006Redone Server/bin/redone/game/content/combat/Specials.class new file mode 100644 index 00000000..bd2f815a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/Specials.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther$1.class b/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther$1.class new file mode 100644 index 00000000..fa9c386e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther.class b/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther.class new file mode 100644 index 00000000..1a7d010c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/CastOnOther.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/CastRequirements.class b/2006Redone Server/bin/redone/game/content/combat/magic/CastRequirements.class new file mode 100644 index 00000000..3142407e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/CastRequirements.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$Enchant.class b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$Enchant.class new file mode 100644 index 00000000..d5b635f3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$Enchant.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$EnchantSpell.class b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$EnchantSpell.class new file mode 100644 index 00000000..a0d1b7a9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting$EnchantSpell.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting.class b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting.class new file mode 100644 index 00000000..c1a8d9ea Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/Enchanting.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/MagicData.class b/2006Redone Server/bin/redone/game/content/combat/magic/MagicData.class new file mode 100644 index 00000000..08e0adb0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/MagicData.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/MagicMaxHit.class b/2006Redone Server/bin/redone/game/content/combat/magic/MagicMaxHit.class new file mode 100644 index 00000000..403695c1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/MagicMaxHit.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/MagicRequirements.class b/2006Redone Server/bin/redone/game/content/combat/magic/MagicRequirements.class new file mode 100644 index 00000000..d0b287a3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/MagicRequirements.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/MagicSpells.class b/2006Redone Server/bin/redone/game/content/combat/magic/MagicSpells.class new file mode 100644 index 00000000..15370481 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/MagicSpells.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/MagicTeleports.class b/2006Redone Server/bin/redone/game/content/combat/magic/MagicTeleports.class new file mode 100644 index 00000000..3fad0355 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/MagicTeleports.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/magic/NonCombatSpells.class b/2006Redone Server/bin/redone/game/content/combat/magic/NonCombatSpells.class new file mode 100644 index 00000000..b942ef96 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/magic/NonCombatSpells.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/melee/MeleeData.class b/2006Redone Server/bin/redone/game/content/combat/melee/MeleeData.class new file mode 100644 index 00000000..76afd041 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/melee/MeleeData.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/melee/MeleeMaxHit.class b/2006Redone Server/bin/redone/game/content/combat/melee/MeleeMaxHit.class new file mode 100644 index 00000000..34621e97 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/melee/MeleeMaxHit.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/melee/PlayerKilling.class b/2006Redone Server/bin/redone/game/content/combat/melee/PlayerKilling.class new file mode 100644 index 00000000..af446107 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/melee/PlayerKilling.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/npcs/NpcAggressive.class b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcAggressive.class new file mode 100644 index 00000000..a04313ff Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcAggressive.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/npcs/NpcCombat.class b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcCombat.class new file mode 100644 index 00000000..70ecb5ba Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcCombat.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/npcs/NpcEmotes.class b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcEmotes.class new file mode 100644 index 00000000..492d7e34 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/npcs/NpcEmotes.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/prayer/ActivatePrayers.class b/2006Redone Server/bin/redone/game/content/combat/prayer/ActivatePrayers.class new file mode 100644 index 00000000..6beee340 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/prayer/ActivatePrayers.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerData.class b/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerData.class new file mode 100644 index 00000000..3637f0fd Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerData.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerDrain.class b/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerDrain.class new file mode 100644 index 00000000..231c3b3c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/prayer/PrayerDrain.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$1.class b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$1.class new file mode 100644 index 00000000..4bc31955 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$2.class b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$2.class new file mode 100644 index 00000000..ebf90238 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon.class b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon.class new file mode 100644 index 00000000..552c61a7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/range/DwarfCannon.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/range/RangeData.class b/2006Redone Server/bin/redone/game/content/combat/range/RangeData.class new file mode 100644 index 00000000..a4584db8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/range/RangeData.class differ diff --git a/2006Redone Server/bin/redone/game/content/combat/range/RangeMaxHit.class b/2006Redone Server/bin/redone/game/content/combat/range/RangeMaxHit.class new file mode 100644 index 00000000..3bafe2ad Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/combat/range/RangeMaxHit.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Beverages$1.class b/2006Redone Server/bin/redone/game/content/consumables/Beverages$1.class new file mode 100644 index 00000000..5c027143 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Beverages$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Beverages$beverageData.class b/2006Redone Server/bin/redone/game/content/consumables/Beverages$beverageData.class new file mode 100644 index 00000000..91748694 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Beverages$beverageData.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Beverages.class b/2006Redone Server/bin/redone/game/content/consumables/Beverages.class new file mode 100644 index 00000000..e3164394 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Beverages.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Food$FoodToEat.class b/2006Redone Server/bin/redone/game/content/consumables/Food$FoodToEat.class new file mode 100644 index 00000000..126f166b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Food$FoodToEat.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Food.class b/2006Redone Server/bin/redone/game/content/consumables/Food.class new file mode 100644 index 00000000..57e5709c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Food.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Kebabs.class b/2006Redone Server/bin/redone/game/content/consumables/Kebabs.class new file mode 100644 index 00000000..1db02d6c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Kebabs.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Potions$1.class b/2006Redone Server/bin/redone/game/content/consumables/Potions$1.class new file mode 100644 index 00000000..b7efe4ae Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Potions$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/consumables/Potions.class b/2006Redone Server/bin/redone/game/content/consumables/Potions.class new file mode 100644 index 00000000..1b636980 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/consumables/Potions.class differ diff --git a/2006Redone Server/bin/redone/game/content/guilds/Guilds.class b/2006Redone Server/bin/redone/game/content/guilds/Guilds.class new file mode 100644 index 00000000..5b573bb6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/guilds/Guilds.class differ diff --git a/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild$1.class b/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild$1.class new file mode 100644 index 00000000..439c2654 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild.class b/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild.class new file mode 100644 index 00000000..e699c897 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/guilds/impl/RangersGuild.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/Barrows.class b/2006Redone Server/bin/redone/game/content/minigames/Barrows.class new file mode 100644 index 00000000..da1f1806 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/Barrows.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/Dueling.class b/2006Redone Server/bin/redone/game/content/minigames/Dueling.class new file mode 100644 index 00000000..21f1fce4 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/Dueling.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/FightCaves$1.class b/2006Redone Server/bin/redone/game/content/minigames/FightCaves$1.class new file mode 100644 index 00000000..819a8079 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/FightCaves$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/FightCaves.class b/2006Redone Server/bin/redone/game/content/minigames/FightCaves.class new file mode 100644 index 00000000..f986e171 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/FightCaves.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/FightPits.class b/2006Redone Server/bin/redone/game/content/minigames/FightPits.class new file mode 100644 index 00000000..cda07361 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/FightPits.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/MageArena.class b/2006Redone Server/bin/redone/game/content/minigames/MageArena.class new file mode 100644 index 00000000..e68658f9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/MageArena.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/PestControl.class b/2006Redone Server/bin/redone/game/content/minigames/PestControl.class new file mode 100644 index 00000000..9174ac9a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/PestControl.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/TreasureTrails.class b/2006Redone Server/bin/redone/game/content/minigames/TreasureTrails.class new file mode 100644 index 00000000..04eb47c4 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/TreasureTrails.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWarObjects.class b/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWarObjects.class new file mode 100644 index 00000000..a543d24f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWarObjects.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWars.class b/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWars.class new file mode 100644 index 00000000..925961a7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/castlewars/CastleWars.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/GroupMinigame.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/GroupMinigame.class new file mode 100644 index 00000000..bb6822d6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/GroupMinigame.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$1.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$1.class new file mode 100644 index 00000000..ea1b0645 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$2.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$2.class new file mode 100644 index 00000000..5d489086 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$3.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$3.class new file mode 100644 index 00000000..9e64cd48 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$4.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$4.class new file mode 100644 index 00000000..3a6ac7f3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$Wall.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$Wall.class new file mode 100644 index 00000000..d5283b5d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler$Wall.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler.class new file mode 100644 index 00000000..f5871c39 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/Trawler.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/TrawlerWaitingRoom.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/TrawlerWaitingRoom.class new file mode 100644 index 00000000..501f7bbb Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/TrawlerWaitingRoom.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom$1.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom$1.class new file mode 100644 index 00000000..52869cd8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom.class b/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom.class new file mode 100644 index 00000000..995736d7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/minigames/trawler/WaitingRoom.class differ diff --git a/2006Redone Server/bin/redone/game/content/music/Music.class b/2006Redone Server/bin/redone/game/content/music/Music.class new file mode 100644 index 00000000..d2aeed50 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/music/Music.class differ diff --git a/2006Redone Server/bin/redone/game/content/music/PlayList$Songs.class b/2006Redone Server/bin/redone/game/content/music/PlayList$Songs.class new file mode 100644 index 00000000..9cf132fd Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/music/PlayList$Songs.class differ diff --git a/2006Redone Server/bin/redone/game/content/music/PlayList.class b/2006Redone Server/bin/redone/game/content/music/PlayList.class new file mode 100644 index 00000000..68d9d8f7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/music/PlayList.class differ diff --git a/2006Redone Server/bin/redone/game/content/music/sound/CombatSounds.class b/2006Redone Server/bin/redone/game/content/music/sound/CombatSounds.class new file mode 100644 index 00000000..5571cd07 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/music/sound/CombatSounds.class differ diff --git a/2006Redone Server/bin/redone/game/content/music/sound/SoundList.class b/2006Redone Server/bin/redone/game/content/music/sound/SoundList.class new file mode 100644 index 00000000..97dd4996 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/music/sound/SoundList.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/QuestAssistant$Quests.class b/2006Redone Server/bin/redone/game/content/quests/QuestAssistant$Quests.class new file mode 100644 index 00000000..5d9280d5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/QuestAssistant$Quests.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/QuestAssistant.class b/2006Redone Server/bin/redone/game/content/quests/QuestAssistant.class new file mode 100644 index 00000000..182dcb4f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/QuestAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/QuestRewards.class b/2006Redone Server/bin/redone/game/content/quests/QuestRewards.class new file mode 100644 index 00000000..5e9c0136 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/QuestRewards.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/CooksAssistant.class b/2006Redone Server/bin/redone/game/content/quests/impl/CooksAssistant.class new file mode 100644 index 00000000..d527bed6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/CooksAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/DoricsQuest.class b/2006Redone Server/bin/redone/game/content/quests/impl/DoricsQuest.class new file mode 100644 index 00000000..912a16e2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/DoricsQuest.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/GertrudesCat.class b/2006Redone Server/bin/redone/game/content/quests/impl/GertrudesCat.class new file mode 100644 index 00000000..c9286355 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/GertrudesCat.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/ImpCatcher.class b/2006Redone Server/bin/redone/game/content/quests/impl/ImpCatcher.class new file mode 100644 index 00000000..a037e004 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/ImpCatcher.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/KnightsSword.class b/2006Redone Server/bin/redone/game/content/quests/impl/KnightsSword.class new file mode 100644 index 00000000..5ee9c220 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/KnightsSword.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/PiratesTreasure.class b/2006Redone Server/bin/redone/game/content/quests/impl/PiratesTreasure.class new file mode 100644 index 00000000..3e726c92 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/PiratesTreasure.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/RestlessGhost.class b/2006Redone Server/bin/redone/game/content/quests/impl/RestlessGhost.class new file mode 100644 index 00000000..572e96f7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/RestlessGhost.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/RomeoJuliet.class b/2006Redone Server/bin/redone/game/content/quests/impl/RomeoJuliet.class new file mode 100644 index 00000000..df30b18e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/RomeoJuliet.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/RuneMysteries.class b/2006Redone Server/bin/redone/game/content/quests/impl/RuneMysteries.class new file mode 100644 index 00000000..185892c3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/RuneMysteries.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/SheepShearer.class b/2006Redone Server/bin/redone/game/content/quests/impl/SheepShearer.class new file mode 100644 index 00000000..5c1eb58f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/SheepShearer.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/VampyreSlayer.class b/2006Redone Server/bin/redone/game/content/quests/impl/VampyreSlayer.class new file mode 100644 index 00000000..b8ec63ae Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/VampyreSlayer.class differ diff --git a/2006Redone Server/bin/redone/game/content/quests/impl/WitchsPotion.class b/2006Redone Server/bin/redone/game/content/quests/impl/WitchsPotion.class new file mode 100644 index 00000000..53516f5c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/quests/impl/WitchsPotion.class differ diff --git a/2006Redone Server/bin/redone/game/content/random/Balloons.class b/2006Redone Server/bin/redone/game/content/random/Balloons.class new file mode 100644 index 00000000..70521e71 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/random/Balloons.class differ diff --git a/2006Redone Server/bin/redone/game/content/random/HolidayDrops.class b/2006Redone Server/bin/redone/game/content/random/HolidayDrops.class new file mode 100644 index 00000000..350c7d7e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/random/HolidayDrops.class differ diff --git a/2006Redone Server/bin/redone/game/content/random/Holidays$1.class b/2006Redone Server/bin/redone/game/content/random/Holidays$1.class new file mode 100644 index 00000000..34f6855b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/random/Holidays$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/random/Holidays.class b/2006Redone Server/bin/redone/game/content/random/Holidays.class new file mode 100644 index 00000000..8d6bc713 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/random/Holidays.class differ diff --git a/2006Redone Server/bin/redone/game/content/random/PartyRoom.class b/2006Redone Server/bin/redone/game/content/random/PartyRoom.class new file mode 100644 index 00000000..55eb4b32 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/random/PartyRoom.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/EvilChicken.class b/2006Redone Server/bin/redone/game/content/randomevents/EvilChicken.class new file mode 100644 index 00000000..e4b2c065 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/EvilChicken.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/FreakyForester.class b/2006Redone Server/bin/redone/game/content/randomevents/FreakyForester.class new file mode 100644 index 00000000..44721946 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/FreakyForester.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/Frog.class b/2006Redone Server/bin/redone/game/content/randomevents/Frog.class new file mode 100644 index 00000000..e9585fed Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/Frog.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/GenieLamp.class b/2006Redone Server/bin/redone/game/content/randomevents/GenieLamp.class new file mode 100644 index 00000000..7446b6c9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/GenieLamp.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/RandomEventHandler.class b/2006Redone Server/bin/redone/game/content/randomevents/RandomEventHandler.class new file mode 100644 index 00000000..f3f794a9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/RandomEventHandler.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/RiverTroll.class b/2006Redone Server/bin/redone/game/content/randomevents/RiverTroll.class new file mode 100644 index 00000000..42576d1a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/RiverTroll.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/RockGolem.class b/2006Redone Server/bin/redone/game/content/randomevents/RockGolem.class new file mode 100644 index 00000000..54cdefd6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/RockGolem.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/SandwhichLady.class b/2006Redone Server/bin/redone/game/content/randomevents/SandwhichLady.class new file mode 100644 index 00000000..fb6c9c0b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/SandwhichLady.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/Shade.class b/2006Redone Server/bin/redone/game/content/randomevents/Shade.class new file mode 100644 index 00000000..8c305483 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/Shade.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/Swarm.class b/2006Redone Server/bin/redone/game/content/randomevents/Swarm.class new file mode 100644 index 00000000..6fdf9086 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/Swarm.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/TreeSpirit.class b/2006Redone Server/bin/redone/game/content/randomevents/TreeSpirit.class new file mode 100644 index 00000000..4f5ec830 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/TreeSpirit.class differ diff --git a/2006Redone Server/bin/redone/game/content/randomevents/Zombie.class b/2006Redone Server/bin/redone/game/content/randomevents/Zombie.class new file mode 100644 index 00000000..50308277 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/randomevents/Zombie.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/Menus.class b/2006Redone Server/bin/redone/game/content/skills/Menus.class new file mode 100644 index 00000000..0435ad94 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/Menus.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/SkillHandler.class b/2006Redone Server/bin/redone/game/content/skills/SkillHandler.class new file mode 100644 index 00000000..40b00438 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/SkillHandler.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/SkillInterfaces.class b/2006Redone Server/bin/redone/game/content/skills/SkillInterfaces.class new file mode 100644 index 00000000..391dfc9b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/SkillInterfaces.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/SkillMenu.class b/2006Redone Server/bin/redone/game/content/skills/SkillMenu.class new file mode 100644 index 00000000..d6b96313 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/SkillMenu.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$1.class new file mode 100644 index 00000000..6a8b3bff Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$2.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$2.class new file mode 100644 index 00000000..6b90d837 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$3.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$3.class new file mode 100644 index 00000000..111ffe41 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$4.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$4.class new file mode 100644 index 00000000..66799ecc Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$5.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$5.class new file mode 100644 index 00000000..07b9d2b4 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$5.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$6.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$6.class new file mode 100644 index 00000000..60ff97ac Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$6.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$7.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$7.class new file mode 100644 index 00000000..29f4a9eb Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$7.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$8.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$8.class new file mode 100644 index 00000000..547e913e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$8.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility$9.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$9.class new file mode 100644 index 00000000..af7c5e25 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility$9.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/Agility.class b/2006Redone Server/bin/redone/game/content/skills/agility/Agility.class new file mode 100644 index 00000000..8c191b92 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/Agility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/AgilityShortcut.class b/2006Redone Server/bin/redone/game/content/skills/agility/AgilityShortcut.class new file mode 100644 index 00000000..3339ee7b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/AgilityShortcut.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility$1.class new file mode 100644 index 00000000..04dddcc3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility.class new file mode 100644 index 00000000..30322745 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/ApeAtollAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility$1.class new file mode 100644 index 00000000..10789b6c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility.class new file mode 100644 index 00000000..a4e97b2f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/BarbarianAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/GnomeAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/GnomeAgility.class new file mode 100644 index 00000000..2b6e0df5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/GnomeAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$1.class new file mode 100644 index 00000000..a2d544c8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$10.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$10.class new file mode 100644 index 00000000..3a7b9b9a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$10.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$2.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$2.class new file mode 100644 index 00000000..e8125f08 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$3.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$3.class new file mode 100644 index 00000000..6c810ac3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$4.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$4.class new file mode 100644 index 00000000..182c5f90 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$5.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$5.class new file mode 100644 index 00000000..abe375a3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$5.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$6.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$6.class new file mode 100644 index 00000000..d12dc30d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$6.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$7.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$7.class new file mode 100644 index 00000000..52fc1505 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$7.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$8.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$8.class new file mode 100644 index 00000000..c005470c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$8.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$9.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$9.class new file mode 100644 index 00000000..f3d0e54e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility$9.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility.class new file mode 100644 index 00000000..dacdcc5d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/PyramidAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility$1.class new file mode 100644 index 00000000..e3ecd96f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility.class new file mode 100644 index 00000000..474dfe93 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/WerewolfAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility$1.class b/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility$1.class new file mode 100644 index 00000000..e354ea39 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility.class b/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility.class new file mode 100644 index 00000000..f8f8999d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/agility/WildernessAgility.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$1.class b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$1.class new file mode 100644 index 00000000..d3f11b88 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$CookingItems.class b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$CookingItems.class new file mode 100644 index 00000000..30bc6188 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking$CookingItems.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking.class b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking.class new file mode 100644 index 00000000..ac327d71 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/Cooking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$1.class b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$1.class new file mode 100644 index 00000000..860b3054 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$2.class b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$2.class new file mode 100644 index 00000000..59554c1c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland.class b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland.class new file mode 100644 index 00000000..470b2d4e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/CookingTutorialIsland.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes$PotatoMaking.class b/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes$PotatoMaking.class new file mode 100644 index 00000000..44ae1d95 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes$PotatoMaking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes.class b/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes.class new file mode 100644 index 00000000..9e7b611f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/cooking/Potatoes.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Fishing$1.class b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$1.class new file mode 100644 index 00000000..611233ae Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Fishing$2.class b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$2.class new file mode 100644 index 00000000..86a7e2e5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Fishing$3.class b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$3.class new file mode 100644 index 00000000..c8e33e67 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Fishing$4.class b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$4.class new file mode 100644 index 00000000..e1254371 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Fishing$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Fishing.class b/2006Redone Server/bin/redone/game/content/skills/core/Fishing.class new file mode 100644 index 00000000..5fb5c7f5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Fishing.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$1.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$1.class new file mode 100644 index 00000000..53cbf8a7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$2.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$2.class new file mode 100644 index 00000000..32c9bb2d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$3.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$3.class new file mode 100644 index 00000000..04df38d0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$4.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$4.class new file mode 100644 index 00000000..6ed0c9dc Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$5.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$5.class new file mode 100644 index 00000000..3146897d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$5.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining$rockData.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining$rockData.class new file mode 100644 index 00000000..37ffb9a6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining$rockData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Mining.class b/2006Redone Server/bin/redone/game/content/skills/core/Mining.class new file mode 100644 index 00000000..8d5e7562 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Mining.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Prayer$1.class b/2006Redone Server/bin/redone/game/content/skills/core/Prayer$1.class new file mode 100644 index 00000000..14b7a45e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Prayer$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Prayer.class b/2006Redone Server/bin/redone/game/content/skills/core/Prayer.class new file mode 100644 index 00000000..15df0ee5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Prayer.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$1.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$1.class new file mode 100644 index 00000000..e372b34c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2$1.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2$1.class new file mode 100644 index 00000000..2f675776 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2.class new file mode 100644 index 00000000..cb85d162 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$3.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$3.class new file mode 100644 index 00000000..f3b82551 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$4.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$4.class new file mode 100644 index 00000000..a2db4893 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting$4.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting.class b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting.class new file mode 100644 index 00000000..7478a119 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/core/Woodcutting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$Leather.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$Leather.class new file mode 100644 index 00000000..ae75acf8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$Leather.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$amuletData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$amuletData.class new file mode 100644 index 00000000..2fff4ec0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$amuletData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$cutGemData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$cutGemData.class new file mode 100644 index 00000000..fe85daa5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$cutGemData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$jewelryData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$jewelryData.class new file mode 100644 index 00000000..79ae5001 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$jewelryData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherData.class new file mode 100644 index 00000000..4362bf4c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherDialogueData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherDialogueData.class new file mode 100644 index 00000000..21aede4e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$leatherDialogueData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$tanningData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$tanningData.class new file mode 100644 index 00000000..67d1db37 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData$tanningData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData.class b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData.class new file mode 100644 index 00000000..23339d99 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/CraftingData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting$1.class new file mode 100644 index 00000000..22a96b9f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting.class b/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting.class new file mode 100644 index 00000000..37a4e8dd Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/GemCutting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing$1.class new file mode 100644 index 00000000..8b2e8a1a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing.class b/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing.class new file mode 100644 index 00000000..80f273d1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/GlassBlowing.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/JewelryMaking.class b/2006Redone Server/bin/redone/game/content/skills/crafting/JewelryMaking.class new file mode 100644 index 00000000..b1a21ff9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/JewelryMaking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking$1.class new file mode 100644 index 00000000..326fbe3e Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking.class b/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking.class new file mode 100644 index 00000000..ebd7d34a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/LeatherMaking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$1.class new file mode 100644 index 00000000..92fd5380 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$2.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$2.class new file mode 100644 index 00000000..e93aefbc Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery.class new file mode 100644 index 00000000..e5861b90 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Pottery.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay$1.class new file mode 100644 index 00000000..07ba2b5b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay.class b/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay.class new file mode 100644 index 00000000..43ce4b02 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/SoftClay.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning$1.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning$1.class new file mode 100644 index 00000000..9106b3a1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning.class new file mode 100644 index 00000000..74e000b5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Spinning.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/crafting/Tanning.class b/2006Redone Server/bin/redone/game/content/skills/crafting/Tanning.class new file mode 100644 index 00000000..8d93cbb7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/crafting/Tanning.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/Allotments.class b/2006Redone Server/bin/redone/game/content/skills/farming/Allotments.class new file mode 100644 index 00000000..ad75b9ab Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/Allotments.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/Farming.class b/2006Redone Server/bin/redone/game/content/skills/farming/Farming.class new file mode 100644 index 00000000..2403adf5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/Farming.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/FarmingConstants.class b/2006Redone Server/bin/redone/game/content/skills/farming/FarmingConstants.class new file mode 100644 index 00000000..9f86ff5b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/FarmingConstants.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/Flowers.class b/2006Redone Server/bin/redone/game/content/skills/farming/Flowers.class new file mode 100644 index 00000000..26e14ef5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/Flowers.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/Herbs.class b/2006Redone Server/bin/redone/game/content/skills/farming/Herbs.class new file mode 100644 index 00000000..514cca89 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/Herbs.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/farming/Patch.class b/2006Redone Server/bin/redone/game/content/skills/farming/Patch.class new file mode 100644 index 00000000..6c729150 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/farming/Patch.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1$1.class b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1$1.class new file mode 100644 index 00000000..33242e2f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1.class b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1.class new file mode 100644 index 00000000..20318012 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$2.class b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$2.class new file mode 100644 index 00000000..da1f2fd6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking.class b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking.class new file mode 100644 index 00000000..cc8bf487 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/firemaking/Firemaking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/firemaking/LogData.class b/2006Redone Server/bin/redone/game/content/skills/firemaking/LogData.class new file mode 100644 index 00000000..b6258794 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/firemaking/LogData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$1.class b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$1.class new file mode 100644 index 00000000..f142daf5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$Data.class b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$Data.class new file mode 100644 index 00000000..0748e146 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking$Data.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking.class b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking.class new file mode 100644 index 00000000..7df3435b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/ArrowMaking.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$1.class b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$1.class new file mode 100644 index 00000000..da6a8c80 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$2.class b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$2.class new file mode 100644 index 00000000..5b62f0ef Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting.class b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting.class new file mode 100644 index 00000000..054831ba Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCutting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/LogCuttingInterface.class b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCuttingInterface.class new file mode 100644 index 00000000..1220ecd0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/LogCuttingInterface.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$1.class b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$1.class new file mode 100644 index 00000000..1cef9905 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$Data.class b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$Data.class new file mode 100644 index 00000000..410b1cf9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing$Data.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing.class b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing.class new file mode 100644 index 00000000..52d578b8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/fletching/Stringing.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction$Data.class b/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction$Data.class new file mode 100644 index 00000000..9602f825 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction$Data.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction.class b/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction.class new file mode 100644 index 00000000..52cb8bcf Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/herblore/GrindingAction.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$1.class b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$1.class new file mode 100644 index 00000000..bd44af61 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$2.class b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$2.class new file mode 100644 index 00000000..286b8e7f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore.class b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore.class new file mode 100644 index 00000000..ba1227a9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/herblore/Herblore.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/runecrafting/AbyssalHandler.class b/2006Redone Server/bin/redone/game/content/skills/runecrafting/AbyssalHandler.class new file mode 100644 index 00000000..e8eb6222 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/runecrafting/AbyssalHandler.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/runecrafting/RuneCraftingActions.class b/2006Redone Server/bin/redone/game/content/skills/runecrafting/RuneCraftingActions.class new file mode 100644 index 00000000..343eb417 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/runecrafting/RuneCraftingActions.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altar_Data.class b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altar_Data.class new file mode 100644 index 00000000..ab221cbe Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altar_Data.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altars.class b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altars.class new file mode 100644 index 00000000..4b724a99 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting$Altars.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting.class b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting.class new file mode 100644 index 00000000..b2061e19 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/runecrafting/Runecrafting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$SlayerMasters.class b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$SlayerMasters.class new file mode 100644 index 00000000..42a5b366 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$SlayerMasters.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$Task.class b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$Task.class new file mode 100644 index 00000000..d163e656 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer$Task.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer.class b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer.class new file mode 100644 index 00000000..cd5f5b7c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/slayer/Slayer.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/slayer/SlayerRequirements.class b/2006Redone Server/bin/redone/game/content/skills/slayer/SlayerRequirements.class new file mode 100644 index 00000000..8fad824c Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/slayer/SlayerRequirements.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$1.class b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$1.class new file mode 100644 index 00000000..939a13e4 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$SilverCraft.class b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$SilverCraft.class new file mode 100644 index 00000000..07aa41ab Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting$SilverCraft.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting.class b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting.class new file mode 100644 index 00000000..f19042de Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/SilverCrafting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$1.class b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$1.class new file mode 100644 index 00000000..ffb77596 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$2.class b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$2.class new file mode 100644 index 00000000..2bb6d452 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting.class b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting.class new file mode 100644 index 00000000..d849c301 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/Smelting.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/Smithing.class b/2006Redone Server/bin/redone/game/content/skills/smithing/Smithing.class new file mode 100644 index 00000000..e142633a Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/Smithing.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/SmithingInterface.class b/2006Redone Server/bin/redone/game/content/skills/smithing/SmithingInterface.class new file mode 100644 index 00000000..e6e3cad2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/SmithingInterface.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/smithing/Superheat.class b/2006Redone Server/bin/redone/game/content/skills/smithing/Superheat.class new file mode 100644 index 00000000..c364e5eb Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/smithing/Superheat.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$1.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$1.class new file mode 100644 index 00000000..364f66ca Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$2.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$2.class new file mode 100644 index 00000000..a44da542 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$3.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$3.class new file mode 100644 index 00000000..eaacc95b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$3.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$npcData.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$npcData.class new file mode 100644 index 00000000..2936b15d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket$npcData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket.class new file mode 100644 index 00000000..171832a7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Pickpocket.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$1.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$1.class new file mode 100644 index 00000000..a532de6f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$stallData.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$stallData.class new file mode 100644 index 00000000..fe8bed99 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls$stallData.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls.class b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls.class new file mode 100644 index 00000000..03df4136 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/Stalls.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther$1.class b/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther$1.class new file mode 100644 index 00000000..ba95a79f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther.class b/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther.class new file mode 100644 index 00000000..97743af1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/skills/thieving/ThieveOther.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/Desert$1.class b/2006Redone Server/bin/redone/game/content/traveling/Desert$1.class new file mode 100644 index 00000000..f104696b Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/Desert$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/Desert.class b/2006Redone Server/bin/redone/game/content/traveling/Desert.class new file mode 100644 index 00000000..cd81197d Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/Desert.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$1.class b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$1.class new file mode 100644 index 00000000..9e4a1965 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$2.class b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$2.class new file mode 100644 index 00000000..41b3eb47 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider.class b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider.class new file mode 100644 index 00000000..6e6c9509 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/GnomeGlider.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/Sailing$1.class b/2006Redone Server/bin/redone/game/content/traveling/Sailing$1.class new file mode 100644 index 00000000..9a0e599f Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/Sailing$1.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/Sailing$2.class b/2006Redone Server/bin/redone/game/content/traveling/Sailing$2.class new file mode 100644 index 00000000..999c8b38 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/Sailing$2.class differ diff --git a/2006Redone Server/bin/redone/game/content/traveling/Sailing.class b/2006Redone Server/bin/redone/game/content/traveling/Sailing.class new file mode 100644 index 00000000..a96b8cf6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/content/traveling/Sailing.class differ diff --git a/2006Redone Server/bin/redone/game/dialogues/Dialogue.class b/2006Redone Server/bin/redone/game/dialogues/Dialogue.class new file mode 100644 index 00000000..2a72bced Binary files /dev/null and b/2006Redone Server/bin/redone/game/dialogues/Dialogue.class differ diff --git a/2006Redone Server/bin/redone/game/dialogues/DialogueHandler.class b/2006Redone Server/bin/redone/game/dialogues/DialogueHandler.class new file mode 100644 index 00000000..37f2c0b3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/dialogues/DialogueHandler.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther$ClimbData.class b/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther$ClimbData.class new file mode 100644 index 00000000..b677ba26 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther$ClimbData.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther.class b/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther.class new file mode 100644 index 00000000..cdf3f389 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/ClimbOther.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/Doors.class b/2006Redone Server/bin/redone/game/globalworldobjects/Doors.class new file mode 100644 index 00000000..4cd1da77 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/Doors.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/DoubleDoors.class b/2006Redone Server/bin/redone/game/globalworldobjects/DoubleDoors.class new file mode 100644 index 00000000..7d427b41 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/DoubleDoors.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/DoubleGates.class b/2006Redone Server/bin/redone/game/globalworldobjects/DoubleGates.class new file mode 100644 index 00000000..15c39965 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/DoubleGates.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/GateHandler.class b/2006Redone Server/bin/redone/game/globalworldobjects/GateHandler.class new file mode 100644 index 00000000..bbb021ae Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/GateHandler.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor$1.class b/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor$1.class new file mode 100644 index 00000000..c9bd273e Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor$1.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor.class b/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor.class new file mode 100644 index 00000000..7fbeb52e Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/PassDoor.class differ diff --git a/2006Redone Server/bin/redone/game/globalworldobjects/SingleGates.class b/2006Redone Server/bin/redone/game/globalworldobjects/SingleGates.class new file mode 100644 index 00000000..28953f86 Binary files /dev/null and b/2006Redone Server/bin/redone/game/globalworldobjects/SingleGates.class differ diff --git a/2006Redone Server/bin/redone/game/items/GameItem.class b/2006Redone Server/bin/redone/game/items/GameItem.class new file mode 100644 index 00000000..235777d6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/GameItem.class differ diff --git a/2006Redone Server/bin/redone/game/items/GroundItem.class b/2006Redone Server/bin/redone/game/items/GroundItem.class new file mode 100644 index 00000000..50b9310d Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/GroundItem.class differ diff --git a/2006Redone Server/bin/redone/game/items/Item.class b/2006Redone Server/bin/redone/game/items/Item.class new file mode 100644 index 00000000..b434c504 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/Item.class differ diff --git a/2006Redone Server/bin/redone/game/items/ItemAssistant.class b/2006Redone Server/bin/redone/game/items/ItemAssistant.class new file mode 100644 index 00000000..5e4b5552 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/ItemAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/items/ItemDefinitions.class b/2006Redone Server/bin/redone/game/items/ItemDefinitions.class new file mode 100644 index 00000000..c6ba2222 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/ItemDefinitions.class differ diff --git a/2006Redone Server/bin/redone/game/items/ItemList.class b/2006Redone Server/bin/redone/game/items/ItemList.class new file mode 100644 index 00000000..0df445f5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/ItemList.class differ diff --git a/2006Redone Server/bin/redone/game/items/UseItem.class b/2006Redone Server/bin/redone/game/items/UseItem.class new file mode 100644 index 00000000..5c9de47e Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/UseItem.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/CapeDye.class b/2006Redone Server/bin/redone/game/items/impl/CapeDye.class new file mode 100644 index 00000000..d5527df0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/CapeDye.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/ExperienceLamp.class b/2006Redone Server/bin/redone/game/items/impl/ExperienceLamp.class new file mode 100644 index 00000000..657d833a Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/ExperienceLamp.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Fillables.class b/2006Redone Server/bin/redone/game/items/impl/Fillables.class new file mode 100644 index 00000000..c1ac7ced Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Fillables.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Flowers$1.class b/2006Redone Server/bin/redone/game/items/impl/Flowers$1.class new file mode 100644 index 00000000..0b281d43 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Flowers$1.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Flowers$2.class b/2006Redone Server/bin/redone/game/items/impl/Flowers$2.class new file mode 100644 index 00000000..5f2c7e83 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Flowers$2.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Flowers.class b/2006Redone Server/bin/redone/game/items/impl/Flowers.class new file mode 100644 index 00000000..84e655f2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Flowers.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/HandleEmpty.class b/2006Redone Server/bin/redone/game/items/impl/HandleEmpty.class new file mode 100644 index 00000000..27219325 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/HandleEmpty.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/LightSources.class b/2006Redone Server/bin/redone/game/items/impl/LightSources.class new file mode 100644 index 00000000..45be9c62 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/LightSources.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/PotionMixing.class b/2006Redone Server/bin/redone/game/items/impl/PotionMixing.class new file mode 100644 index 00000000..149f4957 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/PotionMixing.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/RareProtection.class b/2006Redone Server/bin/redone/game/items/impl/RareProtection.class new file mode 100644 index 00000000..5c10b2d2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/RareProtection.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Teles.class b/2006Redone Server/bin/redone/game/items/impl/Teles.class new file mode 100644 index 00000000..0a5453f2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Teles.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Trails.class b/2006Redone Server/bin/redone/game/items/impl/Trails.class new file mode 100644 index 00000000..7fd5d01a Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Trails.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/WeaponPoison$Weapon.class b/2006Redone Server/bin/redone/game/items/impl/WeaponPoison$Weapon.class new file mode 100644 index 00000000..d8a81ed1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/WeaponPoison$Weapon.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/WeaponPoison.class b/2006Redone Server/bin/redone/game/items/impl/WeaponPoison.class new file mode 100644 index 00000000..b699a122 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/WeaponPoison.class differ diff --git a/2006Redone Server/bin/redone/game/items/impl/Weight.class b/2006Redone Server/bin/redone/game/items/impl/Weight.class new file mode 100644 index 00000000..5aacec23 Binary files /dev/null and b/2006Redone Server/bin/redone/game/items/impl/Weight.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/Npc$1.class b/2006Redone Server/bin/redone/game/npcs/Npc$1.class new file mode 100644 index 00000000..5f6bc574 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/Npc$1.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/Npc.class b/2006Redone Server/bin/redone/game/npcs/Npc.class new file mode 100644 index 00000000..6514f7ad Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/Npc.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/NpcActions.class b/2006Redone Server/bin/redone/game/npcs/NpcActions.class new file mode 100644 index 00000000..536c88a0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/NpcActions.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/NpcData.class b/2006Redone Server/bin/redone/game/npcs/NpcData.class new file mode 100644 index 00000000..7e45a04e Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/NpcData.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/NpcHandler.class b/2006Redone Server/bin/redone/game/npcs/NpcHandler.class new file mode 100644 index 00000000..032a9c20 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/NpcHandler.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/NpcList.class b/2006Redone Server/bin/redone/game/npcs/NpcList.class new file mode 100644 index 00000000..635106f9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/NpcList.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/NpcSize.class b/2006Redone Server/bin/redone/game/npcs/NpcSize.class new file mode 100644 index 00000000..dbcdb4cb Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/NpcSize.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/drops/NPCDrops.class b/2006Redone Server/bin/redone/game/npcs/drops/NPCDrops.class new file mode 100644 index 00000000..71ba3e1d Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/drops/NPCDrops.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/drops/NPCDropsHandler.class b/2006Redone Server/bin/redone/game/npcs/drops/NPCDropsHandler.class new file mode 100644 index 00000000..bb27cd92 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/drops/NPCDropsHandler.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/impl/MilkCow$1.class b/2006Redone Server/bin/redone/game/npcs/impl/MilkCow$1.class new file mode 100644 index 00000000..6c91453e Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/impl/MilkCow$1.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/impl/MilkCow.class b/2006Redone Server/bin/redone/game/npcs/impl/MilkCow.class new file mode 100644 index 00000000..918a3495 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/impl/MilkCow.class differ diff --git a/2006Redone Server/bin/redone/game/npcs/impl/Pets.class b/2006Redone Server/bin/redone/game/npcs/impl/Pets.class new file mode 100644 index 00000000..3225de78 Binary files /dev/null and b/2006Redone Server/bin/redone/game/npcs/impl/Pets.class differ diff --git a/2006Redone Server/bin/redone/game/objects/Object.class b/2006Redone Server/bin/redone/game/objects/Object.class new file mode 100644 index 00000000..9d663fe1 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/Object.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectDefaults.class b/2006Redone Server/bin/redone/game/objects/ObjectDefaults.class new file mode 100644 index 00000000..13bdff75 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectDefaults.class differ diff --git a/2006Redone Server/bin/redone/game/objects/Objects.class b/2006Redone Server/bin/redone/game/objects/Objects.class new file mode 100644 index 00000000..6852b6d5 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/Objects.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions$1.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions$1.class new file mode 100644 index 00000000..eaaed9bf Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions$2.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions$2.class new file mode 100644 index 00000000..8855863f Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions$2.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions$3.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions$3.class new file mode 100644 index 00000000..a27186dd Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions$3.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions$4.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions$4.class new file mode 100644 index 00000000..b0adec5a Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions$4.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions$5.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions$5.class new file mode 100644 index 00000000..7b285c4b Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions$5.class differ diff --git a/2006Redone Server/bin/redone/game/objects/ObjectsActions.class b/2006Redone Server/bin/redone/game/objects/ObjectsActions.class new file mode 100644 index 00000000..5f7e16b6 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/ObjectsActions.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/AxeInLog.class b/2006Redone Server/bin/redone/game/objects/impl/AxeInLog.class new file mode 100644 index 00000000..04fd1ae9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/AxeInLog.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/BrimhavenVines.class b/2006Redone Server/bin/redone/game/objects/impl/BrimhavenVines.class new file mode 100644 index 00000000..867687ac Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/BrimhavenVines.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Climbing$1.class b/2006Redone Server/bin/redone/game/objects/impl/Climbing$1.class new file mode 100644 index 00000000..98c57e59 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Climbing$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Climbing.class b/2006Redone Server/bin/redone/game/objects/impl/Climbing.class new file mode 100644 index 00000000..cdcd6ffc Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Climbing.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/CrystalChest$1.class b/2006Redone Server/bin/redone/game/objects/impl/CrystalChest$1.class new file mode 100644 index 00000000..9eba4f65 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/CrystalChest$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/CrystalChest.class b/2006Redone Server/bin/redone/game/objects/impl/CrystalChest.class new file mode 100644 index 00000000..60ed04c9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/CrystalChest.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/FlourMill$1.class b/2006Redone Server/bin/redone/game/objects/impl/FlourMill$1.class new file mode 100644 index 00000000..4c62e476 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/FlourMill$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/FlourMill.class b/2006Redone Server/bin/redone/game/objects/impl/FlourMill.class new file mode 100644 index 00000000..85202162 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/FlourMill.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Levers$1.class b/2006Redone Server/bin/redone/game/objects/impl/Levers$1.class new file mode 100644 index 00000000..7904044f Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Levers$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Levers.class b/2006Redone Server/bin/redone/game/objects/impl/Levers.class new file mode 100644 index 00000000..8de39e5b Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Levers.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$1.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$1.class new file mode 100644 index 00000000..b68e4517 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2$1.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2$1.class new file mode 100644 index 00000000..cd01dd11 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2.class new file mode 100644 index 00000000..f488dec0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$2.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3$1.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3$1.class new file mode 100644 index 00000000..2f17eeba Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3.class new file mode 100644 index 00000000..86112625 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$3.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$4.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$4.class new file mode 100644 index 00000000..ee1b9805 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects$4.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/OtherObjects.class b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects.class new file mode 100644 index 00000000..cecf93d3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/OtherObjects.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Pickable$1.class b/2006Redone Server/bin/redone/game/objects/impl/Pickable$1.class new file mode 100644 index 00000000..14d6a952 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Pickable$1.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Pickable.class b/2006Redone Server/bin/redone/game/objects/impl/Pickable.class new file mode 100644 index 00000000..f13ee897 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Pickable.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Searching$SearchData.class b/2006Redone Server/bin/redone/game/objects/impl/Searching$SearchData.class new file mode 100644 index 00000000..25a43686 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Searching$SearchData.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Searching.class b/2006Redone Server/bin/redone/game/objects/impl/Searching.class new file mode 100644 index 00000000..0a40fb09 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Searching.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/SpecialObjects.class b/2006Redone Server/bin/redone/game/objects/impl/SpecialObjects.class new file mode 100644 index 00000000..78002bf0 Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/SpecialObjects.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/UseOther.class b/2006Redone Server/bin/redone/game/objects/impl/UseOther.class new file mode 100644 index 00000000..e46ffdeb Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/UseOther.class differ diff --git a/2006Redone Server/bin/redone/game/objects/impl/Webs.class b/2006Redone Server/bin/redone/game/objects/impl/Webs.class new file mode 100644 index 00000000..2b9f4f8d Binary files /dev/null and b/2006Redone Server/bin/redone/game/objects/impl/Webs.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client$1.class b/2006Redone Server/bin/redone/game/players/Client$1.class new file mode 100644 index 00000000..66268cfb Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client$1.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client$2.class b/2006Redone Server/bin/redone/game/players/Client$2.class new file mode 100644 index 00000000..9117c4a4 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client$2.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client$3.class b/2006Redone Server/bin/redone/game/players/Client$3.class new file mode 100644 index 00000000..d38266d3 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client$3.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client$4.class b/2006Redone Server/bin/redone/game/players/Client$4.class new file mode 100644 index 00000000..a2063093 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client$4.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client$TinterfaceText.class b/2006Redone Server/bin/redone/game/players/Client$TinterfaceText.class new file mode 100644 index 00000000..b1d07414 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client$TinterfaceText.class differ diff --git a/2006Redone Server/bin/redone/game/players/Client.class b/2006Redone Server/bin/redone/game/players/Client.class new file mode 100644 index 00000000..bc894920 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Client.class differ diff --git a/2006Redone Server/bin/redone/game/players/Location.class b/2006Redone Server/bin/redone/game/players/Location.class new file mode 100644 index 00000000..7c5156f2 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Location.class differ diff --git a/2006Redone Server/bin/redone/game/players/Player.class b/2006Redone Server/bin/redone/game/players/Player.class new file mode 100644 index 00000000..469e70dd Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Player.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerAction.class b/2006Redone Server/bin/redone/game/players/PlayerAction.class new file mode 100644 index 00000000..6c973e7c Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerAction.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerAssistant$1$1.class b/2006Redone Server/bin/redone/game/players/PlayerAssistant$1$1.class new file mode 100644 index 00000000..b5bcb562 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerAssistant$1$1.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerAssistant$1.class b/2006Redone Server/bin/redone/game/players/PlayerAssistant$1.class new file mode 100644 index 00000000..42ba3db8 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerAssistant$1.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerAssistant$2.class b/2006Redone Server/bin/redone/game/players/PlayerAssistant$2.class new file mode 100644 index 00000000..4d085d8b Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerAssistant$2.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerAssistant.class b/2006Redone Server/bin/redone/game/players/PlayerAssistant.class new file mode 100644 index 00000000..7fe3ccb9 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerHandler.class b/2006Redone Server/bin/redone/game/players/PlayerHandler.class new file mode 100644 index 00000000..0b45e24a Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerHandler.class differ diff --git a/2006Redone Server/bin/redone/game/players/PlayerSave.class b/2006Redone Server/bin/redone/game/players/PlayerSave.class new file mode 100644 index 00000000..e56ff7ae Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/PlayerSave.class differ diff --git a/2006Redone Server/bin/redone/game/players/Position.class b/2006Redone Server/bin/redone/game/players/Position.class new file mode 100644 index 00000000..db0e31ef Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Position.class differ diff --git a/2006Redone Server/bin/redone/game/players/Trading$1.class b/2006Redone Server/bin/redone/game/players/Trading$1.class new file mode 100644 index 00000000..bbbaa0b7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Trading$1.class differ diff --git a/2006Redone Server/bin/redone/game/players/Trading.class b/2006Redone Server/bin/redone/game/players/Trading.class new file mode 100644 index 00000000..3493c994 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/Trading.class differ diff --git a/2006Redone Server/bin/redone/game/players/antimacro/AntiBotting.class b/2006Redone Server/bin/redone/game/players/antimacro/AntiBotting.class new file mode 100644 index 00000000..4b6dc7b7 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/antimacro/AntiBotting.class differ diff --git a/2006Redone Server/bin/redone/game/players/antimacro/AntiSpam.class b/2006Redone Server/bin/redone/game/players/antimacro/AntiSpam.class new file mode 100644 index 00000000..8818e699 Binary files /dev/null and b/2006Redone Server/bin/redone/game/players/antimacro/AntiSpam.class differ diff --git a/2006Redone Server/bin/redone/game/shops/ShopAssistant.class b/2006Redone Server/bin/redone/game/shops/ShopAssistant.class new file mode 100644 index 00000000..db161f52 Binary files /dev/null and b/2006Redone Server/bin/redone/game/shops/ShopAssistant.class differ diff --git a/2006Redone Server/bin/redone/game/shops/ShopHandler.class b/2006Redone Server/bin/redone/game/shops/ShopHandler.class new file mode 100644 index 00000000..e51721ec Binary files /dev/null and b/2006Redone Server/bin/redone/game/shops/ShopHandler.class differ diff --git a/2006Redone Server/bin/redone/game/shops/Shops$Shop.class b/2006Redone Server/bin/redone/game/shops/Shops$Shop.class new file mode 100644 index 00000000..f4204bfe Binary files /dev/null and b/2006Redone Server/bin/redone/game/shops/Shops$Shop.class differ diff --git a/2006Redone Server/bin/redone/game/shops/Shops.class b/2006Redone Server/bin/redone/game/shops/Shops.class new file mode 100644 index 00000000..a560b271 Binary files /dev/null and b/2006Redone Server/bin/redone/game/shops/Shops.class differ diff --git a/2006Redone Server/bin/redone/net/ActionSender.class b/2006Redone Server/bin/redone/net/ActionSender.class new file mode 100644 index 00000000..4ea3bd4c Binary files /dev/null and b/2006Redone Server/bin/redone/net/ActionSender.class differ diff --git a/2006Redone Server/bin/redone/net/CodecFactory.class b/2006Redone Server/bin/redone/net/CodecFactory.class new file mode 100644 index 00000000..1b6bb1fb Binary files /dev/null and b/2006Redone Server/bin/redone/net/CodecFactory.class differ diff --git a/2006Redone Server/bin/redone/net/ConnectionHandler.class b/2006Redone Server/bin/redone/net/ConnectionHandler.class new file mode 100644 index 00000000..c24b9ad9 Binary files /dev/null and b/2006Redone Server/bin/redone/net/ConnectionHandler.class differ diff --git a/2006Redone Server/bin/redone/net/ConnectionThrottleFilter.class b/2006Redone Server/bin/redone/net/ConnectionThrottleFilter.class new file mode 100644 index 00000000..51e3b466 Binary files /dev/null and b/2006Redone Server/bin/redone/net/ConnectionThrottleFilter.class differ diff --git a/2006Redone Server/bin/redone/net/GameCodecFactory.class b/2006Redone Server/bin/redone/net/GameCodecFactory.class new file mode 100644 index 00000000..02426c0e Binary files /dev/null and b/2006Redone Server/bin/redone/net/GameCodecFactory.class differ diff --git a/2006Redone Server/bin/redone/net/HostList.class b/2006Redone Server/bin/redone/net/HostList.class new file mode 100644 index 00000000..f1d3fa0c Binary files /dev/null and b/2006Redone Server/bin/redone/net/HostList.class differ diff --git a/2006Redone Server/bin/redone/net/Packet$Size.class b/2006Redone Server/bin/redone/net/Packet$Size.class new file mode 100644 index 00000000..d94ccba6 Binary files /dev/null and b/2006Redone Server/bin/redone/net/Packet$Size.class differ diff --git a/2006Redone Server/bin/redone/net/Packet.class b/2006Redone Server/bin/redone/net/Packet.class new file mode 100644 index 00000000..55f4773e Binary files /dev/null and b/2006Redone Server/bin/redone/net/Packet.class differ diff --git a/2006Redone Server/bin/redone/net/PacketBuffer.class b/2006Redone Server/bin/redone/net/PacketBuffer.class new file mode 100644 index 00000000..1149900f Binary files /dev/null and b/2006Redone Server/bin/redone/net/PacketBuffer.class differ diff --git a/2006Redone Server/bin/redone/net/PacketBuilder.class b/2006Redone Server/bin/redone/net/PacketBuilder.class new file mode 100644 index 00000000..5f968847 Binary files /dev/null and b/2006Redone Server/bin/redone/net/PacketBuilder.class differ diff --git a/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder$1.class b/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder$1.class new file mode 100644 index 00000000..6d7f9c79 Binary files /dev/null and b/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder$1.class differ diff --git a/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder.class b/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder.class new file mode 100644 index 00000000..66ca2a16 Binary files /dev/null and b/2006Redone Server/bin/redone/net/RS2LoginProtocolDecoder.class differ diff --git a/2006Redone Server/bin/redone/net/RS2ProtocolDecoder.class b/2006Redone Server/bin/redone/net/RS2ProtocolDecoder.class new file mode 100644 index 00000000..ecf4f540 Binary files /dev/null and b/2006Redone Server/bin/redone/net/RS2ProtocolDecoder.class differ diff --git a/2006Redone Server/bin/redone/net/RS2ProtocolEncoder.class b/2006Redone Server/bin/redone/net/RS2ProtocolEncoder.class new file mode 100644 index 00000000..80a41b3e Binary files /dev/null and b/2006Redone Server/bin/redone/net/RS2ProtocolEncoder.class differ diff --git a/2006Redone Server/bin/redone/net/StaticPacketBuilder.class b/2006Redone Server/bin/redone/net/StaticPacketBuilder.class new file mode 100644 index 00000000..876c4409 Binary files /dev/null and b/2006Redone Server/bin/redone/net/StaticPacketBuilder.class differ diff --git a/2006Redone Server/bin/redone/net/packets/PacketHandler.class b/2006Redone Server/bin/redone/net/packets/PacketHandler.class new file mode 100644 index 00000000..69cb2288 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/PacketHandler.class differ diff --git a/2006Redone Server/bin/redone/net/packets/PacketType.class b/2006Redone Server/bin/redone/net/packets/PacketType.class new file mode 100644 index 00000000..8c68cc9a Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/PacketType.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/AttackPlayer.class b/2006Redone Server/bin/redone/net/packets/impl/AttackPlayer.class new file mode 100644 index 00000000..ec376641 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/AttackPlayer.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Bank10.class b/2006Redone Server/bin/redone/net/packets/impl/Bank10.class new file mode 100644 index 00000000..f85f7518 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Bank10.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Bank5.class b/2006Redone Server/bin/redone/net/packets/impl/Bank5.class new file mode 100644 index 00000000..52ce9129 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Bank5.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/BankAll.class b/2006Redone Server/bin/redone/net/packets/impl/BankAll.class new file mode 100644 index 00000000..b6f8cf31 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/BankAll.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/BankX1.class b/2006Redone Server/bin/redone/net/packets/impl/BankX1.class new file mode 100644 index 00000000..dca509c4 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/BankX1.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/BankX2.class b/2006Redone Server/bin/redone/net/packets/impl/BankX2.class new file mode 100644 index 00000000..954024ac Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/BankX2.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ChallengePlayer.class b/2006Redone Server/bin/redone/net/packets/impl/ChallengePlayer.class new file mode 100644 index 00000000..28a7873f Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ChallengePlayer.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ChangeAppearance.class b/2006Redone Server/bin/redone/net/packets/impl/ChangeAppearance.class new file mode 100644 index 00000000..658447df Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ChangeAppearance.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ChangeRegions.class b/2006Redone Server/bin/redone/net/packets/impl/ChangeRegions.class new file mode 100644 index 00000000..29e66f9c Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ChangeRegions.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Chat.class b/2006Redone Server/bin/redone/net/packets/impl/Chat.class new file mode 100644 index 00000000..2d09bd0b Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Chat.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClanChat.class b/2006Redone Server/bin/redone/net/packets/impl/ClanChat.class new file mode 100644 index 00000000..e83e66a9 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClanChat.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickItem.class b/2006Redone Server/bin/redone/net/packets/impl/ClickItem.class new file mode 100644 index 00000000..4c7382eb Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$1.class b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$1.class new file mode 100644 index 00000000..ed8f7a11 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$1.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$2.class b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$2.class new file mode 100644 index 00000000..a80ca53d Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$2.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$3.class b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$3.class new file mode 100644 index 00000000..f0903c34 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC$3.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickNPC.class b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC.class new file mode 100644 index 00000000..9fb37917 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickNPC.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$1.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$1.class new file mode 100644 index 00000000..367ac806 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$1.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$2.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$2.class new file mode 100644 index 00000000..e61c6868 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$2.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$3.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$3.class new file mode 100644 index 00000000..f3475615 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$3.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$4.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$4.class new file mode 100644 index 00000000..9134413b Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$4.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$5.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$5.class new file mode 100644 index 00000000..4a9f0f86 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$5.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$6.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$6.class new file mode 100644 index 00000000..da63f428 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$6.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$7.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$7.class new file mode 100644 index 00000000..74b8b429 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$7.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$8.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$8.class new file mode 100644 index 00000000..0b0e0747 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$8.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject$9.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$9.class new file mode 100644 index 00000000..c4c52530 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject$9.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickObject.class b/2006Redone Server/bin/redone/net/packets/impl/ClickObject.class new file mode 100644 index 00000000..b813f51a Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickObject.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickTab.class b/2006Redone Server/bin/redone/net/packets/impl/ClickTab.class new file mode 100644 index 00000000..fcd07077 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickTab.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickingButtons.class b/2006Redone Server/bin/redone/net/packets/impl/ClickingButtons.class new file mode 100644 index 00000000..65e83fb9 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickingButtons.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickingInGame.class b/2006Redone Server/bin/redone/net/packets/impl/ClickingInGame.class new file mode 100644 index 00000000..5ffe1519 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickingInGame.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ClickingStuff.class b/2006Redone Server/bin/redone/net/packets/impl/ClickingStuff.class new file mode 100644 index 00000000..8cae2a3e Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ClickingStuff.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Commands.class b/2006Redone Server/bin/redone/net/packets/impl/Commands.class new file mode 100644 index 00000000..3f39e39f Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Commands.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Countdown.class b/2006Redone Server/bin/redone/net/packets/impl/Countdown.class new file mode 100644 index 00000000..81b0006a Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Countdown.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/DropItem.class b/2006Redone Server/bin/redone/net/packets/impl/DropItem.class new file mode 100644 index 00000000..38f7b3a2 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/DropItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/FollowPlayer.class b/2006Redone Server/bin/redone/net/packets/impl/FollowPlayer.class new file mode 100644 index 00000000..fbc630c7 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/FollowPlayer.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/IdleLogout.class b/2006Redone Server/bin/redone/net/packets/impl/IdleLogout.class new file mode 100644 index 00000000..9610d0a3 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/IdleLogout.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemClick2.class b/2006Redone Server/bin/redone/net/packets/impl/ItemClick2.class new file mode 100644 index 00000000..09b453c4 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemClick2.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemClick2OnGroundItem.class b/2006Redone Server/bin/redone/net/packets/impl/ItemClick2OnGroundItem.class new file mode 100644 index 00000000..64cf7c6e Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemClick2OnGroundItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemClick3.class b/2006Redone Server/bin/redone/net/packets/impl/ItemClick3.class new file mode 100644 index 00000000..21938632 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemClick3.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemOnGroundItem.class b/2006Redone Server/bin/redone/net/packets/impl/ItemOnGroundItem.class new file mode 100644 index 00000000..32b28e52 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemOnGroundItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemOnItem.class b/2006Redone Server/bin/redone/net/packets/impl/ItemOnItem.class new file mode 100644 index 00000000..a2cfb54c Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemOnItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemOnNpc.class b/2006Redone Server/bin/redone/net/packets/impl/ItemOnNpc.class new file mode 100644 index 00000000..62c97736 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemOnNpc.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemOnObject.class b/2006Redone Server/bin/redone/net/packets/impl/ItemOnObject.class new file mode 100644 index 00000000..4cfedcf4 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemOnObject.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ItemOnPlayer.class b/2006Redone Server/bin/redone/net/packets/impl/ItemOnPlayer.class new file mode 100644 index 00000000..c3b01b89 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ItemOnPlayer.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems$1.class b/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems$1.class new file mode 100644 index 00000000..e73d4885 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems$1.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems.class b/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems.class new file mode 100644 index 00000000..f5691487 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/MagicOnFloorItems.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/MagicOnItems.class b/2006Redone Server/bin/redone/net/packets/impl/MagicOnItems.class new file mode 100644 index 00000000..8930fde0 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/MagicOnItems.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/MoveItems.class b/2006Redone Server/bin/redone/net/packets/impl/MoveItems.class new file mode 100644 index 00000000..cb7e8da9 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/MoveItems.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/PickupItem$1.class b/2006Redone Server/bin/redone/net/packets/impl/PickupItem$1.class new file mode 100644 index 00000000..19fccfe3 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/PickupItem$1.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/PickupItem.class b/2006Redone Server/bin/redone/net/packets/impl/PickupItem.class new file mode 100644 index 00000000..edb4398c Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/PickupItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/PrivateMessaging.class b/2006Redone Server/bin/redone/net/packets/impl/PrivateMessaging.class new file mode 100644 index 00000000..e3fb2fd8 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/PrivateMessaging.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/RemoveItem.class b/2006Redone Server/bin/redone/net/packets/impl/RemoveItem.class new file mode 100644 index 00000000..58de363d Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/RemoveItem.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Report.class b/2006Redone Server/bin/redone/net/packets/impl/Report.class new file mode 100644 index 00000000..2d8970e6 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Report.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/ReportHandler.class b/2006Redone Server/bin/redone/net/packets/impl/ReportHandler.class new file mode 100644 index 00000000..f9cc5fcd Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/ReportHandler.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/SilentPacket.class b/2006Redone Server/bin/redone/net/packets/impl/SilentPacket.class new file mode 100644 index 00000000..35c319f0 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/SilentPacket.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Trade.class b/2006Redone Server/bin/redone/net/packets/impl/Trade.class new file mode 100644 index 00000000..22258414 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Trade.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/Walking.class b/2006Redone Server/bin/redone/net/packets/impl/Walking.class new file mode 100644 index 00000000..4af21dfa Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/Walking.class differ diff --git a/2006Redone Server/bin/redone/net/packets/impl/WearItem.class b/2006Redone Server/bin/redone/net/packets/impl/WearItem.class new file mode 100644 index 00000000..af58b189 Binary files /dev/null and b/2006Redone Server/bin/redone/net/packets/impl/WearItem.class differ diff --git a/2006Redone Server/bin/redone/net/rsa/RSAKeyGen.class b/2006Redone Server/bin/redone/net/rsa/RSAKeyGen.class new file mode 100644 index 00000000..8a9e5048 Binary files /dev/null and b/2006Redone Server/bin/redone/net/rsa/RSAKeyGen.class differ diff --git a/2006Redone Server/bin/redone/net/rsa/rsapriv b/2006Redone Server/bin/redone/net/rsa/rsapriv new file mode 100644 index 00000000..f96d221a --- /dev/null +++ b/2006Redone Server/bin/redone/net/rsa/rsapriv @@ -0,0 +1,3 @@ +private static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + +private static final BigInteger RSA_EXPONENT = new BigInteger("33280025241734061313051117678670856264399753710527826596057587687835856000539511539311834363046145710983857746766009612538140077973762171163294453513440619295457626227183742315140865830778841533445402605660729039310637444146319289077374748018792349647460850308384280105990607337322160553135806205784213241305"); diff --git a/2006Redone Server/bin/redone/net/rsa/rsapub b/2006Redone Server/bin/redone/net/rsa/rsapub new file mode 100644 index 00000000..a90a5e5c --- /dev/null +++ b/2006Redone Server/bin/redone/net/rsa/rsapub @@ -0,0 +1,3 @@ +private static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + +private static final BigInteger RSA_EXPONENT = new BigInteger("65537"); diff --git a/2006Redone Server/bin/redone/util/GameLogger.class b/2006Redone Server/bin/redone/util/GameLogger.class new file mode 100644 index 00000000..63c497e5 Binary files /dev/null and b/2006Redone Server/bin/redone/util/GameLogger.class differ diff --git a/2006Redone Server/bin/redone/util/HostBlacklist.class b/2006Redone Server/bin/redone/util/HostBlacklist.class new file mode 100644 index 00000000..be2b3885 Binary files /dev/null and b/2006Redone Server/bin/redone/util/HostBlacklist.class differ diff --git a/2006Redone Server/bin/redone/util/ISAACRandomGen.class b/2006Redone Server/bin/redone/util/ISAACRandomGen.class new file mode 100644 index 00000000..6eaae9a9 Binary files /dev/null and b/2006Redone Server/bin/redone/util/ISAACRandomGen.class differ diff --git a/2006Redone Server/bin/redone/util/Misc.class b/2006Redone Server/bin/redone/util/Misc.class new file mode 100644 index 00000000..3e9728d0 Binary files /dev/null and b/2006Redone Server/bin/redone/util/Misc.class differ diff --git a/2006Redone Server/bin/redone/util/Stream.class b/2006Redone Server/bin/redone/util/Stream.class new file mode 100644 index 00000000..1554ef07 Binary files /dev/null and b/2006Redone Server/bin/redone/util/Stream.class differ diff --git a/2006Redone Server/bin/redone/world/Clan.class b/2006Redone Server/bin/redone/world/Clan.class new file mode 100644 index 00000000..56aa8a45 Binary files /dev/null and b/2006Redone Server/bin/redone/world/Clan.class differ diff --git a/2006Redone Server/bin/redone/world/ClanChatHandler.class b/2006Redone Server/bin/redone/world/ClanChatHandler.class new file mode 100644 index 00000000..e0e5acc4 Binary files /dev/null and b/2006Redone Server/bin/redone/world/ClanChatHandler.class differ diff --git a/2006Redone Server/bin/redone/world/GameObject.class b/2006Redone Server/bin/redone/world/GameObject.class new file mode 100644 index 00000000..bd61c759 Binary files /dev/null and b/2006Redone Server/bin/redone/world/GameObject.class differ diff --git a/2006Redone Server/bin/redone/world/GlobalDropsHandler$1.class b/2006Redone Server/bin/redone/world/GlobalDropsHandler$1.class new file mode 100644 index 00000000..ffcef5a6 Binary files /dev/null and b/2006Redone Server/bin/redone/world/GlobalDropsHandler$1.class differ diff --git a/2006Redone Server/bin/redone/world/GlobalDropsHandler$GlobalDrop.class b/2006Redone Server/bin/redone/world/GlobalDropsHandler$GlobalDrop.class new file mode 100644 index 00000000..daf4b83b Binary files /dev/null and b/2006Redone Server/bin/redone/world/GlobalDropsHandler$GlobalDrop.class differ diff --git a/2006Redone Server/bin/redone/world/GlobalDropsHandler.class b/2006Redone Server/bin/redone/world/GlobalDropsHandler.class new file mode 100644 index 00000000..2cdb9e26 Binary files /dev/null and b/2006Redone Server/bin/redone/world/GlobalDropsHandler.class differ diff --git a/2006Redone Server/bin/redone/world/ItemHandler.class b/2006Redone Server/bin/redone/world/ItemHandler.class new file mode 100644 index 00000000..e7e9ab00 Binary files /dev/null and b/2006Redone Server/bin/redone/world/ItemHandler.class differ diff --git a/2006Redone Server/bin/redone/world/ObjectHandler.class b/2006Redone Server/bin/redone/world/ObjectHandler.class new file mode 100644 index 00000000..e6b54d13 Binary files /dev/null and b/2006Redone Server/bin/redone/world/ObjectHandler.class differ diff --git a/2006Redone Server/bin/redone/world/ObjectManager$1.class b/2006Redone Server/bin/redone/world/ObjectManager$1.class new file mode 100644 index 00000000..6ba9e26c Binary files /dev/null and b/2006Redone Server/bin/redone/world/ObjectManager$1.class differ diff --git a/2006Redone Server/bin/redone/world/ObjectManager$2.class b/2006Redone Server/bin/redone/world/ObjectManager$2.class new file mode 100644 index 00000000..891515ce Binary files /dev/null and b/2006Redone Server/bin/redone/world/ObjectManager$2.class differ diff --git a/2006Redone Server/bin/redone/world/ObjectManager$3.class b/2006Redone Server/bin/redone/world/ObjectManager$3.class new file mode 100644 index 00000000..e8f40f84 Binary files /dev/null and b/2006Redone Server/bin/redone/world/ObjectManager$3.class differ diff --git a/2006Redone Server/bin/redone/world/ObjectManager.class b/2006Redone Server/bin/redone/world/ObjectManager.class new file mode 100644 index 00000000..6cbe17dc Binary files /dev/null and b/2006Redone Server/bin/redone/world/ObjectManager.class differ diff --git a/2006Redone Server/bin/redone/world/Tile.class b/2006Redone Server/bin/redone/world/Tile.class new file mode 100644 index 00000000..ac80c758 Binary files /dev/null and b/2006Redone Server/bin/redone/world/Tile.class differ diff --git a/2006Redone Server/bin/redone/world/TileControl.class b/2006Redone Server/bin/redone/world/TileControl.class new file mode 100644 index 00000000..4f51045c Binary files /dev/null and b/2006Redone Server/bin/redone/world/TileControl.class differ diff --git a/2006Redone Server/bin/redone/world/clip/ByteStream.class b/2006Redone Server/bin/redone/world/clip/ByteStream.class new file mode 100644 index 00000000..94be180a Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/ByteStream.class differ diff --git a/2006Redone Server/bin/redone/world/clip/ByteStreamExt.class b/2006Redone Server/bin/redone/world/clip/ByteStreamExt.class new file mode 100644 index 00000000..ff44008c Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/ByteStreamExt.class differ diff --git a/2006Redone Server/bin/redone/world/clip/MemoryArchive.class b/2006Redone Server/bin/redone/world/clip/MemoryArchive.class new file mode 100644 index 00000000..2d8d007d Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/MemoryArchive.class differ diff --git a/2006Redone Server/bin/redone/world/clip/ObjectDef.class b/2006Redone Server/bin/redone/world/clip/ObjectDef.class new file mode 100644 index 00000000..1e4307ab Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/ObjectDef.class differ diff --git a/2006Redone Server/bin/redone/world/clip/PathFinder.class b/2006Redone Server/bin/redone/world/clip/PathFinder.class new file mode 100644 index 00000000..96fcef58 Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/PathFinder.class differ diff --git a/2006Redone Server/bin/redone/world/clip/Region.class b/2006Redone Server/bin/redone/world/clip/Region.class new file mode 100644 index 00000000..4f77422c Binary files /dev/null and b/2006Redone Server/bin/redone/world/clip/Region.class differ diff --git a/2006Redone Server/build.bat b/2006Redone Server/build.bat new file mode 100644 index 00000000..d44dd00a --- /dev/null +++ b/2006Redone Server/build.bat @@ -0,0 +1,3 @@ +@echo off +java -jar libs/javac++.jar src libs bin +pause \ No newline at end of file diff --git a/2006Redone Server/data/Manager.jar b/2006Redone Server/data/Manager.jar new file mode 100644 index 00000000..a0c8e2f5 Binary files /dev/null and b/2006Redone Server/data/Manager.jar differ diff --git a/2006Redone Server/data/bans/IpsBanned.txt b/2006Redone Server/data/bans/IpsBanned.txt new file mode 100644 index 00000000..e69de29b diff --git a/2006Redone Server/data/bans/IpsMuted.txt b/2006Redone Server/data/bans/IpsMuted.txt new file mode 100644 index 00000000..d3f5a12f --- /dev/null +++ b/2006Redone Server/data/bans/IpsMuted.txt @@ -0,0 +1 @@ + diff --git a/2006Redone Server/data/bans/UsersBanned.txt b/2006Redone Server/data/bans/UsersBanned.txt new file mode 100644 index 00000000..e69de29b diff --git a/2006Redone Server/data/bans/UsersMuted.txt b/2006Redone Server/data/bans/UsersMuted.txt new file mode 100644 index 00000000..ab83a8eb --- /dev/null +++ b/2006Redone Server/data/bans/UsersMuted.txt @@ -0,0 +1,5 @@ + + + + + diff --git a/2006Redone Server/data/blacklist.txt b/2006Redone Server/data/blacklist.txt new file mode 100644 index 00000000..9e3de94f --- /dev/null +++ b/2006Redone Server/data/blacklist.txt @@ -0,0 +1,218 @@ +cyberghostvpn.com +freeproxyserver.ca +dualrack.com +hidemyass.com +server4you.net +ecatel.net +packetexchange.net +leaseweb +webnx.com +101.anchorfree.com +120.anchorfree.com +130.anchorfree.com +144.anchorfree.com +17.101.anchorfree.com +17.144.anchorfree.com +17.3.anchorfree.com +17.44.anchorfree.com +17.7.anchorfree.com +185.17.101.anchorfree.com +185.17.3.anchorfree.com +185.17.44.anchorfree.com +185.17.7.anchorfree.com +3.anchorfree.com +4.anchorfree.com +44.anchorfree.com +7.anchorfree.com +hotpostshield.net +hotspot-shield.com +hss2search.com +hss2search.net +101.anchorfree.com +120.anchorfree.com +130.anchorfree.com +144.anchorfree.com +17.101.anchorfree.com +17.120.anchorfree.com +17.130.anchorfree.com +17.144.anchorfree.com +17.3.anchorfree.com +17.4.anchorfree.com +17.44.anchorfree.com +17.7.anchorfree.com +185.17.101.anchorfree.com +185.17.144.anchorfree.com +185.17.3.anchorfree.com +185.17.44.anchorfree.com +185.17.7.anchorfree.com +199-255-209-70.anchorfree.com +199-255-209-72.anchorfree.com +199-255-209-73.anchorfree.com +199-255-209-74.anchorfree.com +199-255-209-75.anchorfree.com +199-255-209-76.anchorfree.com +199-255-209-77.anchorfree.com +199-255-209-78.anchorfree.com +199-255-209-79.anchorfree.com +208.185.17.101.anchorfree.com +208.185.17.3.anchorfree.com +208.185.17.44.anchorfree.com +208.185.17.7.anchorfree.com +2a.anchorfree.com +3.anchorfree.com +4.anchorfree.com +44.anchorfree.com +7.anchorfree.com +71-141-67-251.anchorfree.com +71-141-67-252.anchorfree.com +71-141-67-254.anchorfree.com +74-115-0-1.anchorfree.com +74-115-0-10.anchorfree.com +74-115-0-100.anchorfree.com +74-115-0-159.anchorfree.com +74-115-0-2.anchorfree.com +74-115-0-205.anchorfree.com +74-115-0-22.anchorfree.com +74-115-0-23.anchorfree.com +74-115-0-24.anchorfree.com +74-115-0-25.anchorfree.com +74-115-0-26.anchorfree.com +74-115-0-27.anchorfree.com +74-115-0-28.anchorfree.com +74-115-0-29.anchorfree.com +74-115-0-3.anchorfree.com +74-115-0-30.anchorfree.com +74-115-0-31.anchorfree.com +74-115-0-32.anchorfree.com +74-115-0-33.anchorfree.com +74-115-0-34.anchorfree.com +74-115-0-35.anchorfree.com +74-115-0-36.anchorfree.com +74-115-0-37.anchorfree.com +74-115-0-38.anchorfree.com +74-115-0-39.anchorfree.com +74-115-0-4.anchorfree.com +74-115-0-40.anchorfree.com +74-115-1-1.anchorfree.com +74-115-1-10.anchorfree.com +74-115-1-100.anchorfree.com +74-115-1-11.anchorfree.com +74-115-1-12.anchorfree.com +74-115-1-13.anchorfree.com +74-115-1-14.anchorfree.com +74-115-1-15.anchorfree.com +74-115-1-16.anchorfree.com +74-115-1-17.anchorfree.com +74-115-1-18.anchorfree.com +74-115-1-19.anchorfree.com +74-115-1-2.anchorfree.com +74-115-1-20.anchorfree.com +74-115-1-21.anchorfree.com +74-115-1-22.anchorfree.com +74-115-1-23.anchorfree.com +74-115-1-24.anchorfree.com +74-115-1-25.anchorfree.com +74-115-1-26.anchorfree.com +74-115-1-27.anchorfree.com +74-115-1-28.anchorfree.com +74-115-1-29.anchorfree.com +74-115-1-3.anchorfree.com +74-115-1-30.anchorfree.com +74-115-1-31.anchorfree.com +74-115-1-32.anchorfree.com +74-115-1-33.anchorfree.com +74-115-1-34.anchorfree.com +74-115-1-35.anchorfree.com +74-115-1-36.anchorfree.com +74-115-1-37.anchorfree.com +74-115-1-38.anchorfree.com +74-115-1-39.anchorfree.com +74-115-1-4.anchorfree.com +74-115-1-40.anchorfree.com +74-115-1-41.anchorfree.com +74-115-1-42.anchorfree.com +74-115-1-43.anchorfree.com +74-115-1-44.anchorfree.com +74-115-1-45.anchorfree.com +74-115-1-46.anchorfree.com +74-115-1-47.anchorfree.com +74-115-1-48.anchorfree.com +74-115-1-49.anchorfree.com +74-115-1-5.anchorfree.com +74-115-1-50.anchorfree.com +74-115-1-51.anchorfree.com +74-115-1-52.anchorfree.com +74-115-1-53.anchorfree.com +74-115-1-54.anchorfree.com +74-115-1-6.anchorfree.com +74-115-1-7.anchorfree.com +74-115-1-8.anchorfree.com +74-115-1-9.anchorfree.com +74-115-2-10.anchorfree.com +74-115-2-111.anchorfree.com +74-115-2-112.anchorfree.com +74-115-2-12.anchorfree.com +74-115-2-120.anchorfree.com +74-115-2-13.anchorfree.com +74-115-2-20.anchorfree.com +74-115-2-31.anchorfree.com +74-115-2-32.anchorfree.com +74-115-3-1.anchorfree.com +74-115-3-61.anchorfree.com +74-115-3-62.anchorfree.com +74-115-3-63.anchorfree.com +74-115-3-64.anchorfree.com +74-115-3-65.anchorfree.com +74-115-3-66.anchorfree.com +74-115-3-67.anchorfree.com +74-115-3-68.anchorfree.com +74-115-3-69.anchorfree.com +74-115-4-1.anchorfree.com +74-115-4-10.anchorfree.com +74-115-4-111.anchorfree.com +74-115-4-112.anchorfree.com +74-115-4-219.anchorfree.com +74-115-4-7.anchorfree.com +74-115-4-74.anchorfree.com +74-115-4-75.anchorfree.com +74-115-5-26.anchorfree.com +74-115-5-41.anchorfree.com +74-115-5-42.anchorfree.com +74-115-5-43.anchorfree.com +74-115-5-46.anchorfree.com +74-115-5-47.anchorfree.com +74-115-5-48.anchorfree.com +74-115-6-5.anchorfree.com +74-115-6-55.anchorfree.com +74-115-6-56.anchorfree.com +74-115-6-57.anchorfree.com +74-115-6-58.anchorfree.com +74-115-6-59.anchorfree.com +74-115-6-60.anchorfree.com +74-115-7-10.anchorfree.com +74-115-7-11.anchorfree.com +74-115-7-12.anchorfree.com +74-115-7-13.anchorfree.com +74-115-7-14.anchorfree.com +74-115-7-40.anchorfree.com +74-115-7-50.anchorfree.com +afmail.anchorfree.com +afmail1.anchorfree.com +anchorfree.com +expatshield.com +forbes.anchorfree.com +hotpostshield.com +hotpostshield.net +hotspot-shield.net +hotspotshield.anchorfree.com +hotspotshield.com +hss.anchorfree.com +hss.expatshield.com +hss.hotpostshield.net +hss2search.com +hss2search.net +ip74-115-3-65.anchorfree.com +monitor.anchorfree.com +slickchimp.com +v1p1n.anchorfree.com +vpn.expatshield.com \ No newline at end of file diff --git a/2006Redone Server/data/cfg/doors.cfg b/2006Redone Server/data/cfg/doors.cfg new file mode 100644 index 00000000..5b5988f4 --- /dev/null +++ b/2006Redone Server/data/cfg/doors.cfg @@ -0,0 +1,67 @@ +//the door starts as closed +// South 0 face = doorX -1 face = -3 +// East -1 face = doorY -1 face = 0 +// North -2 face = doorX +1 face = -1 +// West -3 face = doorY +1 face = -2 + +// doorX doorY Height Face State //0 closed, 1 open +door = 3312 3235 0 0 0 //duel arena gate +door = 3312 3234 0 0 0 //duel arena gate +door = 3253 3266 0 0 0 //cow gate + +door = 3268 3227 0 0 0 //al kharid gates +door = 3268 3228 0 0 0 + +door = 3562 9694 0 -2 0 //barrows door +door = 3563 9694 0 -1 1 + +//door = 2949 3379 0 0 0 //fally hair shop +//door = 2948 3379 0 -3 1 + +door = 3234 3426 0 -2 0 +door = 3235 3426 0 -1 1 + +door = 3238 3210 0 0 0 +door = 3237 3210 0 -3 1 + +door = 3234 3207 0 0 0 +door = 3233 3207 0 -3 1 + +door = 3079 3497 0 -2 0 +door = 3079 3497 0 -1 1 + +//the door starts as opened +// South 0 face = doorY +1 face = -1 +// East -1 face = doorX -1 face = -2 +// North -2 face = doorY -1 face = -3 +// West -3 face = doorX +1 face = 0 + +// doorX doorY Height Face State //0 closed, 1 open + +door = 3231 3433 0 -2 1 +door = 3231 3432 0 -3 0 + +door = 2950 3385 0 -2 1 +door = 2950 3384 0 -3 0 + +door = 3249 3435 0 -1 1 +door = 3248 3435 0 -2 0 + +door = 3253 3431 0 -2 1 +door = 3253 3430 0 -3 0 + +door = 3233 3427 0 0 1 +door = 3233 3428 0 -1 0 + +door = 3217 3219 0 0 0 +door = 3216 3219 0 -3 1 + +door = 3101 3510 0 0 0 +door = 3101 3509 0 0 0 + +door = 2816 3438 0 -3 0 +//door = 3101 3509 0 1 0 +//door = 3101 3510 0 -1 0 + +[ENDOFDOORLIST] + diff --git a/2006Redone Server/data/cfg/global-objects.cfg b/2006Redone Server/data/cfg/global-objects.cfg new file mode 100644 index 00000000..70c17733 --- /dev/null +++ b/2006Redone Server/data/cfg/global-objects.cfg @@ -0,0 +1,3 @@ +// objectId X Y H Face objectType +//object = 9981 3254 3429 0 -1 10 +[ENDOFOBJECTLIST] \ No newline at end of file diff --git a/2006Redone Server/data/cfg/globaldrops.txt b/2006Redone Server/data/cfg/globaldrops.txt new file mode 100644 index 00000000..6b7fbb30 --- /dev/null +++ b/2006Redone Server/data/cfg/globaldrops.txt @@ -0,0 +1,319 @@ +#id - amount - x - y - h - timer +952:1:3125:3355 +590:1:2431:3072 +590:1:2368:3135 +1925:1:2371:3128 +1925:1:2371:3127 +1925:1:2428:3079 +1925:1:2428:3080 +558:1:3206:3208 +946:1:3205:3212 +1935:1:3211:3212 +88:1:2654:9767 +1931:1:3209:3214 +1923:1:3208:3214 +882:1:3205:3228 +2313:1:3033:9849 +946:1:3224:3202 +1203:1:3248:3245 +1944:1:3233:3297 +1944:1:3233:3295 +1944:1:3226:3301 +1944:1:3227:3299 +1944:1:3229:3295 +1944:1:3231:3294 +556:1:3150:3247 +1265:1:2963:3216 +882:1:2957:3208 +1511:1:2958:3205 +1511:1:2959:3205 +1925:1:3026:3289 +1944:1:3017:3295 +1944:1:3016:3295 +1925:1:3020:3291 +1963:1:3009:3207 +1005:1:3009:3204 +526:1:3093:9884 +526:1:3098:9886 +995:1:3091:9899 +995:4:3089:9898 +995:1:3090:9898 +526:1:3097:9899 +526:1:3094:9906 +882:3:3130:9903 +882:1:3135:9916 +223:1:3129:9954 +223:1:3126:9958 +223:1:3118:9948 +223:1:3119:9949 +223:1:3117:9951 +526:1:3127:9957 +526:1:3111:9959 +526:1:3111:9956 +526:1:3108:9950 +526:1:3104:9949 +526:1:3103:9953 +1931:1:3232:3398 +1129:1:3244:3398 +1511:1:3243:3397 +1511:1:3243:3395 +995:3:3194:9834 +995:3:3195:9820 +229:1:3195:3847 +995:4:3191:9821 +995:3:3190:9819 +995:3:3189:9819 +995:4:3188:9819 +995:3:3188:9820 +1009:1:3191:9820 +1654:1:3192:9821 +1641:1:3196:9822 +444:1:3195:9821 +2357:1:3192:9822 +995:1:3228:3503 +995:1:3232:3501 +1171:1:3204:3515 +557:1:3202:3518 +1734:1:3286:3491 +1511:1:3304:3501 +1511:1:3302:3507 +1511:1:3301:3507 +1511:1:3302:3510 +1511:1:3299:3510 +1511:1:3310:3504 +1511:1:3311:3503 +995:1:3274:9870 +559:1:3227:9910 +558:1:3225:9910 +946:1:3218:9887 +557:7:3182:9887 +223:1:3179:9881 +223:1:3177:9880 +995:5:3169:9880 +995:7:3172:9882 +1349:1:3162:9889 +995:8:3166:9897 +995:1:3173:9896 +952:1:3217:3412 +946:1:3217:3418 +2313:1:3222:3494 +1935:1:3272:3414 +1573:1:3150:3400 +1573:1:3149:3400 +1573:1:3158:3400 +1573:1:3157:3401 +1265:1:3081:3429 +1931:1:3075:3431 +1917:1:3077:3439 +1917:1:3080:3441 +1917:1:3077:3443 +2142:1:3077:3441 +2142:1:3080:3443 +557:5:3033:3637 +555:5:3031:3637 +555:5:3029:3637 +554:5:3027:3637 +562:5:3023:3639 +558:5:3021:3639 +559:5:3021:3637 +960:1:2967:3682 +966:1:2976:3686 +1925:1:2978:3692 +1539:1:2978:3688 +526:1:2970:3689 +526:1:2962:3697 +960:1:2957:3699 +966:1:2957:3697 +966:1:2960:9697 +966:1:2955:3700 +960:1:2956:3706 +2347:1:2957:3708 +960:1:2952:3704 +960:1:2961:3703 +966:1:2963:3706 +960:1:2964:3702 +1925:1:2970:3704 +960:1:2973:3707 +960:1:3149:3668 +966:1:3150:3672 +960:1:3154:3669 +960:1:3153:3659 +966:1:3163:3660 +1207:1:3159:3670 +1203:1:3157:3683 +960:1:3166:3682 +966:1:3174:3688 +1137:1:3179:3682 +966:1:3183:3670 +960:1:3183:3667 +526:1:3179:3713 +526:1:3171:3723 +444:1:3165:3739 +526:1:3170:3736 +952:1:3182:3731 +1069:1:3184:3735 +526:1:3183:3737 +526:1:3183:3747 +526:1:3171:3745 +526:1:3161:3747 +526:1:3216:3759 +526:1:3210:3735 +526:1:3213:3738 +526:1:3220:3741 +526:1:3258:3736 +526:1:3265:3728 +526:1:3276:3726 +526:1:3279:3727 +526:1:3283:3725 +526:1:3280:3723 +526:1:3245:3739 +532:1:3216:3739 +532:1:3222:3738 +532:1:3254:3740 +532:1:3271:3727 +526:1:3237:3611 +526:1:3241:3607 +526:1:3238:3606 +526:1:3243:3612 +526:1:3239:3616 +526:1:3232:3614 +526:1:3236:3620 +526:1:3200:3810 +995:5:3210:3823 +528:1:3211:3822 +528:1:3213:3819 +239:1:3215:3808 +562:1:3140:3821 +562:1:3143:3824 +562:1:3135:3802 +562:1:3136:3794 +1153:1:3067:3834 +995:4:3077:3842 +995:1:3108:3859 +1385:1:3100:3860 +559:1:3091:3865 +1119:1:3083:3860 +1654:1:3068:3864 +555:5:2960:3898 +564:3:2947:3900 +526:1:2995:3923 +526:1:2992:3920 +526:1:2994:3918 +526:1:3003:3920 +526:1:3003:3924 +2333:1:3042:3952 +526:1:3231:3948 +526:1:3236:3937 +526:1:3249:3952 +53:3:3241:3940 +53:2:3235:3950 +53:3:3234:3950 +444:1:3276:3931 +444:1:3279:3936 +444:1:3285:3939 +528:1:3287:3887 +528:1:3288:3891 +528:1:3290:3890 +528:1:3291:3888 +528:1:3292:3887 +528:1:3298:3890 +995:1:3103:3534 +995:1:3105:3547 +995:2:3099:3558 +995:2:3098:3566 +995:3:3098:3571 +995:4:3095:3576 +882:2:3098:3591 +882:2:3101:3593 +882:2:3097:3598 +882:2:3103:3597 +882:2:3104:3608 +882:2:3100:3607 +882:2:3112:3609 +952:1:2981:3370 +1351:1:2970:3376 +2140:1:2971:3382 +2347:1:2978:3368 +995:1:3002:9801 +995:1:3001:9798 +2313:1:2993:9847 +1103:1:2985:9817 +2347:1:2934:3286 +1755:1:2935:3286 +1595:1:2928:3289 +1935:1:2936:3292 +231:1:2906:3298 +231:1:2907:3297 +231:1:2916:3274 +231:1:2914:3274 +231:1:2913:3276 +1917:1:3049:3257 +1985:1:3083:3260 +1982:1:3085:3261 +1511:1:3089:3266 +1511:1:3094:3266 +952:1:3120:3359 +1925:1:3124:3360 +1511:1:3105:3159 +1511:1:3106:3160 +1511:1:3106:3159 +1061:1:3111:3159 +1061:1:3112:3155 +1939:1:3194:3167 +1939:1:3185:3161 +1939:1:3181:3165 +1939:1:3168:3168 +1939:1:3164:3170 +1939:1:3165:3178 +1939:1:3171:3171 +1939:1:3173:3172 +1939:1:3168:3189 +1939:1:3177:3190 +1939:1:3179:3192 +1217:1:3179:3822 +1939:1:3185:3181 +229:1:3185:3836 +1061:1:3210:9615 +946:1:3215:9625 +1925:1:3216:9625 +1965:1:3217:9622 +1422:1:3320:3137 +1925:1:3307:3195 +1061:1:3302:3192 +983:1:3132:9862 +2150:1:2429:3511 +2150:1:2429:3508 +2150:1:2427:3507 +2150:1:2424:3506 +2150:1:2421:3507 +2150:1:2419:3509 +2150:1:2417:3512 +2150:1:2422:3518 +2150:1:2416:3415 +2150:1:2414:3518 +2150:1:2410:3519 +2150:1:2408:3515 +2150:1:2411:3512 +2150:1:2414:3511 +2150:1:2426:3514 +1985:1:3039:3707 +1982:1:3039:3706 +1895:1:2691:3218 +1895:1:2691:3203 +245:1:2930:3515 +243:1:2905:9799 +243:1:2904:9803 +243:1:2908:9807 +243:1:2911:9811 +243:1:2912:9804 +243:1:2910:9800 +243:1:2905:9808 +3138:1:3461:9485 +3138:1:3460:9482 +3138:1:3460:9480 +1059:1:3093:3487 +954:1:2907:3146 +1963:1:2903:3146 +1935:1:2903:3150 +753:1:3275:3374 +753:1:3277:3372 \ No newline at end of file diff --git a/2006Redone Server/data/cfg/item.cfg b/2006Redone Server/data/cfg/item.cfg new file mode 100644 index 00000000..767a3208 --- /dev/null +++ b/2006Redone Server/data/cfg/item.cfg @@ -0,0 +1,9408 @@ +item = 0 Dwarf_remains The_body_of_a_Dwarf_savaged_by_Goblins. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1 Tool_kit These_could_be_handy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2 Cannonball Ammo_for_the_Dwarf_Cannon. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3 Nulodion's_notes Construction_notes_for_Dwarf_cannon_ammo. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4 Ammo_mould Used_to_make_cannon_ammunition. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5 Instruction_manual An_old_note_book. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6 Cannon_base The_cannon_is_built_on_this. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7 Cannon_base Swap_this_note_at_any_bank_for_the_equivalent_item. 187500 187500100 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8 Cannon_stand The_mounting_for_the_multicannon. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9 Cannon_stand Swap_this_note_at_any_bank_for_the_equivalent_item. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 10 Cannon_barrels The_barrels_of_the_multicannon. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 11 Cannon_barrels Swap_this_note_at_any_bank_for_the_equivalent_item. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 12 Cannon_furnace This_powers_the_multicannon. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 13 Cannon_furnace Swap_this_note_at_any_bank_for_the_equivalent_item. 187500 187500 187500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 14 Railing A_metal_railing_replacement. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 15 Holy_table_napkin A_cloth_given_to_me_by_Sir_Galahad. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 16 Magic_whistle A_small_tin_whistle. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 17 Grail_bell I_wonder_what_happens_when_I_ring_it? 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 18 Magic_gold_feather It_will_point_the_way_for_me. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 19 Holy_grail A_holy_and_powerful_artefact. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 20 Cog A_cog_from_some_machinery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 21 Cog A_cog_from_some_machinery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 22 Cog A_cog_from_some_machinery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 23 Cog A_cog_from_some_machinery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 24 Rat_poison Doesn't_look_very_tasty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 25 Red_vine_worm Wormy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 26 Fishing_trophy Hemenster_fishing_contest_trophy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 27 Fishing_pass Pass_to_the_Hemenster_fishing_contest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 28 Insect_repellent Drives_away_all_known_6_legged_creatures. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 29 Insect_repellent Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 30 Bucket_of_wax It's_a_bucket_of_wax. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 31 Bucket_of_wax Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 32 Lit_black_candle A_lit_spooky_candle. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 33 Lit_candle A_lit_candle. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 34 Lit_candle A_lit_candle. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 35 Excalibur This_used_to_belong_to_King_Arthur. 200 200 200 20 29 -2 0 0 0 3 2 1 0 25 0 +item = 36 Candle A_candle. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 37 Candle Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 38 Black_candle A_spooky_candle. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 39 Bronze_arrowtips I_can_make_an_arrow_with_these. 10 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 40 Iron_arrowtips I_can_make_an_arrow_with_these. 26 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 41 Steel_arrowtips I_can_make_an_arrow_with_these. 36 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 42 Mithril_arrowtips I_can_make_an_arrow_with_these. 68 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 43 Adamant_arrowtips I_can_make_an_arrow_with_these. 160 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 44 Rune_arrowtips I_can_make_an_arrow_with_these. 460 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 45 Opal_bolttips I_can_make_bolts_with_these. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 46 Pearl_bolttips I_can_make_bolts_with_these. 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 +item = 47 Barb_bolttips I_can_make_bolts_with_these. 95 95 95 0 0 0 0 0 0 0 0 0 0 0 0 +item = 48 Longbow_(u) I_need_to_find_a_string_for_this. 32 48 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 49 Longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 32 48 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 50 Shortbow_(u) I_need_to_find_a_string_for_this. 9 14 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 51 Shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 9 14 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 52 Arrow_shaft A_wooden_arrow_shaft. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 53 Headless_arrow A_wooden_arrow_shaft_with_flights_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 54 Oak_shortbow_(u) An_unstrung_oak_shortbow,_I_need_a_bowstring_for_this. 20 30 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 55 Oak_shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 20 30 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 56 Oak_longbow_(u) An_unstrung_oak_longbow,_I_need_a_bowstring_for_this. 64 96 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 57 Oak_longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 64 96 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 58 Willow_longbow_(u) An_unstrung_willow_longbow,_I_need_a_bowstring_for_this. 64 92 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 59 Willow_longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 64 92 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 60 Willow_shortbow_(u) An_unstrung_willow_shortbow,_I_need_a_bowstring_for_this. 40 60 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 61 Willow_shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 40 60 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 62 Maple_longbow_(u) An_unstrung_maple_longbow,_I_need_a_bowstring_for_this. 128 192 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 63 Maple_longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 128 192 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 64 Maple_shortbow_(u) An_unstrung_maple_shortbow,_I_need_a_bowstring_for_this. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 65 Maple_shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 66 Yew_longbow_(u) An_unstrung_yew_longbow,_I_need_a_bowstring_for_this. 256 384 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 67 Yew_longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 256 384 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 68 Yew_shortbow_(u) An_unstrung_yew_shortbow,_I_need_a_bowstring_for_this. 160 240 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 69 Yew_shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 160 240 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 70 Magic_longbow_(u) An_unstrung_magic_longbow,_I_need_a_bowstring_for_this. 507 768 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 71 Magic_longbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 507 768 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 72 Magic_shortbow_(u) An_unstrung_magic_shortbow,_I_need_a_bowstring_for_this. 320 480 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 73 Magic_shortbow_(u) Swap_this_note_at_any_bank_for_the_equivalent_item. 320 480 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 74 Khazard_helmet A_helmet,_as_worn_by_the_minions_of_General_Khazard. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 75 Khazard_armour Armour,_as_worn_by_the_minions_of_General_Khazard. 12 12 12 0 0 0 0 0 4 5 3 0 0 3 0 +item = 76 Khazard_cell_keys These_keys_open_the_cells_at_the_Khazard_fight_arena. 1 1 1 0 0 0 0 0 11 10 0 0 5 0 0 +item = 77 Khali_brew A_bottle_of_Khazard's_worst_brew. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 78 Ice_arrows Can_only_be_fired_with_yew_or_magic_bows. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 83 Lever A_lever_to_open_something_perhaps? 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 84 Staff_of_armadyl The_power_in_this_staff_causes_it_to_vibrate_gently. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 85 Shiny_key It_catches_the_light! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 86 Pendant_of_lucien The_amulet_that_Lucien_gave_you. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 87 Armadyl_pendant Yet_another_amulet. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 88 Boots_of_lightness Magic_boots_that_make_you_lighter_than_normal. 6 6 6 0 0 0 0 0 1 1 1 0 0 0 0 +item = 89 Boots_of_lightness Magic_boots_that_make_you_lighter_than_normal. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 90 Child's_blanket It's_very_soft! 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 91 Guam_potion(unf) I_need_another_ingredient_to_finish_this_Guam_potion. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 92 Guam_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 93 Marrentill_potion(unf) I_need_another_ingredient_to_finish_this_Marrentill_potion. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 94 Marrentill_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 95 Tarromin_potion(unf) I_need_another_ingredient_to_finish_this_Tarromin_potion. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 96 Tarromin_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 97 Harralander_potion(unf) I_need_another_ingredient_to_finish_this_Harralander_potion. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 98 Harralander_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 99 Ranarr_potion(unf) I_need_another_ingredient_to_finish_this_Ranarr_potion. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 100 Ranarr_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 101 Irit_potion(unf) I_need_another_ingredient_to_finish_this_Irit_potion. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 102 Irit_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 103 Avantoe_potion(unf) I_need_another_ingredient_to_finish_this_Avantoe_potion. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 104 Avantoe_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 105 Kwuarm_potion(unf) I_need_another_ingredient_to_finish_this_Kwuarm_potion. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 106 Kwuarm_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 107 Cadantine_potion(unf) I_need_another_ingredient_to_finish_this_Cadantine_potion. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 108 Cadantine_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 109 Dwarf_weed_potion(unf) I_need_another_ingredient_to_finish_this_Dwarf_Weed_potion. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 110 Dwarf_weed_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 111 Torstol_potion(unf) I_need_another_ingredient_to_finish_this_Torstol_potion. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 112 Torstol_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 113 Strength_potion(4) A_strength_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 114 Strength_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 115 Strength_potion(3) A_strength_potion. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 116 Strength_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 117 Strength_potion(2) An_strength_potion. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 118 Strength_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 119 Strength_potion(1) An_strength_potion. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 120 Strength_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 121 Attack_potion(3) An_attack_potion. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 122 Attack_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 123 Attack_potion(2) An_attack_potion. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 124 Attack_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 125 Attack_potion(1) An_attack_potion. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 126 Attack_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 127 Restore_potion(3) A_stat_restoration_potion. 88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 +item = 128 Restore_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 +item = 129 Restore_potion(2) A_stat_restoration_potion. 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 +item = 130 Restore_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 +item = 131 Restore_potion(1) A_stat_restoration_potion. 44 44 44 0 0 0 0 0 0 0 0 0 0 0 0 +item = 132 Restore_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 44 44 44 0 0 0 0 0 0 0 0 0 0 0 0 +item = 133 Defence_potion(3) A_defence_potion. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 134 Defence_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 135 Defence_potion(2) A_defence_potion. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 136 Defence_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 137 Defence_potion(1) A_defence_potion. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 138 Defence_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 139 Prayer_potion(3) A_restore_prayer_potion. 152 152 152 0 0 0 0 0 0 0 0 0 0 0 0 +item = 140 Prayer_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 152 152 152 0 0 0 0 0 0 0 0 0 0 0 0 +item = 141 Prayer_potion(2) A_restore_prayer_potion. 114 114 114 0 0 0 0 0 0 0 0 0 0 0 0 +item = 142 Prayer_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 114 114 114 0 0 0 0 0 0 0 0 0 0 0 0 +item = 143 Prayer_potion(1) A_restore_prayer_potion. 76 76 76 0 0 0 0 0 0 0 0 0 0 0 0 +item = 144 Prayer_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 76 76 76 0 0 0 0 0 0 0 0 0 0 0 0 +item = 145 Super_attack(3) A_super_attack_potion. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 146 Super_attack(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 147 Super_attack(2) A_super_attack_potion. 135 135 135 0 0 0 0 0 0 0 0 0 0 0 0 +item = 148 Super_attack(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 135 135 135 0 0 0 0 0 0 0 0 0 0 0 0 +item = 149 Super_attack(1) A_super_attack_potion. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 150 Super_attack(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 151 Fishing_potion(3) A_fishing_potion. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 152 Fishing_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 153 Fishing_potion(2) A_fishing_potion. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 154 Fishing_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 155 Fishing_potion(1) A_fishing_potion. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 156 Fishing_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 157 Super_strength(3) A_super_strength_potion. 220 220 220 0 0 0 0 0 0 0 0 0 0 0 0 +item = 158 Super_strength(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 220 220 220 0 0 0 0 0 0 0 0 0 0 0 0 +item = 159 Super_strength(2) A_super_strength_potion. 165 165 165 0 0 0 0 0 0 0 0 0 0 0 0 +item = 160 Super_strength(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 165 165 165 0 0 0 0 0 0 0 0 0 0 0 0 +item = 161 Super_strength(1) A_super_strength_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 162 Super_strength(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 163 Super_defence(3) A_super_defence_potion. 264 264 264 0 0 0 0 0 0 0 0 0 0 0 0 +item = 164 Super_defence(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 264 264 264 0 0 0 0 0 0 0 0 0 0 0 0 +item = 165 Super_defence(2) A_super_defence_potion. 198 198 198 0 0 0 0 0 0 0 0 0 0 0 0 +item = 166 Super_defence(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 198 198 198 0 0 0 0 0 0 0 0 0 0 0 0 +item = 167 Super_defence(1) A_super_defence_potion. 132 132 132 0 0 0 0 0 0 0 0 0 0 0 0 +item = 168 Super_defence(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 132 132 132 0 0 0 0 0 0 0 0 0 0 0 0 +item = 169 Ranging_potion(3) A_ranging_potion. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 170 Ranging_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 171 Ranging_potion(2) A_ranging_potion. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 172 Ranging_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 173 Ranging_potion(1) A_ranging_potion. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 174 Ranging_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 175 Antipoison(3) An_antipoison_potion. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 176 Antipoison(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 177 Antipoison(2) An_antipoison_potion. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 178 Antipoison(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 179 Antipoison(1) An_antipoison_potion. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 180 Antipoison(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 181 Superantipoison(3) A_super_antipoison_potion. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 182 Superantipoison(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 288 288 288 0 0 0 0 0 0 0 0 0 0 0 0 +item = 183 Superantipoison(2) A_super_antipoison_potion. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 184 Superantipoison(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 216 216 216 0 0 0 0 0 0 0 0 0 0 0 0 +item = 185 Superantipoison(1) A_super_antipoison_potion. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 186 Superantipoison(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 187 Weapon_poison For_use_on_daggers_and_projectiles. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 188 Weapon_poison Swap_this_note_at_any_bank_for_the_equivalent_item. 144 144 144 0 0 0 0 0 0 0 0 0 0 0 0 +item = 189 Zamorak_brew(3) A_Zamorak_Brew. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 190 Zamorak_brew(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 191 Zamorak_brew(2) A_Zamorak_Brew. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 192 Zamorak_brew(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 193 Zamorak_brew(1) A_Zamorak_Brew. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 194 Zamorak_brew(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 195 Potion This_is_meant_to_be_good_for_spots. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 196 Potion Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 197 Poison_chalice A_cup_of_a_strange_brew... 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 198 Poison_chalice Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 199 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 200 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 201 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 202 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 203 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 204 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 205 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 206 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 207 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 208 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 209 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 210 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 211 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 212 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 213 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 214 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 215 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 216 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 217 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 218 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 219 Herb I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 220 Herb Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 221 Eye_of_newt It_seems_to_be_looking_at_me. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 222 Eye_of_newt Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 223 Red_spiders'_eggs Ewww! 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 224 Red_spiders'_eggs Swap_this_note_at_any_bank_for_the_equivalent_item'_eggs. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 225 Limpwurt_root The_root_of_a_limpwurt_plant. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 226 Limpwurt_root Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 227 Vial_of_water A_glass_vial_containing_water. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 228 Vial_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 229 Vial An_empty_glass_vial. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 230 Vial Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 231 Snape_grass Strange_spiky_grass. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 232 Snape_grass Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 233 Pestle_and_mortar I_can_grind_things_for_potions_in_this. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 234 Pestle_and_mortar Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 235 Unicorn_horn_dust Finely_ground_horn_of_Unicorn. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 236 Unicorn_horn_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 237 Unicorn_horn This_horn_has_restorative_properties. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 238 Unicorn_horn Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 239 White_berries Sour_berries,_used_in_potions. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 240 White_berries Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 241 Dragon_scale_dust Finely_ground_scale_of_Dragon. 52 52 52 0 0 0 0 0 0 0 0 0 0 0 0 +item = 242 Dragon_scale_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 52 52 52 0 0 0 0 0 0 0 0 0 0 0 0 +item = 243 Blue_dragon_scale A_large_shiny_scale. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 244 Blue_dragon_scale Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 245 Wine_of_zamorak An_evil_wine_for_an_evil_god. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 246 Wine_of_zamorak Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 247 Jangerberries They_don't_look_very_ripe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 248 Jangerberries Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 249 Clean_guam A_bitter_green_herb. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 250 Clean_guam Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 251 Clean_marrentill A_herb_used_in_poison_cures. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 252 Clean_marrentill Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 253 Clean_tarromin A_fresh_herb. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 254 Clean_tarromin Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 255 Clean_harralander A_fresh_herb. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 256 Clean_harralander Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 257 Clean_ranarr_weed A_fresh_herb. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 258 Clean_ranarr_weed Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 259 Clean_irit_leaf A_fresh_herb. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 260 Clean_irit_leaf Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 261 Clean_avantoe A_fresh_herb. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 262 Clean_avantoe Swap_this_note_at_any_bank_for_the_equivalent_item. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 263 Clean_kwuarm A_fresh_herb. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 264 Clean_kwuarm Swap_this_note_at_any_bank_for_the_equivalent_item. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 265 Clean_cadantine A_fresh_herb. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 266 Clean_cadantine Swap_this_note_at_any_bank_for_the_equivalent_item. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 267 Clean_dwarf_weed A_fresh_herb. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 268 Clean_dwarf_weed Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 269 Clean_torstol A_fresh_herb. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 270 Clean_torstol Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 271 Pressure_gauge It_looks_like_part_of_a_machine. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 272 Fish_food Keeps_your_pet_fish_strong_and_healthy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 273 Poison This_stuff_looks_nasty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 274 Poisoned_fish_food Doesn't_seem_very_nice_to_the_poor_fishes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 275 Key A_slightly_smelly_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 276 Rubber_tube It's_slightly_charred. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 277 Oil_can It's_pretty_full. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 278 Cattleprod A_sharp_cattleprod. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 279 Sheep_feed Councillor_Halgrive_gave_me_this_to_kill_some_sheep. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 280 Sheep_bones_(1) The_suspicious-looking_remains_of_a_suspicious-looking_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 281 Sheep_bones_(2) The_suspicious-looking_remains_of_a_suspicious-looking_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 282 Sheep_bones_(3) The_suspicious-looking_remains_of_a_suspicious-looking_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 283 Sheep_bones_(4) The_suspicious-looking_remains_of_a_suspicious-looking_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 284 Plague_jacket This_should_protect_me_from_the_plague,_I_hope! 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 285 Plague_trousers These_should_protect_me_from_the_plague,_I_hope! 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 286 Orange_goblin_mail Armour_designed_to_fit_goblins. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 287 Blue_goblin_mail Armour_designed_to_fit_goblins. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 288 Goblin_mail Armour_designed_to_fit_goblins. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 289 Goblin_mail Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 290 Research_package This_contains_some_vital_research_results. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 291 Notes It_seems_to_be_written_in_some_kind_of_code. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 292 Book_on_baxtorian A_book_on_elven_history_in_northern_RuneScape. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 293 A_key This_will_unlock_something. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 294 Glarial's_pebble A_small_pebble_with_elven_inscription. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 295 Glarial's_amulet A_bright_green_gem_set_in_a_necklace. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 296 Glarial's_urn An_urn_containing_Glarial's_ashes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 297 Glarial's_urn An_empty_urn_made_for_Glarial's_ashes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 298 A_key This_will_unlock_something. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 299 Mithril_seeds Magical_seeds_in_a_mithril_case. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 300 Rat's_tail A_bit_of_rat. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 301 Lobster_pot Useful_for_catching_lobsters. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 302 Lobster_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 303 Small_fishing_net Useful_for_catching_small_fish. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 304 Small_fishing_net Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 305 Big_fishing_net Useful_for_catching_lots_of_fish. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 306 Big_fishing_net Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 307 Fishing_rod Useful_for_catching_sardine_or_herring. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 308 Fishing_rod Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 309 Fly_fishing_rod Useful_for_catching_salmon_or_trout. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 310 Fly_fishing_rod Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 311 Harpoon Useful_for_catching_really_big_fish. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 312 Harpoon Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 313 Fishing_bait For_use_with_a_fishing_rod. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 314 Feather Used_for_fly_fishing. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 315 Shrimps Some_nicely_cooked_fish. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 316 Shrimps Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 317 Raw_shrimps I_should_try_cooking_this. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 318 Raw_shrimps Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 319 Anchovies Some_nicely_cooked_fish. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 320 Anchovies Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 321 Raw_anchovies I_should_try_cooking_this. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 322 Raw_anchovies Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 323 Burnt_fish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 324 Burnt_fish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 325 Sardine Some_nicely_cooked_fish. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 326 Sardine Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 327 Raw_sardine I_should_try_cooking_this. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 328 Raw_sardine Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 329 Salmon Some_nicely_cooked_fish. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 330 Salmon Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 331 Raw_salmon I_should_try_cooking_this. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 332 Raw_salmon Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 333 Trout Some_nicely_cooked_fish. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 334 Trout Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 335 Raw_trout I_should_try_cooking_this. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 336 Raw_trout Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 337 Giant_carp Some_nicely_cooked_fish. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 338 Raw_giant_carp I_should_try_cooking_this. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 339 Cod Some_nicely_cooked_fish. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 340 Cod Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 341 Raw_cod I_should_try_cooking_this. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 342 Raw_cod Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 343 Burnt_fish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 344 Burnt_fish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 345 Raw_herring I_should_try_cooking_this. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 346 Raw_herring Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 347 Herring Some_nicely_cooked_fish. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 348 Herring Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 349 Raw_pike I_should_try_cooking_this. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 350 Raw_pike Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 351 Pike Some_nicely_cooked_Pike. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 352 Pike Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 353 Raw_mackerel I_should_try_cooking_this. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 354 Raw_mackerel Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 355 Mackerel Some_nicely_cooked_fish. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 356 Mackerel Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 357 Burnt_fish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 358 Burnt_fish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 359 Raw_tuna I_should_try_cooking_this. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 360 Raw_tuna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 361 Tuna Wow,_this_is_a_big_fish. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 362 Tuna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 363 Raw_bass I_should_try_cooking_this. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 364 Raw_bass Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 365 Bass Wow,_this_is_a_big_fish. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 366 Bass Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 367 Burnt_fish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 368 Burnt_fish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 369 Burnt_fish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 370 Burnt_fish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 371 Raw_swordfish I_should_try_cooking_this. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 372 Raw_swordfish Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 373 Swordfish I'd_better_be_careful_eating_this! 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 374 Swordfish Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 375 Burnt_swordfish Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 376 Burnt_swordfish Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 377 Raw_lobster I_should_try_cooking_this. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 378 Raw_lobster Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 379 Lobster This_looks_tricky_to_eat. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 380 Lobster Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 381 Burnt_lobster Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 382 Burnt_lobster Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 383 Raw_shark I_should_try_cooking_this. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 384 Raw_shark Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 385 Shark I'd_better_be_careful_eating_this. 1500 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 386 Shark Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 387 Burnt_shark Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 388 Burnt_shark Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 389 Raw_manta_ray A_rare_catch. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 390 Raw_manta_ray Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 391 Manta_ray A_rare_catch. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 392 Manta_ray Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 393 Burnt_manta_ray Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 394 Burnt_manta_ray Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 395 Raw_sea_turtle A_rare_catch. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 396 Raw_sea_turtle Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 397 Sea_turtle Tasty! 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 398 Sea_turtle Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 399 Burnt_sea_turtle Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 400 Burnt_sea_turtle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 401 Seaweed Slightly_damp_seaweed. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 402 Seaweed Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 403 Edible_seaweed Slightly_damp_seaweed. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 404 Edible_seaweed Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 405 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 406 Casket Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 407 Oyster It's_a_rare_oyster. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 408 Oyster Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 409 Empty_oyster It's_empty. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 410 Empty_oyster Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 411 Oyster_pearl I_could_work_wonders_with_a_chisel_on_this_pearl. 112 112 112 0 0 0 0 0 0 0 0 0 0 0 0 +item = 412 Oyster_pearl Swap_this_note_at_any_bank_for_the_equivalent_item. 112 112 112 0 0 0 0 0 0 0 0 0 0 0 0 +item = 413 Oyster_pearls I_could_work_wonders_with_a_chisel_on_these_pearls. 1400 1400 1400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 414 Oyster_pearls Swap_this_note_at_any_bank_for_the_equivalent_item. 1400 1400 1400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 415 Ethenea An_expensive_colourless_liquid. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 416 Liquid_honey This_isn't_worth_much. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 417 Sulphuric_broline It's_highly_poisonous. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 418 Plague_sample Probably_best_I_don't_keep_this_too_long. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 419 Touch_paper A_special_kind_of_paper. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 420 Distillator Apparently_it_distills. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 421 Lathas'_amulet Yup._It's_an_amulet. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 422 Bird_feed Birds_love_this_stuff! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 423 Key Opens_things. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 424 Pigeon_cage It's_full_of_pigeons. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 425 Pigeon_cage It's_empty... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 426 Priest_gown Top_half_of_a_priest_suit. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 3 +item = 427 Priest_gown Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 428 Priest_gown Bottom_half_of_a_priest_suit. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 3 +item = 429 Priest_gown Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 430 Doctors'_gown Medical_looking. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 431 Karamjan_rum A_very_strong_spirit_brewed_in_Karamja. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 432 Chest_key A_key_to_One_eyed_Hector's_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 433 Pirate_message Pirates_don't_have_the_best_handwriting... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 434 Clay Some_hard_dry_clay. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 435 Clay Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 436 Copper_ore This_needs_refining. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 437 Copper_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 438 Tin_ore This_needs_refining. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 439 Tin_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 440 Iron_ore This_needs_refining. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 441 Iron_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 442 Silver_ore This_needs_refining. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 443 Silver_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 444 Gold_ore This_needs_refining. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 445 Gold_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 446 'perfect'_gold_ore This_needs_refining. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 447 Mithril_ore This_needs_refining. 162 162 162 0 0 0 0 0 0 0 0 0 0 0 0 +item = 448 Mithril_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 162 162 162 0 0 0 0 0 0 0 0 0 0 0 0 +item = 449 Adamantite_ore This_needs_refining. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 450 Adamantite_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 451 Runite_ore This_needs_refining. 3200 3200 3200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 452 Runite_ore Swap_this_note_at_any_bank_for_the_equivalent_item. 3200 3200 3200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 453 Coal Hmm_a_non-renewable_energy_source! 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 454 Coal Swap_this_note_at_any_bank_for_the_equivalent_item. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 455 Barcrawl_card The_official_Alfred_Grimhand_bar_crawl_card. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 456 Scorpion_cage It's_empty! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 457 Scorpion_cage There_is_1_scorpion_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 458 Scorpion_cage There_are_2_scorpions_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 459 Scorpion_cage There_are_2_scorpions_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 460 Scorpion_cage There_is_1_scorpion_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 461 Scorpion_cage There_are_2_scorpions_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 462 Scorpion_cage There_is_1_scorpion_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 463 Scorpion_cage There_are_3_scorpions_inside. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 464 Strange_fruit I_wonder_what_this_tastes_like? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 465 Strange_fruit Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 466 Pickaxe_handle Useless_without_the_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 467 Pickaxe_handle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 468 Broken_pickaxe Nurmof_can_fix_this_for_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 469 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 470 Broken_pickaxe Nurmof_can_fix_this_for_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 471 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 472 Broken_pickaxe Nurmof_can_fix_this_for_me. 17 17 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 473 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 474 Broken_pickaxe Nurmof_can_fix_this_for_me. 43 43 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 475 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 43 43 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 476 Broken_pickaxe Nurmof_can_fix_this_for_me. 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 477 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 478 Broken_pickaxe Nurmof_can_fix_this_for_me. 440 660 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 479 Broken_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 440 660 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 480 Bronze_pick_head It's_missing_a_handle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 481 Bronze_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 482 Iron_pick_head It's_missing_a_handle. 139 139 139 0 0 0 0 0 0 0 0 0 0 0 0 +item = 483 Iron_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 139 139 139 0 0 0 0 0 0 0 0 0 0 0 0 +item = 484 Steel_pick_head It's_missing_a_handle. 499 499 499 0 0 0 0 0 0 0 0 0 0 0 0 +item = 485 Steel_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 499 499 499 0 0 0 0 0 0 0 0 0 0 0 0 +item = 486 Mithril_pick_head It's_missing_a_handle. 1299 1299 1299 0 0 0 0 0 0 0 0 0 0 0 0 +item = 487 Mithril_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 1299 1299 1299 0 0 0 0 0 0 0 0 0 0 0 0 +item = 488 Adamant_pick_head It's_missing_a_handle. 3199 3199 3199 0 0 0 0 0 0 0 0 0 0 0 0 +item = 489 Adamant_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 3199 3199 3199 0 0 0 0 0 0 0 0 0 0 0 0 +item = 490 Rune_pick_head It's_missing_a_handle. 12800 19199 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 491 Rune_pick_head Swap_this_note_at_any_bank_for_the_equivalent_item. 12800 19199 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 492 Axe_handle Useless_without_the_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 493 Axe_handle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 494 Broken_axe Bob_can_fix_this_for_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 495 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 496 Broken_axe Bob_can_fix_this_for_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 497 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 498 Broken_axe Bob_can_fix_this_for_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 499 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 500 Broken_axe Bob_can_fix_this_for_me. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 501 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 502 Broken_axe Bob_can_fix_this_for_me. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 503 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 504 Broken_axe Bob_can_fix_this_for_me. 43 43 43 0 0 0 0 0 0 0 0 0 0 0 0 +item = 505 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 43 43 43 0 0 0 0 0 0 0 0 0 0 0 0 +item = 506 Broken_axe Bob_can_fix_this_for_me. 427 427 427 0 0 0 0 0 0 0 0 0 0 0 0 +item = 507 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 427 427 427 0 0 0 0 0 0 0 0 0 0 0 0 +item = 508 Bronze_axe_head It's_missing_a_handle. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 509 Bronze_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 510 Iron_axe_head It's_missing_a_handle. 55 55 55 0 0 0 0 0 0 0 0 0 0 0 0 +item = 511 Iron_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 55 55 55 0 0 0 0 0 0 0 0 0 0 0 0 +item = 512 Steel_axe_head It's_missing_a_handle. 199 199 199 0 0 0 0 0 0 0 0 0 0 0 0 +item = 513 Steel_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 199 199 199 0 0 0 0 0 0 0 0 0 0 0 0 +item = 514 Black_axe_head It's_missing_a_handle. 383 383 383 0 0 0 0 0 0 0 0 0 0 0 0 +item = 515 Black_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 383 383 383 0 0 0 0 0 0 0 0 0 0 0 0 +item = 516 Mithril_axe_head It's_missing_a_handle. 519 519 519 0 0 0 0 0 0 0 0 0 0 0 0 +item = 517 Mithril_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 519 519 519 0 0 0 0 0 0 0 0 0 0 0 0 +item = 518 Adamant_axe_head It's_missing_a_handle. 1279 1279 1279 0 0 0 0 0 0 0 0 0 0 0 0 +item = 519 Adamant_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 1279 1279 1279 0 0 0 0 0 0 0 0 0 0 0 0 +item = 520 Rune_axe_head It's_missing_a_handle. 5120 7679 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 521 Rune_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 5120 7679 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 522 Enchanted_beef I_don't_fancy_eating_this_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 523 Enchanted_rat I_don't_fancy_eating_this_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 524 Enchanted_bear I_don't_fancy_eating_this_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 525 Enchanted_chicken I_don't_fancy_eating_this_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 526 Bones Bones_are_for_burying! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 527 Bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 528 Burnt_bones Bones_are_for_burying! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 529 Burnt_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 530 Bat_bones Bones_are_for_burying! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 531 Bat_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 532 Big_bones Ew_it's_a_pile_of_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 533 Big_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 534 Babydragon_bones Ew_it's_a_pile_of_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 535 Babydragon_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 536 Dragon_bones These_would_feed_a_dog_for_months! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 537 Dragon_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 538 Druid's_robe Keeps_a_druid's_knees_nice_and_warm. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 4 +item = 539 Druid's_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 540 Druid's_robe I_feel_closer_to_the_gods_when_I_am_wearing_this. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 4 +item = 541 Druid's_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 542 Monk's_bottoms Keeps_a_monk's_knees_nice_and_warm. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 5 +item = 543 Monk's_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 544 Monk's_robetop I_feel_closer_to_the_gods_when_I_am_wearing_this. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 6 +item = 545 Monk's_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 546 Shade_robe I_feel_closer_to_the_gods_when_I_am_wearing_this. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 5 +item = 547 Shade_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 548 Shade_robe If_a_shade_had_knees,_this_would_keep_them_nice_and_warm. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 4 +item = 549 Shade_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 550 Newcomer_map Issued_by_RuneScape_Council_to_all_new_citizens. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 551 Newcomer_map Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 552 Ghostspeak_amulet It_lets_me_talk_to_ghosts. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 553 Skull Ooooh_spooky! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 554 Fire_rune One_of_the_4_basic_elemental_Runes. 17 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 555 Water_rune One_of_the_4_basic_elemental_Runes. 17 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 556 Air_rune One_of_the_4_basic_elemental_Runes. 17 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 557 Earth_rune One_of_the_4_basic_elemental_Runes. 17 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 558 Mind_rune Used_for_basic_level_missile_spells. 17 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 559 Body_rune Used_for_curse_spells. 16 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 560 Death_rune Used_for_medium_level_missile_spells. 310 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 561 Nature_rune Used_for_alchemy_spells. 320 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 562 Chaos_rune Used_for_low_level_missile_spells. 140 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 563 Law_rune Used_for_teleport_spells. 540 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 564 Cosmic_rune Used_for_enchant_spells. 100 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 565 Blood_rune Used_for_high_level_missile_spells. 560 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 566 Soul_rune Used_for_high_level_curse_spells. 460 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 567 Unpowered_orb I'd_prefer_it_if_it_was_powered. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 568 Unpowered_orb Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 569 Fire_orb A_magic_glowing_orb. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 570 Fire_orb Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 571 Water_orb A_magic_glowing_orb. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 572 Water_orb Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 573 Air_orb A_magic_glowing_orb. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 574 Air_orb Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 575 Earth_orb A_magic_glowing_orb. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 576 Earth_orb Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 577 Wizard_robe I_can_do_magic_better_in_this. 15 15 15 0 0 0 3 0 0 0 0 3 0 0 0 +item = 578 Wizard_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 579 Wizard_hat A_silly_pointed_hat. 2 2 2 0 0 0 2 0 0 0 0 2 0 0 0 +item = 580 Wizard_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 581 Black_robe I_can_do_magic_better_in_this. 13 13 13 0 0 0 3 0 0 0 0 3 0 0 0 +item = 582 Black_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 583 Bailing_bucket It's_a_bailing_bucket. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 584 Bailing_bucket Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 585 Bailing_bucket It's_a_bailing_bucket_full_of_salty_water. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 586 Bailing_bucket Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 587 Orb_of_protection A_strange_glowing_green_orb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 588 Orbs_of_protection Two_strange_glowing_green_orbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 589 Gnome_amulet It's_an_amulet_of_protection_given_to_me_by_the_gnomes. 1 1 1 0 0 0 0 0 13 13 13 0 0 0 0 +item = 590 Tinderbox Useful_for_lighting_a_fire. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 591 Tinderbox Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 592 Ashes A_heap_of_ashes. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 593 Ashes Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 594 Torch A_lit_home-made_torch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 595 Torch A_lit_home-made_torch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 596 Torch An_unlit_home-made_torch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 597 Torch Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 598 Bronze_fire_arrows Arrows_with_bronze_heads_and_oil_soaked_cloth. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 599 Double_helix Who_says_it's_just_manners_that_maketh_man? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 600 Astrology_book A_book_on_the_history_of_Astrology_in_RuneScape. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 601 Keep_key A_small_key_for_a_jail_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 602 Lens_mould An_unusual_clay_mould_in_the_shape_of_a_disc. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 603 Lens A_perfectly_circular_disc_of_glass. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 604 Bone_shard A_slender_bone_shard_given_to_you_by_Zadimus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 605 Bone_key A_bone_key_fashioned_from_a_shard_of_bone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 606 Stone-plaque A_stone_plaque_with_carved_letters_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 607 Tattered_scroll An_ancient_tattered_scroll. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 608 Crumpled_scroll An_ancient_crumpled_scroll. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 609 Rashiliyia_corpse The_remains_of_the_Zombie_Queen. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 610 Zadimus_corpse The_remains_of_Zadimus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 611 Locating_crystal A_magical_crystal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 612 Locating_crystal A_magical_crystal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 613 Locating_crystal A_magical_crystal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 614 Locating_crystal A_magical_crystal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 615 Locating_crystal A_magical_crystal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 616 Beads_of_the_dead A_curious_looking_neck_ornament. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 617 Coins Lovely_money! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 618 Bone_beads Beads_carved_out_of_a_bone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 619 Paramaya_ticket Allows_you_to_rest_in_the_luxurious_Paramayer_Inn. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 620 Paramaya_ticket Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 621 Ship_ticket Allows_you_passage_on_the_'Lady_of_the_waves'_ship. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 622 Ship_ticket Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 623 Sword_pommel An_ivory_sword_pommel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 624 Bervirius_notes Notes_taken_from_the_tomb_of_Bervirius. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 625 Wampum_belt A_decorated_belt_used_to_trade_information_between_distant_villages. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 626 Boots They're_soft_and_silky. 200 200 200 0 0 0 0 0 0 1 1 0 0 0 0 +item = 627 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 628 Boots They're_soft_and_silky. 200 200 200 0 0 0 0 0 0 1 1 0 0 0 0 +item = 629 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 630 Boots They're_soft_and_silky. 200 200 200 0 0 0 0 0 0 1 1 0 0 0 0 +item = 631 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 632 Boots They're_soft_and_silky. 200 200 200 0 0 0 0 0 0 1 1 0 0 0 0 +item = 633 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 634 Boots They're_soft_and_silky. 200 200 200 0 0 0 0 0 0 1 1 0 0 0 0 +item = 635 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 636 Robe_top The_ultimate_in_gnome_design. 180 180 180 0 0 0 0 0 0 2 2 0 0 0 0 +item = 637 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 638 Robe_top The_ultimate_in_gnome_design. 180 180 180 0 0 0 0 0 0 2 2 0 0 0 0 +item = 639 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 640 Robe_top The_ultimate_in_gnome_design. 180 180 180 0 0 0 0 0 0 2 2 0 0 0 0 +item = 641 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 642 Robe_top The_ultimate_in_gnome_design. 180 180 180 0 0 0 0 0 0 2 2 0 0 0 0 +item = 643 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 644 Robe_top The_ultimate_in_gnome_design. 180 180 180 0 0 0 0 0 0 2 2 0 0 0 0 +item = 645 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 646 Robe_bottoms Made_by_Tree_Gnomes. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 647 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 648 Robe_bottoms Made_by_Tree_Gnomes. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 649 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 650 Robe_bottoms Made_by_Tree_Gnomes. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 651 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 652 Robe_bottoms Made_by_Tree_Gnomes. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 653 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 654 Robe_bottoms Made_by_Tree_Gnomes. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 655 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 656 Hat A_silly_pointed_hat. 160 160 160 0 0 0 3 0 0 0 0 3 0 0 0 +item = 657 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 658 Hat A_silly_pointed_hat. 160 160 160 0 0 0 3 0 0 0 0 3 0 0 0 +item = 659 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 660 Hat A_silly_pointed_hat. 160 160 160 0 0 0 3 0 0 0 0 3 0 0 0 +item = 661 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 662 Hat A_silly_pointed_hat. 160 160 160 0 0 0 3 0 0 0 0 3 0 0 0 +item = 663 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 664 Hat A_silly_pointed_hat. 160 160 160 0 0 0 3 0 0 0 0 3 0 0 0 +item = 665 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 666 Portrait Picture_of_a_posing_Paladin. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 667 Blurite_sword A_Faladian_Knight's_sword. 200 200 200 9 14 -2 0 0 0 3 2 0 0 10 0 +item = 668 Blurite_ore Definitely_blue. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 669 Specimen_jar A_receptacle_for_specimens! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 670 Specimen_brush A_small_brush_used_to_clean_rock_samples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 671 Rock_sample_1 A_carefully-kept-safe_rock_sample. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 672 Rock_sample_2 A_carefully-kept-safe_rock_sample. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 673 Rock_sample_3 A_carefully-kept-safe_rock_sample. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 674 Rock_sample A_rough_shaped_piece_of_rock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 675 Rock_pick A_small_pick_for_cracking_rock_samples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 676 Trowel Used_for_digging! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 677 Panning_tray An_empty_tray_for_panning. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 678 Panning_tray This_tray_contains_gold. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 679 Panning_tray This_tray_contains_mud. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 680 Nuggets Pure,_lovely_gold! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 681 Zaros_talisman An_unusual_symbol_of_a_lesser-known_god. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 682 Unstamped_letter A_scroll_waiting_to_be_stamped. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 683 Stamped_letter A_stamped_scroll_of_recommendation. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 684 Belt_buckle Used_to_hold_up_trousers! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 685 Old_boot Phew! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 686 Rusty_sword A_decent_enough_weapon_gone_rusty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 687 Broken_arrow This_must_have_been_shot_at_high_speed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 688 Buttons Not_Dick_Whittington's_helper_at_all! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 689 Broken_staff I_pity_the_poor_person_beaten_with_this! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 690 Broken_glass Watch_those_feet! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 691 Level_1_certificate The_owner_has_passed_the_Earth_Sciences_level_1_exam. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 692 Level_2_certificate The_owner_has_passed_Earth_Sciences_level_2_exam. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 693 Level_3_certificate The_owner_has_passed_Earth_Sciences_level_3_exam. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 694 Ceramic_remains Smashing! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 695 Old_tooth Now_if_I_can_just_find_a_tooth_fairy_to_sell_this_to... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 696 Invitation_letter A_letter_inviting_me_to_use_the_private_digshafts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 697 Damaged_armour Beyond_repair. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 698 Broken_armour No_use_to_me... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 699 Stone_tablet An_old_stone_slab_with_writing_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 700 Chemical_powder An_acrid_chemical. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 701 Ammonium_nitrate An_acrid_chemical. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 702 Unidentified_liquid A_strong_chemical. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 703 Nitroglycerin A_strong_chemical. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 704 Ground_charcoal Charcoal,_crushed_to_small_pieces! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 705 Mixed_chemicals A_mixture_of_strong_chemicals. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 706 Mixed_chemicals A_mixture_of_strong_chemicals. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 707 Chemical_compound A_mixture_of_strong_chemicals. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 708 Arcenia_root The_root_of_an_Arcenia_plant. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 709 Chest_key This_fits_a_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 710 Vase A_vessel_for_holding_plants. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 711 Book_on_chemicals It's_about_chemicals,_judging_from_its_cover. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 712 Cup_of_tea A_refreshing_cuppa. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 713 Enjifern Truly_fun_to_have_around. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 714 Radimus_notes Notes_given_to_you_by_Radimus_Erkle,_it_includes_a_partially_completed_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 715 Radimus_notes Notes_given_to_you_by_Radimus_Erkle,_it_includes_a_partially_completed_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 716 Bull_roarer It_makes_a_loud_but_interesting_sound_when_swung_in_the_air. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 717 Scrawled_note A_scrawled_note_with_spidery_writing_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 718 A_scribbled_note A_scrawled_note_with_spidery_writing_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 719 Scrumpled_note A_scrawled_note_with_spidery_writing_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 720 Sketch A_rough_sketch_of_a_bowl_shaped_vessel_given_to_you_by_Gujuo. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 721 Gold_bowl A_specially_made_bowl_constructed_out_of_pure_gold. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 722 Blessed_gold_bowl A_specially_made_bowl_constructed_out_of_pure_gold_and_blessed. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 723 Golden_bowl A_specially_made_golden_bowl_with_water. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 724 Golden_bowl A_specially_made_bowl_constructed_out_of_pure_gold._It_has_pure_water_in_it. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 725 Golden_bowl A_blessed_golden_bowl._It_has_water_in_it. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 726 Golden_bowl A_blessed_golden_bowl._It_has_pure_sacred_water_in_it. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 727 Hollow_reed One_of_nature's_pipes. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 728 Hollow_reed Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 729 Shamans_tome It_looks_like_the_Shamans_personal_notes... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 730 Book_of_binding An_ancient_tome_on_Demonology. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 731 Enchanted_vial An_enchanted_empty_glass_vial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 732 Holy_water A_vial_of_holy_water,_good_against_certain_demons. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 733 Smashed_glass Fragments_of_a_broken_container. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 734 Smashed_glass Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 735 Yommi_tree_seeds These_need_to_be_germinated_before_they_can_be_used. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 736 Yommi_tree_seeds These_are_germinated_and_ready_to_be_planted_in_fertile_soil. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 737 Snakeweed_mixture It's_a_mixture_of_Snakeweed_and_water._Needs_another_ingredient. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 738 Ardrigal_mixture It's_a_mixture_of_Ardrigal_and_water._Needs_another_ingredient. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 739 Bravery_potion A_bravery_potion_for_which_Gujuo_gave_you_the_details,_let's_hope_it_works. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 740 Blue_hat A_strange_blue_wizards_hat. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 741 Chunk_of_crystal It_looks_like_it's_been_snapped_off_of_something. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 742 Hunk_of_crystal It_looks_like_it's_been_snapped_off_of_something. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 743 Lump_of_crystal It_looks_like_it's_been_snapped_off_of_something. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 744 Heart_crystal A_heart_shaped_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 745 Heart_crystal A_heart_shaped_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 746 Dark_dagger A_black_obsidian_dagger,_it_has_a_strange_aura_about_it. 1 1 1 5 3 -4 1 0 0 0 0 0 0 0 0 +item = 747 Glowing_dagger A_black_obsidian_dagger,_it_has_a_strange_aura_about_it_-_it_seems_to_be_glowing. 1 1 1 5 3 -4 1 0 0 0 0 0 0 0 0 +item = 748 Holy_force A_powerful_spell_for_good. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 749 Yommi_totem A_well_carved_totem_pole_made_from_the_trunk_of_a_Yommi_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 750 Gilded_totem A_gilded_totem_pole_from_the_Kharazi_tribe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 751 Gnomeball A_ball_used_in_Gnomeball. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 752 Gnomeball Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 753 Cadava_berries Poisonous_berries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 754 Cadava_berries Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 755 Message A_message_from_Juliet_to_Romeo. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 756 Cadava_potion I'm_meant_to_give_this_to_Juliet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 757 Book The_Shield_of_Arrav_by_A_R_Wright. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 758 Key The_key_to_get_into_the_Phoenix_Gang_HQ. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 759 Key The_key_to_the_Phoenix_Gang's_weapons_store. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 760 Key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 761 Scroll An_intelligence_report. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 762 Scroll Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 763 Broken_shield Half_of_the_Shield_of_Arrav. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 764 Broken_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 765 Broken_shield Half_of_the_Shield_of_Arrav. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 766 Broken_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 767 Phoenix_crossbow Former_property_of_the_Phoenix_Gang. 4 4 4 0 0 0 0 6 0 0 0 0 0 0 0 +item = 768 Phoenix_crossbow Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 769 Certificate I_can_use_this_to_claim_a_reward_from_the_King. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 770 Certificate Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 771 Dramen_branch A_limb_of_the_fabled_Dramen_tree. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 772 Dramen_staff Crafted_from_a_Dramen_tree_branch. 15 15 15 -1 -1 10 10 0 2 3 1 10 0 0 0 +item = 773 'perfect'_ring A_perfect_ruby_ring. 1000000 1000000 1000000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 774 'perfect'_necklace A_perfect_ruby_necklace. 2175 2175 2175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 775 Cooking_gauntlets These_gauntlets_empower_with_a_greater_ability_to_cook_fish. 1 1 1 2 2 2 0 0 8 9 0 0 0 2 0 +item = 776 Goldsmith_gauntlet These_gauntlets_empower_the_bearer_whilst_making_gold. 1 1 1 2 2 2 0 0 8 9 0 0 0 2 0 +item = 777 Chaos_gauntlets These_gauntlets_empower_spell_casters. 1 1 1 2 2 2 0 0 8 9 0 0 0 2 0 +item = 778 Steel_gauntlets My_reward_for_assisting_the_Fitzharmon_family. 1 1 1 2 2 2 0 0 8 9 0 0 0 2 0 +item = 779 Crest_part A_fragment_of_the_Fitzharmon_family_crest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 780 Crest_part A_fragment_of_the_Fitzharmon_family_crest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 781 Crest_part A_fragment_of_the_Fitzharmon_family_crest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 782 Family_crest The_Fitzharmon_family_crest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 783 Bark_sample A_sample_of_the_bark_from_the_Grand_Tree. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 784 Translation_book A_book_to_translate_the_ancient_gnome_language_into_English. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 785 Glough's_journal Perhaps_I_should_read_it_and_see_what_Glough_is_up_to! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 786 Hazelmere's_scroll Hazelmere_wrote_something_down_on_this_scroll. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 787 Lumber_order An_order_from_the_Karamja_shipyard. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 788 Glough's_key The_key_to_Glough's_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 789 Twigs Twigs_bound_together_in_the_shape_of_a_T. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 790 Twigs Twigs_bound_together_in_the_shape_of_a_U. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 791 Twigs Twigs_bound_together_in_the_shape_of_a_Z. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 792 Twigs Twigs_bound_together_in_the_shape_of_a_O. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 793 Daconia_rock An_ancient_rock_with_strange_magical_properties. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 794 Invasion_plans These_are_plans_for_an_invasion! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 795 War_ship A_model_of_a_Karamja_warship. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 796 Exploding_vial An_exploding_vial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 797 Herb_bowl A_bowl_of_herbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 798 Grinder A_grinder. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 800 Bronze_thrownaxe A_finely_balanced_throwing_axe. 3 3 3 0 0 0 0 4 0 0 0 0 0 0 0 +item = 801 Iron_thrownaxe A_finely_balanced_throwing_axe. 7 7 7 0 0 0 0 5 0 0 0 0 0 0 0 +item = 802 Steel_thrownaxe A_finely_balanced_throwing_axe. 26 26 26 0 0 0 0 8 0 0 0 0 0 0 0 +item = 803 Mithril_thrownaxe A_finely_balanced_throwing_axe. 70 70 70 0 0 0 0 12 0 0 0 0 0 0 0 +item = 804 Adamnt_thrownaxe A_finely_balanced_throwing_axe. 176 176 176 0 0 0 0 17 0 0 0 0 0 0 0 +item = 805 Rune_thrownaxe A_finely_balanced_throwing_axe. 440 440 440 0 0 0 0 26 0 0 0 0 0 0 0 +item = 806 Bronze_dart A_deadly_throwing_dart_with_a_bronze_tip. 1 1 1 0 0 0 0 3 0 0 0 0 0 0 0 +item = 807 Iron_dart A_deadly_throwing_dart_with_an_iron_tip. 2 2 2 0 0 0 0 4 0 0 0 0 0 0 0 +item = 808 Steel_dart A_deadly_throwing_dart_with_a_steel_tip. 10 10 10 0 0 0 0 5 0 0 0 0 0 0 0 +item = 809 Mithril_dart A_deadly_throwing_dart_with_a_mithril_tip. 25 25 25 0 0 0 0 8 0 0 0 0 0 0 0 +item = 810 Adamant_dart A_deadly_throwing_dart_with_an_adamantite_tip. 65 65 65 0 0 0 0 11 0 0 0 0 0 0 0 +item = 811 Rune_dart A_deadly_throwing_dart_with_a_rune_tip. 350 350 350 0 0 0 0 15 0 0 0 0 0 0 0 +item = 812 Bronze_dart(p) A_deadly_poisoned_dart_with_a_bronze_tip. 1 1 1 0 0 0 0 3 0 0 0 0 0 0 0 +item = 813 Iron_dart(p) A_deadly_poisoned_dart_with_an_iron_tip. 2 2 2 0 0 0 0 4 0 0 0 0 0 0 0 +item = 814 Steel_dart(p) A_deadly_poisoned_dart_with_a_steel_tip. 10 10 10 0 0 0 0 5 0 0 0 0 0 0 0 +item = 815 Mithril_dart(p) A_deadly_poisoned_dart_with_a_mithril_tip. 25 25 25 0 0 0 0 8 0 0 0 0 0 0 0 +item = 816 Adamant_dart(p) A_deadly_poisoned_dart_with_an_adamantite_tip. 65 65 65 0 0 0 0 15 0 0 0 0 0 0 0 +item = 817 Rune_dart(p) A_deadly_poisoned_dart_with_a_rune_tip. 350 350 350 0 0 0 0 18 0 0 0 0 0 0 0 +item = 818 Poisoned_dart(p) A_deadly_throwing_dart_with_a_poisoned_tip. 1 1 1 0 0 0 0 7 0 0 0 0 0 0 0 +item = 819 Bronze_dart_tip A_deadly_looking_dart_tip_made_of_bronze_-_needs_feathers_for_flight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 820 Iron_dart_tip A_deadly_looking_dart_tip_made_of_iron_-_needs_feathers_for_flight. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 821 Steel_dart_tip A_deadly_looking_dart_tip_made_of_steel_-_needs_feathers_for_flight. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 822 Mithril_dart_tip A_deadly_looking_dart_tip_made_of_mithril_-_needs_feathers_for_flight. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 823 Adamant_dart_tip A_deadly_looking_dart_tip_made_of_adamantite_-_needs_feathers_for_flight. 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 +item = 824 Rune_dart_tip A_deadly_looking_dart_tip_made_of_runite_-_needs_feathers_for_flight. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 825 Bronze_javelin A_bronze_tipped_javelin. 4 4 4 0 0 0 0 5 0 0 0 0 0 0 0 +item = 826 Iron_javelin An_iron_tipped_javelin. 6 6 6 0 0 0 0 8 0 0 0 0 0 0 0 +item = 827 Steel_javelin A_steel_tipped_javelin. 24 24 24 0 0 0 0 12 0 0 0 0 0 0 0 +item = 828 Mithril_javelin A_mithril_tipped_javelin. 64 64 64 0 0 0 0 17 0 0 0 0 0 0 0 +item = 829 Adamant_javelin An_adamantite_tipped_javelin. 160 160 160 0 0 0 0 24 0 0 0 0 0 0 0 +item = 830 Rune_javelin A_rune_tipped_javelin. 400 400 400 0 0 0 0 38 0 0 0 0 0 0 0 +item = 831 Bronze_javelin(p) A_bronze_tipped_javelin. 4 4 4 0 0 0 0 5 0 0 0 0 0 0 0 +item = 832 Iron_javelin(p) An_iron_tipped_javelin. 6 6 6 0 0 0 0 8 0 0 0 0 0 0 0 +item = 833 Steel_javelin(p) A_steel_tipped_javelin. 24 24 24 0 0 0 0 12 0 0 0 0 0 0 0 +item = 834 Mithril_javelin(p) A_mithril_tipped_javelin. 64 64 64 0 0 0 0 17 0 0 0 0 0 0 0 +item = 835 Adamant_javelin(p) An_adamantite_tipped_javelin. 160 160 160 0 0 0 0 24 0 0 0 0 0 0 0 +item = 836 Rune_javelin(p) A_rune_tipped_javelin. 400 400 400 0 0 0 0 38 0 0 0 0 0 0 0 +item = 837 Crossbow This_fires_crossbow_bolts. 70 70 70 0 0 0 0 6 0 0 0 0 0 0 0 +item = 838 Crossbow Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 839 Longbow A_nice_sturdy_bow. 32 48 0 0 0 0 0 8 0 0 0 0 0 0 0 +item = 840 Longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 32 48 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 841 Shortbow Short_but_effective. 20 30 0 0 0 0 0 8 0 0 0 0 0 0 0 +item = 842 Shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 20 30 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 843 Oak_shortbow A_shortbow_made_out_of_oak,_still_effective. 40 60 0 0 0 0 0 14 0 0 0 0 0 0 0 +item = 844 Oak_shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 40 60 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 845 Oak_longbow A_nice_sturdy_bow_made_out_of_oak. 64 96 0 0 0 0 0 14 0 0 0 0 0 0 0 +item = 846 Oak_longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 64 96 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 847 Willow_longbow A_nice_sturdy_bow_made_out_of_willow. 128 192 0 0 0 0 0 20 0 0 0 0 0 0 0 +item = 848 Willow_longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 128 192 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 849 Willow_shortbow A_shortbow_made_out_of_willow,_still_effective. 80 120 0 0 0 0 0 20 0 0 0 0 0 0 0 +item = 850 Willow_shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 851 Maple_longbow A_nice_sturdy_bow_made_out_of_Maple. 256 384 0 0 0 0 0 29 0 0 0 0 0 0 0 +item = 852 Maple_longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 256 384 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 853 Maple_shortbow A_shortbow_made_out_of_Maple,_still_effective. 160 240 0 0 0 0 0 29 0 0 0 0 0 0 0 +item = 854 Maple_shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 160 240 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 855 Yew_longbow A_nice_sturdy_bow_made_out_of_yew. 512 768 0 0 0 0 0 47 0 0 0 0 0 0 0 +item = 856 Yew_longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 512 768 0 0 0 0 0 47 0 0 0 0 0 0 0 +item = 857 Yew_shortbow A_shortbow_made_out_of_yew,_still_effective. 320 480 0 0 0 0 0 47 0 0 0 0 0 0 0 +item = 858 Yew_shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 320 480 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 859 Magic_longbow A_nice_sturdy_magical_bow. 1024 1536 0 0 0 0 0 69 0 0 0 0 0 0 0 +item = 860 Magic_longbow Swap_this_note_at_any_bank_for_the_equivalent_item. 1024 1536 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 861 Magic_shortbow Short_and_magical,_but_still_effective. 640 960 0 0 0 0 0 69 0 0 0 0 0 0 0 +item = 862 Magic_shortbow Swap_this_note_at_any_bank_for_the_equivalent_item. 640 960 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 863 Iron_knife A_finely_balanced_throwing_knife. 3 3 3 0 0 0 0 5 0 0 0 0 0 0 0 +item = 864 Bronze_knife A_finely_balanced_throwing_knife. 1 1 1 0 0 0 0 4 0 0 0 0 0 0 0 +item = 865 Steel_knife A_finely_balanced_throwing_knife. 11 11 11 0 0 0 0 8 0 0 0 0 0 0 0 +item = 866 Mithril_knife A_finely_balanced_throwing_knife. 27 27 27 0 0 0 0 11 0 0 0 0 0 0 0 +item = 867 Adamant_knife A_finely_balanced_throwing_knife. 66 66 66 0 0 0 0 15 0 0 0 0 0 0 0 +item = 868 Rune_knife A_finely_balanced_throwing_knife. 167 167 167 0 0 0 0 25 0 0 0 0 0 0 0 +item = 869 Black_knife A_finely_balanced_throwing_knife. 19 19 19 0 0 0 0 10 0 0 0 0 0 0 0 +item = 870 Bronze_knife(p) A_finely_balanced_throwing_knife. 1 1 1 0 0 0 0 4 0 0 0 0 0 0 0 +item = 871 Iron_knife(p) A_finely_balanced_throwing_knife. 3 3 3 0 0 0 0 5 0 0 0 0 0 0 0 +item = 872 Steel_knife(p) A_finely_balanced_throwing_knife. 10 10 10 0 0 0 0 8 0 0 0 0 0 0 0 +item = 873 Mithril_knife(p) A_finely_balanced_throwing_knife. 27 27 27 0 0 0 0 11 0 0 0 0 0 0 0 +item = 874 Black_knife(p) A_finely_balanced_throwing_knife. 18 18 18 0 0 0 0 15 0 0 0 0 0 0 0 +item = 875 Adamant_knife(p) A_finely_balanced_throwing_knife. 66 66 66 0 0 0 0 25 0 0 0 0 0 0 0 +item = 876 Rune_knife(p) A_finely_balanced_throwing_knife. 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 +item = 877 Bolts Good_if_you_have_a_crossbow! 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 878 Bolts(p) Vicious_poisoned_bolts. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 879 Opal_bolts Great_if_you_have_a_crossbow! 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 880 Pearl_bolts Useful_if_you_have_a_crossbow! 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 881 Barbed_bolts Great_if_you_have_a_crossbow! 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 882 Bronze_arrow Arrows_with_bronze_heads. 7 1 1 0 0 0 0 7 0 0 0 0 0 0 0 +item = 883 Bronze_arrow(p) Venomous_looking_arrows. 1 1 0 0 0 0 7 0 0 0 0 0 0 0 0 +item = 884 Iron_arrow Arrows_with_iron_heads. 20 3 3 0 0 0 0 10 0 0 0 0 0 0 0 +item = 885 Iron_arrow(p) Venomous_looking_arrows. 3 3 3 0 0 0 0 10 0 0 0 0 0 0 0 +item = 886 Steel_arrow Arrows_with_steel_heads. 46 12 12 0 0 0 0 16 0 0 0 0 0 0 0 +item = 887 Steel_arrow(p) Venomous_looking_arrows. 12 12 12 0 0 0 0 16 0 0 0 0 0 0 0 +item = 888 Mithril_arrow Arrows_with_mithril_heads. 76 32 32 0 0 0 0 22 0 0 0 0 0 0 0 +item = 889 Mithril_arrow(p) Venomous_looking_arrows. 32 32 32 0 0 0 0 22 0 0 0 0 0 0 0 +item = 890 Adamant_arrow Arrows_with_adamantite_heads. 172 80 80 0 0 0 0 31 0 0 0 0 0 0 0 +item = 891 Adamant_arrow(p) Venomous_looking_arrows. 80 80 80 0 0 0 31 0 0 0 0 0 0 0 0 +item = 892 Rune_arrow Arrows_with_rune_heads. 800 400 400 0 0 0 0 49 0 0 0 0 0 0 0 +item = 893 Rune_arrow(p) Venomous_looking_arrows. 400 400 400 0 0 0 0 49 0 0 0 0 0 0 0 +item = 942 Bronze_fire_arrows These_bronze_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 943 Worm Ugh!_It's_wriggling! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 944 Worm Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 945 Throwing_rope A_rope. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 946 Knife A_dangerous_looking_knife. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 947 Knife Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 948 Bear_fur This_would_make_warm_clothing. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 949 Bear_fur Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 950 Silk It's_a_sheet_of_silk. 4000 4000 4000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 951 Silk Swap_this_note_at_any_bank_for_the_equivalent_item. 4000 4000 4000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 952 Spade A_slightly_muddy_spade. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 953 Spade Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 954 Rope A_coil_of_rope. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 955 Rope Swap_this_note_at_any_bank_for_the_equivalent_item. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 956 Flier Get_your_axes_from_Bob's_Axes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 957 Flier Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 958 Grey_wolf_fur This_would_make_warm_clothing. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 959 Grey_wolf_fur Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 960 Plank A_plank_of_wood! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 961 Plank Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 962 Christmas_cracker I_need_to_pull_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 963 Christmas_cracker Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 964 Skull Ooooh_spooky! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 965 Skull Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 966 Tile A_fraction_of_a_roof. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 967 Tile Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 968 Rock A_rock 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 969 Rock Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 970 Papyrus Used_for_making_notes. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 971 Papyrus Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 972 Papyrus Used_papyrus,_it_has_squiggles_all_over_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 973 Charcoal A_lump_of_charcoal. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 974 Charcoal Swap_this_note_at_any_bank_for_the_equivalent_item. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 975 Machete A_jungle_specific_slashing_device. 40 40 40 0 6 -2 0 0 0 0 0 0 0 5 0 +item = 977 Cooking_pot A_cooking_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 978 Cooking_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 980 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 981 Disk_of_returning Used_to_get_out_of_Thordur's_blackhole. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 982 Disk_of_returning Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 983 Brass_key Opens_a_door_that_leads_into_a_dungeon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 984 Brass_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 985 Tooth_half_of_a_key The_tooth_end_of_the_mysterious_Crystal_Key._Can_you_find_the_other_half? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 986 Tooth_half_of_a_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 987 Loop_half_of_a_key The_loop_end_of_the_mysterious_Crystal_Key._Can_you_find_the_other_half? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 988 Loop_half_of_a_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 989 Crystal_key A_very_rare_and_mysterious_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 990 Crystal_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 991 Muddy_key It_looks_like_the_key_to_a_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 992 Muddy_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 993 Sinister_key You_get_a_sense_of_dread_from_this_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 994 Sinister_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 995 Coins Lovely_money! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1005 White_apron A_mostly_clean_apron. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1006 White_apron Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1007 Cape A_bright_red_cape. 2 2 2 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1008 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1009 Brass_necklace I'd_prefer_a_gold_one. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1010 Brass_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1011 Blue_skirt Leg_covering_favoured_by_women_and_wizards. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1012 Blue_skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1013 Pink_skirt A_ladies_skirt. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1014 Pink_skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1015 Black_skirt Clothing_favoured_by_women_and_dark_wizards. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1016 Black_skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1017 Wizard_hat A_silly_pointed_hat. 2 2 2 0 0 0 2 0 0 0 0 2 0 0 0 +item = 1018 Wizard_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1019 Cape A_warm_black_cape. 7 7 7 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1020 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1021 Cape A_thick_blue_cape. 32 32 32 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1022 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1023 Cape A_thick_yellow_cape. 32 32 32 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1024 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1025 Eye_patch A_black_piece_of_cloth_on_a_string. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1026 Eye_patch Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1027 Cape A_thick_green_cape. 32 32 32 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1028 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1029 Cape A_thick_purple_cape. 32 32 32 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1030 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1031 Cape A_thick_orange_cape. 32 32 32 0 0 0 0 0 0 1 1 0 1 0 0 +item = 1032 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1033 Zamorak_robe A_robe_worn_by_worshippers_of_Zamorak. 30 30 30 0 0 0 2 0 0 0 3 0 0 0 0 +item = 1034 Zamorak_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1035 Zamorak_robe A_robe_worn_by_worshippers_of_Zamorak. 40 40 40 0 0 0 2 0 0 0 3 0 0 0 0 +item = 1036 Zamorak_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1037 Bunny_ears A_rabbit-like_adornment. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1038 Red_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1039 Red_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1040 Yellow_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1041 Yellow_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1042 Blue_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1043 Blue_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1044 Green_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1045 Green_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1046 Purple_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1047 Purple_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1048 White_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1049 White_partyhat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1050 Santa_hat It's_a_Santa_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1051 Santa_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1052 Cape_of_legends The_cape_worn_by_members_of_the_Legends_Guild. 450 450 450 0 0 0 0 0 7 7 7 7 7 0 0 +item = 1053 Green_h'ween_mask Aaaarrrghhh_..._I'm_a_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1054 Green_h'ween_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1055 Blue_h'ween_mask Aaaarrrghhh_..._I'm_a_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1056 Blue_h'ween_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1057 Red_h'ween_mask Aaaarrrghhh_..._I'm_a_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1058 Red_h'ween_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1059 Leather_gloves These_will_keep_my_hands_warm! 6 6 6 0 0 0 0 0 0 1 2 0 0 0 0 +item = 1060 Leather_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1061 Leather_boots Comfortable_leather_boots. 6 6 6 0 0 0 0 0 0 1 1 0 0 0 0 +item = 1062 Leather_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1063 Leather_vambraces Better_than_no_armour! 18 18 18 0 0 0 0 4 2 2 1 0 0 0 0 +item = 1064 Leather_vambraces Swap_this_note_at_any_bank_for_the_equivalent_item. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1065 Green_d'hide_vamb Vambraces_made_from_100%_real_dragonhide. 1000 1500 0 0 0 0 -15 8 3 2 4 2 0 0 0 +item = 1066 Green_d'hide_vamb Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1067 Iron_platelegs These_look_pretty_heavy. 280 280 280 0 0 0 -21 -7 11 10 10 -4 10 0 0 +item = 1068 Iron_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1069 Steel_platelegs These_look_pretty_heavy. 1000 1000 1000 0 0 0 -21 -7 17 16 15 -4 16 0 0 +item = 1070 Steel_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1071 Mithril_platelegs These_look_pretty_heavy. 2600 2600 2600 0 0 0 -21 -7 24 22 20 -4 22 0 0 +item = 1072 Mithril_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 2600 2600 2600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1073 Adamant_platelegs These_look_pretty_heavy. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 1074 Adamant_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1075 Bronze_platelegs These_look_pretty_heavy. 80 80 80 0 0 0 -21 -7 8 7 6 -4 7 0 0 +item = 1076 Bronze_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1077 Black_platelegs Big,_black_and_heavy_looking. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 1078 Black_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1079 Rune_platelegs These_look_pretty_heavy. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 1080 Rune_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1081 Iron_plateskirt Designer_leg_protection. 280 280 280 0 0 0 -21 -7 11 10 10 -4 10 0 0 +item = 1082 Iron_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1083 Steel_plateskirt Designer_leg_protection. 1000 1000 1000 0 0 0 -21 -7 17 16 15 -4 16 0 0 +item = 1084 Steel_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1085 Mithril_plateskirt Designer_leg_protection. 2600 2600 2600 0 0 0 -21 -7 24 22 20 -4 22 0 0 +item = 1086 Mithril_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 2600 2600 2600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1087 Bronze_plateskirt Designer_leg_protection. 80 80 80 0 0 0 -21 -7 8 7 6 -4 7 0 0 +item = 1088 Bronze_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1089 Black_plateskirt Big,_black_and_heavy_looking. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 1090 Black_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1091 Adamant_plateskirt Designer_leg_protection. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 1092 Adamant_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1093 Rune_plateskirt Designer_leg_protection. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 1094 Rune_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1095 Leather_chaps Better_than_no_armour! 20 20 20 0 0 0 0 4 2 2 1 0 0 0 0 +item = 1096 Leather_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1097 Studded_chaps Those_studs_should_provide_a_bit_more_protection. 300 450 0 0 0 0 -5 6 15 14 17 6 16 0 0 +item = 1098 Studded_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 300 450 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1099 Green_d'hide_chaps Made_from_100%_real_dragonhide. 1560 2340 0 0 0 0 -10 11 25 19 27 14 25 0 0 +item = 1100 Green_d'hide_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 1560 2340 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1101 Iron_chainbody A_series_of_connected_metal_rings. 84 126 0 0 0 0 -15 0 10 15 19 -3 12 0 0 +item = 1102 Iron_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 84 126 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1103 Bronze_chainbody A_series_of_connected_metal_rings. 60 60 60 0 0 0 -15 0 7 11 13 -9 9 0 0 +item = 1104 Bronze_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1105 Steel_chainbody A_series_of_connected_metal_rings. 300 450 0 0 0 0 -15 0 17 25 30 -3 12 0 0 +item = 1106 Steel_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 300 450 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1107 Black_chainbody A_series_of_connected_metal_rings. 576 864 0 0 0 0 -15 0 22 32 39 -3 24 0 0 +item = 1108 Black_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 576 864 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1109 Mithril_chainbody A_series_of_connected_metal_rings. 780 1170 0 0 0 0 -15 0 25 35 42 -3 19 0 0 +item = 1110 Mithril_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 780 1170 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1111 Adamant_chainbody A_series_of_connected_metal_rings. 1920 2880 0 0 0 0 -15 0 36 50 61 -3 38 0 0 +item = 1112 Adamant_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 1920 2880 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1113 Rune_chainbody A_series_of_connected_metal_rings. 20000 30000 0 0 0 0 -15 0 63 72 78 -3 65 0 0 +item = 1114 Rune_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1115 Iron_platebody Provides_excellent_protection. 224 336 0 0 0 0 -30 -10 21 20 12 -6 20 0 0 +item = 1116 Iron_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 224 336 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1117 Bronze_platebody Provides_excellent_protection. 64 96 0 0 0 0 -30 -10 15 14 9 -6 14 0 0 +item = 1118 Bronze_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 64 96 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1119 Steel_platebody Provides_excellent_protection. 800 1200 0 0 0 0 -30 -10 32 31 24 -6 31 0 0 +item = 1120 Steel_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 800 1200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1121 Mithril_platebody Provides_excellent_protection. 2080 3120 0 0 0 0 -30 -10 46 44 38 -6 44 0 0 +item = 1122 Mithril_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 2080 3120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1123 Adamant_platebody Provides_excellent_protection. 5120 9984 0 0 0 0 -30 -10 65 63 55 -6 63 0 0 +item = 1124 Adamant_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 5120 9984 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1125 Black_platebody Provides_excellent_protection. 1536 2304 0 0 0 0 -30 -10 41 40 30 -6 40 0 0 +item = 1126 Black_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 1536 2304 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1127 Rune_platebody Provides_excellent_protection. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 1128 Rune_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1129 Leather_body Better_than_no_armour! 8 1 0 0 0 0 -2 2 8 9 10 4 9 0 0 +item = 1130 Leather_body Swap_this_note_at_any_bank_for_the_equivalent_item. 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1131 Hardleather_body Harder_than_normal_leather. 68 102 0 0 0 0 -4 8 12 15 18 6 15 0 0 +item = 1132 Hardleather_body Swap_this_note_at_any_bank_for_the_equivalent_item. 68 102 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1133 Studded_body Those_studs_should_provide_a_bit_more_protection. 340 510 0 0 0 0 -4 8 18 25 22 8 25 0 0 +item = 1134 Studded_body Swap_this_note_at_any_bank_for_the_equivalent_item. 340 510 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1135 Green_d'hide_body Made_from_100%_real_dragonhide. 3120 4680 0 0 0 0 -18 15 40 32 45 20 40 0 0 +item = 1136 Green_d'hide_body Swap_this_note_at_any_bank_for_the_equivalent_item. 3120 4680 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1137 Iron_med_helm A_medium_sized_helmet. 50 34 0 0 0 0 -3 -3 4 5 3 -1 4 0 0 +item = 1138 Iron_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 50 34 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1139 Bronze_med_helm A_medium_sized_helmet. 9 14 0 0 0 0 -3 -1 3 4 2 -1 3 0 0 +item = 1140 Bronze_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 9 14 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1141 Steel_med_helm A_medium_sized_helmet. 120 180 0 0 0 0 -3 -1 7 8 6 -1 7 0 0 +item = 1142 Steel_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 120 180 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1143 Mithril_med_helm A_medium_sized_helmet. 312 468 0 0 0 0 -3 -1 9 10 8 -1 9 0 0 +item = 1144 Mithril_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 312 468 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1145 Adamant_med_helm A_medium_sized_helmet. 768 1152 0 0 0 0 -3 -1 14 15 13 -1 14 0 0 +item = 1146 Adamant_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1147 Rune_med_helm A_medium_sized_helmet. 7680 11520 0 0 0 0 -3 -1 22 23 21 -1 22 0 0 +item = 1148 Rune_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 7680 11520 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1149 Dragon_med_helm Makes_the_wearer_pretty_intimidating. 40000 60000 0 0 0 0 -3 -1 33 35 32 -1 38 0 0 +item = 1150 Dragon_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1151 Black_med_helm A_medium_sized_helmet. 576 576 576 0 0 0 -3 -1 9 10 8 -1 9 0 0 +item = 1152 Black_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 576 576 576 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1153 Iron_full_helm A_full_face_helmet. 154 154 154 0 0 0 -6 -2 6 7 5 -1 6 0 0 +item = 1154 Iron_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 154 154 154 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1155 Bronze_full_helm A_full_face_helmet. 44 44 44 0 0 0 -6 -2 4 5 3 -1 4 0 0 +item = 1156 Bronze_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 44 44 44 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1157 Steel_full_helm A_full_face_helmet. 550 550 550 0 0 0 -6 -2 9 10 7 -1 9 0 0 +item = 1158 Steel_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1159 Mithril_full_helm A_full_face_helmet. 1430 1430 1430 0 0 0 -6 -2 13 14 11 -1 13 0 0 +item = 1160 Mithril_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 1430 1430 1430 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1161 Adamant_full_helm A_full_face_helmet. 1408 2112 0 0 0 0 -6 -2 19 21 16 -1 19 0 0 +item = 1162 Adamant_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 1408 2112 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1163 Rune_full_helm A_full_face_helmet. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 1164 Rune_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1165 Black_full_helm A_full_face_helmet. 422 634 0 0 0 0 -6 -2 12 13 10 -1 12 0 0 +item = 1166 Black_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 422 634 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1167 Leather_cowl Better_than_no_armour! 10 14 0 0 0 0 0 1 2 3 4 2 3 0 0 +item = 1168 Leather_cowl Swap_this_note_at_any_bank_for_the_equivalent_item. 10 14 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1169 Coif Light_weight_head_protection. 80 120 0 0 0 0 -1 2 4 6 8 4 4 0 0 +item = 1170 Coif Swap_this_note_at_any_bank_for_the_equivalent_item. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1171 Wooden_shield A_solid_wooden_shield. 8 12 0 0 0 0 0 0 4 5 3 1 4 0 0 +item = 1172 Wooden_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 8 12 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1173 Bronze_sq_shield A_medium_square_shield. 19 28 0 0 0 0 -6 -2 5 6 4 0 5 0 0 +item = 1174 Bronze_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 19 28 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1175 Iron_sq_shield A_medium_square_shield. 67 101 0 0 0 0 -6 -2 8 9 7 0 8 0 0 +item = 1176 Iron_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 67 101 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1177 Steel_sq_shield A_medium_square_shield. 240 360 0 0 0 0 -6 -2 12 13 11 0 12 0 0 +item = 1178 Steel_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 240 360 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1179 Black_sq_shield A_medium_square_shield. 460 691 0 0 0 0 -6 -2 15 16 14 0 15 0 0 +item = 1180 Black_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 460 691 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1181 Mithril_sq_shield A_medium_square_shield. 624 936 0 0 0 0 -6 -2 17 19 15 0 17 0 0 +item = 1182 Mithril_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 624 936 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1183 Adamant_sq_shield A_medium_square_shield. 1536 2304 0 0 0 0 -6 -2 24 26 22 0 24 0 0 +item = 1184 Adamant_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 1536 2304 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1185 Rune_sq_shield A_medium_square_shield. 15360 23040 0 0 0 0 -6 -2 38 40 36 0 38 0 0 +item = 1186 Rune_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 15360 23040 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1187 Dragon_sq_shield An_ancient_and_powerful_looking_Dragon_Square_shield. 200000 300000 0 0 0 0 -6 -2 50 52 48 0 50 0 0 +item = 1188 Dragon_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 200000 300000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1189 Bronze_kiteshield A_large_metal_shield. 27 41 0 0 0 0 -6 -2 5 7 6 -1 6 0 0 +item = 1190 Bronze_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 27 41 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1191 Iron_kiteshield A_large_metal_shield. 95 143 0 0 0 0 -8 -2 8 10 9 -1 9 0 0 +item = 1192 Iron_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 95 143 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1193 Steel_kiteshield A_large_metal_shield. 340 510 0 0 0 0 -8 -2 13 15 14 -1 14 0 0 +item = 1194 Steel_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 340 510 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1195 Black_kiteshield A_large_metal_shield. 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 1196 Black_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1197 Mithril_kiteshield A_large_metal_shield. 884 1326 0 0 0 0 -8 -2 18 22 20 -1 20 0 0 +item = 1198 Mithril_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 884 1326 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1199 Adamant_kiteshield A_large_metal_shield. 2176 3264 0 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 1200 Adamant_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1201 Rune_kiteshield A_large_metal_shield. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 1202 Rune_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1203 Iron_dagger Short_but_pointy. 14 21 0 5 3 -4 1 0 0 0 0 1 0 4 0 +item = 1204 Iron_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 14 21 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1205 Bronze_dagger Short_but_pointy. 14 21 0 4 2 -4 1 0 0 0 0 1 0 3 0 +item = 1206 Bronze_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 4 6 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1207 Steel_dagger Short_but_pointy. 50 75 0 8 4 -4 1 0 0 0 0 1 0 7 0 +item = 1208 Steel_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 50 75 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1209 Mithril_dagger A_dangerous_dagger. 130 195 0 11 5 -4 1 0 0 0 0 1 0 10 0 +item = 1210 Mithril_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 130 195 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1211 Adamant_dagger Short_and_deadly. 320 480 0 15 8 -4 0 0 0 0 0 1 0 14 0 +item = 1212 Adamant_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 320 480 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1213 Rune_dagger A_powerful_dagger. 3200 4800 0 25 12 -4 0 0 0 0 0 1 0 24 0 +item = 1214 Rune_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 3200 4800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1215 Dragon_dagger A_powerful_dagger. 12800 18000 0 40 25 -4 1 0 0 0 0 1 0 40 0 +item = 1216 Dragon_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 12800 18000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1217 Black_dagger A_vicious_black_dagger. 240 240 240 10 5 -4 1 0 0 0 0 1 0 7 0 +item = 1218 Black_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1219 Iron_dagger(p) The_blade_is_covered_with_poison. 35 35 35 5 3 -4 1 0 0 0 0 1 0 4 0 +item = 1220 Iron_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1221 Bronze_dagger(p) This_dagger_is_poisoned. 10 10 10 4 2 -4 0 0 0 0 0 1 0 3 0 +item = 1222 Bronze_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1223 Steel_dagger(p) The_blade_has_been_poisoned. 125 125 125 8 4 -4 1 0 0 0 0 1 0 7 0 +item = 1224 Steel_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1225 Mithril_dagger(p) A_poisoned_Mithril_dagger. 325 325 325 11 5 -4 1 0 0 0 0 1 0 10 0 +item = 1226 Mithril_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1227 Adamant_dagger(p) A_very_dangerous_poisoned_dagger. 800 800 800 15 8 -4 0 0 0 0 0 1 0 14 0 +item = 1228 Adamant_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1229 Rune_dagger(p) The_blade_is_covered_with_a_nasty_poison. 8000 8000 8000 25 12 -4 0 0 0 0 0 1 0 24 0 +item = 1230 Rune_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1231 Dragon_dagger(p) A_powerful_dagger. 24000 24000 24000 40 25 -4 1 0 0 0 0 1 0 40 0 +item = 1232 Dragon_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 24000 24000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1233 Black_dagger(p) This_dagger_is_poisoned. 240 240 240 10 5 -4 1 0 0 0 0 1 0 7 0 +item = 1234 Black_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1235 Poisoned_dagger(p) The_blade_is_covered_with_poison. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1236 Poisoned_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1237 Bronze_spear A_bronze_tipped_spear. 10 15 0 5 5 5 0 0 1 1 0 0 0 7 0 +item = 1238 Bronze_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 10 15 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1239 Iron_spear An_iron_tipped_spear. 36 540 0 8 8 8 0 0 1 1 0 0 0 10 0 +item = 1240 Iron_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 36 540 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1241 Steel_spear A_steel_tipped_spear. 130 195 0 12 12 12 0 0 1 1 0 0 0 12 0 +item = 1242 Steel_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 130 195 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1243 Mithril_spear A_mithril_tipped_spear. 338 557 0 17 17 17 0 0 1 1 0 0 0 0 18 0 +item = 1244 Mithril_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 338 557 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1245 Adamant_spear An_adamantite_tipped_spear. 834 1248 0 24 24 24 0 0 1 1 0 0 0 28 0 +item = 1246 Adamant_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 834 1248 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1247 Rune_spear A_rune_tipped_spear. 8320 12480 0 36 36 36 0 0 1 1 0 0 0 42 0 +item = 1248 Rune_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 8320 12480 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1249 Dragon_spear A_dragon_tipped_spear. 24960 37440 0 55 55 55 0 0 5 5 5 5 5 60 0 +item = 1250 Dragon_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 24960 37440 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1251 Bronze_spear(p) A_poisoned_bronze_tipped_spear. 26 26 26 5 5 5 0 0 1 1 0 0 0 7 0 +item = 1252 Bronze_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1253 Iron_spear(p) A_poisoned_iron_tipped_spear. 91 91 91 8 8 8 0 0 1 1 0 0 0 10 0 +item = 1254 Iron_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1255 Steel_spear(p) A_poisoned_steel_tipped_spear. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1256 Steel_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1257 Mithril_spear(p) A_poisoned_mithril_tipped_spear. 845 845 845 17 17 17 0 0 1 1 0 0 0 0 18 0 +item = 1258 Mithril_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 845 845 845 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1259 Adamant_spear(p) A_poisoned_adamantite_tipped_spear. 2080 2080 2080 24 24 24 0 0 1 1 0 0 0 28 0 +item = 1260 Adamant_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1261 Rune_spear(p) A_poisoned_rune_tipped_spear. 20800 20800 20800 36 36 36 0 0 1 1 0 0 0 42 0 +item = 1262 Rune_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 20800 20800 20800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1263 Dragon_spear(p) A_poisoned_dragon_tipped_spear. 62400 62400 62400 55 55 55 0 0 5 5 5 5 5 60 0 +item = 1264 Dragon_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 62400 62400 62400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1265 Bronze_pickaxe Used_for_mining. 1 1 0 4 -2 2 0 0 0 2 0 0 0 5 0 +item = 1266 Bronze_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1267 Iron_pickaxe Used_for_mining. 56 84 0 5 -2 3 0 0 0 2 0 0 0 7 0 +item = 1268 Iron_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 56 84 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1269 Steel_pickaxe Used_for_mining. 200 300 0 8 -2 6 0 0 0 2 0 0 0 9 0 +item = 1270 Steel_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 200 300 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1271 Adamant_pickaxe Used_for_mining. 1280 1920 0 17 -2 15 0 0 0 1 0 0 0 19 0 +item = 1272 Adamant_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1280 1920 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1273 Mithril_pickaxe Used_for_mining. 520 870 0 12 -2 10 0 0 0 2 0 0 0 13 0 +item = 1274 Mithril_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 520 870 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1275 Rune_pickaxe Used_for_mining. 12800 19200 0 26 -2 24 0 0 0 1 0 0 0 29 0 +item = 1276 Rune_pickaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 12800 19200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1277 Bronze_sword A_razor_sharp_sword. 14 26 0 4 3 -2 0 0 0 2 1 0 0 5 0 +item = 1278 Bronze_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 14 26 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1279 Iron_sword A_razor_sharp_sword. 40 64 0 6 4 -2 -4 -1 0 2 1 0 -1 7 0 +item = 1280 Iron_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 40 64 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1281 Steel_sword A_razor_sharp_sword. 121 221 0 11 8 -2 -4 -1 2 1 0 0 0 12 0 +item = 1282 Steel_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 121 221 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1283 Black_sword A_razor_sharp_sword. 392 461 0 14 10 -2 0 0 0 2 1 0 0 12 0 +item = 1284 Black_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 392 461 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1285 Mithril_sword A_razor_sharp_sword. 400 845 0 16 11 -2 0 0 2 1 0 0 0 17 0 +item = 1286 Mithril_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 400 845 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1287 Adamant_sword A_razor_sharp_sword. 2080 2080 2080 23 18 -2 -4 0 2 1 0 0 0 24 0 +item = 1288 Adamant_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1289 Rune_sword A_razor_sharp_sword. 4000 7800 0 38 26 -2 0 0 0 3 2 0 0 39 0 +item = 1290 Rune_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 4000 7800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1291 Bronze_longsword A_razor_sharp_longsword. 31 45 40 4 2 -2 0 0 3 2 0 0 0 7 0 +item = 1292 Bronze_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 31 45 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1293 Iron_longsword A_razor_sharp_longsword. 80 140 0 6 4 -2 -4 -1 3 2 0 0 0 10 0 +item = 1294 Iron_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 140 140 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1295 Steel_longsword A_razor_sharp_longsword. 200 300 0 9 14 0 0 0 3 2 0 0 0 15 0 +item = 1296 Steel_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 200 300 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1297 Black_longsword A_razor_sharp_longsword. 960 960 0 13 18 -2 0 0 0 3 2 0 0 16 0 +item = 1298 Black_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 960 960 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1299 Mithril_longsword A_razor_sharp_longsword. 1300 1300 1300 15 20 -2 0 0 3 2 0 0 0 22 0 +item = 1300 Mithril_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 1300 1300 1300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1301 Adamant_longsword A_razor_sharp_longsword. 3200 3200 3200 20 29 -2 0 0 3 2 0 0 0 31 0 +item = 1302 Adamant_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 3200 3200 3200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1303 Rune_longsword A_razor_sharp_longsword. 12800 19200 0 38 47 -2 0 0 0 3 2 0 0 49 0 +item = 1304 Rune_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 12800 19200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1305 Dragon_longsword A_very_powerful_sword. 40000 60000 0 58 69 -2 0 0 0 3 2 0 0 71 0 +item = 1306 Dragon_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1307 Bronze_2h_sword A_two_handed_sword. 80 80 80 -4 9 8 -4 0 0 0 0 0 -1 10 0 +item = 1308 Bronze_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1309 Iron_2h_sword A_two_handed_sword. 280 280 280 -4 13 10 -4 0 0 0 0 0 -1 14 0 +item = 1310 Iron_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1311 Steel_2h_sword A_two_handed_sword. 1000 1000 1000 -4 21 16 -4 0 0 0 0 0 -1 22 0 +item = 1312 Steel_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1313 Black_2h_sword A_two_handed_sword. 768 1152 0 -4 27 21 -4 0 0 0 0 0 -1 28 0 +item = 1314 Black_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1315 Mithril_2h_sword A_two_handed_sword. 2600 2600 2600 -4 30 24 -4 0 0 0 0 0 -1 31 0 +item = 1316 Mithril_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 2600 2600 2600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1317 Adamant_2h_sword A_two_handed_sword. 6400 6400 6400 -4 43 30 -4 0 0 0 0 0 1 44 0 +item = 1318 Adamant_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 6400 6400 6400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1319 Rune_2h_sword A_two_handed_sword. 64000 44000 64000 -4 69 50 -4 0 0 0 0 0 -1 70 0 +item = 1320 Rune_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 44000 64000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1321 Bronze_scimitar A_vicious,_curved_sword. 32 32 32 1 7 -2 0 0 0 0 0 0 0 6 0 +item = 1322 Bronze_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1323 Iron_scimitar A_vicious,_curved_sword. 112 112 112 2 10 -2 0 0 0 0 0 0 0 9 0 +item = 1324 Iron_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 112 112 112 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1325 Steel_scimitar A_vicious,_curved_sword. 400 400 400 3 15 -2 0 0 0 0 0 0 0 14 0 +item = 1326 Steel_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1327 Black_scimitar A_vicious,_curved_sword. 768 768 768 4 19 -2 0 0 0 0 0 0 0 14 0 +item = 1328 Black_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 768 768 768 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1329 Mithril_scimitar A_vicious,_curved_sword. 1040 1040 1040 5 21 -2 0 0 0 0 0 0 0 20 0 +item = 1330 Mithril_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 1040 1040 1040 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1331 Adamant_scimitar A_vicious,_curved_sword. 2560 2560 2560 6 29 -2 0 0 0 0 0 0 0 28 0 +item = 1332 Adamant_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 2560 2560 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1333 Rune_scimitar A_vicious,_curved_sword. 10240 15360 0 7 45 -2 0 0 0 0 0 0 0 44 0 +item = 1334 Rune_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 10240 15360 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1335 Iron_warhammer I_don't_think_it's_intended_for_joinery. 173 173 173 -4 -4 11 -4 0 0 0 0 0 0 9 0 +item = 1336 Iron_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 173 173 173 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1337 Bronze_warhammer I_don't_think_it's_intended_for_joinery. 47 47 47 -4 -4 10 -4 0 0 0 0 0 0 8 0 +item = 1338 Bronze_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 47 47 47 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1339 Steel_warhammer I_don't_think_it's_intended_for_joinery. 640 640 640 -4 -4 18 -4 0 0 0 0 0 0 16 0 +item = 1340 Steel_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 640 640 640 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1341 Black_warhammer I_don't_think_it's_intended_for_joinery. 980 980 980 -4 -4 22 -4 0 0 0 0 0 0 19 0 +item = 1342 Black_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 980 980 980 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1343 Mithril_warhammer I_don't_think_it's_intended_for_joinery. 1660 1660 1660 -4 -4 25 0 0 0 0 0 0 0 20 0 +item = 1344 Mithril_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 1660 1660 1660 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1345 Addy_warhammer I_don't_think_it's_intended_for_joinery. 4120 4120 4120 -4 -4 33 -4 0 0 0 0 0 0 31 0 +item = 1346 Addy_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 4120 4120 4120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1347 Rune_warhammer I_don't_think_it's_intended_for_joinery. 16600 24900 0 -4 -4 53 -4 0 0 0 0 0 0 48 0 +item = 1348 Rune_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 16600 24900 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1349 Iron_axe A_powerful_axe. 56 56 56 -2 5 3 0 0 0 0 0 0 0 7 0 +item = 1350 Iron_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1351 Bronze_axe A_powerful_axe. 16 16 16 2 4 2 0 0 0 0 0 0 0 5 0 +item = 1352 Bronze_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1353 Steel_axe A_powerful_axe. 200 200 200 -2 8 6 0 0 0 0 0 0 0 9 0 +item = 1354 Steel_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1355 Mithril_axe A_powerful_axe. 520 520 520 -2 12 10 0 0 0 0 0 0 0 10 0 +item = 1356 Mithril_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 520 520 520 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1357 Adamant_axe A_powerful_axe. 1280 1280 1280 -2 17 15 0 0 0 0 0 0 0 19 0 +item = 1358 Adamant_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 1280 1280 1280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1359 Rune_axe A_powerful_axe. 5120 7680 0 -2 26 24 0 0 0 0 0 0 0 29 0 +item = 1360 Rune_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 5120 7680 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1361 Black_axe A_sinister_looking_axe. 384 384 0 -2 10 8 0 0 0 0 0 0 0 12 0 +item = 1362 Black_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 384 384 384 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1363 Iron_battleaxe A_vicious_looking_axe. 182 182 182 -2 8 5 0 0 0 0 0 0 0 13 0 +item = 1364 Iron_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 182 182 182 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1365 Steel_battleaxe A_vicious_looking_axe. 650 650 650 -2 16 11 0 0 0 0 0 0 0 20 0 +item = 1366 Steel_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1367 Black_battleaxe A_vicious_looking_axe. 1248 1248 1248 -2 20 15 0 0 0 0 0 0 0 24 0 +item = 1368 Black_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1248 1248 1248 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1369 Mithril_battleaxe A_vicious_looking_axe. 1690 1690 1690 -2 22 17 0 0 0 0 0 0 0 29 0 +item = 1370 Mithril_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1690 1690 1690 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1371 Adamant_battleaxe A_vicious_looking_axe. 4160 4160 4160 -2 31 26 0 0 0 0 0 0 0 41 0 +item = 1372 Adamant_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 4160 4160 4160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1373 Rune_battleaxe A_vicious_looking_axe. 16640 24960 0 -2 48 43 0 0 0 0 0 0 0 64 0 +item = 1374 Rune_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 16640 24960 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1375 Bronze_battleaxe A_vicious_looking_axe. 52 52 52 -2 6 3 0 0 0 0 0 0 0 9 0 +item = 1376 Bronze_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 52 52 52 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1377 Dragon_battleaxe A_vicious_looking_axe. 80000 120000 0 -2 70 65 0 0 0 0 0 0 0 85 0 +item = 1378 Dragon_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 80000 120000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1379 Staff It's_a_slightly_magical_stick. 15 15 15 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 1380 Staff Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1381 Staff_of_air A_Magical_staff. 1500 1500 1500 3 -1 9 10 0 2 3 1 10 0 6 0 +item = 1382 Staff_of_air Swap_this_note_at_any_bank_for_the_equivalent_item. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1383 Staff_of_water A_Magical_staff. 1500 1500 1500 3 -1 9 10 0 2 3 1 10 0 6 0 +item = 1384 Staff_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1385 Staff_of_earth A_Magical_staff. 1500 1500 1500 3 -1 9 10 0 2 3 1 10 0 6 0 +item = 1386 Staff_of_earth Swap_this_note_at_any_bank_for_the_equivalent_item. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1387 Staff_of_fire A_Magical_staff. 1500 1500 1500 3 -1 9 10 0 2 3 1 10 0 6 0 +item = 1388 Staff_of_fire Swap_this_note_at_any_bank_for_the_equivalent_item. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1389 Magic_staff A_Magical_staff. 200 200 200 2 -1 10 10 0 2 3 1 10 0 7 0 +item = 1390 Magic_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1391 Battlestaff It's_a_slightly_magical_stick. 7000 7000 7000 7 -1 25 10 0 2 3 1 10 0 32 0 +item = 1392 Battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 7000 7000 7000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1393 Fire_battlestaff It's_a_slightly_magical_stick. 15500 15500 15500 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 1394 Fire_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 15500 15500 15500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1395 Water_battlestaff It's_a_slightly_magical_stick. 15500 15500 15500 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 1396 Water_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 15500 15500 15500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1397 Air_battlestaff It's_a_slightly_magical_stick. 15500 15500 15500 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 1398 Air_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 15500 15500 15500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1399 Earth_battlestaff It's_a_slightly_magical_stick. 15500 15500 15500 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 1400 Earth_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 15500 15500 15500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1401 Mystic_fire_staff It's_a_slightly_magical_stick. 42500 42500 42500 10 -1 40 10 0 2 3 1 10 0 50 0 +item = 1402 Mystic_fire_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 42500 42500 42500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1403 Mystic_water_staff It's_a_slightly_magical_stick. 42500 42500 42500 10 -1 40 10 0 2 3 1 10 0 50 0 +item = 1404 Mystic_water_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 42500 42500 42500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1405 Mystic_air_staff It's_a_slightly_magical_stick. 42500 42500 42500 10 -1 40 10 0 2 3 1 10 0 50 0 +item = 1406 Mystic_air_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 42500 42500 42500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1407 Mystic_earth_staff It's_a_slightly_magical_stick. 42500 42500 42500 10 -1 40 10 0 2 3 1 10 0 50 0 +item = 1408 Mystic_earth_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 42500 42500 42500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1409 Iban's_staff An_ancient_staff,_formerly_the_property_of_Iban. 42500 42500 42500 10 -1 40 10 0 2 3 1 10 0 50 0 +item = 1410 Iban's_staff I'll_need_to_get_this_repaired_before_I_can_use_it. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1411 Farmer's_fork A_farmer's_fork. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1412 Farmer's_fork Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1413 Halberd A_halberd. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1414 Halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1415 Warhammer A_warhammer. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1416 Warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1417 Javelin A_javelin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1418 Javelin Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1419 Scythe It's_a_Scythe. 3 8 3 0 0 0 3 1 0 0 0 0 0 10 0 +item = 1420 Iron_mace A_spiky_mace. 63 63 63 4 -2 9 0 0 -2 0 0 0 0 7 1 +item = 1421 Iron_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 63 63 63 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1422 Bronze_mace A_spiky_mace. 18 18 18 2 -2 6 0 0 0 0 0 0 0 5 1 +item = 1423 Bronze_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1424 Steel_mace A_spiky_mace. 225 225 225 7 -2 13 0 0 0 0 0 0 0 11 2 +item = 1425 Steel_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1426 Black_mace A_spiky_mace. 432 432 0 8 -2 16 0 0 0 0 0 0 0 13 2 +item = 1427 Black_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 432 432 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1428 Mithril_mace A_spiky_mace. 585 585 0 11 -2 11 0 0 0 0 0 0 0 16 3 +item = 1429 Mithril_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 585 585 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1430 Adamant_mace A_spiky_mace. 1440 1440 0 13 -2 25 0 0 0 0 0 0 0 23 3 +item = 1431 Adamant_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 1440 1440 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1432 Rune_mace A_spiky_mace. 1532 3602 0 20 -2 39 0 0 -2 0 0 0 0 36 4 +item = 1433 Rune_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 1532 3602 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1434 Dragon_mace A_spiky_mace. 20000 30000 0 40 -2 60 0 0 -2 0 0 0 0 55 5 +item = 1435 Dragon_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1436 Rune_essence An_uncharged_Rune_Stone. 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1437 Rune_essence Swap_this_note_at_any_bank_for_the_equivalent_item. 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1438 Air_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1439 Air_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1440 Earth_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1441 Earth_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1442 Fire_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1443 Fire_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1444 Water_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1445 Water_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1446 Body_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1447 Body_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1448 Mind_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1449 Mind_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1450 Blood_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1451 Blood_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1452 Chaos_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1453 Chaos_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1454 Cosmic_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1455 Cosmic_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1456 Death_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1457 Death_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1458 Law_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1459 Rotten_net For_catching_rotten_fish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1460 Soul_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1461 Soul_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1462 Nature_talisman A_mysterious_power_emanates_from_the_talisman... 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1463 Nature_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1464 Archery_ticket I_can_exchange_this_for_equipment. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1465 Weapon_poison For_use_on_daggers_and_projectiles. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1466 Sea_slug A_rather_nasty_looking_crustacean. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1467 Damp_sticks Some_damp_wooden_sticks. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1468 Dry_sticks Some_dry_wooden_sticks. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1469 Broken_glass Smashed_glass. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1470 Red_bead A_small_round_red_bead. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1471 Red_bead Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1472 Yellow_bead A_small_round_yellow_bead. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1473 Yellow_bead Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1474 Black_bead A_small_round_black_bead. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1475 Black_bead Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1476 White_bead A_small_round_white_bead. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1477 White_bead Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1478 Amulet_of_accuracy It_increases_my_aim. 100 100 100 4 4 4 4 4 0 0 0 0 0 0 0 +item = 1479 Amulet_of_accuracy Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1480 Rock A_chunk_of_rock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1481 Orb_of_light A_magical_sphere_that_glimmers_within. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1482 Orb_of_light A_magical_sphere_that_glimmers_within. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1483 Orb_of_light A_magical_sphere_that_glimmers_within. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1484 Orb_of_light A_magical_sphere_that_glimmers_within. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1485 Damp_cloth A_damp,_wet_cloth. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1486 Piece_of_railing A_broken_piece_of_railing. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1487 Unicorn_horn A_withered_unicorn_horn. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1488 Paladin's_badge A_coat_of_arms_of_the_Ardougne_Paladins. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1489 Paladin's_badge A_coat_of_arms_of_the_Ardougne_Paladins. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1490 Paladin's_badge A_coat_of_arms_of_the_Ardougne_Paladins. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1491 Witch's_cat A_cat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1492 Doll_of_iban A_simple_doll_with_Iban's_likeness. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1493 Old_journal An_account_of_the_last_times_of_someone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1494 History_of_iban The_tale_of_Iban. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1495 Klank's_gauntlets Strong_dwarvish_gloves. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1496 Iban's_dove I_thought_you_only_saw_these_in_pairs? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1497 Amulet_of_othanian A_mystical_demonic_amulet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1498 Amulet_of_doomion A_mystical_demonic_amulet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1499 Amulet_of_holthion A_mystical_demonic_amulet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1500 Iban's_shadow A_strange_dark_liquid. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1501 Dwarf_brew Smells_stronger_than_most_spirits. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1502 Iban's_ashes The_burnt_remains_of_Iban. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1503 Warrant A_search_warrant_for_a_house_in_Ardougne. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1504 Hangover_cure It_doesn't_look_very_tasty. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1505 A_magic_scroll Maybe_I_should_read_it... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1506 Gas_mask Stops_me_from_breathing_nasty_stuff! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1507 A_small_key Quite_a_small_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1508 A_scruffy_note It_seems_to_say_"hongorer_lure"... 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1509 Book Turnip_growing_for_beginners. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1510 Picture A_picture_of_a_lady_called_Elena. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1511 Logs A_number_of_wooden_logs. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1512 Logs Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1513 Magic_logs Logs_cut_from_a_magic_tree. 320 320 320 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1514 Magic_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 320 320 320 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1515 Yew_logs Logs_cut_from_a_yew_tree. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1516 Yew_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1517 Maple_logs Logs_cut_from_a_maple_tree. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1518 Maple_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1519 Willow_logs Logs_cut_from_a_willow_tree. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1520 Willow_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1521 Oak_logs Logs_cut_from_an_oak_tree. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1522 Oak_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1523 Lockpick For_picking_tough_locks. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1524 Lockpick Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1525 Grimy_snake_weed I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1526 Clean_snake_weed A_fresh_herb. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1527 Grimy_ardrigal I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1528 Clean_ardrigal A_fresh_herb. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1529 Grimy_sito_foil I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1530 Clan_sito_foil A_fresh_herb. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1531 Grimy_volencia_moss I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1532 Clean_volencia_moss A_fresh_herb. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1533 Grimy_rogue's_purse I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1534 Rogue's_purse A_fresh_herb. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1535 Map_part A_piece_of_a_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1536 Map_part A_piece_of_a_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1537 Map_part A_piece_of_a_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1538 Crandor_map A_map_of_the_route_to_Crandor. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1539 Steel_nails Keeps_things_in_place_fairly_permanently. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1540 Anti-dragon_shield This_provides_partial_protection_from_dragon-breath_attacks. 20 20 20 0 0 0 0 0 7 9 8 2 8 0 0 +item = 1541 Anti-dragon_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1542 Maze_key A_key_to_Melzar's_Maze. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1543 Key A_red_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1544 Key An_orange_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1545 Key A_yellow_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1546 Key A_blue_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1547 Key A_magenta_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1548 Key A_green_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1549 Stake A_very_pointy_stick. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1550 Garlic A_clove_of_garlic. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1551 Garlic Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1552 Seasoned_sardine Sardine_flavoured_with_doogle_leaves. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1553 Seasoned_sardine Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1554 Fluffs'_kitten It_looks_like_it's_lost. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1555 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1556 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1557 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1558 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1559 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1560 Pet_kitten This_kitten_seems_to_like_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1561 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1562 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1563 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1564 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1565 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1566 Pet_cat This_cat_definitely_likes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1567 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1568 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1569 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1570 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1571 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1572 Pet_cat This_cat_is_so_well_fed_it_can_hardly_move. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1573 Doogle_leaves A_tasty_herb_good_for_seasoning. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1574 Doogle_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1575 Cat_training_medal For_feline_training_expertise. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1576 Cat_training_medal Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1577 Pete's_candlestick Scarface_Pete's_Candlestick. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1578 Pete's_candlestick Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1579 Thieves'_armband This_denotes_a_Master_Thief. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1580 Ice_gloves These_will_keep_my_hands_cold! 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1581 Blamish_snail_slime Yuck. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1582 Blamish_oil Made_from_the_finest_snail_slime. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1583 Fire_feather Firebird_feather. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1584 Id_papers Apparently_my_name_is_Hartigen. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1585 Oily_fishing_rod Useful_for_catching_lava_eels. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1586 Miscellaneous_key I_wonder_what_this_unlocks? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1587 Miscellaneous_key Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1588 Grips'_keyring Some_keys_on_a_keyring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1589 Pretty_girl To_be_handled_with_caution. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1590 Dusty_key I_wonder_what_this_unlocks? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1591 Jail_key Key_to_a_cell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1592 Ring_mould Used_to_make_gold_rings. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1593 Ring_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1594 Unholy_mould Used_to_make_unholy_symbols. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1595 Amulet_mould Used_to_make_gold_amulets 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1596 Amulet_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1597 Necklace_mould Used_to_make_gold_necklaces. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1598 Necklace_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1599 Holy_mould Used_to_make_Holy_Symbols_of_Saradomin. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1600 Holy_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1601 Diamond This_looks_valuable. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1602 Diamond Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1603 Ruby This_looks_valuable. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1604 Ruby Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1605 Emerald This_looks_valuable. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1606 Emerald Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1607 Sapphire This_looks_valuable. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1608 Sapphire Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1609 Opal A_semi_precious_stone. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1610 Opal Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1611 Jade A_semi_precious_stone. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1612 Jade Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1613 Red_topaz A_semi_precious_stone. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1614 Red_topaz Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1615 Dragonstone This_looks_valuable. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1616 Dragonstone Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1617 Uncut_diamond This_would_be_worth_more_cut. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1618 Uncut_diamond Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1619 Uncut_ruby This_would_be_worth_more_cut. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1620 Uncut_ruby Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1621 Uncut_emerald This_would_be_worth_more_cut. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1622 Uncut_emerald Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1623 Uncut_sapphire This_would_be_worth_more_cut. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1624 Uncut_sapphire Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1625 Uncut_opal This_would_be_worth_more_cut. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1626 Uncut_opal Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1627 Uncut_jade This_would_be_worth_more_cut. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1628 Uncut_jade Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1629 Uncut_red_topaz This_would_be_worth_more_cut. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1630 Uncut_red_topaz Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1631 Uncut_dragonstone This_would_be_worth_more_cut. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1632 Uncut_dragonstone Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1633 Crushed_gemstone A_gemstone_that_has_been_smashed. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1634 Crushed_gemstone Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1635 Gold_ring A_valuable_ring. 6000 6000 6000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1636 Gold_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 6000 6000 6000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1637 Sapphire_ring A_valuable_ring. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1638 Sapphire_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1639 Emerald_ring A_valuable_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1640 Emerald_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1641 Ruby_ring A_valuable_ring. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1642 Ruby_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1643 Diamond_ring A_valuable_ring. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1644 Diamond_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1645 Dragonstone_ring A_valuable_ring. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1646 Dragonstone_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1648 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1649 Sapphire_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1650 Emerald_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1651 Ruby_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1652 Diamond_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1653 Dragonstone_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1654 Gold_necklace I_wonder_if_this_is_valuable. 450 450 450 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1655 Gold_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 450 450 450 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1656 Sapphire_necklace I_wonder_if_this_is_valuable. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1657 Sapphire_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1658 Emerald_necklace I_wonder_if_this_is_valuable. 1425 1425 1425 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1659 Emerald_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 1425 1425 1425 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1660 Ruby_necklace I_wonder_if_this_is_valuable. 2175 2175 2175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1661 Ruby_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 2175 2175 2175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1662 Diamond_necklace I_wonder_if_this_is_valuable. 3675 3675 3675 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1663 Diamond_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 3675 3675 3675 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1664 Dragon_necklace I_wonder_if_this_is_valuable. 18375 18375 18375 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1665 Dragon_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 18375 18375 18375 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1667 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1668 Sapphire_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1669 Emerald_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1670 Ruby_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1671 Diamond_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1672 Dragon_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1673 Gold_amulet It_needs_a_string_so_I_can_wear_it. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1674 Gold_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1675 Sapphire_amulet It_needs_a_string_so_I_can_wear_it. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1676 Sapphire_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1677 Emerald_amulet It_needs_a_string_so_I_can_wear_it. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1678 Emerald_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1679 Ruby_amulet It_needs_a_string_so_I_can_wear_it. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1680 Ruby_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1681 Diamond_amulet It_needs_a_string_so_I_can_wear_it. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1682 Diamond_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1683 Dragonstone_ammy It_needs_a_string_so_I_can_wear_it. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1684 Dragonstone_ammy Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1686 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1687 Sapphire_amulet It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1688 Emerald_amulet It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1689 Ruby_amulet It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1690 Diamond_amulet It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1691 Dragonstone_ammy It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1692 Gold_amulet A_plain_gold_amulet. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1693 Gold_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1694 Sapphire_amulet I_wonder_if_I_can_get_this_enchanted. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1695 Sapphire_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1696 Emerald_amulet I_wonder_if_I_can_get_this_enchanted. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1697 Emerald_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1698 Ruby_amulet I_wonder_if_I_can_get_this_enchanted. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1699 Ruby_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1700 Diamond_amulet I_wonder_if_I_can_get_this_enchanted. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1701 Diamond_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1702 Dragonstone_ammy I_wonder_if_I_can_get_this_enchanted. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1703 Dragonstone_ammy Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1704 Amulet_of_glory A_very_powerful_dragonstone_amulet. 50000 17625 17625 10 10 10 10 10 3 3 3 3 3 6 3 +item = 1705 Amulet_of_glory Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1706 Amulet_of_glory(1) A_dragonstone_amulet_with_1_magic_charge. 17625 17625 17625 10 10 10 10 10 3 3 3 3 3 6 3 +item = 1707 Amulet_of_glory(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1708 Amulet_of_glory(2) A_dragonstone_amulet_with_2_magic_charges. 17625 17625 17625 10 10 10 10 10 3 3 3 3 3 6 3 +item = 1709 Amulet_of_glory(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1710 Amulet_of_glory(3) A_dragonstone_amulet_with_3_magic_charges. 17625 17625 17625 10 10 10 10 10 3 3 3 3 3 6 3 +item = 1711 Amulet_of_glory(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1712 Amulet_of_glory(4) A_dragonstone_amulet_with_4_magic_charges. 17625 17625 17625 10 10 10 10 10 3 3 3 3 3 6 3 +item = 1713 Amulet_of_glory(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1714 Unstrung_symbol It_needs_a_string_so_I_can_wear_it. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1715 Unstrung_symbol Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1716 Unblessed_symbol A_symbol_of_Saradomin. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1717 Unblessed_symbol Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1718 Holy_symbol A_blessed_holy_symbol_of_Saradomin. 300 300 300 0 0 0 0 0 2 2 2 2 2 0 8 +item = 1719 Holy_symbol Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1720 Unstrung_emblem It_needs_a_string_so_I_can_wear_it. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1721 Unstrung_emblem Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1722 Unpowered_symbol An_unblessed_symbol_of_Zamorak. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1723 Unpowered_symbol Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1724 Unholy_symbol An_unholy_symbol_of_Zamorak. 200 200 200 2 2 2 2 2 0 0 0 0 0 0 8 +item = 1725 Amulet_of_strength An_enchanted_ruby_amulet. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 10 0 +item = 1726 Amulet_of_strength Swap_this_note_at_any_bank_for_the_equivalent_item. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1727 Amulet_of_magic An_enchanted_sapphire_amulet_of_magic. 900 900 900 0 0 0 10 0 0 0 0 0 0 0 0 +item = 1728 Amulet_of_magic Swap_this_note_at_any_bank_for_the_equivalent_item. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1729 Amulet_of_defence An_enchanted_emerald_amulet_of_protection. 1275 1275 1275 0 0 0 0 0 7 7 7 7 7 0 0 +item = 1730 Amulet_of_defence Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1731 Amulet_of_power An_enchanted_diamond_amulet_of_power. 3525 3525 3525 6 6 6 6 6 6 6 6 6 6 4 1 +item = 1732 Amulet_of_power Swap_this_note_at_any_bank_for_the_equivalent_item. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1733 Needle Used_with_a_thread_to_make_clothes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1734 Thread Used_with_a_needle_to_make_clothes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1735 Shears For_shearing_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1736 Shears Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1737 Wool I_think_this_came_from_a_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1738 Wool Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1739 Cowhide I_should_take_this_to_the_tannery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1740 Cowhide Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1741 Leather It's_a_piece_of_leather. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1742 Leather Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1743 Hard_leather It's_a_piece_of_hard_leather. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1744 Hard_leather Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1745 Green_d-leather It's_a_piece_of_prepared_green_dragonhide. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1746 Green_d-leather Swap_this_note_at_any_bank_for_the_equivalent_item-leather. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1747 Black_dragonhide The_scaly_rough_hide_from_a_Black_Dragon. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1748 Black_dragonhide Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1749 Red_dragonhide The_scaly_rough_hide_from_a_Red_Dragon. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1750 Red_dragonhide Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1751 Blue_dragonhide The_scaly_rough_hide_from_a_Blue_Dragon. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1752 Blue_dragonhide Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1753 Green_dragonhide The_scaly_rough_hide_from_a_Green_Dragon. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1754 Green_dragonhide Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1755 Chisel Good_for_detailed_crafting. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1756 Chisel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1757 Brown_apron A_mostly_clean_apron. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1758 Brown_apron Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1759 Ball_of_wool Spun_from_sheeps'_wool. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1760 Ball_of_wool Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1761 Soft_clay Clay_soft_enough_to_mould. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1762 Soft_clay Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1763 Red_dye A_little_bottle_of_red_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1764 Red_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1765 Yellow_dye A_little_bottle_of_yellow_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1766 Yellow_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1767 Blue_dye A_little_bottle_of_blue_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1768 Blue_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1769 Orange_dye A_little_bottle_of_orange_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1770 Orange_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1771 Green_dye A_little_bottle_of_green_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1772 Green_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1773 Purple_dye A_little_bottle_of_purple_dye. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1774 Purple_dye Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1775 Molten_glass Hot_glass_ready_to_be_blown_into_useful_objects. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1776 Molten_glass Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1777 Bow_string I_need_a_bow_stave_to_attach_this_to. 4 6 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1778 Bow_string Swap_this_note_at_any_bank_for_the_equivalent_item. 4 6 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1779 Flax I_should_use_this_with_a_spinning_wheel. 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1780 Flax Swap_this_note_at_any_bank_for_the_equivalent_item. 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1781 Soda_ash One_of_the_ingredients_for_making_glass. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1782 Soda_ash Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1783 Bucket_of_sand One_of_the_ingredients_for_making_glass. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1784 Bucket_of_sand Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1785 Glassblowing_pipe Used_to_form_molten_glass_into_useful_items. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1786 Glassblowing_pipe Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1787 Unfired_pot I_need_to_put_this_in_a_pottery_oven. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1788 Unfired_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1789 Unfired_pie_dish I_need_to_put_this_in_a_pottery_oven. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1790 Unfired_pie_dish Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1791 Unfired_bowl I_need_to_put_this_in_a_pottery_oven. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1792 Unfired_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1793 Woad_leaf A_slightly_bluish_leaf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1794 Bronze_wire Useful_for_crafting_items. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1795 Bronze_wire Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1796 Silver_necklace Anna's_shiny_silver_coated_necklace. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1797 Silver_necklace Anna's_shiny_silver_coated_necklace_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1798 Silver_cup Bob's_shiny_silver_coated_tea_cup. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1799 Silver_cup Bob's_shiny_silver_coated_tea_cup_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1800 Silver_bottle Carol's_shiny_silver_coated_bottle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1801 Silver_bottle Carol's_shiny_silver_coated_bottle_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1802 Silver_book David's_shiny_silver_coated_book. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1803 Silver_book David's_shiny_silver_coated_book_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1804 Silver_needle Elizabeth's_shiny_silver_coated_needle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1805 Silver_needle Elizabeth's_shiny_silver_coated_needle_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1806 Silver_pot Frank's_shiny_silver_coated_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1807 Silver_pot Frank's_shiny_silver_coated_pot_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1808 Criminal's_thread Some_red_thread_found_at_the_murder_scene. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1809 Criminal's_thread Some_green_thread_found_at_the_murder_scene. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1810 Criminal's_thread Some_blue_thread_found_at_the_murder_scene. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1811 Flypaper A_piece_of_fly_paper._It's_sticky. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1812 Pungent_pot A_pot_found_at_the_murder_scene,_with_a_sickly_odour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1813 Criminal's_dagger A_flimsy-looking_dagger_found_at_the_crime_scene. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1814 Criminal's_dagger A_flimsy-looking_dagger_found_at_the_crime_scene_coated_with_a_thin_layer_of_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1815 Killer's_print The_fingerprints_of_the_murderer. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1816 Anna's_print An_imprint_of_Anna's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1817 Bob's_print An_imprint_of_Bob's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1818 Carol's_print An_imprint_of_Carol's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1819 David's_print An_imprint_of_David's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1820 Elizabeth's_print An_imprint_of_Elizabeth's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1821 Frank's_print An_imprint_of_Frank's_fingerprint. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1822 Unknown_print An_unidentified_fingerprint_taken_from_the_murder_weapon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1823 Waterskin(4) A_full_waterskin_with_four_portions_of_water. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1824 Waterskin(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1825 Waterskin(3) A_nearly_full_waterskin_with_three_portions_of_water. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1826 Waterskin(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1827 Waterskin(2) A_half_empty_waterskin_with_two_portions_of_water. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1828 Waterskin(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1829 Waterskin(1) A_nearly_empty_waterskin_with_one_portion_of_water. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1830 Waterskin(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1831 Waterskin(0) A_completely_empty_waterskin_-_you'll_need_to_fill_it_up. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1832 Waterskin(0) Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1833 Desert_shirt A_cool,_light_desert_shirt. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1834 Desert_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1835 Desert_robe A_cool,_light_desert_robe. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1836 Desert_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1837 Desert_boots Comfortable_desert_shoes. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1838 Desert_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1839 Metal_key A_metal_key,_it's_very_crudely_constructed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1840 Cell_door_key A_metallic_key,_usually_used_by_prison_guards. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1841 Barrel An_empty_mining_barrel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1842 Ana_in_a_barrel A_mining_barrel_with_Ana_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1843 Wrought_iron_key This_key_unlocks_a_very_sturdy_gate_of_some_sort. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1844 Slave_shirt A_filthy,_smelly,_flea_infested_shirt. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1845 Slave_robe A_filthy,_smelly,_flea_infested_robe. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1846 Slave_boots A_set_of_filthy,_smelly,_flea_infested_desert_slave_boots. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1847 Scrumpled_paper A_piece_of_paper_with_barely_legible_writing_-_looks_like_a_recipe! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1848 Shantay_disclaimer Very_important_information. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1849 Prototype_dart A_prototype_throwing_dart. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1850 Technical_plans Plans_of_a_technical_nature. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1851 Tenti_pineapple The_most_delicious_of_pineapples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1852 Bedabin_key A_key_to_the_chest_in_Captain_Siad's_room. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1853 Prototype_dart_tip A_prototype_dart_tip_-_it_looks_deadly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1854 Shantay_pass Allows_you_to_pass_through_the_Shantay_pass_into_the_Kharid_Desert. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1855 Rock Looks_like_a_plain_rock,_must_have_some_ore_in_it? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1856 Guide_book 'A_Tourists_Guide_To_Ardougne'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1857 Totem The_Rantuki_tribes'_totem. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1858 Address_label It_says_'To_Lord_Handelmort,_Handelmort_Mansion'. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1859 Raw_ugthanki_meat I_need_to_cook_this_first. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1860 Raw_ugthanki_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1861 Ugthanki_meat Freshly_cooked_ugthanki_meat. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1862 Ugthanki_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1863 Pitta_dough I_need_to_cook_this. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1864 Pitta_dough Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1865 Pitta_bread Nicely_baked_pitta_bread._Needs_more_ingredients_to_make_a_kebab. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1866 Pitta_bread Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1867 Burnt_pitta_bread It's_all_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1868 Burnt_pitta_bread Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1869 Chopped_tomato A_mixture_of_tomatoes_in_a_bowl. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1870 Chopped_tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1871 Chopped_onion A_mixture_of_onions_in_a_bowl. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1872 Chopped_onion Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1873 Chopped_ugthanki Strips_of_ugthanki_meat_in_a_bowl. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1874 Chopped_ugthanki Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1875 Onion_&_tomato A_mixture_of_chopped_onions_and_tomatoes_in_a_bowl. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1876 Onion_&_tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1877 Ugthanki_&_onion A_mixture_of_chopped_onions_and_ugthanki_meat_in_a_bowl. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1878 Ugthanki_&_onion Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1879 Ugthanki_&_tomato A_mixture_of_chopped_tomatoes_and_ugthanki_meat_in_a_bowl. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1880 Ugthanki_&_tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1881 Kebab_mix A_mixture_of_chopped_tomatoes,_onions_and_ugthanki_meat_in_a_bowl. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1882 Kebab_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1883 Ugthanki_kebab A_strange_smelling_kebab_made_from_ugthanki_meat. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1884 Ugthanki_kebab Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1885 Ugthanki_kebab A_fresh_kebab_made_from_ugthanki_meat. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1886 Ugthanki_kebab Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1887 Cake_tin Useful_for_baking_cakes. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1888 Cake_tin Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1889 Uncooked_cake Now_all_I_need_to_do_is_cook_it. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1890 Uncooked_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1891 Cake A_plain_sponge_cake. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1892 Cake Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1893 2/3_cake Someone_has_eaten_a_big_chunk_of_this_cake. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1894 2/3_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1895 Slice_of_cake I'd_rather_have_a_whole_cake. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1896 Slice_of_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1897 Chocolate_cake This_looks_very_tasty. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1898 Chocolate_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1899 2/3_chocolate_cake Someone_has_eaten_a_big_chunk_of_this_cake. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1900 2/3_chocolate_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1901 Chocolate_slice I'd_rather_have_a_whole_cake. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1902 Chocolate_slice Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1903 Burnt_cake Argh_what_a_mess! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1904 Burnt_cake Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1905 Asgarnian_ale Probably_the_finest_ale_in_Asgarnia. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1906 Asgarnian_ale Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1907 Wizard's_mind_bomb It's_got_strange_bubbles_in_it. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1908 Wizard's_mind_bomb Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1909 Greenman's_ale A_glass_of_frothy_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1910 Greenman's_ale Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1911 Dragon_bitter A_glass_of_bitter. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1912 Dragon_bitter Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1913 Dwarven_stout A_pint_of_thick_dark_beer. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1914 Dwarven_stout Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1915 Grog A_murky_glass_of_some_sort_of_drink. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1916 Grog Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1917 Beer A_glass_of_frothy_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1918 Beer Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1919 Beer_glass I_need_to_fill_this_with_beer. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1920 Beer_glass Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1921 Bowl_of_water It's_a_bowl_of_water. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1922 Bowl_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1923 Bowl Useful_for_mixing_things. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1924 Bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1925 Bucket It's_a_wooden_bucket. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1926 Bucket Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1927 Bucket_of_milk It's_a_bucket_of_milk. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1928 Bucket_of_milk Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1929 Bucket_of_water It's_a_bucket_of_water. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1930 Bucket_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1931 Pot This_pot_is_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1932 Pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1933 Pot_of_flour There_is_flour_in_this_pot. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1934 Pot_of_flour Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1935 Jug This_jug_is_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1936 Jug Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1937 Jug_of_water It's_full_of_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1938 Jug_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1939 Swamp_tar A_foul_smelling_thick_tar-like_substance. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1940 Raw_swamp_paste A_thick_tar-like_substance_mixed_with_flour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1941 Swamp_paste A_tar-like_substance_mixed_with_flour_and_warmed. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1942 Potato This_could_be_used_to_make_a_good_stew. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1943 Potato Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1944 Egg A_nice_fresh_egg. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1945 Egg Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1946 Flour A_little_heap_of_flour. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1947 Grain Some_wheat_heads. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1948 Grain Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1949 Chef's_hat What_a_silly_hat. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1950 Chef's_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1951 Redberries Very_bright_red_berries. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1952 Redberries Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1953 Pastry_dough Potentially_pastry. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1954 Pastry_dough Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1955 Cooking_apple Keeps_the_doctor_away. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1956 Cooking_apple Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1957 Onion A_strong_smelling_onion. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1958 Onion Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1959 Pumpkin Happy_Halloween. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1960 Pumpkin Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1961 Easter_egg Happy_Easter. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1962 Easter_egg Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1963 Banana Mmm_this_looks_tasty. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1964 Banana Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1965 Cabbage Yuck_I_don't_like_cabbage. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1966 Cabbage Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1967 Cabbage Yuck_I_don't_like_cabbage. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1968 Cabbage Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1969 Spinach_roll A_home_made_spinach_thing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1970 Spinach_roll Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1971 Kebab A_meaty_kebab. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1972 Kebab Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1973 Chocolate_bar Mmmmmmm_chocolate. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1974 Chocolate_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1975 Chocolate_dust It's_ground_up_chocolate. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1976 Chocolate_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1977 Chocolatey_milk Milk_with_chocolate_in_it. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1978 Cup_of_tea A_nice_cup_of_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1979 Cup_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1980 Empty_cup An_empty_cup. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1981 Empty_cup Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1982 Tomato This_would_make_good_ketchup. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1983 Tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1984 Rotten_apple Rotten_to_the_core! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1985 Cheese It's_got_holes_in_it. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1986 Cheese Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1987 Grapes Good_grapes_for_wine_making. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1988 Grapes Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1989 Half_full_wine_jug An_optimist_would_say_it's_half_full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1990 Half_full_wine_jug Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1991 Jug_of_bad_wine Oh_dear,_this_wine_is_terrible! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1992 Jug_of_bad_wine Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1993 Jug_of_wine It's_full_of_wine. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1994 Jug_of_wine Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1995 Unfermented_wine This_wine_needs_to_ferment_before_it_can_be_drunk. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1996 Unfermented_wine Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1997 Incomplete_stew I_need_to_add_some_meat_too. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1998 Incomplete_stew Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 1999 Incomplete_stew I_need_to_add_some_potato_too. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2000 Incomplete_stew Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2001 Uncooked_stew I_need_to_cook_this. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2002 Uncooked_stew Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2003 Stew It's_a_meat_and_potato_stew. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2004 Stew Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2005 Burnt_stew Eew,_it's_horribly_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2006 Burnt_stew Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2007 Spice This_could_liven_up_an_otherwise_bland_stew. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2008 Spice Swap_this_note_at_any_bank_for_the_equivalent_item. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2009 Uncooked_curry I_need_to_cook_this. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2010 Uncooked_curry Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2011 Curry It's_a_spicy_hot_curry. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2012 Curry Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2013 Burnt_curry Eew,_it's_horribly_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2014 Burnt_curry Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2015 Vodka A_strong_spirit. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2016 Vodka Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2017 Whisky A_bottle_of_Draynor_Malt. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2018 Whisky Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2019 Gin A_strong_spirit. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2020 Gin Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2021 Brandy A_strong_spirit. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2022 Brandy Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2023 Cocktail_guide A_book_on_tree_gnome_cocktails. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2024 Cocktail_guide Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2025 Cocktail_shaker Used_for_mixing_cocktails. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2026 Cocktail_glass For_sipping_cocktails. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2027 Cocktail_glass Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2028 Blurberry_special Looks_good..._smells_strong. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2029 Blurberry_special Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2030 Choc_saturday A_warm_creamy_alcoholic_beverage. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2031 Choc_saturday Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2032 Drunk_dragon A_warm_creamy_alcoholic_beverage. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2033 Drunk_dragon Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2034 Fruit_blast A_cool_refreshing_fruit_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2035 Fruit_blast Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2036 Pineapple_punch A_fresh_healthy_fruit_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2037 Pineapple_punch Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2038 Short_green_guy A_Short_Green_Guy..._looks_good. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2039 Short_green_guy Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2040 Wizard_blizzard This_looks_like_a_strange_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2041 Wizard_blizzard Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2042 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2043 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2044 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2045 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2046 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2047 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2048 Pineapple_punch A_fresh_healthy_fruit_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2049 Pineapple_punch Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2050 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2051 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2052 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2053 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2054 Wizard_blizzard This_looks_like_a_strange_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2055 Wizard_blizzard Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2056 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2057 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2058 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2059 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2060 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2061 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2062 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2063 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2064 Blurberry_special Looks_good..._smells_strong. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2065 Blurberry_special Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2066 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2067 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2068 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2069 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2070 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2071 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2072 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2073 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2074 Choc_saturday A_warm_creamy_alcoholic_beverage. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2075 Choc_saturday Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2076 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2077 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2078 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2079 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2080 Short_green_guy A_Short_Green_Guy..._looks_good. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2081 Short_green_guy Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2082 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2083 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2084 Fruit_blast A_cool_refreshing_fruit_mix. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2085 Fruit_blast Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2086 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2087 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2088 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2089 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2090 Unfinished_cocktail This_cocktail_is_just_missing_those_little_finishing_touches. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2091 Unfinished_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2092 Drunk_dragon A_warm_creamy_alcoholic_beverage. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2093 Drunk_dragon Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2094 Odd_cocktail I'm_not_completely_sure_what_this_contains. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2095 Odd_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2096 Odd_cocktail I'm_not_completely_sure_what_this_contains. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2097 Odd_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2098 Odd_cocktail I'm_not_completely_sure_what_this_contains. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2099 Odd_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2100 Odd_cocktail I'm_not_completely_sure_what_this_contains. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2101 Odd_cocktail Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2102 Lemon A_fresh_lemon. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2103 Lemon Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2104 Lemon_chunks Fresh_chunks_of_lemon. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2105 Lemon_chunks Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2106 Lemon_slices Fresh_lemon_slices. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2107 Lemon_slices Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2108 Orange A_fresh_orange. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2109 Orange Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2110 Orange_chunks Fresh_chunks_of_orange. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2111 Orange_chunks Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2112 Orange_slices Fresh_orange_slices. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2113 Orange_slices Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2114 Pineapple It_can_be_cut_up_into_something_more_manageable_with_a_knife. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2115 Pineapple Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2116 Pineapple_chunks Fresh_chunks_of_pineapple. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2117 Pineapple_chunks Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2118 Pineapple_ring Exotic_fruit. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2119 Pineapple_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2120 Lime A_fresh_lime. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2121 Lime Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2122 Lime_chunks Fresh_chunks_of_lime. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2123 Lime_chunks Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2124 Lime_slices Fresh_lime_slices. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2125 Lime_slices Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2126 Dwellberries Some_rather_pretty_blue_berries. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2127 Dwellberries Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2128 Equa_leaves Small_sweet_smelling_leaves. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2129 Equa_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2130 Pot_of_cream Fresh_cream. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2131 Pot_of_cream Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2132 Raw_beef I_need_to_cook_this_first. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2133 Raw_beef Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2134 Raw_rat_meat I_need_to_cook_this_first. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2135 Raw_rat_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2136 Raw_bear_meat I_need_to_cook_this_first. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2137 Raw_bear_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2138 Raw_chicken I_need_to_cook_this_first. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2139 Raw_chicken Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2140 Cooked_chicken Mmm_this_looks_tasty. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2141 Cooked_chicken Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2142 Cooked_meat Mmm_this_looks_tasty. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2143 Cooked_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2144 Burnt_chicken Oh_dear,_it's_totally_burnt! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2145 Burnt_chicken Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2146 Burnt_meat Oh_dear,_it's_totally_burnt! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2147 Burnt_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2148 Raw_lava_eel A_very_strange_eel. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2149 Lava_eel Strange,_it_looks_cooler_now_it's_been_cooked. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2150 Swamp_toad A_slippery_little_blighter. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2151 Swamp_toad Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2152 Toad's_legs They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2153 Toad's_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2154 Equa_toad's_legs They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2155 Equa_toad's_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2156 Spicy_toad's_legs They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2157 Spicy_toad's_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2158 Seasoned_legs They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2159 Seasoned_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2160 Spicy_worm They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2161 Spicy_worm Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2162 King_worm They're_a_gnome_delicacy_apparently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2163 King_worm Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2164 Batta_tin A_deep_tin_used_for_baking_gnome_battas_in. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2165 Crunchy_tray A_shallow_tray_used_for_baking_crunchies_in. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2166 Gnomebowl_mould A_large_ovenproof_bowl. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2167 Gianne's_cook_book Aluft_Gianne's_favorite_dishes. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2168 Gianne's_cook_book Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2169 Gnome_spice It's_Aluft_Gianne's_secret_mix_of_spices. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2170 Gnome_spice Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2171 Gianne_dough It's_made_from_a_secret_recipe. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2172 Gianne_dough Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2173 Odd_gnomebowl This_gnome_bowl_doesn't_look_very_appetising. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2174 Odd_gnomebowl Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2175 Burnt_gnomebowl This_gnome_bowl_has_been_burnt_to_a_cinder. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2176 Burnt_gnomebowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2177 Half_baked_bowl This_gnome_bowl_is_in_the_early_stages_of_preparation. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2178 Raw_gnomebowl This_gnome_bowl_needs_cooking. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2179 Unfinished_bowl This_dish_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2180 Unfinished_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2181 Unfinished_bowl This_dish_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2182 Unfinished_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2183 Unfinished_bowl This_dish_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2184 Unfinished_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2185 Chocolate_bomb Looks_great! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2186 Chocolate_bomb Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2187 Tangled_toad's_legs It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2188 Tangled_toad's_legs Swap_this_note_at_any_bank_for_the_equivalent_item's_legs. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2189 Unfinished_bowl This_dish_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2190 Unfinished_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2191 Worm_hole It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2192 Worm_hole Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2193 Unfinished_bowl This_dish_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2194 Unfinished_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2195 Veg_ball This_looks_pretty_healthy. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2196 Veg_ball Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2197 Odd_crunchies These_crunchies_don't_look_very_appetising. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2198 Odd_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2199 Burnt_crunchies These_crunchies_have_been_burnt_to_a_cinder. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2200 Burnt_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2201 Half_baked_crunchy This_crunchy_is_in_the_early_stages_of_preparation. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2202 Raw_crunchies These_crunchies_need_cooking. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2203 Unfinished_crunchy These_crunchies_are_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2204 Unfinished_crunchy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2205 Worm_crunchies It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2206 Worm_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2207 Unfinished_crunchy These_crunchies_are_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2208 Unfinished_crunchy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2209 Chocchip_crunchies Yum..._smells_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2210 Chocchip_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2211 Unfinished_crunchy These_crunchies_are_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2212 Unfinished_crunchy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2213 Spicy_crunchies Yum..._smells_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2214 Spicy_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2215 Unfinished_crunchy These_crunchies_are_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2216 Unfinished_crunchy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2217 Toad_crunchies It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2218 Toad_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2219 Worm_batta It_actually_smells_quite_good. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2220 Worm_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2221 Toad_batta It_actually_smells_quite_good. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2222 Toad_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2223 Cheese+tom_batta This_smells_really_good. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2224 Cheese+tom_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2225 Fruit_batta It_actually_smells_quite_good. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2226 Fruit_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2227 Vegetable_batta Well..._it_looks_healthy. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2228 Vegetable_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2229 Chocolate_bomb Looks_great! 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2230 Chocolate_bomb Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2231 Tangled_toad's_legs It_actually_smells_quite_good. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2232 Tangled_toad's_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2233 Worm_hole It_actually_smells_quite_good. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2234 Worm_hole Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2235 Veg_ball This_looks_pretty_healthy. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2236 Veg_ball Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2237 Worm_crunchies It_actually_smells_quite_good. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2238 Worm_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2239 Chocchip_crunchies Yum..._smells_good. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2240 Chocchip_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2241 Spicy_crunchies Yum..._smells_good. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2242 Spicy_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2243 Toad_crunchies It_actually_smells_quite_good. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2244 Toad_crunchies Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2245 Odd_batta This_batta_doesn't_look_very_appetising. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2246 Odd_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2247 Burnt_batta This_batta_has_been_burnt_to_a_cinder. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2248 Burnt_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2249 Half_baked_batta This_gnome_batta_is_in_the_early_stages_of_preparation. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2250 Raw_batta This_gnome_batta_needs_cooking. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2251 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2252 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2253 Worm_batta It_actually_smells_quite_good. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2254 Worm_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2255 Toad_batta It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2256 Toad_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2257 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2258 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2259 Cheese+tom_batta This_smells_really_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2260 Cheese+tom_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2261 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2262 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2263 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2264 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2265 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2266 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2267 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2268 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2269 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2270 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2271 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2272 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2273 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2274 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2275 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2276 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2277 Fruit_batta It_actually_smells_quite_good. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2278 Fruit_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2279 Unfinished_batta This_batta_is_just_missing_those_little_finishing_touches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2280 Unfinished_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2281 Vegetable_batta Well..._it_looks_healthy. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2282 Vegetable_batta Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2283 Pizza_base I_need_to_add_some_tomato_next. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2284 Pizza_base Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2285 Incomplete_pizza I_need_to_add_some_cheese_next. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2286 Incomplete_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2287 Uncooked_pizza This_needs_cooking. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2288 Uncooked_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2289 Plain_pizza A_cheese_and_tomato_pizza. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2290 Plain_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2291 1/2_plain_pizza Half_of_this_pizza_has_been_eaten. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2292 1/2_plain_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2293 Meat_pizza A_pizza_with_bits_of_meat_on_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2294 Meat_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2295 1/2_meat_pizza Half_of_this_pizza_has_been_eaten. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2296 1/2_meat_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2297 Anchovy_pizza A_pizza_with_anchovies. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2298 Anchovy_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2299 1/2_anchovy_pizza Half_of_this_pizza_has_been_eaten. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2300 1/2_anchovy_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2301 Pineapple_pizza A_tropicana_pizza. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2302 Pineapple_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2303 1/2pineapple_pizza Half_of_this_pizza_has_been_eaten. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2304 1/2pineapple_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2305 Burnt_pizza Oh_dear! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2306 Burnt_pizza Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2307 Bread_dough Some_uncooked_dough. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2308 Bread_dough Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2309 Bread Nice_crispy_bread. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2310 Bread Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2311 Burnt_bread Nice_crispy_bread.__Possibly_too_crispy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2312 Burnt_bread Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2313 Pie_dish Deceptively_pie_shaped. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2314 Pie_dish Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2315 Pie_shell I_need_to_find_a_filling_for_this_pie. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2316 Pie_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2317 Uncooked_apple_pie This_would_be_much_tastier_cooked. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2318 Uncooked_apple_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2319 Uncooked_meat_pie This_would_be_much_healthier_cooked. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2320 Uncooked_meat_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2321 Uncooked_berry_pie This_would_be_much_more_appetising_cooked. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2322 Uncooked_berry_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2323 Apple_pie Mmm_Apple_pie. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2324 Apple_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2325 Redberry_pie Looks_tasty. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2326 Redberry_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2327 Meat_pie Not_for_vegetarians. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2328 Meat_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2329 Burnt_pie I_think_I_left_it_on_the_stove_too_long. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2330 Burnt_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2331 Half_a_meat_pie Half_of_it_is_suitable_for_vegetarians. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2332 Half_a_meat_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2333 Half_a_redberry_pie So_tasty_I_kept_some_for_later. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2334 Half_a_redberry_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2335 Half_an_apple_pie Mmm_half_an_apple_pie. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2336 Half_an_apple_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2337 Raw_oomlie Raw_meat_from_the_oomlie_bird. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2338 Raw_oomlie Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2339 Palm_leaf A_thick_green_palm_leaf_used_by_natives_to_cook_meat_in. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2340 Palm_leaf Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2341 Wrapped_oomlie Oomlie_meat_in_a_palm_leaf_pouch.__It_just_needs_to_be_cooked. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2342 Wrapped_oomlie Swap_this_note_at_any_bank_for_the_equivalent_item. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2343 Cooked_oomlie_wrap Deliciously_cooked_oomlie_meat_in_a_palm_leaf_pouch. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2344 Cooked_oomlie_wrap Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2345 Burnt_oomlie_wrap Burnt_oomlie_meat_in_a_palm_leaf_pouch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2346 Burnt_oomlie_wrap Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2347 Hammer Good_for_hitting_things! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2348 Hammer Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2349 Bronze_bar It's_a_bar_of_bronze. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2350 Bronze_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2351 Iron_bar It's_a_bar_of_iron. 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2352 Iron_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2353 Steel_bar It's_a_bar_of_steel. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2354 Steel_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2355 Silver_bar It's_a_bar_of_silver. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2356 Silver_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2357 Gold_bar It's_a_bar_of_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2358 Gold_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2359 Mithril_bar It's_a_bar_of_mithril. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2360 Mithril_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2361 Adamantite_bar It's_a_bar_of_adamantite. 640 640 640 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2362 Adamantite_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 640 640 640 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2363 Runite_bar It's_a_bar_of_runite. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2364 Runite_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2365 'perfect'_gold_bar It's_a_bar_of_'perfect'_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2366 Shield_left_half The_left_half_of_a_dragon_square_shield. 110000 110000 110000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2367 Shield_left_half Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 110000 110000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2368 Shield_right_half The_right_half_of_a_dragon_square_shield. 500000 500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2369 Shield_right_half Swap_this_note_at_any_bank_for_the_equivalent_item. 500000 500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2370 Steel_studs A_set_of_studs_for_leather_armour. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2371 Steel_studs Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2372 Ogre_relic An_old_statue_of_an_ogre_warrior. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2373 Relic_part_1 Part_of_an_ogre_relic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2374 Relic_part_2 Part_of_an_ogre_relic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2375 Relic_part_3 Part_of_an_ogre_relic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2376 Skavid_map It's_a_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2377 Ogre_tooth Very_tooth_like. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2378 Toban's_key Formerly_the_property_of_Toban_the_ogre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2379 Rock_cake Handy_if_you_want_to_break_all_your_teeth. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2380 Crystal Powers_the_Watchtower_in_Yanille. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2381 Crystal Powers_the_Watchtower_in_Yanille. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2382 Crystal Powers_the_Watchtower_in_Yanille. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2383 Crystal Powers_the_Watchtower_in_Yanille. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2384 Finger_nails Eeeeyeeew! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2385 Old_robe I_can't_wear_this_old_thing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2386 Unusual_armour Looks_kind_of_useless... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2387 Damaged_dagger Pointy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2388 Tattered_eye_patch Useless_as_an_eyepatch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2389 Vial An_infusion_of_water_and_jangerberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2390 Vial A_mixture_of_jangerberries_and_guam_leaves_in_a_vial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2391 Ground_bat_bones Let's_see_it_fly_now! 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2392 Ground_bat_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2393 Gold It's_a_stolen_bar_of_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2394 Potion A_strange_brew. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2395 Magic_ogre_potion A_dangerous_magical_liquid. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2396 Spell_scroll A_spell_is_written_on_this_parchment. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2397 Shaman_robe A_tattered_old_robe. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2398 Nightshade Deadly! 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2399 Key A_key_given_to_me_by_Wizard_Traiborn. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2400 Key A_key_given_to_me_by_Captain_Rovin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2401 Key A_key_I_found_in_a_drain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2402 Silverlight The_magical_sword_'Silverlight'. 50 50 50 9 14 -2 0 0 0 3 2 1 0 12 0 +item = 2403 Hazeel_scroll Scroll_containing_a_powerful_enchantment_of_restoration. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2404 Chest_key This_key_opens_a_chest_in_the_Carnillean_household. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2405 Carnillean_armour Decorative_armour;_an_heirloom_of_the_Carnillean_family. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2406 Hazeel's_mark A_sign_of_my_commitment_to_Hazeel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2407 Ball A_child's_ball. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2408 Diary A_daily_journal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2409 Door_key A_key_to_the_Witch's_house's_front_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2410 Magnet A_very_attractive_magnet. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2411 Key A_key_to_the_Witch's_shed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2412 Saradomin_cape A_cape_from_the_almighty_god_Saradomin. 50000 100 100 0 0 0 10 0 1 1 2 10 0 0 0 +item = 2413 Guthix_cape A_cape_from_the_almighty_god_Guthix. 50000 100 100 0 0 0 10 0 1 1 2 10 0 0 0 +item = 2414 Zamorak_cape A_cape_from_the_almighty_god_Zamorak. 50000 100 100 0 0 0 10 0 1 1 2 10 0 0 0 +item = 2415 Saradomin_staff A_magical_staff_imbued_with_the_power_of_Saradomin. 100000 80000 80000 -1 -1 6 6 0 2 3 1 6 0 0 20 +item = 2416 Guthix_staff A_magical_staff_imbued_with_the_power_of_Guthix. 100000 80000 80000 -1 -1 6 6 0 2 3 1 6 0 0 20 +item = 2417 Zamorak_staff A_magical_staff_imbued_with_the_power_of_Zamorak. 100000 80000 80000 -1 -1 6 6 0 2 3 1 6 0 0 20 +item = 2418 Bronze_key A_heavy_key_made_of_bronze. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2419 Wig A_wig_that_has_been_dyed_slightly_blonde. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2420 Brass_monkey Suffers_in_cold_weather. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2421 Wig A_grey_woollen_wig. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2422 Blue_partyhat A_nice_hat_from_a_cracker. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2423 Key_print An_imprint_of_a_key_in_a_lump_of_clay. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2424 Paste A_bottle_of_skin_coloured_paste. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2425 Orbital_knife On_average,_it's_accurate. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2426 Burnt_oomlie Oh_dear,_it's_totally_burnt! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2427 Burnt_oomlie Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2428 Attack_potion(4) An_attack_potion. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2429 Attack_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2430 Restore_potion(4) A_stat_restoration_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2431 Restore_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2432 Defence_potion(4) A_defence_potion. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2433 Defence_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2434 Prayer_potion(4) A_restore_prayer_potion. 190 190 190 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2435 Prayer_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 190 190 190 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2436 Super_attack(4) A_super_attack_potion. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2437 Super_attack(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2438 Fishing_potion(4) A_fishing_potion. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2439 Fishing_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2440 Super_strength(4) A_super_strength_potion. 275 275 275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2441 Super_strength(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 275 275 275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2442 Super_defence(4) A_super_defence_potion. 330 330 330 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2443 Super_defence(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 330 330 330 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2444 Ranging_potion(4) A_ranging_potion. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2445 Ranging_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2446 Antipoison(4) An_antipoison_potion. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2447 Antipoison(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2448 Superantipoison(4) A_super_antipoison_potion. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2449 Superantipoison(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2450 Zamorak_brew(4) A_Zamorak_Brew. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2451 Zamorak_brew(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2452 Antifire_potion(4) An_anti-firebreath_potion. 330 330 330 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2453 Antifire_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 330 330 330 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2454 Antifire_potion(3) An_anti-firebreath_potion. 264 264 264 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2455 Antifire_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 264 264 264 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2456 Antifire_potion(2) An_anti-firebreath_potion. 198 198 198 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2457 Antifire_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 198 198 198 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2458 Antifire_potion(1) An_anti-firebreath_potion. 132 132 132 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2459 Antifire_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 132 132 132 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2460 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2461 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2462 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2463 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2464 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2465 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2466 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2467 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2468 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2469 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2470 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2471 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2472 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2473 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2474 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2475 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2476 Flowers A_posy_of_flowers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2477 Flowers Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2478 Fish_food Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2479 Poison Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2480 Firestarter Distorted. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2481 Clean_lantadyme A_fresh_herb. 68 68 68 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2482 Clean_lantadyme Swap_this_note_at_any_bank_for_the_equivalent_item. 68 68 68 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2483 Lantadyme_potion(unf) I_need_another_ingredient_to_finish_this_Lantadyme_potion. 68 68 68 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2484 Lantadyme_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 68 68 68 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2485 Grimy_lantadyme I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2486 Grimy_lantadyme Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2487 Blue_d'hide_vamb Vambraces_made_from_100%_real_dragonhide. 1200 1800 0 0 0 0 -10 9 4 3 5 4 0 0 0 +item = 2488 Blue_d'hide_vamb Swap_this_note_at_any_bank_for_the_equivalent_item. 1200 1800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2489 Red_d'hide_vamb Vambraces_made_from_100%_real_dragonhide. 1440 2160 0 0 0 0 -10 10 5 4 6 6 0 0 0 +item = 2490 Red_d'hide_vamb Swap_this_note_at_any_bank_for_the_equivalent_item. 1440 2160 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2491 Black_d'hide_vamb Vambraces_made_from_100%_real_dragonhide. 1728 2592 0 0 0 0 -10 11 6 5 7 8 0 0 0 +item = 2492 Black_d'hide_vamb Swap_this_note_at_any_bank_for_the_equivalent_item. 1728 2592 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2493 Blue_d'hide_chaps Made_from_100%_real_dragonhide. 1728 2592 0 0 0 0 -10 11 25 19 27 14 25 0 0 +item = 2494 Blue_d'hide_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 1728 2592 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2495 Red_d'hide_chaps Made_from_100%_real_dragonhide. 2072 3108 0 0 0 0 -10 14 28 22 30 20 28 0 0 +item = 2496 Red_d'hide_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 2072 3108 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2497 Black_d'hide_chaps Made_from_100%_real_dragonhide. 2448 3732 0 0 0 0 -10 17 31 25 33 28 31 0 0 +item = 2498 Black_d'hide_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 2448 3732 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2499 Blue_d'hide_body Made_from_100%_real_dragonhide. 3744 5616 0 0 0 0 -15 20 45 37 50 30 45 0 0 +item = 2500 Blue_d'hide_body Swap_this_note_at_any_bank_for_the_equivalent_item. 3744 5616 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2501 Red_d'hide_body Made_from_100%_real_dragonhide. 4492 6738 0 0 0 0 -15 25 50 42 55 40 50 0 0 +item = 2502 Red_d'hide_body Swap_this_note_at_any_bank_for_the_equivalent_item. 4492 6738 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2503 Black_d'hide_body Made_from_100%_real_dragonhide. 5392 8088 0 0 0 0 -15 30 55 47 60 50 55 0 0 +item = 2504 Black_d'hide_body Swap_this_note_at_any_bank_for_the_equivalent_item. 5392 8088 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2505 Blue_d-leather It's_a_piece_of_prepared_blue_dragonhide. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2506 Blue_d-leather Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2507 Red_dragon_leather It's_a_piece_of_prepared_red_dragonhide. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2508 Red_dragon_leather Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2509 Black_d-leather It's_a_piece_of_prepared_black_dragonhide. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2510 Black_d-leather Swap_this_note_at_any_bank_for_the_equivalent_itemleather. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2511 Logs A_number_of_wooden_logs. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2512 Box_of_delights What_could_be_in_here? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2513 Waste_disposal Gets_rid_of_all_that_nasty_kitchen_waste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2514 Raw_shrimps I_should_try_cooking_this. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2515 Raw_shrimps Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2516 Pot_of_flour There_is_flour_in_this_pot. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2517 Pot_of_flour Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2518 Rotten_tomato Pretty_smelly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2519 Rotten_tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2520 Toy_horsey A_brown_toy_horse. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2521 Toy_horsey Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2522 Toy_horsey A_white_toy_horse. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2523 Toy_horsey Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2524 Toy_horsey A_black_toy_horse. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2525 Toy_horsey Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2526 Toy_horsey A_grey_toy_horse. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2527 Toy_horsey Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2528 Lamp Wonder_what_happens_if_I_rub_it... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2529 Orb_of_light A_magical_sphere_that_glimmers_within. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2530 Bones Bones_are_for_burying! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2531 Bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2532 Iron_fire_arrows Arrows_with_iron_heads_and_oil_soaked_cloth. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2533 Iron_fire_arrows These_iron_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2534 Steel_fire_arrows Arrows_with_steel_heads_and_oil_soaked_cloth. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2535 Steel_fire_arrows These_steel_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2536 Mithril_fire_arrows Arrows_with_mithril_heads_and_oil_soaked_cloth. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2537 Mithril_fire_arrows These_mithril_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2538 Addy_fire_arrows Arrows_with_adamant_heads_and_oil_soaked_cloth. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2539 Addy_fire_arrows These_adamant_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2540 Rune_fire_arrows Arrows_with_rune_heads_and_oil_soaked_cloth. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2541 Rune_fire_arrows These_rune_headed_arrows_are_ablaze_with_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2550 Ring_of_recoil An_enchanted_ring. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2551 Ring_of_recoil Swap_this_note_at_any_bank_for_the_equivalent_item. 900 900 900 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2552 Ring_of_dueling(8) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2553 Ring_of_dueling(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2554 Ring_of_dueling(7) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2555 Ring_of_dueling(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2556 Ring_of_dueling(6) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2557 Ring_of_dueling(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2558 Ring_of_dueling(5) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2559 Ring_of_dueling(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2560 Ring_of_dueling(4) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2561 Ring_of_dueling(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2562 Ring_of_dueling(3) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2563 Ring_of_dueling(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2564 Ring_of_dueling(2) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2565 Ring_of_dueling(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2566 Ring_of_dueling(1) An_enchanted_ring. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2567 Ring_of_dueling(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1275 1275 1275 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2568 Ring_of_forging An_enchanted_ring. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2569 Ring_of_forging Swap_this_note_at_any_bank_for_the_equivalent_item. 2025 2025 2025 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2570 Ring_of_life An_enchanted_ring. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2571 Ring_of_life Swap_this_note_at_any_bank_for_the_equivalent_item. 3525 3525 3525 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2572 Ring_of_wealth An_enchanted_ring. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2573 Ring_of_wealth Swap_this_note_at_any_bank_for_the_equivalent_item. 17625 17625 17625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2574 Sextant Used_by_navigators_to_find_their_position_in_RuneScape. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2575 Watch A_fine_looking_time_piece. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2576 Chart A_navigator's_chart_of_RuneScape. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2577 Ranger_boots Lightweight_boots_ideal_for_rangers. 80 120 0 0 0 0 -10 8 2 3 4 2 0 0 0 +item = 2578 Ranger_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2579 Wizard_boots Slightly_magical_boots. 80 120 0 0 0 0 4 0 0 0 0 0 0 0 0 +item = 2580 Wizard_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 80 120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2581 Robin_hood_hat Endorsed_by_Robin_Hood. 180 270 0 0 0 0 0 8 4 6 8 4 4 0 0 +item = 2582 Robin_hood_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 180 270 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2583 Black_platebody_(t) Black_plate_body_with_trim. 1536 2304 0 0 0 0 -30 -10 41 40 30 -6 40 0 0 +item = 2584 Black_platebody_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 1536 2304 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2585 Black_platelegs_(t) Black_platelegs_with_trim. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 2586 Black_platelegs_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2587 Black_full_helm(t) Black_full_helm_with_trim. 422 634 0 0 0 0 -6 -2 12 13 10 -1 12 0 0 +item = 2588 Black_full_helm_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 422 634 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2589 Black_kiteshield_(t) Black_kiteshield_with_trim. 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 2590 Black_kiteshield_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2591 Black_platebody_(g) Black_platebody_with_gold_trim. 1536 2304 0 0 0 0 -30 -10 41 40 30 -6 40 0 0 +item = 2592 Black_platebody_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 1536 2304 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2593 Black_platelegs_(g) Black_platelegs_with_gold_trim. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 2594 Black_platelegs_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2595 Black_full_helm(g) Black_full_helm_with_gold_trim. 422 634 0 0 0 0 -6 -2 12 13 10 -1 12 0 0 +item = 2596 Black_full_helm_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 422 634 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2597 Black_kiteshield_(g) Black_kiteshield_with_gold_trim. 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 2598 Black_kiteshield_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2599 Adam_platebody_(t) Adamant_platebody_with_trim. 5120 9984 0 0 0 0 -30 -10 65 63 55 -6 63 0 0 +item = 2600 Adam_platebody_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 5120 9984 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2601 Adam_platelegs_(t) Adamant_platelegs_with_trim. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 2602 Adam_platelegs_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2603 Adam_kiteshield_(t) Adamant_kiteshield_with_trim. 2176 3264 0 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 2604 Adam_kiteshield_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2605 Adam_full_helm(t) Adamant_full_helm_with_trim. 1408 2112 0 0 0 0 -6 -2 19 21 16 -1 19 0 0 +item = 2606 Adam_full_helm_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 1408 2112 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2607 Adam_platebody_(g) Adamant_platebody_with_gold_trim. 5120 9984 0 0 0 0 -30 -10 65 63 55 -6 63 0 0 +item = 2608 Adam_platebody_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 5120 9984 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2609 Adam_platelegs_(g) Adamant_platelegs_with_gold_trim. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 2610 Adam_platelegs_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2611 Adam_kiteshield_(g) Adamant_kiteshield_with_gold_trim. 2176 3264 0 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 2612 Adam_kiteshield_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2613 Adam_full_helm(g) Adamant_full_helm_with_gold_trim. 1408 2112 0 0 0 0 -6 -2 19 21 16 -1 19 0 0 +item = 2614 Adam_full_helm_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 1408 2112 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2615 Rune_platebody_(g) Rune_plate_body_with_gold_trim. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 2616 Rune_platebody_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2617 Rune_platelegs_(g) Rune_platelegs_with_gold_trim. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 2618 Rune_platelegs_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2619 Rune_full_helm(g) Rune_full_helm_with_gold_trim. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 2620 Rune_full_helm_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2621 Rune_kiteshield_(g) Rune_kiteshield_with_gold_trim. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 2622 Rune_kiteshield_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2623 Rune_platebody_(t) Rune_platebody_with_trim. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 2624 Rune_platebody_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2625 Rune_platelegs_(t) Rune_platelegs_with_trim. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 2626 Rune_platelegs_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2627 Rune_full_helm_(t) Rune_full_helm_with_trim. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 2628 Rune_full_helm_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2629 Rune_kiteshield_(t) Rune_kiteshield_with_trim. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 2630 Rune_kiteshield_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2631 Highwayman_mask Your_money_or_your_life! 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2632 Highwayman_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2633 Blue_beret Parlez-vous_francais? 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2634 Blue_beret Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2635 Black_beret Parlez-vous_francais? 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2636 Black_beret Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2637 White_beret Parlez-vous_francais? 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2638 White_beret Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2639 Tan_cavalier All_for_one_and_one_for_all! 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2640 Tan_cavalier Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2641 Dark_cavalier All_for_one_and_one_for_all! 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2642 Dark_cavalier Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2643 Black_cavalier All_for_one_and_one_for_all! 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2644 Black_cavalier Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2645 Red_headband A_minimalist's_hat. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2646 Red_headband Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2647 Black_headband A_minimalist's_hat. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2648 Black_headband Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2649 Brown_headband A_minimalist's_hat. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2650 Brown_headband Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2651 Pirate's_hat Shiver_me_timbers! 72 108 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2652 Pirate's_hat Swap_this_note_at_any_bank_for_the_equivalent_item's_hat. 72 108 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2653 Zamorak_platebody Rune_platebody_in_the_colours_of_Zamorak. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 2654 Zamorak_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2655 Zamorak_platelegs Rune_platelegs_in_the_colours_of_Zamorak. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 2656 Zamorak_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2657 Zamorak_full_helm Rune_full_helm_in_the_colours_of_Zamorak. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 2658 Zamorak_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2659 Zamorak_kiteshield Rune_kiteshield_in_the_colours_of_Zamorak. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 2660 Zamorak_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2661 Saradomin_plate Rune_platebody_in_the_colours_of_Saradomin. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 2662 Saradomin_plate Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2663 Saradomin_legs Rune_platelegs_in_the_colours_of_Saradomin. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 2664 Saradomin_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2665 Saradomin_full Rune_full_helm_in_the_colours_of_Saradomin. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 2666 Saradomin_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2667 Saradomin_kite Rune_kiteshield_in_the_colours_of_Saradomin. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 2668 Saradomin_kite Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2669 Guthix_platebody Rune_plate_body_in_the_colours_of_Guthix. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 2670 Guthix_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2671 Guthix_platelegs Rune_plate_legs_in_the_colours_of_Guthix. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 2672 Guthix_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2673 Guthix_full_helm A_rune_full_face_helmet_in_the_colours_of_Guthix. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 2674 Guthix_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2675 Guthix_kiteshield Rune_kiteshield_in_the_colours_of_Guthix. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 2676 Guthix_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2677 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2678 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2679 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2680 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2681 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2682 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2683 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2684 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2685 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2686 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2687 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2688 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2689 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2690 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2691 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2692 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2693 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2694 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2695 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2696 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2697 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2698 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2699 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2700 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2701 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2702 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2703 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2704 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2705 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2706 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2707 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2708 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2709 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2710 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2711 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2712 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2713 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2714 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2715 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2716 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2717 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2718 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2719 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2720 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2721 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2722 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2723 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2724 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2725 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2726 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2727 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2728 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2729 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2730 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2731 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2732 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2733 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2734 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2735 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2736 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2737 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2738 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2739 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2740 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2741 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2742 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2743 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2744 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2745 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2746 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2747 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2748 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2749 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2750 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2751 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2752 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2753 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2754 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2755 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2756 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2757 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2758 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2759 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2760 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2761 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2762 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2763 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2764 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2765 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2766 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2767 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2768 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2769 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2770 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2771 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2772 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2773 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2774 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2775 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2776 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2777 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2778 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2779 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2780 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2781 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2782 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2783 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2784 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2785 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2786 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2787 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2788 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2789 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2790 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2791 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2792 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2793 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2794 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2795 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2796 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2797 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2798 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2799 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2800 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2801 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2802 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2803 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2804 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2805 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2806 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2807 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2808 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2809 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2810 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2811 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2812 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2813 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2814 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2815 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2816 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2817 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2818 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2819 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2820 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2821 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2822 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2823 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2824 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2825 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2826 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2827 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2828 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2829 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2830 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2831 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2832 Key A_key_to_unlock_a_treasure_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2833 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2834 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2835 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2836 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2837 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2838 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2839 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2840 Key A_key_to_a_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2841 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2842 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2843 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2844 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2845 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2846 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2847 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2848 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2849 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2850 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2851 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2852 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2853 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2854 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2855 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2856 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2857 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2858 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2859 Wolf_bones Bones_of_a_recently_slain_wolf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2860 Wolf_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2861 Wolfbone_arrowtips I_can_make_an_ogre_arrow_with_these. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2862 Achey_tree_logs These_logs_are_longer_than_normal. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2863 Achey_tree_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2864 Ogre_arrow_shaft A_wooden_arrow_shaft. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2865 Flighted_ogre_arrow A_wooden_arrow_shaft_with_four_flights_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2866 Ogre_arrow A_large_ogre_arrow_with_a_bone_tip. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2871 Ogre_bellows A_large_pair_of_ogre_bellows. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2872 Ogre_bellows_(3) A_large_pair_of_ogre_bellows,_it_has_three_loads_of_swamp_gas_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2873 Ogre_bellows_(2) A_large_pair_of_ogre_bellows,_it_has_two_loads_of_swamp_gas_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2874 Ogre_bellows_(1) A_large_pair_of_ogre_bellows,_it_has_one_load_of_swamp_gas_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2875 Bloated_toad An_inflated_toad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2876 Raw_chompy I_need_to_cook_this_first. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2877 Raw_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2878 Cooked_chompy It_might_look_delicious_to_an_ogre. 130 130 130 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2879 Cooked_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 130 130 130 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2880 Ruined_chompy It's_really_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2881 Ruined_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2882 Seasoned_chompy It_has_been_deliciously_seasoned_to_taste_wonderful_for_ogres. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2883 Ogre_bow More_powerful_than_a_normal_bow,_useful_against_large_game_birds. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2885 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2886 Battered_book A_very_thickly_bound_book. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2887 Battered_key An_old_battered_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2888 A_stone_bowl This_is_an_empty_stone_bowl. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2889 A_stone_bowl This_is_a_stone_bowl_full_of_lava. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2890 Elemental_shield A_magic_shield. 20 20 20 0 0 0 0 0 0 0 0 6 0 0 0 +item = 2891 Elemental_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2892 Elemental_ore This_needs_refining. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2893 Elemental_metal It's_a_bar_of_refined_elemental_ore. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2894 Boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 2895 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2896 Robe_top Some_fine_werewolf_clothing. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 2897 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2898 Robe_bottoms Made_by_werewolves_for_werewolves. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2899 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2900 Hat A_silly_pointed_hat. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 2901 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2902 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 2903 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2904 Boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 2905 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2906 Robe_top Some_fine_werewolf_clothing. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 2907 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2908 Robe_bottoms Made_by_werewolves_for_werewolves. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2909 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2910 Hat A_silly_pointed_hat. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 2911 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2912 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 2913 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2914 Boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 2915 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2916 Robe_top Some_fine_werewolf_clothing. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 2917 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2918 Robe_bottoms Made_by_werewolves_for_werewolves. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2919 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2920 Hat A_silly_pointed_hat. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 2921 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2922 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 2923 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2924 Boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 2925 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2926 Robe_top Some_fine_werewolf_clothing. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 2927 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2928 Robe_bottoms Made_by_werewolves_for_werewolves. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2929 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2930 Hat A_silly_pointed_hat. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 2931 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2932 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 2933 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2934 Boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 2935 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2936 Robe_top Some_fine_werewolf_clothing. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 2937 Robe_top Swap_this_note_at_any_bank_for_the_equivalent_item_top. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2938 Robe_bottoms Made_by_werewolves_for_werewolves. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2939 Robe_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item_bottoms. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2940 Hat A_silly_pointed_hat. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 2941 Hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2942 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 2943 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2944 Golden_key A_replica_key_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2945 Iron_key A_key_made_of_solid_Iron. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2946 Golden_tinderbox A_replica_tinderbox_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2947 Golden_candle A_replica_candle_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2948 Golden_pot A_replica_pot_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2949 Golden_hammer A_replica_hammer_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2950 Golden_feather A_replica_feather_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2951 Golden_needle A_replica_needle_made_of_solid_gold. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2952 Wolfbane A_silver_dagger_that_can_prevent_werewolves_changing_form. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2953 Bucket_of_water It's_a_bucket_of_murky_water. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2954 Bucket_of_water It's_a_bucket_of_blessed_water. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2955 Moonlight_mead A_foul_smelling_brew. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2956 Moonlight_mead Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2957 Druid_pouch An_empty_druid_pouch. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2958 Druid_pouch A_druid_pouch. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2959 Rotten_food Erhhh!_It_stinks. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2960 Rotten_food Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2961 Silver_sickle It's_a_silver_sickle. 175 175 175 0 0 0 0 0 0 0 0 0 0 1 5 +item = 2962 Silver_sickle Swap_this_note_at_any_bank_for_the_equivalent_item. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2963 Silver_sickle(b) It's_a_blessed_silver_sickle. 250 250 250 0 0 0 0 0 0 0 0 0 0 1 5 +item = 2964 Washing_bowl Used_for_washing_your_face,_amongst_other_things. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2965 Washing_bowl Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2966 Mirror A_small_mirror,_probably_used_for_grooming. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2967 Journal This_must_be_Filliman_Tarlocks_personal_journal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2968 Druidic_spell A_druidic_spell_given_to_you_freely_by_the_spirit_of_Filliman_Tarlock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2969 A_used_spell A_used_druidic_spell_given_to_you_freely_by_the_spirit_of_Filliman_Tarlock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2970 Mort_myre_fungi A_mushroom_from_the_swamps_of_Mort_Myre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2971 Mort_myre_fungi Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2972 Mort_myre_stem A_cutting_from_a_budding_branch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2973 Mort_myre_stem Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2974 Mort_myre_pear A_pear_picked_from_a_dying_bush_in_Mort_Myre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2975 Mort_myre_pear Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2976 Sickle_mould Used_to_make_sickles. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2977 Sickle_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2978 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2979 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2980 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2981 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2982 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2983 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2984 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2985 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2986 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2987 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2988 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2989 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2990 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2991 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2992 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2993 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2994 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2995 Chompy_bird_hat A_symbol_of_your_chompy_bird_hunting_prowess. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2996 Agility_arena_ticket I_can_exchange_these_for_further_experience_or_items. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2997 Pirate's_hook You_should_see_the_shark... 89 89 89 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2998 Clean_toadflax A_fresh_herb. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2999 Clean_toadflax Swap_this_note_at_any_bank_for_the_equivalent_item. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3000 Clean_snapdragon A_fresh_herb. 59 59 59 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3001 Clean_snapdragon Swap_this_note_at_any_bank_for_the_equivalent_item. 59 59 59 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3002 Toadflax_potion(unf) I_need_another_ingredient_to_finish_this_Toadflax_potion. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3003 Toadflax_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3004 Snapdragon_potion(unf) I_need_another_ingredient_to_finish_this_Snapdragon_potion. 59 59 59 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3005 Snapdragon_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 59 59 59 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3006 Firework A_firework_potion,_this'll_look_pretty! 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3007 Firework Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3008 Energy_potion(4) An_energy_potion. 146 146 146 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3009 Energy_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 146 146 146 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3010 Energy_potion(3) An_energy_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3011 Energy_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3012 Energy_potion(2) An_energy_potion. 72 72 72 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3013 Energy_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 72 72 72 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3014 Energy_potion(1) An_energy_potion. 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3015 Energy_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3016 Super_energy(4) A_super_energy_potion. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3017 Super_energy(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3018 Super_energy(3) A_super_energy_potion. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3019 Super_energy(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3020 Super_energy(2) A_super_energy_potion. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3021 Super_energy(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3022 Super_energy(1) A_super_energy_potion. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3023 Super_energy(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3024 Super_restore(4) A_super_restore_potion. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3025 Super_restore(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3026 Super_restore(3) A_super_restore_potion. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3027 Super_restore(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3028 Super_restore(2) A_super_restore_potion. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3029 Super_restore(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3030 Super_restore(1) A_super_restore_potion. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3031 Super_restore(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3032 Agility_potion(4) An_agility_potion. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3033 Agility_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3034 Agility_potion(3) An_agility_potion. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3035 Agility_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3036 Agility_potion(2) An_agility_potion. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3037 Agility_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3038 Agility_potion(1) An_agility_potion. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3039 Agility_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3040 Magic_potion(4) A_magic_potion. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3041 Magic_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3042 Magic_potion(3) A_magic_potion. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3043 Magic_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3044 Magic_potion(2) A_magic_potion. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3045 Magic_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3046 Magic_potion(1) A_magic_potion. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3047 Magic_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3048 Pirate's_hook Swap_this_note_at_any_bank_for_the_equivalent_item. 89 89 89 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3049 Grimy_toadflax I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3050 Grimy_toadflax Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3051 Grimy_snapdragon I_need_to_clean_this_herb_before_I_can_use_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3052 Grimy_snapdragon Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3053 Lava_battlestaff It's_a_slightly_magical_stick. 17000 17000 17000 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 3054 Mystic_lava_staff It's_a_slightly_magical_stick. 45000 45000 45000 7 -1 28 10 0 2 3 1 10 0 35 0 +item = 3055 Lava_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 17000 17000 17000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3056 Mystic_lava_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 45000 45000 45000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3057 Mime_mask A_mime_would_wear_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3058 Mime_top A_mime_would_wear_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3059 Mime_legs A_mime_would_wear_these. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3060 Mime_gloves A_mime_would_wear_these. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3061 Mime_boots A_mime_would_wear_these. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3062 Strange_box It_seems_to_be_humming... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3064 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3066 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3068 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3070 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3072 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3074 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3076 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3078 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3080 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3082 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3084 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3086 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3088 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3090 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3092 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3093 Black_dart A_deadly_throwing_dart_with_a_black_tip. 18 18 18 0 0 0 0 7 0 0 0 0 0 0 0 +item = 3094 Black_dart(p) A_deadly_poisoned_dart_with_a_black_tip. 18 18 18 0 0 0 0 7 0 0 0 0 0 0 0 +item = 3095 Bronze_claws A_set_of_fighting_claws. 15 15 15 3 4 -4 0 0 1 2 1 0 0 5 0 +item = 3096 Iron_claws A_set_of_fighting_claws. 50 50 50 4 6 -4 0 0 2 3 1 0 0 7 0 +item = 3097 Steel_claws A_set_of_fighting_claws. 175 175 175 8 11 -4 0 0 3 6 2 0 0 12 0 +item = 3098 Black_claws A_set_of_fighting_claws. 360 360 360 10 14 -4 0 0 4 7 2 0 0 14 0 +item = 3099 Mithril_claws A_set_of_fighting_claws. 475 475 475 11 16 -4 0 0 4 8 2 0 0 17 0 +item = 3100 Adamant_claws A_set_of_fighting_claws. 1200 1200 1200 18 23 -4 0 0 6 12 3 0 0 24 0 +item = 3102 Combination The_combination_to_Burthorpe_Castle's_equipment_room. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3103 Iou The_guard_wrote_the_IOU_on_the_back_of_some_paper. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3104 Secret_way_map This_map_shows_the_secret_way_up_to_Death_Plateau. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3105 Climbing_boots Boots_made_for_climbing. 12 12 12 0 0 0 0 0 0 2 2 0 0 2 0 +item = 3106 Climbing_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3107 Spiked_boots Climbing_boots_with_spikes. 30 30 30 0 0 0 0 0 0 2 2 0 0 2 0 +item = 3108 Spiked_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3109 Stone_ball Place_on_the_stone_mechanism_in_the_right_order_to_open_the_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3110 Stone_ball Place_on_the_stone_mechanism_in_the_right_order_to_open_the_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3111 Stone_ball Place_on_the_stone_mechanism_in_the_right_order_to_open_the_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3112 Stone_ball Place_on_the_stone_mechanism_in_the_right_order_to_open_the_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3113 Stone_ball Place_on_the_stone_mechanism_in_the_right_order_to_open_the_door. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3114 Certificate Entrance_certificate_to_the_Imperial_Guard. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3115 Bronze_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3116 Iron_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3117 Steel_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3118 Black_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3119 Mithril_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 475 475 475 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3120 Adamant_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3121 Rune_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 12000 12000 12000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3122 Granite_shield A_solid_stone_shield. 56000 56000 56000 0 0 0 -12 -8 40 42 38 0 65 0 0 +item = 3123 Shaikahan_bones Large_glistening_bones_which_glow_with_a_pale_yellow_aura. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3124 Shaikahan_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3125 Jogre_bones Fairly_big_bones_which_smell_distinctly_of_Jogre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3126 Jogre_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3127 Burnt_jogre_bones These_blackened_Jogre_bones_have_been_somehow_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3128 Pasty_jogre_bones Burnt_Jogre_bones_smothered_with_raw_Karambwanji_Paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3129 Pasty_jogre_bones Burnt_Jogre_bones_smothered_with_cooked_Karambwanji_paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3130 Marinated_j'_bones Burnt_Jogre_bones_marinated_in_a_lovely_Karambwanji_sauce._Perfect. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3131 Pasty_jogre_bones Jogre_bones_smothered_with_raw_Karambwanji_paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3132 Pasty_jogre_bones Jogre_bones_smothered_with_cooked_Karambwanji_paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3133 Marinated_j'_bones Jogre_Bones_marinated_in_Karambwanji_sauce._Not_quite_right. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3134 Granite_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 56000 56000 56000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3135 Prison_key The_key_to_the_troll_prison. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3136 Cell_key_1 The_key_to_Godric's_cell_in_the_troll_prison. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3137 Cell_key_2 The_key_to_Mad_Eadgar's_cell_in_the_troll_prison. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3138 Potato_cactus How_am_I_supposed_to_eat_that?! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3139 Potato_cactus Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3140 Dragon_chainbody A_series_of_connected_metal_rings. 126000 150000 0 0 0 0 -15 0 81 93 98 -3 82 0 0 +item = 3141 Dragon_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 126000 150000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3142 Raw_karambwan A_raw_green_octopus. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3143 Raw_karambwan Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3144 Cooked_karambwan Cooked_octopus._It_looks_very_nutritious. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3145 Cooked_karambwan Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3146 Cooked_karambwan Cooked_octopus._It_looks_a_little_suspect. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3147 Cooked_karambwan Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3148 Burnt_karambwan Burnt_octopus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3149 Burnt_karambwan Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3150 Raw_karambwanji Small_brightly_coloured_tropical_fish. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3151 Karambwanji Small_brightly_coloured_tropical_fish._Looks_tasty. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3152 Karambwan_paste Freshly_made_octopus_paste. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3153 Karambwan_paste Freshly_made_octopus_paste._This_smells_quite_nauseating. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3154 Karambwan_paste Freshly_made_octopus_paste. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3155 Karambwanji_paste This_paste_smells_of_raw_fish. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3156 Karambwanji_paste This_paste_smells_of_cooked_fish. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3157 Karambwan_vessel A_wide_bodied_and_thin_necked_vessel,_encrusted_with_sea_salt. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3158 Karambwan_vessel Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3159 Karambwan_vessel This_Karambwan_Vessel_is_loaded_with_Karambwanji. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3160 Karambwan_vessel Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3161 Crafting_manual A_set_of_instructions_explaining_how_to_construct_a_Karambwan_vessel. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3162 Sliced_banana You_swear_you_had_more_than_three_slices_before. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3163 Sliced_banana Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3164 Karamjan_rum The_Karamjan_rum_has_slices_of_banana_floating_in_it. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3165 Karamjan_rum A_banana_has_been_stuffed_into_the_neck_of_this_bottle. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3166 Monkey_corpse It's_the_body_of_a_dead_monkey. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3167 Monkey_skin It's_the_skin_of_a_(hopefully)_dead_monkey. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3168 Seaweed_sandwich A_'Seaweed_in_Monkey_Skin'_sandwich._Perfect_for_statue_repair. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3169 Stuffed_monkey A_body_of_a_dead_monkey,_tastefully_stuffed_with_seaweed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3170 Bronze_spear(kp) A_Karambwan_poisoned_bronze_tipped_spear. 26 26 26 5 5 5 0 0 1 1 0 0 0 7 0 +item = 3171 Iron_spear(kp) A_Karambwan_poisoned_iron_tipped_spear. 91 91 91 8 8 8 0 0 1 1 0 0 0 10 0 +item = 3172 Steel_spear(kp) A_Karambwan_poisoned_steel_tipped_spear. 325 325 325 12 12 12 0 0 1 1 0 0 0 12 0 +item = 3173 Mithril_spear(kp) A_Karambwan_poisoned_mithril_tipped_spear. 845 845 845 17 17 17 0 0 1 1 0 0 0 0 18 0 +item = 3174 Adamant_spear(kp) A_Karambwan_poisoned_adamantite_tipped_spear. 2080 2080 2080 24 24 24 0 0 1 1 0 0 0 28 0 +item = 3175 Rune_spear(kp) A_Karambwan_poisoned_rune_tipped_spear. 20800 20800 20800 36 36 36 0 0 1 1 0 0 0 42 0 +item = 3176 Dragon_spear(kp) A_Karambwan_poisoned_dragon_tipped_spear. 62400 62400 62400 55 55 55 0 0 5 5 5 5 5 60 0 +item = 3177 Banana_left Mmm_this_looks_tasty. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3178 Banana_left Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3179 Monkey_bones These_are_smallish_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3180 Monkey_bones These_are_medium_sized_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3181 Monkey_bones These_are_quite_large_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3182 Monkey_bones These_are_quite_large_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3183 Monkey_bones These_are_small_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3184 Monkey_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3185 Monkey_bones These_are_smallish_monkey_bones._They_smell_extremely_nauseating. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3186 Monkey_bones These_are_smallish_monkey_bones._They_smell_extremely_nauseating. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3187 Bones They_seem_to_shake_slightly..._It_might_be_a_good_idea_to_bury_them. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3188 Cleaning_cloth A_spirit_soaked_piece_of_silk_which_can_be_used_to_remove_poison. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3189 Cleaning_cloth Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3190 Bronze_halberd A_bronze_halberd. 80 80 80 7 8 0 -4 0 -1 1 2 0 0 8 0 +item = 3191 Bronze_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3192 Iron_halberd An_iron_halberd. 280 280 280 9 12 0 -4 0 -1 1 2 0 0 12 0 +item = 3193 Iron_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3194 Steel_halberd A_steel_halberd. 1000 1000 1000 14 19 0 -4 0 -1 1 2 0 0 20 0 +item = 3195 Steel_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3196 Black_halberd A_black_halberd. 1920 1920 1920 19 25 0 -4 0 -1 2 3 0 0 24 0 +item = 3197 Black_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 1920 1920 1920 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3198 Mithril_halberd A_mithril_halberd. 2600 2600 2600 22 28 0 -4 0 -1 2 4 0 0 29 0 +item = 3199 Mithril_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 2600 2600 2600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3200 Adamant_halberd An_adamant_halberd. 6400 6400 6400 28 41 0 -4 0 -1 3 4 0 0 43 0 +item = 3201 Adamant_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 6400 6400 6400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3202 Rune_halberd A_rune_halberd. 64000 64000 64000 48 67 0 -4 0 -1 4 5 0 0 68 0 +item = 3203 Rune_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 64000 64000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3204 Dragon_halberd A_dragon_halberd. 100000 195000 0 70 95 0 -4 0 -1 4 5 0 0 89 0 +item = 3205 Dragon_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 100000 195000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3206 King's_message A_summons_from_King_Lathas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3207 Iorwerths_message A_letter_for_King_Lathas_from_Lord_Iorwerth. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3208 Crystal_pendant Lord_Iorwerth's_crystal_pendant. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3209 Sulphur A_piece_of_sulphur_formation. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3210 Sulphur Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3211 Limestone Some_limestone. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3212 Limestone Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3213 Quicklime Some_quicklime. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3214 Pot_of_quicklime A_pot_of_ground_quicklime. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3215 Ground_sulphur A_pile_of_ground_sulphur. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3216 Barrel An_empty_barrel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3217 Barrel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3218 Barrel_bomb A_barrel_full_of_fire_oil. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3219 Barrel_bomb A_fused_barrel_full_of_fire_oil. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3220 Barrel_of_coal-tar A_barrel_full_of_coal-tar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3221 Barrel_of_naphtha A_barrel_full_of_naphtha. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3222 Naphtha_mix A_barrel_full_of_naphtha_and_sulphur. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3223 Naphtha_mix A_barrel_full_of_naphtha_and_quicklime. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3224 Cloth A_bolt_of_cloth. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3225 Cloth Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3226 Raw_rabbit Might_taste_better_cooked. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3227 Raw_rabbit Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3228 Cooked_rabbit Mmm_this_looks_tasty. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3229 Cooked_rabbit Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3230 Big_book_of_bangs A_book_by_Mel_Achy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3231 Symbol1 An_alchemy_symbol 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3232 Symbol1 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3233 Symbol2 An_alchemy_symbol 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3234 Symbol2 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3235 Symbol3 An_alchemy_symbol 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3236 Symbol3 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3237 Symbol4 An_alchemy_symbol 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3238 Symbol4 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3239 Bark Bark_from_a_hollow_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3240 Bark Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3241 Man One_of_RuneScape's_many_citizens. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3242 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3243 Farmer He_grows_the_crops. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3244 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3245 Warrior_woman Not_very_fashion_conscious. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3246 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3247 Rogue Rogueish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3248 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3249 Guard He_tries_to_keep_order. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3250 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3251 Knight_of_ardougne A_member_of_Ardougne's_militia. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3252 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3253 Watchman Watches_stuff._But_who_watches_him? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3254 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3255 Paladin A_holy_warrior! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3256 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3257 Gnome Looks_like_a_gnome_to_me. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3258 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3259 Hero Heroic! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3260 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3261 Goutweed A_pale,_tough_looking_herb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3262 Troll_thistle It's_tough_and_spiky. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3263 Dried_thistle It'll_be_easier_to_grind_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3264 Ground_thistle It's_ready_for_mixing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3265 Troll_potion It's_part_of_Eadgar's_plan. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3266 Drunk_parrot It's_rather_drunk. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3267 Dirty_robe It's_dirty_and_smelly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3268 Fake_man It's_good_enough_to_fool_a_troll. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3269 Storeroom_key The_key_to_the_Troll_storeroom. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3270 Alco-chunks Pineapple_chunks_dipped_in_strong_liquor. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3272 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3325 Vampire_dust That_used_to_be_a_vampire! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3326 Vampire_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3327 Myre_snelm A_marshy_coloured_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3328 Myre_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3329 Blood'n'tar_snelm A_red_and_black_Snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3330 Blood'n'tar_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3331 Ochre_snelm A_muddy_yellow_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3332 Ochre_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3333 Bruise_blue_snelm A_moody_blue_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3334 Bruise_blue_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3335 Broken_bark_snelm An_orange_and_bark_coloured_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3336 Broken_bark_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3337 Myre_snelm A_swamp_coloured_pointed_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3338 Myre_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3339 Blood'n'tar_snelm A_red_and_black_pointed_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3340 Blood'n'tar_snelm Swap_this_note_at_any_bank_for_the_equivalent_item'n'tar_snelm. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3341 Ochre_snelm A_muddy_yellow_coloured_pointed_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3342 Ochre_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3343 Bruise_blue_snelm A_moody_blue_pointed_snail_shell_helmet. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3344 Bruise_blue_snelm Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3345 Blamish_myre_shell A_large_'Myre'_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3346 Blamish_myre_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3347 Blamish_red_shell A_large_red_and_black_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3348 Blamish_red_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3349 Blamish_ochre_shell A_large_muddy_yellow_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3350 Blamish_ochre_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3351 Blamish_blue_shell A_large_blue_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3352 Blamish_blue_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3353 Blamish_bark_shell A_large_bark_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3354 Blamish_bark_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3355 Blamish_myre_shell A_large_'Myre'_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3356 Blamish_myre_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3357 Blamish_red_shell A_large_red_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3358 Blamish_red_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3359 Blamish_ochre_shell A_large_ochre_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3360 Blamish_ochre_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3361 Blamish_blue_shell A_large_blue_coloured_blamish_snail_shell,_looks_protective. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3362 Blamish_blue_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3363 Thin_snail The_thin,_slimy_corpse_of_a_deceased_giant_snail. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3364 Thin_snail Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3365 Lean_snail The_lean,_slimy_corpse_of_a_deceased_giant_snail. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3366 Lean_snail Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3367 Fat_snail The_fat,_slimy_corpse_of_a_deceased_giant_snail. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3368 Fat_snail Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3369 Thin_snail_meat A_succulently_slimy_slice_of_sumptuous_snail. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3370 Thin_snail_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3371 Lean_snail_meat A_succulently_slimy_slice_of_sumptuous_snail. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3372 Lean_snail_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3373 Fat_snail_meat A_succulently_slimy_slice_of_sumptuous_snail. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3374 Fat_snail_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3375 Burnt_snail A_slightly_super-saute'ed_snail. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3376 Burnt_snail Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3377 Sample_bottle An_empty_sample_bottle. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3378 Sample_bottle Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3379 Slimy_eel A_slime_covered_eel_-_yuck! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3380 Slimy_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3381 Cooked_slimy_eel A_cooked_slimy_eel_-_not_delicious,_but_pretty_nutritious. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3382 Cooked_slimy_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3383 Burnt_eel It_looks_like_it's_seen_one_too_many_fires. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3384 Burnt_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3385 Splitbark_helm A_wooden_helmet. 4000 6000 0 0 0 0 3 -2 10 9 11 3 0 0 0 +item = 3386 Splitbark_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 4000 6000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3387 Splitbark_body Provides_good_protection. 18000 27000 0 0 0 0 10 -10 36 26 42 15 0 0 0 +item = 3388 Splitbark_body Swap_this_note_at_any_bank_for_the_equivalent_item. 18000 27000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3389 Splitbark_legs These_should_protect_my_legs. 16000 24000 0 0 0 0 7 -7 22 20 25 10 0 0 0 +item = 3390 Splitbark_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 16000 24000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3391 Splitbark_gauntlets These_should_keep_my_hands_safe. 2000 3000 0 0 0 0 2 -1 3 2 4 2 0 0 0 +item = 3392 Splitbark_gauntlets Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 3000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3393 Splitbark_greaves Wooden_foot_protection. 2000 3000 0 0 0 0 2 -1 3 2 4 2 0 0 0 +item = 3394 Splitbark_greaves Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 3000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3395 Diary A_diary_belonging_to_Herbi_Flax. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3396 Loar_remains The_remains_of_a_deadly_shade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3397 Loar_remains Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3398 Phrin_remains The_remains_of_a_deadly_shade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3399 Phrin_remains Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3400 Riyl_remains The_remains_of_a_deadly_shade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3401 Riyl_remains Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3402 Asyn_remains The_remains_of_a_deadly_shade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3403 Asyn_remains Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3404 Fiyr_remains The_remains_of_a_deadly_shade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3405 Fiyr_remains Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3406 Ash_potion(unf) I_need_another_ingredient_to_finish_this_potion. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3407 Ash_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3408 Serum_207_(4) A_serum_207_as_described_in_Herbi_Flax's_diary. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3409 Serum_207_(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3410 Serum_207_(3) A_serum_207_as_described_in_Herbi_Flax's_diary. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3411 Serum_207_(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3412 Serum_207_(2) A_serum_207_as_described_in_Herbi_Flax's_diary. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3413 Serum_207_(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3414 Serum_207_(1) A_serum_207_as_described_in_Herbi_Flax's_diary. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3415 Serum_207_(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3416 Serum_207(p)_(4) A_serum_207_as_described_in_Herbi_Flax's_diary. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3417 Serum_207(p)_(3) A_serum_207_as_described_in_Herbi_Flax's_diary. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3418 Serum_207(p)_(2) A_serum_207_as_described_in_Herbi_Flax's_diary. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3419 Serum_207(p)_(1) A_serum_207_as_described_in_Herbi_Flax's_diary. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3420 Limestone_brick A_well_carved_limestone_brick. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3421 Limestone_brick Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3422 Olive_oil(4) Olive_oil. 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3423 Olive_oil(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3424 Olive_oil(3) Olive_oil. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3425 Olive_oil(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3426 Olive_oil(2) Olive_oil. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3427 Olive_oil(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3428 Olive_oil(1) Olive_oil. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3429 Olive_oil(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3430 Sacred_oil(4) Sacred_oil. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3431 Sacred_oil(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3432 Sacred_oil(3) Sacred_oil. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3433 Sacred_oil(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3434 Sacred_oil(2) Sacred_oil. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3435 Sacred_oil(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3436 Sacred_oil(1) Sacred_oil. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3437 Sacred_oil(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3438 Pyre_logs Logs_prepared_with_sacred_oil_for_a_funeral_pyre. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3439 Pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3440 Oak_pyre_logs Oak_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3441 Oak_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3442 Willow_pyre_logs Willow_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3443 Willow_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3444 Maple_pyre_logs Maple_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3445 Maple_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3446 Yew_pyre_logs Yew_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 320 320 320 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3447 Yew_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 320 320 320 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3448 Magic_pyre_logs Magic_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 640 640 640 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3449 Magic_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 640 640 640 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3450 Bronze_key_red A_bronze_key_with_a_blood-red_painted_eyelet. 81 81 81 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3451 Bronze_key_brown A_bronze_key_with_a_brown_painted_eyelet. 82 82 82 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3452 Bronze_key_crimson A_bronze_key_with_a_crimson_painted_eyelet. 83 83 83 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3453 Bronze_key_black A_bronze_key_with_a_black_painted_eyelet. 84 84 84 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3454 Bronze_key_purple A_bronze_key_with_a_purple_painted_eyelet. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3455 Steel_key_red A_steel_key_with_a_blood-red_painted_eyelet. 86 86 86 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3456 Steel_key_brown A_steel_key_with_a_brown_painted_eyelet. 87 87 87 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3457 Steel_key_crimson A_steel_key_with_a_crimson_painted_eyelet. 88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3458 Steel_key_black A_steel_key_with_a_black_painted_eyelet. 89 89 89 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3459 Steel_key_purple A_steel_key_with_a_purple_painted_eyelet. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3460 Black_key_red A_black_key_with_a_blood-red_painted_eyelet. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3461 Black_key_brown A_black_key_with_a_brown_painted_eyelet. 92 92 92 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3462 Black_key_crimson A_black_key_with_a_crimson_painted_eyelet. 93 93 93 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3463 Black_key_black A_black_key_with_a_black_painted_eyelet. 94 94 94 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3464 Black_key_purple A_black_key_with_a_purple_painted_eyelet. 95 95 95 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3465 Silver_key_red A_silver_key_with_a_blood-red_painted_eyelet. 96 96 96 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3466 Silver_key_brown A_silver_key_with_a_brown_painted_eyelet. 97 97 97 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3467 Silver_key_crimson A_silver_key_with_a_crimson_painted_eyelet. 98 98 98 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3468 Silver_key_black A_silver_key_with_a_black_painted_eyelet. 99 99 99 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3469 Silver_key_purple A_silver_key_with_a_purple_painted_eyelet. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3470 Fine_cloth Amazingly_untouched_by_time. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3471 Fine_cloth Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3472 Black_plateskirt_(t) Black_plateskirt_with_trim. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 3473 Black_plateskirt_(g) Black_plateskirt_with_gold_trim. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 0 +item = 3474 Adam_plateskirt_(t) Adamant_plateskirt_with_trim. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 3475 Adam_plateskirt_(g) Adamant_plateskirt_with_gold_trim. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 3476 Rune_plateskirt_(g) Rune_plateskirt_with_gold_trim. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3477 Rune_plateskirt_(t) Rune_plateskirt_with_trim. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3478 Zamorak_plateskirt Rune_plateskirt_in_the_colours_of_Zamorak. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3479 Saradomin_skirt Rune_plateskirt_in_the_colours_of_Saradomin. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3480 Guthix_plateskirt Rune_plateskirt_in_the_colours_of_Guthix. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3481 Gilded_platebody Rune_platebody_with_gold_plate. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 3482 Gilded_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3483 Gilded_platelegs Rune_platelegs_with_gold_plate. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3484 Gilded_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3485 Gilded_plateskirt Rune_plateskirt_with_gold_plate. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 3486 Gilded_full_helm Rune_full_helm_with_gold_plate. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 3487 Gilded_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3488 Gilded_kiteshield Rune_kiteshield_with_gold_plate. 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 3489 Gilded_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3490 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3491 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3492 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3493 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3494 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3495 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3496 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3497 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3498 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3499 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3500 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3501 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3502 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3503 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3504 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3505 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3506 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3507 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3508 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3509 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3510 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3511 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3512 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3513 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3514 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3515 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3516 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3517 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3518 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3519 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3520 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3521 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3522 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3523 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3524 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3525 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3526 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3527 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3528 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3529 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3530 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3531 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3532 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3533 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3534 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3535 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3536 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3537 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3538 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3539 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3540 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3541 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3542 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3543 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3544 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3545 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3546 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3547 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3548 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3549 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3550 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3551 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3552 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3553 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3554 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3555 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3556 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3557 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3558 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3559 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3560 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3561 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3562 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3563 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3564 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3565 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3566 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3567 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3568 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3569 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3570 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3571 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3572 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3573 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3574 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3575 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3576 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3577 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3578 Puzzle_box I_need_to_solve_this! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3579 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3580 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3581 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3582 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3583 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3584 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3585 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3586 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3587 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3588 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3589 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3590 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3591 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3592 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3593 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3594 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3595 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3596 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3597 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3598 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3599 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3600 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3601 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3602 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3603 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3604 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3605 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3606 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3607 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3608 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3609 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3610 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3611 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3612 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3613 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3614 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3615 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3616 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3617 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3618 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3619 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3620 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3621 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3622 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3623 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3624 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3625 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3626 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3627 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3628 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3629 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3630 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3631 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3632 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3633 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3634 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3635 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3636 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3637 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3638 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3639 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3640 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3641 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3642 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3643 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3644 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3645 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3646 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3647 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3648 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3649 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3650 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3651 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3652 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3653 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3654 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3655 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3656 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3657 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3658 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3659 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3660 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3661 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3662 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3663 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3664 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3665 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3666 Sliding_piece A_piece_of_the_puzzle 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3667 Lifeboat Do_not_use_except_in_case_of_emergency. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3668 Black_plateskirt_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3669 Black_plateskirt_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3670 Adam_plateskirt_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3671 Adam_plateskirt_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 2560 3840 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3672 Rune_plateskirt_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3673 Rune_plateskirt_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3674 Zamorak_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3675 Saradomin_skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3676 Guthix_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3677 Gilded_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3678 Flamtaer_hammer An_exquisitely_shaped_tool_specially_designed_for_fixing_temples. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3679 Flamtaer_hammer Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3680 Shoe A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3681 Shoe A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3682 Shoe A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3683 Shoe A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3684 Shoe A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3685 Shoe. A_shoe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3686 Fremennik One_of_Rellekka's_many_citizens. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3687 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3688 Unstrung_lyre It's_almost_a_musical_instrument. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3689 Lyre It's_a_musical_instrument_I_don't_know_how_to_play. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3690 Enchanted_lyre A_musical_instrument_that_I_can_magically_play. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3691 Enchanted_lyre(1) This_will_teleport_me_to_Rellekka_when_I_play_it. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3692 Branch I_can_use_this_to_make_a_lyre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3693 Golden_fleece I_can_spin_this_into_golden_wool... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3694 Golden_wool I_can_use_this_to_make_a_lyre. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3695 Pet_rock The_lowest_maintenance_pet_you_will_ever_have. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3696 Hunters'_talisman Talisman_to_bind_the_Draugen. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3697 Hunters'_talisman Talisman_to_bind_the_Draugen. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3698 Exotic_flower Some_flowers_from_a_distant_land. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3699 Fremennik_ballad A_hauntingly_beautiful_love_ballad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3700 Sturdy_boots A_pair_of_sturdy_custom_made_boots. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3701 Hunters_map A_map_showing_very_active_hunting_spots. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3702 Custom_bow_string A_finely_crafted_string_for_a_custom_bow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3703 Unusual_fish An_extremely_rare,_non_edible_fish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3704 Sea_fishing_map Map_showing_the_best_fishing_spots_out_at_sea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3705 Weather_forecast An_estimate_of_expected_local_weather_patterns. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3706 Champions_token Shows_the_wearer_is_worthy_of_the_Champions_table. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3707 Legendary_cocktail Probably_the_greatest_cocktail_in_the_world. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3708 Fiscal_statement A_signed_statement_promising_a_reduction_on_sales_tax. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3709 Promissory_note A_legally_binding_contract_promising_not_to_enter_the_longhall. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3710 Warriors'_contract This_employment_contract_is_for_a_warrior_to_act_as_a_bodyguard. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3711 Keg_of_beer A_lot_of_beer_in_a_barrel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3712 Low_alcohol_keg Suspiciously_close_to_beer,_but_without_the_side_effects. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3713 Strange_object It's_some_kind_of_weird_little_parcel_thing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3714 Lit_strange_object It's_some_kind_of_weird_little_parcel_thing._On_fire. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3715 Red_disk A_red_coloured_disk,_apparently_made_of_wood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3716 Red_disk A_red_coloured_disk,_apparently_made_of_wood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3718 Magnet A_very_attractive_magnet. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3719 Blue_thread Some_blue_thread. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3720 Small_pick A_small_pick_for_cracking_small_objects. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3721 Toy_ship Might_be_fun_to_play_with_in_the_bath. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3722 Full_bucket This_bucket_is_completely_full._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3723 4/5ths_full_bucket This_bucket_is_eighty_percent_full._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3724 3/5ths_full_bucket This_bucket_is_sixty_percent_full._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3725 2/5ths_full_bucket This_bucket_is_forty_percent_full._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3726 1/5ths_full_bucket This_bucket_is_twenty_percent_full._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3727 Empty_bucket This_bucket_is_completely_empty._It_has_a_5_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3728 Frozen_bucket This_bucket_of_water_is_frozen_solid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3729 Full_jug This_jug_is_completely_full._It_has_a_3_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3730 2/3rds_full_jug This_jug_is_two_thirds_full._It_has_a_3_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3731 1/3rds_full_jug This_jug_is_one_thirds_full._It_has_a_3_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3732 Empty_jug This_jug_is_completely_empty._It_has_a_3_painted_on_its_side. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3733 Frozen_jug This_jug_of_water_is_frozen_solid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3734 Vase An_unusually_shaped_vase._You_can_see_something_glinting_inside. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3735 Vase_of_water An_unusually_shaped_vase_full_of_water._You_can_see_something_glinting_inside. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3736 Frozen_vase An_unusually_shaped_vase_full_of_ice._You_can_see_something_glinting_inside. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3737 Vase_lid This_looks_like_a_lid_to_some_kind_of_container... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3738 Sealed_vase The_lid_is_screwed_on_tightly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3739 Sealed_vase The_lid_is_screwed_on_tightly._It_is_very_cold. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3740 Sealed_vase The_lid_is_screwed_on_tightly._It_is_full_of_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3741 Frozen_key A_key_encased_in_ice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3742 Red_herring The_colouring_on_it_seems_to_be_some_kind_of_sticky_goop... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3743 Red_disk A_red_coloured_disk,_apparently_made_of_wood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3744 Wooden_disk A_simple_looking_disk_made_of_wood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3745 Seer's_key The_key_to_leave_the_Seer's_house. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3746 Sticky_red_goop Yup,_it's_sticky,_it's_red_and_it's_goop. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3747 Sticky_red_goop Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3748 Fremennik_helm A_sturdy_helm_worn_only_by_Fremennik_clan_members. 5000 5000 5000 0 0 0 -6 -2 19 21 16 -1 19 0 0 +item = 3749 Archer_helm This_helmet_is_worn_by_archers. 24000 36000 0 -5 -5 -5 -6 6 6 9 10 6 6 0 0 +item = 3750 Archer_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 36000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3751 Berserker_helm This_helmet_is_worn_by_berserkers. 24000 46800 0 0 0 0 -5 -5 31 29 33 0 30 3 0 +item = 3752 Berserker_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 46800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3753 Warrior_helm This_helmet_is_worn_by_warriors. 24000 46800 0 0 5 0 -5 -5 31 33 29 0 30 0 0 +item = 3754 Warrior_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 46800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3755 Farseer_helm This_helmet_is_worn_by_farseers. 24000 46800 0 -5 -5 -5 6 -5 8 10 12 6 0 0 0 +item = 3756 Farseer_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 46800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3757 Fremennik_blade A_sword_used_only_by_Fremennik_warriors. 5000 5000 5000 6 29 -2 0 0 0 1 0 0 0 28 0 +item = 3758 Fremennik_shield A_shield_worn_by_Fremennik_warriors. 5000 5000 5000 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 3759 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3760 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3761 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3762 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3763 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3764 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3765 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3766 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3767 Fremennik_shirt The_latest_in_Fremennik_fashion. 250 250 250 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3768 Fremennik_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3769 Fremennik_shirt The_latest_in_Fremennik_fashion. 250 250 250 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3770 Fremennik_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3771 Fremennik_shirt The_latest_in_Fremennik_fashion. 250 250 250 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3772 Fremennik_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3773 Fremennik_shirt The_latest_in_Fremennik_fashion. 250 250 250 0 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3774 Fremennik_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3775 Fremennik_shirt The_latest_in_Fremennik_fashion. 250 250 250 0 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3776 Fremennik_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3777 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3778 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3779 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3780 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3781 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3782 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3783 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3784 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3785 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3786 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3787 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3788 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3789 Fremennik_cloak The_latest_fashion_in_Rellekka. 250 250 250 0 0 0 0 0 0 1 1 0 2 0 0 +item = 3790 Fremennik_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3791 Fremennik_boots Very_stylish! 500 500 500 0 0 0 0 0 0 1 1 0 0 0 0 +item = 3792 Fremennik_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3793 Fremennik_robe The_latest_fashion_in_Rellekka. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3794 Fremennik_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3795 Fremennik_skirt The_latest_fashion_in_Rellekka. 500 500 500 0 0 0 0 0 0 2 2 0 0 0 0 +item = 3796 Fremennik_skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3797 Fremennik_hat A_silly_pointed_hat. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3798 Fremennik_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 3 0 0 0 0 3 0 0 0 +item = 3799 Gloves These_will_keep_my_hands_warm! 500 500 500 0 0 0 0 0 0 1 2 0 0 0 0 +item = 3800 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3801 Keg_of_beer A_lot_of_beer_in_a_barrel. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3802 Keg_of_beer Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3803 Beer Frothy_and_alcoholic. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3804 Beer Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3805 Tankard A_big_cup_for_a_big_thirst. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3806 Tankard Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3827 Saradomin_page_1 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3828 Saradomin_page_2 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3829 Saradomin_page_3 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3830 Saradomin_page_4 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3831 Zamorak_page_1 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3832 Zamorak_page_2 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3833 Zamorak_page_3 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3834 Zamorak_page_4 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3835 Guthix_page_1 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3836 Guthix_page_2 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3837 Guthix_page_3 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3838 Guthix_page_4 This_seems_to_have_been_torn_from_a_book... 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3839 Damaged_book An_incomplete_book_of_Saradomin. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 5 +item = 3840 Holy_book The_holy_book_of_Saradomin. 200 200 200 0 0 0 0 0 8 8 8 8 8 0 5 +item = 3841 Damaged_book An_incomplete_book_of_Zamorak. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 5 +item = 3842 Unholy_book The_unholy_book_of_Zamorak. 200 200 200 8 8 8 8 8 0 0 0 0 0 0 5 +item = 3843 Damaged_book An_incomplete_book_of_Guthix. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 5 +item = 3844 Book_of_balance The_holy_book_of_Guthix. 200 200 200 4 4 4 4 4 4 4 4 4 4 0 5 +item = 3845 Journal A_daily_journal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3846 Diary Someone's_Diary. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3847 Manual Looks_like_some_kind_of_manual. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3848 Lighthouse_key The_key_to_the_front_door_of_the_lighthouse. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3849 Rusty_casket Looks_old_and_rusty... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3851 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3852 Unholy_symbol Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3853 Games_necklace(8) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3854 Games_necklace(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3855 Games_necklace(7) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3856 Games_necklace(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3857 Games_necklace(6) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3858 Games_necklace(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3859 Games_necklace(5) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3860 Games_necklace(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3861 Games_necklace(4) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3862 Games_necklace(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3863 Games_necklace(3) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3864 Games_necklace(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3865 Games_necklace(2) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3866 Games_necklace(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3867 Games_necklace(1) An_enchanted_necklace. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3868 Games_necklace(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1050 1050 1050 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3869 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3870 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3871 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3872 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3873 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3874 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3875 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3876 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3877 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3878 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3879 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3880 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3881 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3882 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3883 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3884 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3885 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3886 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3887 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3888 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3889 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3890 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3891 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3892 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3893 Stool A_comfy_stool. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3894 Awful_anthem It's_not_very_good. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3895 Good_anthem Much_better. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3896 Treaty Just_needs_the_King's_signature. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3897 Giant_nib For_making_a_giant_pen. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3898 Giant_pen The_King_should_be_able_to_use_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3899 Iron_sickle Not_as_good_as_a_pet_frog. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3900 Iron_sickle Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3901 Ghrim's_book ''Managing_Thine_Kingdom_for_Noobes''_by_A._Ghrim. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3902 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3903 Sliding_button Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3904 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3905 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3906 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3907 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3908 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3909 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3910 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3911 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3912 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3913 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3914 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3915 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3916 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3917 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3918 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3919 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3920 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3921 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3922 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3923 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3924 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3925 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3926 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3927 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3928 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3929 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3930 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3931 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3932 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3933 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3934 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3935 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3936 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3937 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3938 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3939 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3940 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3941 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3942 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3943 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3944 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3945 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3946 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3947 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3948 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3949 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3950 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3951 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3952 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3953 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3954 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3955 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3956 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3957 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3958 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3959 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3960 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3961 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3962 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3963 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3964 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3965 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3966 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3967 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3968 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3969 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3970 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3971 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3972 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3973 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3974 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3975 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3976 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3977 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3978 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3979 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3980 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3981 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3982 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3983 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3984 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3985 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3986 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3987 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3988 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3989 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3990 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3991 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3992 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3993 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3994 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3995 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3996 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3997 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3998 Sliding_button It's_a_sliding_button_of_some_kind. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 3999 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4000 Iodine Slightly_archaic,_but_effective. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4001 Shrine Sanctity_in_your_pocket. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4002 Spare_controls It_looks_like_some_kind_of_control_panel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4003 Spare_controls Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4004 Gnome_royal_seal It's_the_official_Gnome_Royal_Seal,_signed_by_King_Narnode_Shareen. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4005 Narnode's_orders Unreadable_orders_handwritten_by_King_Narnode_Shareen. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4006 Monkey_dentures Magical_monkey_talking_dentures!_What_more_can_we_say?_Ook! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4007 Enchanted_bar A_gold_bar_invested_with_a_talkative_monkey_spirit. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4008 Eye_of_gnome It's_..._the_eye_of_a_gnome!_Now_what_on_earth_could_one_do_with_this? 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4009 Eye_of_gnome Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4010 Monkey_magic A_small_sample_of_monkey_magic. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4011 Monkey_magic Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4012 Monkey_nuts These_are_monkey_nuts._Yummy. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4013 Monkey_nuts Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4014 Monkey_bar It's_a_monkey_bar._It_looks_highly_nutritious. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4015 Monkey_bar Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4016 Banana_stew It's_a_bowl_full_of_mushy_banana. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4017 Banana_stew Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4018 Monkey_wrench For_wrenching_monkeys_I'd_guess. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4019 Monkey_wrench Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4020 M'amulet_mould It's_an_amulet_mould_shaped_like_a_monkey_head. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4021 M'speak_amulet It's_an_Amulet_of_Monkey_Speak._It_makes_vague_chattering_noises. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4022 M'speak_amulet It's_an_unstrung_Amulet_of_Monkey_Speak._It_makes_vague_chattering_noises. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4023 Monkey_talisman A_magical_talisman_in_the_shape_of_a_monkey_head. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4024 Monkey_greegree A_magical_talisman_in_the_shape_of_a_small_ninja_monkey_head. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4025 Monkey_greegree A_magical_talisman_in_the_shape_of_a_medium_ninja_monkey_head. 6000 6000 6000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4026 Monkey_greegree A_magical_talisman_in_the_shape_of_a_gorilla_head. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4027 Monkey_greegree A_magical_talisman_in_the_shape_of_a_bearded_gorilla_head. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4028 Monkey_greegree A_magical_talisman_in_the_shape_of_a_mysterious_monkey_head. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4029 Monkey_greegree A_magical_talisman_in_the_shape_of_a_small_zombie_monkey_head. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4030 Monkey_greegree A_magical_talisman_in_the_shape_of_a_big_zombie_monkey_head. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4031 Monkey_greegree A_magical_talisman_in_the_shape_of_a_Karamjan_monkey_head. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4032 Dummy A_fade. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4033 Monkey It's_a_monkey_in_your_backpack._As_you_look_it_pokes_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4034 Monkey_skull It's_a_very_ancient_skull_from_some_kind_of_ape. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4035 10th_squad_sigil It's_the_official_sigil_of_the_10th_squad_of_the_Royal_Guard. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4036 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4037 Saradomin_banner The_Saradomin_Team_Standard. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4038 Saradomin_banner Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4039 Zamorak_banner The_Zamorak_Team_Standard. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4040 Zamorak_banner Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4041 Hooded_cloak The_colours_of_Saradomin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4042 Hooded_cloak The_colours_of_Zamorak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4043 Rock I_can_use_this_with_the_catapult. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4044 Rock Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4045 Explosive_potion I_could_use_this_to_destroy_things... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4046 Explosive_potion Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4047 Climbing_rope Should_be_long_enough_to_scale_castle_walls. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4048 Climbing_rope Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4049 Bandages A_box_of_bandages_for_healing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4050 Bandages Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4051 Toolbox I_can_use_this_to_repair_things. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4052 Toolbox Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4053 Barricade Use_these_to_block_enemy_team_movement. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4054 Barricade Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4055 Castlewars_manual It's_a_manual_for_castlewars. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4067 Castle_wars_ticket I_can_exchange_these_for_further_items. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4068 Decorative_sword A_very_decorative_sword. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4069 Decorative_armour Very_decorative_armour. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4070 Decorative_armour Very_decorative_armour. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4071 Decorative_helm A_very_decorative_helm. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4072 Decorative_shield A_very_decorative_shield. 850 850 850 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4073 Damp_tinderbox Not_so_useful_for_lighting_a_fire. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4074 Damp_tinderbox Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4075 Glowing_fungus A_bizarre_fungus.__It_glows_with_a_pale_blue_light. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4076 Nezikchened's_mum She_wasn't_pleased_to_see_what_her_son_did. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4077 Crystal-mine_key A_key_I_found_in_the_lower_levels_of_the_Morytanian_mines. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4078 Zealot's_key I_stole_this_from_a_Saradominist_I_met_South_of_Mort'ton. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4079 Yo-yo A_gift_from_Santa. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4081 Salve_amulet Increases_the_wearer's_strength_and_accuracy_by_15%_when_fighting_the_undead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4082 Salve_shard An_unstrung_crystal_imbued_with_the_power_of_Saradomin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4083 Sled It_needs_waxing_before_I_can_use_it. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4084 Sled A_waxed_sled. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4085 Wax I_can_use_this_to_wax_my_sled. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4086 Trollweiss These_are_very_rare_flowers_with_a_pungent_odour. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4087 Dragon_platelegs These_look_pretty_heavy. 108000 162000 0 0 0 0 -21 -7 68 66 63 -4 65 0 0 +item = 4088 Dragon_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 108000 162000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4089 Mystic_hat A_magical_hat. 15000 15000 15000 0 0 0 4 0 0 0 0 4 0 0 0 +item = 4090 Mystic_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 15000 15000 15000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4091 Mystic_robe_top The_upper_half_of_a_magical_robe. 48000 72000 0 0 0 0 20 0 0 0 0 20 0 0 0 +item = 4092 Mystic_robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 72000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4093 Mystic_robe_bottom The_lower_half_of_a_magical_robe. 48000 48000 48000 0 0 0 15 0 0 0 0 15 0 0 0 +item = 4094 Mystic_robe_bottom Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 48000 48000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4095 Mystic_gloves Magical_gloves. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4096 Mystic_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4097 Mystic_boots Magical_boots. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4098 Mystic_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4099 Mystic_hat A_dark_magical_hat. 15000 15000 15000 0 0 0 4 0 0 0 0 4 0 0 0 +item = 4100 Mystic_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 15000 15000 15000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4101 Mystic_robe_top The_upper_half_of_a_dark_magical_robe. 48000 72000 0 0 0 0 20 0 0 0 0 20 0 0 0 +item = 4102 Mystic_robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 72000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4103 Mystic_robe_bottom The_lower_half_of_a_dark_magical_robe. 48000 48000 48000 0 0 0 15 0 0 0 0 15 0 0 0 +item = 4104 Mystic_robe_bottom Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 48000 48000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4105 Mystic_gloves Dark_magical_gloves. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4106 Mystic_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4107 Mystic_boots Dark_magical_boots. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4108 Mystic_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4109 Mystic_hat A_bright_magical_hat. 15000 15000 15000 0 0 0 4 0 0 0 0 4 0 0 0 +item = 4110 Mystic_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 15000 15000 15000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4111 Mystic_robe_top The_upper_half_of_a_bright_magical_robe. 48000 72000 0 0 0 0 20 0 0 0 0 20 0 0 0 +item = 4112 Mystic_robe_top Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 72000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4113 Mystic_robe_bottom The_lower_half_of_a_bright_magical_robe. 48000 48000 48000 0 0 0 15 0 0 0 0 15 0 0 0 +item = 4114 Mystic_robe_bottom Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 48000 48000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4115 Mystic_gloves Bright_magical_gloves. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4116 Mystic_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4117 Mystic_boots Bright_magical_boots. 10000 10000 10000 0 0 0 3 0 0 0 0 3 0 0 0 +item = 4118 Mystic_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4119 Bronze_boots These_will_protect_my_feet. 24 24 24 0 0 0 -3 -1 1 2 0 0 0 0 0 +item = 4120 Bronze_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4121 Iron_boots These_will_protect_my_feet. 84 84 84 0 0 0 -3 -1 2 3 4 0 0 0 0 +item = 4122 Iron_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 84 84 84 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4123 Steel_boots These_will_protect_my_feet. 300 300 300 0 0 0 -3 -1 5 6 7 0 0 0 0 +item = 4124 Steel_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4125 Black_boots These_will_protect_my_feet. 576 576 576 0 0 0 -3 -1 7 8 9 0 0 0 0 +item = 4126 Black_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 576 576 576 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4127 Mithril_boots These_will_protect_my_feet. 780 780 780 0 0 0 -3 -1 8 9 10 0 0 0 0 +item = 4128 Mithril_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 780 780 780 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4129 Adamant_boots These_will_protect_my_feet. 768 1152 0 0 0 0 -3 -1 10 11 12 0 0 1 0 +item = 4130 Adamant_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4131 Rune_boots These_will_protect_my_feet. 12500 12500 12500 0 0 0 -3 -1 12 13 14 0 0 2 0 +item = 4132 Rune_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 12500 12500 12500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4133 Crawling_hand A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4134 Cave_crawler A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4135 Banshee A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4136 Rockslug A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4137 Cockatrice A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4138 Pyrefiend A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4139 Basilisk A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4140 Infernal_mage A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4141 Bloodveld A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4142 Jelly A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4143 Turoth A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4144 Aberrant_specter A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4145 Dust_devil A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4146 Kurask A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4147 Gargoyle A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4148 Nechryael A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4149 Abyssal_demon A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4150 Broad_arrows Arrows_with_a_wider_than_normal_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4151 Abyssal_whip A_weapon_from_the_abyss. 48000 72000 0 0 82 0 0 0 0 0 0 0 0 82 0 +item = 4152 Abyssal_whip Swap_this_note_at_any_bank_for_the_equivalent_item. 48000 72000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4153 Granite_maul Simplicity_is_the_best_weapon. 20000 30000 0 0 0 81 0 0 0 0 0 0 0 79 0 +item = 4154 Granite_maul Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4155 Enchanted_gem I_can_contact_the_Slayer_Masters_with_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4156 Mirror_shield I_can_just_about_see_things_in_this_shield's_reflection. 5000 5000 5000 0 0 0 0 0 10 15 5 5 10 0 0 +item = 4157 Mirror_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4158 Leaf-bladed_spear A_spear_with_a_leaf-shaped_point. 31000 31000 31000 47 42 36 0 0 1 1 0 0 0 50 0 +item = 4159 Leaf-bladed_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 31000 31000 31000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4160 Broad_arrows Arrows_with_a_wider_than_normal_tip. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4161 Bag_of_salt A_bag_of_salt. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4162 Rock_hammer I_can_even_smash_stone_with_this. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4163 Rock_hammer Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4164 Facemask Stops_me_breathing_in_too_much_dust. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4165 Facemask Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4166 Earmuffs These_will_protect_my_ears_from_loud_noise. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4167 Earmuffs Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4168 Nose_peg Protects_me_from_any_bad_smells. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4169 Nose_peg Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4170 Slayer's_staff An_old_and_magical_staff. 50000 21000 21000 7 -1 25 12 0 2 3 1 10 0 35 0 +item = 4171 Slayer's_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 21000 21000 21000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4172 Broad_arrows Arrows_with_a_wider_than_normal_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4173 Broad_arrows Arrows_with_a_wider_than_normal_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4174 Broad_arrows Arrows_with_a_wider_than_normal_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4175 Broad_arrows Arrows_with_a_wider_than_normal_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4177 Wolfbane_lever For_magnifying_forces_applied_to_werewolves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4178 Olive_stuffer For_making_cocktails. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4179 Stick For_playing_fetch_with. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4180 Coconut_bunch Now_you've_got_a_lovely_one_too! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4181 Mouth_grip A_holding_thingy_for_the_zip_line. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4182 Elven_sheep Pocketsized_so_it's_handy_when_you're_roving_in_the_woods! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4183 Star_amulet A_six-pointed_marble_and_obsidian_amulet 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4184 Cavern_key Upon_close_examination,_this_seems_to_be_a_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4185 Tower_key Upon_close_examination,_this_seems_to_be_a_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4186 Shed_key Upon_close_examination,_this_seems_to_be_a_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4187 Marble_amulet Triangular_in_shape,_made_from_marble,_and_as_large_as_your_hand. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4188 Obsidian_amulet Triangular_in_shape,_made_from_obsidian,_and_as_large_as_your_hand. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4189 Garden_cane A_length_of_garden_cane. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4190 Garden_brush A_typical_garden_brush. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4191 Extended_brush A_typical_garden_brush,_with_a_cane_tied_to_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4192 Extended_brush A_typical_garden_brush,_with_two_canes_tied_to_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4193 Extended_brush A_typical_garden_brush,_with_three_canes_tied_to_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4194 Torso A_decomposing_torso,_from_which_issues_the_acrid_stench_of_the_grave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4195 Arms A_pair_of_limp,_dead_arms. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4196 Legs A_pair_of_lifeless,_rotting_legs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4197 Decapitated_head A_gruesome,_decapitated_head,_whose_brain_has_rotted_away. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4198 Decapitated_head A_gruesome,_decapitated_head_-_its_eyes_stare_lifelessly_at_nothing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4199 Pickled_brain A_pickled_brain,_submerged_inside_a_jar_of_vinegar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4200 Conductor_mould A_mould_for_making_silver_lightning_conductors. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4201 Conductor A_silver_lightning_conductor. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4202 Ring_of_charos The_Ring_of_Charos. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4203 Journal A_book. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4204 Letter A_letter,_clearly_hastily_written. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4205 Consecration_seed This_consecration_seed_looks_grey_and_dead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4206 Consecration_seed This_consecration_seed_glows_with_a_warm_light. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4207 Crystal_seed This_crystal_seed_looks_grey_and_dead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4208 Crystal_seed Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4209 Cadarn_lineage A_book_on_Cadarn_clan_history. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4210 Cadarn_lineage Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4211 Elf_crystal Elf_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4212 New_crystal_bow A_nice_sturdy_magical_bow. 900000 900000 900000 0 0 0 0 100 0 0 0 0 0 0 0 +item = 4213 New_crystal_bow Swap_this_note_at_any_bank_for_the_equivalent_item. 900000 900000 900000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4214 Crystal_bow_full A_nice_sturdy_magical_bow. 900000 900000 900000 0 0 0 0 100 0 0 0 0 0 0 0 +item = 4215 Crystal_bow_9/10 A_nice_sturdy_magical_bow. 800000 800000 800000 0 0 0 0 96 0 0 0 0 0 0 0 +item = 4216 Crystal_bow_8/10 A_nice_sturdy_magical_bow. 700000 700000 700000 0 0 0 0 92 0 0 0 0 0 0 0 +item = 4217 Crystal_bow_7/10 A_nice_sturdy_magical_bow. 600000 600000 600000 0 0 0 0 88 0 0 0 0 0 0 0 +item = 4218 Crystal_bow_6/10 A_nice_sturdy_magical_bow. 500000 500000 500000 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4219 Crystal_bow_5/10 A_nice_sturdy_magical_bow. 400000 400000 400000 0 0 0 0 80 0 0 0 0 0 0 0 +item = 4220 Crystal_bow_4/10 A_nice_sturdy_magical_bow. 300000 300000 300000 0 0 0 0 76 0 0 0 0 0 0 0 +item = 4221 Crystal_bow_3/10 A_nice_sturdy_magical_bow. 200000 200000 200000 0 0 0 0 72 0 0 0 0 0 0 0 +item = 4222 Crystal_bow_2/10 A_nice_sturdy_magical_bow. 100000 100000 100000 0 0 0 0 68 0 0 0 0 0 0 0 +item = 4223 Crystal_bow_1/10 A_nice_sturdy_magical_bow. 50000 50000 50000 0 0 0 0 64 0 0 0 0 0 0 0 +item = 4224 New_crystal_shield A_nice_sturdy_crystal_shield. 0 0 0 0 0 0 0 0 51 54 53 0 80 0 0 +item = 4225 Crystal_shield_full A_nice_sturdy_crystal_shield. 750000 750000 750000 0 0 0 0 0 51 54 53 0 80 0 0 +item = 4226 Crystal_shield_9/10 A_nice_sturdy_crystal_shield. 670000 670000 670000 0 0 0 0 0 49 52 51 0 78 0 0 +item = 4227 Crystal_shield_8/10 A_nice_sturdy_crystal_shield. 590000 590000 590000 0 0 0 0 0 47 50 49 0 76 0 0 +item = 4228 Crystal_shield_7/10 A_nice_sturdy_crystal_shield. 510000 510000 510000 0 0 0 0 0 45 48 47 0 74 0 0 +item = 4229 Crystal_shield_6/10 A_nice_sturdy_crystal_shield. 430000 430000 430000 0 0 0 0 0 43 46 45 0 72 0 0 +item = 4230 Crystal_shield_5/10 A_nice_sturdy_crystal_shield. 350000 350000 350000 0 0 0 0 0 41 44 43 0 70 0 0 +item = 4231 Crystal_shield_4/10 A_nice_sturdy_crystal_shield. 270000 270000 270000 0 0 0 0 0 39 42 41 0 68 0 0 +item = 4232 Crystal_shield_3/10 A_nice_sturdy_crystal_shield. 190000 190000 190000 0 0 0 0 0 37 40 39 0 66 0 0 +item = 4233 Crystal_shield_2/10 A_nice_sturdy_crystal_shield. 100000 100000 100000 0 0 0 0 0 35 38 37 0 64 0 0 +item = 4234 Crystal_shield_1/10 A_nice_sturdy_crystal_shield. 25000 25000 25000 0 0 0 0 0 33 36 35 0 62 0 0 +item = 4235 New_crystal_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 800000 800000 800000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4236 Oak_longbow This_bow_has_been_signed_by_Robin,_Master_Bowman. 160 160 160 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4237 Nettle-water It's_a_bowl_of_water,_with_some_nettles_in_it. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4238 Puddle_of_slime _It's_a_Puddle_of_slime. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4239 Nettle_tea It's_a_bowl_of_nettle_tea. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4240 Nettle_tea It's_a_bowl_of_milky_nettle_tea. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4241 Nettles A_handful_of_nettles. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4242 Cup_of_tea A_nice_cup_of_nettle_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4243 Cup_of_tea A_milky_cup_of_nettle_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4244 Porcelain_cup A_porcelain_cup. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4245 Cup_of_tea Some_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4246 Cup_of_tea Some_milky_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4247 Mystical_robes The_Robes_of_Necrovarus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4248 Book_of_haricanto The_Book_of_Haricanto. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4249 Translation_manual A_translation_manual. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4250 Ghostspeak_amulet The_amulet_of_ghostspeak_glows_green_from_the_crone's_enchantment. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4251 Ectophial The_Ectophial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4252 Ectophial The_Ectophial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4253 Model_ship A_small_wooden_ship. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4254 Model_ship A_small_wooden_ship_with_a_silk_flag. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4255 Bonemeal A_pot_of_crushed_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4256 Bonemeal A_pot_of_crushed_bat_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4257 Bonemeal A_pot_of_crushed_big_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4258 Bonemeal A_pot_of_crushed_burnt_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4259 Bonemeal A_pot_of_crushed_burnt_jogre_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4260 Bonemeal A_pot_of_crushed_baby_dragon_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4261 Bonemeal A_pot_of_crushed_dragon_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4262 Bonemeal A_pot_of_crushed_wolf_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4263 Bonemeal A_pot_of_crushed_small_ninja_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4264 Bonemeal A_pot_of_crushed_medium_ninja_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4265 Bonemeal A_pot_of_crushed_gorilla_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4266 Bonemeal A_pot_of_crushed_bearded_gorilla_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4267 Bonemeal A_pot_of_crushed_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4268 Bonemeal A_pot_of_crushed_small_zombie_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4269 Bonemeal A_pot_of_crushed_large_zombie_monkey_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4270 Bonemeal A_pot_of_crushed_skeleton_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4271 Bonemeal A_pot_of_crushed_jogre_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4272 Bone_key A_key_dropped_by_Necrovarus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4273 Chest_key A_key_to_a_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4274 Map_scrap A_section_from_some_kind_of_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4275 Map_scrap A_section_from_some_kind_of_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4276 Map_scrap A_section_from_some_kind_of_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4277 Treasure_map A_complete_treasure_map. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4278 Ecto-token A_token_with_ectoplasm_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4280 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4282 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4283 Petition_form A_scroll_of_paper_containing_signatures. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4284 Bedsheet It's_a_bedsheet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4285 Bedsheet It's_an_ectoplasm-covered_bedsheet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4286 Bucket_of_slime It's_a_bucket_of_ectoplasm. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4287 Raw_beef This_raw_beef_is_rancid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4288 Raw_beef Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4289 Raw_chicken This_raw_chicken_is_rancid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4290 Raw_chicken Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4291 Cooked_chicken This_cooked_chicken_looks_disgusting. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4292 Cooked_chicken Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4293 Cooked_meat I_wouldn't_eat_that_if_I_were_you. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4294 Cooked_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4295 Female_ham She's_a_Human_against_Monsters. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4296 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4297 Male_ham He's_a_Human_against_Monsters. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4298 Ham_shirt A_vivid_crimson_shirt. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4299 Ham_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4300 Ham_robe A_vivid_crimson_robe. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4301 Ham_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4302 Ham_hood Light-weight_head_protection_and_eye_shield. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4303 Ham_hood Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4304 Ham_cloak A_HAM_cape. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4305 Ham_cloak Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4306 H.a.m_logo A_badge_for_the_HAM_cult. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4307 H.a.m_logo Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4308 Gloves HAM_gloves_as_worn_by_the_Humans_Against_Monsters_group. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4309 Gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4310 Boots HAM_boots_as_worn_by_the_Humans_Against_Monsters_group. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4311 Boots Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4312 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4313 Crystal_of_seren A_book_on_elven_crystal. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4314 Crystal_of_seren Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4315 Team-1_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4316 Team-1_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4317 Team-2_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4318 Team-2_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4319 Team-3_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4320 Team-3_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4321 Team-4_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4322 Team-4_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4323 Team-5_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4324 Team-5_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4325 Team-6_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4326 Team-6_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4327 Team-7_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4328 Team-7_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4329 Team-8_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4330 Team-8_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4331 Team-9_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4332 Team-9_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4333 Team-10_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4334 Team-10_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4335 Team-11_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4336 Team-11_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4337 Team-12_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4338 Team-12_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4339 Team-13_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4340 Team-13_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4341 Team-14_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4342 Team-14_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4343 Team-15_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4344 Team-15_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4345 Team-16_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4346 Team-16_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4347 Team-17_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4348 Team-17_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4349 Team-18_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4350 Team-18_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4351 Team-19_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4352 Team-19_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4353 Team-20_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4354 Team-20_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4355 Team-21_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4356 Team-21_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4357 Team-22_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4358 Team-22_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4359 Team-23_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4360 Team-23_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4361 Team-24_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4362 Team-24_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4363 Team-25_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4364 Team-25_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4365 Team-26_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4366 Team-26_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4367 Team-27_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4368 Team-27_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4369 Team-28_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4370 Team-28_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4371 Team-29_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4372 Team-29_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4373 Team-30_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4374 Team-30_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4375 Team-31_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4376 Team-31_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4377 Team-32_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4378 Team-32_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4379 Team-33_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4380 Team-33_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4381 Team-34_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4382 Team-34_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4383 Team-35_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4384 Team-35_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4385 Team-36_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4386 Team-36_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4387 Team-37_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4388 Team-37_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4389 Team-38_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4390 Team-38_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4391 Team-39_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4392 Team-39_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4393 Team-40_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4394 Team-40_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4395 Team-41_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4396 Team-41_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4397 Team-42_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4398 Team-42_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4399 Team-43_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4400 Team-43_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4401 Team-44_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4402 Team-44_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4403 Team-45_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4404 Team-45_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4405 Team-46_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4406 Team-46_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4407 Team-47_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4408 Team-47_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4409 Team-48_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4410 Team-48_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4411 Team-49_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4412 Team-49_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4413 Team-50_cape Ooohhh_look_at_the_pretty_colours... 50 50 50 0 0 0 0 0 0 1 1 0 2 0 0 +item = 4414 Team-50_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4415 Blunt_axe A_jungle_forester's_blunt_axe. 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4416 Herbal_tincture A_strong_medicinal_brew_for_heavy_chests. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4417 Guthix_rest(4) A_cup_of_Guthix_Rest. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4418 Guthix_rest(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4419 Guthix_rest(3) A_cup_of_Guthix_Rest. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4420 Guthix_rest(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4421 Guthix_rest(2) A_cup_of_Guthix_Rest. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4422 Guthix_rest(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4423 Guthix_rest(1) A_cup_of_Guthix_Rest. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4424 Guthix_rest(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4425 Stodgy_mattress A_half-filled_feather_mattress. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4426 Comfy_mattress A_comfy-looking_feather_mattress. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4427 Iron_oxide Looks_like_a_bunch_of_rust_to_me. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4428 Animate_rock_scroll An_animate_rock_spell_is_written_on_this_parchment. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4429 Broken_vane_part These_weathervane_directionals_are_broken. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4430 Directionals The_weathervane_directionals_should_work_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4431 Broken_vane_part This_weathervane_ornament_is_damaged. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4432 Ornament A_fixed_Weathervane_ornament. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4433 Broken_vane_part A_broken_Weathervane_pillar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4434 Weathervane_pillar A_fixed_weathervane_rotating_pillar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4435 Weather_report Clear_skies_ahead,_with_some_chance_of_showers,_thunderstorms,_ice_and_hail. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4436 Airtight_pot This_is_pretty_well_sealed. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4437 Airtight_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4438 Unfired_pot_lid This_needs_firing,_then_it_should_fit_on_a_normal-sized_pot. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4439 Unfired_pot_lid Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4440 Pot_lid This_should_fit_on_a_normal-sized_pot. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4441 Pot_lid Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4442 Breathing_salts An_airtight_pot_with_something_inside,_most_likely_breathing_salts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4443 Chicken_cage A_large_cage_for_transporting_chickens. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4444 Sharpened_axe A_jungle_forester's_super_sharp_axe. 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4445 Red_mahogany_log Some_rare_mahogany_logs_which_have_been_professionally_cured. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4446 Steel_key_ring I_can_store_my_keys_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4447 Antique_lamp I_Wonder_what_happens_if_I_rub_it... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4449 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4451 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4453 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4455 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4456 Bowl_of_hot_water It's_a_bowl_of_hot_water. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4457 Bowl_of_hot_water Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4458 Cup_of_water A_cup_of_water. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4459 Cup_of_water Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4460 Cup_of_hot_water It's_hot! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4461 Cup_of_hot_water Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4462 Ruined_herb_tea A_ruined_herb_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4463 Ruined_herb_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4464 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water_and_harralander. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4465 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4466 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water_and_guam. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4467 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4468 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water_and_marrentill. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4469 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4470 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_harralander_and_marrentill. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4471 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4472 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_harralander_and_guam. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4473 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4474 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water_and_A_guam. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4475 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4476 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_guam_and_marrentill. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4477 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4478 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_harralander,_marrentill_and_guam. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4479 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4480 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_A_guam_and_marrentill. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4481 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4482 Herb_tea_mix An_unfinished_herb_tea_made_up_of_water,_A_guam_and_harralander. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4483 Herb_tea_mix Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4484 Safety_guarantee The_strange_characters_supposedly_grant_Svidi_safe_passage_into_Rellekka. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4485 White_pearl This_fruit_is_known_as_White_Pearl._Should_taste_good. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4486 White_pearl_seed You_can_grow_this_seed_even_in_cold_mountain_ranges! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4487 Half_a_rock It's_a_piece_of_the_Ancient_Rock_of_the_mountain_people._It's_still_just_a_stone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4488 Corpse_of_woman The_corpse_of_a_woman_who_died_long_ago. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4489 Asleif's_necklace This_used_to_belong_to_Asleif,_daughter_of_the_mountain_camp_chieftain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4490 Mud Yuck,_it's_sticky,_dirty_mud. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4491 Mud Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4492 Rock A_rock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4493 Rock Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4494 Pole It's_just_a_long_stick,_really. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4495 Pole Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4496 Broken_pole Splintered_into_pieces,_it_has_become_completely_useless_to_you. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4497 Broken_pole Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4498 Rope It's_the_rope_you're_holding. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4499 Rope Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4500 Pole It's_the_pole_you're_holding. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4501 Pole Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4502 Bearhead Quite_ferocious_looking. 0 0 0 0 0 0 -3 -3 12 14 10 7 9 0 0 +item = 4503 Decorative_sword A_very_decorative_sword. 1300 1300 1300 9 14 -2 0 0 0 3 2 0 0 16 0 +item = 4504 Decorative_armour Very_decorative_armour. 5200 5200 5200 0 0 0 -30 -10 65 63 55 -6 63 0 0 +item = 4505 Decorative_armour Very_decorative_armour. 2600 2600 2600 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 4506 Decorative_helm A_very_decorative_helm. 780 780 780 0 0 0 -3 -1 14 15 13 -1 14 0 0 +item = 4507 Decorative_shield A_very_decorative_shield. 2210 2210 2210 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 4508 Decorative_sword A_very_decorative_sword. 3200 3200 3200 9 14 -2 0 0 0 3 2 0 0 16 0 +item = 4509 Decorative_armour Very_decorative_armour. 5120 9984 0 0 0 0 -30 -10 65 63 55 -6 63 0 0 +item = 4510 Decorative_armour Very_decorative_armour. 2560 3840 0 0 0 0 -21 -7 33 31 29 -4 31 0 0 +item = 4511 Decorative_helm A_very_decorative_helm. 768 1152 0 0 0 0 -3 -1 14 15 13 -1 14 0 0 +item = 4512 Decorative_shield A_very_decorative_shield. 2176 3264 0 0 0 0 -8 -2 27 31 29 -1 29 0 0 +item = 4513 Castlewars_hood The_colours_of_Saradomin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4514 Castlewars_cloak A_fine_castlewars_Cape. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4515 Castlewars_hood The_colours_of_Zamorak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4516 Castlewars_cloak A_fine_castlewars_Cape. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4517 Giant_frog_legs This_could_feed_a_family_of_gnomes_for_a_week! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4518 Giant_frog_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4519 Swamp_wallbeast A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4520 Swamp_cave_slime A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4521 Swamp_cave_bug A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4522 Oil_lamp Not_the_genie_sort. 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4523 Oil_lamp Swap_this_note_at_any_bank_for_the_equivalent_item. 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4524 Oil_lamp Not_the_genie_sort. 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4525 Oil_lamp An_oil_lamp_with_no_oil_in_it. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4526 Oil_lamp Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4527 Candle_lantern Put_a_candle_in_to_complete_it. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4528 Candle_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4529 Candle_lantern A_candle_in_a_glass_cage. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4530 Candle_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4531 Candle_lantern A_flickering_candle_in_a_glass_cage. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4532 Candle_lantern A_candle_in_a_glass_cage. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4533 Candle_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4534 Candle_lantern A_flickering_candle_in_a_glass_cage. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4535 Oil_lantern Put_oil_in_to_complete_it. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4536 Oil_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4537 Oil_lantern An_unlit_oil_lantern. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4538 Oil_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4539 Oil_lantern It_lights_your_way_through_the_dark_places_of_the_earth. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4540 Oil_lantern_frame Add_the_glass_to_complete. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4541 Oil_lantern_frame Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4542 Lantern_lens A_roughly_circular_disc_of_glass. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4543 Lantern_lens Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4544 Bullseye_lantern You_need_to_add_a_lens_before_you_can_use_it. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4545 Bullseye_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4546 Bullseye_lantern You_need_to_add_lamp_oil_before_you_can_use_it. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4547 Bullseye_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4548 Bullseye_lantern A_sturdy_steel_lantern. 420 420 420 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4549 Bullseye_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 420 420 420 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4550 Bullseye_lantern A_sturdy_steel_lantern_casting_a_bright_beam. 420 420 420 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4551 Spiny_helmet You_don't_want_to_wear_it_inside-out. 650 650 650 0 0 0 -6 -2 9 10 7 -1 9 0 0 +item = 4552 Spiny_helmet Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4558 Blue_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4559 Deep_blue_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4560 White_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4561 Purple_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4562 Red_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4563 Green_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4564 Pink_sweets Not_likely_to_last_until_next_Halloween. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4565 Basket_of_eggs Hand_them_out_to_spread_the_Easter_happiness. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4566 Rubber_chicken Perhaps_not_the_most_powerful_weapon_in_RuneScape. 0 0 0 -100 -100 -50 0 0 0 0 0 0 0 -10 0 +item = 4567 Gold_helmet Made_of_gold_and_white_gold. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4568 Dwarven_lore The_book_is_almost_falling_apart,_you'll_have_to_handle_it_quite_carefully. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4569 Book_page_1 A_missing_page_from_Rolad's_book!_It_seems_to_be_the_first_one. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4570 Book_page_2 A_missing_page_from_Rolad's_book!_It_seems_to_be_the_second_one. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4571 Book_page_3 A_missing_page_from_Rolad's_book!_It_seems_to_be_the_third_one. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4572 Pages Missing_pages! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4573 Pages A_collection_of_missing_pages_from_Rolad's_book! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4574 Base_schematics These_are_the_base_schematics_of_a_dwarven_multicannon 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4575 Schematic A_transparent_overlay_-_details_of_something? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4576 Schematics Transparent_overlays_-_details_of_something? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4577 Schematics Transparent_overlays_-_details_of_something? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4578 Schematic The_assembled_schematic_for_modifying_the_dwarven_multicannon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4579 Cannon_ball A_heavy_gold_metal_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4580 Black_spear A_black_tipped_spear. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4581 Black_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4582 Black_spear(p) A_poisoned_black_tipped_spear. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4583 Black_spear(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4584 Black_spear(kp) A_Karambwan_poisoned_black_tipped_spear. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4585 Dragon_plateskirt This_looks_pretty_heavy. 108000 162000 0 0 0 0 -21 -7 68 66 63 -4 65 0 0 +item = 4586 Dragon_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 108000 162000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4587 Dragon_scimitar A_vicious,_curved_sword. 40000 60000 0 8 67 -2 0 0 0 1 0 0 0 66 0 +item = 4588 Dragon_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4589 Keys Keys_to_the_Mayor's_house. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4590 Jewels The_Mayor_of_Pollnivneach's_wife's_jewels. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4591 Karidian_headpiece Wear_it_on_your_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4592 Karidian_headpiece Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4593 Fake_beard Makes_me_itch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4594 Fake_beard Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4595 Karidian_disguise Makes_my_face_itch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4596 Karidian_disguise Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4597 Note A_note_found_in_the_Mayor's_bedroom_mentioning_the_word_'Fibonacci'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4598 Note A_list_of_5_numbers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4599 Oak-blackjack A_handy_little_club_made_out_of_oak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4600 Willow-blackjack A_handy_little_club_made_out_of_willow. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4601 Ugthanki_dung Dung_of_the_Camelus_Horribleus_variety. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4602 Ugthanki_dung Poor_Camel,_what_have_I_fed_you? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4603 Receipt A_receipt_for_one_'Camelus_Horribleus'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4604 Hag's_poison A_red_viscous_liquid_in_a_vial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4605 Snake_charm Makes_a_hissing_sound. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4606 Snake_basket This_is_used_to_hold_snakes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4607 Snake_basket_full This_basket_contains_a_snake. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4608 Super_kebab A_meaty_and_very_hot_kebab. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4609 Super_kebab Swap_this_note_at_any_bank_for_the_equivalent_item. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4610 Red_hot_sauce The_bottle_feels_warm. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4611 Desert_disguise A_disguise_suitable_for_the_desert. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4612 Willow-blackjack Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4613 Spinning_plate It_has_a_picture_of_a_dragon_on_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4614 Broken_plate Alas... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4615 Letter An_old_faded_letter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4616 Varmen's_notes An_archaeologist's_notes. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4617 Display_cabinet_key The_museum_curator's_key. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4618 Statuette A_beautifully-carved_stone_statuette. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4619 Strange_implement It's_pretty,_but_you_wish_you_knew_what_it_was. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4620 Black_mushroom It_looks_horrible. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4621 Phoenix_feather A_long_feather_patterned_like_a_flame. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4622 Black_mushroom_ink Black_ink_made_out_of_mushrooms. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4623 Phoenix_quill_pen A_phoenix_feather_dipped_in_ink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4624 Golem_program It_reads_'YOUR_TASK_IS_DONE'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4625 Bandit A_tough_looking_criminal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4626 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4627 Bandit's_brew A_cheeky_little_lager. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4628 Bandit's_brew Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4653 Fire Hot! 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4654 Etchings A_copy_of_the_engravings_found_on_a_mysterious_stone_tablet. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4655 Translation A_rough_translation_made_from_archaeological_etchings. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4656 Warm_key This_key_is_unusually_warm_to_the_touch. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4657 Ring_of_visibility A_ring_that_allows_you_to_see_things_that_are_normally_invisible... 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4658 Silver_pot A_silver_pot_made_by_Ruantun. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4659 Blessed_pot A_silver_pot_made_by_Ruantun_and_blessed_on_Entrana. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4660 Silver_pot A_silver_pot_made_by_Ruantun_filled_with_your_blood. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4661 Blessed_pot A_blessed_silver_pot_made_by_Ruantun_filled_with_your_blood. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4662 Silver_pot A_silver_pot_made_by_Ruantun_filled_with_blood_and_garlic. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4663 Blessed_pot A_blessed_silver_pot_filled_with_blood_and_garlic. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4664 Silver_pot A_silver_pot_made_by_Ruantun_filled_with_blood,_garlic_and_spices. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4665 Blessed_pot A_blessed_silver_pot_filled_with_blood,_garlic_and_spices. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4666 Silver_pot A_silver_pot_made_by_Ruantun_filled_with_blood_and_spices. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4667 Blessed_pot A_blessed_silver_pot_filled_with_blood_and_spices. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4668 Garlic_powder Finely_ground_garlic_powder. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4669 Garlic_powder Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4670 Blood_diamond The_Diamond_of_Blood. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4671 Ice_diamond The_Diamond_of_Ice. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4672 Smoke_diamond The_Diamond_of_Smoke. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4673 Shadow_diamond The_Diamond_of_Shadow. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4674 Gilded_cross An_old_and_strangely_shaped_metal_cross. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4675 Ancient_staff A_magical_staff_of_ancient_origin... 40000 60000 0 10 -1 40 15 0 2 3 1 15 0 50 -1 +item = 4676 Ancient_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4677 Catspeak_amulet It's_an_amulet_of_cat_speak._It_makes_vague_purring_noises. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4678 Canopic_jar Has_a_lid_shaped_like_a_man._I_think_it_contains_someone's_liver._Yuck. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4679 Canopic_jar Has_a_lid_shaped_like_an_ape._Eeew!_I_think_it_contains_someone's_intestines. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4680 Canopic_jar Has_a_lid_shaped_like_a_bug._Disgusting!_I_think_there's_a_stomach_inside. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4681 Canopic_jar Has_a_lid_shaped_like_a_crocodile._Yuck,_I_think_there_are_lungs_inside. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4682 Holy_symbol Menaphite_lucky_charm. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4683 Unholy_symbol Sign_of_the_devourer. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4684 Linen One_sheet_of_mummy_wrap. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4685 Linen Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4686 Embalming_manual Little_book_of_embalming_by_Bod_E._Wrapper. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4687 Bucket_of_sap It's_a_bucket_of_sap. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4688 Bucket_of_sap Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4689 Pile_of_salt A_little_heap_of_salt. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4690 Pile_of_salt Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4691 Sphinx's_token Miniature_golden_statue_of_a_sphinx. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4692 Gold_leaf Very_delicate_thin_pressed_gold. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4693 Full_bucket It's_a_bucket_of_salty_water. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4694 Steam_rune A_combined_Water_and_Fire_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4695 Mist_rune A_combined_Air_and_Water_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4696 Dust_rune A_combined_Air_and_Earth_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4697 Smoke_rune A_combined_Air_and_Fire_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4698 Mud_rune A_combined_Earth_and_Water_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4699 Lava_rune A_combined_Earth_and_Fire_Rune. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4700 Sapphire_lantern You_need_to_add_lamp_oil_before_you_can_use_it. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4701 Sapphire_lantern A_bullseye_lantern_with_a_sapphire_for_a_lens. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4702 Sapphire_lantern A_lantern_casting_a_bright_blue_beam. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4703 Magic_stone Doesn't_look_very_special. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4704 Stone_bowl A_magic_stone_bowl_for_catching_the_tears_of_Guthix. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4706 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4707 Crumbling_tome This_book_must_be_really_old! 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4708 Ahrim's_hood Ahrim_the_Blighted's_leather_hood. 5200 7800 0 0 0 0 6 -2 15 13 16 6 0 0 0 +item = 4709 Ahrim's_hood Swap_this_note_at_any_bank_for_the_equivalent_item. 5200 7800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4710 Ahrim's_staff Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 12 -1 65 15 0 3 2 5 15 0 68 0 +item = 4711 Ahrim's_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 34000 51000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4712 Ahrim's_robetop Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4713 Ahrim's_robetop Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4714 Ahrim's_robeskirt Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4715 Ahrim's_robeskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 18800 28200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4716 Dharok's_helm Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4717 Dharok's_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4718 Dharok's_greataxe Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4719 Dharok's_greataxe Swap_this_note_at_any_bank_for_the_equivalent_item. 83200 124800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4720 Dharok's_platebody Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4721 Dharok's_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4722 Dharok's_platelegs Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4723 Dharok's_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4724 Guthan's_helm Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4725 Guthan's_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4726 Guthan's_warspear Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4727 Guthan's_warspear Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4728 Guthan's_platebody Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4729 Guthan's_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4730 Guthan's_chainskirt Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4731 Guthan's_chainskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4732 Karil's_coif Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4733 Karil's_coif Swap_this_note_at_any_bank_for_the_equivalent_item. 5200 7800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4734 Karil's_crossbow Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4735 Karil's_crossbow Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4736 Karil's_leathertop Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4737 Karil's_leathertop Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4738 Karil's_leatherskirt Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4739 Karil's_leatherskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 18800 28200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4740 Bolt_rack Must_need_a_special_type_of_crossbow_to_use_this. 20 30 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4745 Torag's_helm Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4746 Torag's_helm Swap_this_note_at_any_bank_for_the_equivalent_item 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4747 Torag's_hammers Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4748 Torag's_hammers Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4749 Torag's_platebody Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4750 Torag's_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4751 Torag's_platelegs Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4752 Torag's_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4753 Verac's_helm Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4754 Verac's_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4755 Verac's_flail Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4756 Verac's_flail Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4757 Verac's_brassard Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4758 Verac's_brassard Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4759 Verac's_plateskirt Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4760 Verac's_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4773 Bronze_brutal Blunt_bronze_arrow...ouch 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4778 Iron_brutal Blunt_iron_arrow...ouch 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4783 Steel_brutal Blunt_steel_arrow...ouch 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4788 Black_brutal Blunt_black_arrow...ouch 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4793 Mithril_brutal Blunt_mithril_arrow...ouch 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4798 Adamant_brutal Blunt_adamantite_arrow...ouch 95 95 95 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4803 Rune_brutal Blunt_rune_arrow...ouch 450 450 450 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4808 Black_prism A_very_black_prism. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4809 Torn_page A_half_torn_necromantic_page. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4810 Ruined_backpack A_broken_and_useless_looking_backpack_with_the_moniker,'B.Vahn'_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4811 Dragon_inn_tankard A_white_ceramic_mug_with_a_dragon_insignia. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4812 Zogre_bones A_pile_of_Zombie_Ogre_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4813 Zogre_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4814 Sithik_portrait A_classic_realist_charcoal_portrait_of_Sithik. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4815 Sithik_portrait A_semi-nihilistic,_pseudo-impressionistic,_half-squarist_charcoal_sketch_of_Sithik. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4816 Signed_portrait A_signed_classic_realist_charcoal_portrait_of_Sithik. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4817 Book_of_portraiture A_book_explaining_the_art_of_portraiture. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4818 Ogre_artefact An_ancient_ogre_artefact_-_resembling_a_heavy_large_helm. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4819 Bronze_nails Keeps_things_in_place_fairly_permanently. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4820 Iron_nails Keeps_things_in_place_fairly_permanently. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4821 Black_nails Keeps_things_in_place_fairly_permanently. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4822 Mithril_nails Keeps_things_in_place_fairly_permanently. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4823 Adamantite_nails Keeps_things_in_place_fairly_permanently. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4824 Rune_nails Keeps_things_in_place_fairly_permanently. 220 220 220 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4825 Unstrung_comp_bow An_unstrung_composite_ogre_bow. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4826 Unstrung_comp_bow Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4827 Comp_ogre_bow A_composite_ogre_bow. 180 180 180 0 0 0 0 38 0 0 0 0 0 0 0 +item = 4828 Comp_ogre_bow Swap_this_note_at_any_bank_for_the_equivalent_item. 180 180 180 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4829 Book_of_'h.a.m' A_book_of_H.A.M_affiliation. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4830 Fayrg_bones Ancient_ogre_bones_from_the_ogre_burial_tomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4831 Fayrg_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4832 Raurg_bones Ancient_ogre_bones_from_the_ogre_burial_tomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4833 Raurg_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4834 Ourg_bones Ancient_ogre_bones_from_the_ogre_burial_tomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4835 Ourg_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4836 Strange_potion Some_strange_liquid_given_to_you_by_Zavistic_Rarve. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4837 Necromancy_book A_book_of_necromantic_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4838 Cup_of_tea Looks_like_an_innocent_cup_of_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4839 Ogre_gate_key A_key_to_some_sort_of_special_tomb_area. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4840 Rogue's_purse_potion(unf) I_need_another_ingredient_to_finish_this_Rogues_purse_potion. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4841 Rogue's_purse_potion(unf) Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4842 Relicym's_balm(4) Relicym's_balm,_which_helps_cure_disease. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4843 Relicym's_balm(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4844 Relicym's_balm(3) Relicym's_balm,_which_helps_cure_disease. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4845 Relicym's_balm(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4846 Relicym's_balm(2) Relicym's_balm,_which_helps_cure_disease. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4847 Relicym's_balm(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4848 Relicym's_balm(1) Relicym's_balm,_which_helps_cure_disease. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4849 Relicym's_balm(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4850 Ogre_coffin_key A_key_which_opens_coffins! 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4851 Ogre_coffin_key Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4852 Bonemeal A_pot_of_crushed_zogre_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4853 Bonemeal A_pot_of_crushed_fayrg_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4854 Bonemeal A_pot_of_crushed_raurg_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4855 Bonemeal A_pot_of_crushed_ourg_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4856 Ahrim's_hood_100 Ahrim_the_Blighted's_leather_hood. 5200 13000 0 0 0 0 6 -2 15 13 16 6 0 0 0 +item = 4857 Ahrim's_hood_75 Ahrim_the_Blighted's_leather_hood. 5200 13000 0 0 0 0 6 -2 15 13 16 6 0 0 0 +item = 4858 Ahrim's_hood_50 Ahrim_the_Blighted's_leather_hood. 5200 13000 0 0 0 0 6 -2 15 13 16 6 0 0 0 +item = 4859 Ahrim's_hood_25 Ahrim_the_Blighted's_leather_hood. 5200 13000 0 0 0 0 6 -2 15 13 16 6 0 0 0 +item = 4860 Ahrim's_hood_0 Ahrim_the_Blighted's_leather_hood. 5200 13000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4861 Ahrim's_hood_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 5200 13000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4862 Ahrim's_staff_100 Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 12 -1 65 15 0 3 2 5 15 0 68 0 +item = 4863 Ahrim's_staff_75 Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 12 -1 65 15 0 3 2 5 15 0 68 0 +item = 4864 Ahrim's_staff_50 Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 12 -1 65 15 0 3 2 5 15 0 68 0 +item = 4865 Ahrim's_staff_25 Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 12 -1 65 15 0 3 2 5 15 0 68 0 +item = 4866 Ahrim's_staff_0 Ahrim_the_Blighted's_quarterstaff. 34000 51000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4867 Ahrim's_staff_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 34000 51000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4868 Ahrim's_top_100 Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4869 Ahrim's_top_75 Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4870 Ahrim's_top_50 Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4871 Ahrim's_top_25 Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4872 Ahrim's_top_0 Ahrim_the_Blighted's_armoured_robe_top. 20000 30000 0 0 0 0 30 -10 52 37 63 30 0 0 0 +item = 4873 Ahrim's_top_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4874 Ahrim's_skirt_100 Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4875 Ahrim's_skirt_75 Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4876 Ahrim's_skirt_50 Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4877 Ahrim's_skirt_25 Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4878 Ahrim's_skirt_0 Ahrim_the_Blighted's_armoured_robe_skirt. 18800 28200 0 0 0 0 22 -7 33 30 36 22 0 0 0 +item = 4879 Ahrim's_skirt_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 18800 28200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4880 Dharok's_helm_100 Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4881 Dharok's_helm_75 Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4882 Dharok's_helm_50 Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4883 Dharok's_helm_25 Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4884 Dharok's_helm_0 Dharok_the_Wretched's_helm. 41200 61800 0 0 0 0 0 0 45 48 44 -1 51 0 0 +item = 4885 Dharok's_helm_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4886 Dharok's_axe_100 Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4887 Dharok's_axe_75 Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4888 Dharok's_axe_50 Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4889 Dharok's_axe_25 Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4890 Dharok's_axe_0 Dharok_the_Wretched's_greataxe. 83200 124800 0 0 103 95 -4 0 0 0 0 0 -1 105 0 +item = 4891 Dharok's_axe_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 83200 124800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4892 Dharok's_body_100 Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4893 Dharok's_body_75 Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4894 Dharok's_body_50 Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4895 Dharok's_body_25 Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4896 Dharok's_body_0 Dharok_the_Wretched's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4897 Dharok's_body_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4898 Dharok's_legs_100 Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4899 Dharok's_legs_75 Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4900 Dharok's_legs_50 Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4901 Dharok's_legs_25 Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4902 Dharok's_legs_0 Dharok_the_Wretched's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4903 Dharok's_legs_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4904 Guthan's_helm_100 Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4905 Guthan's_helm_75 Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4906 Guthan's_helm_50 Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4907 Guthan's_helm_25 Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4908 Guthan's_helm_0 Guthan_the_Infested's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4909 Guthan's_helm_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4910 Guthan's_spear_100 Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4911 Guthan's_spear_75 Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4912 Guthan's_spear_50 Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4913 Guthan's_spear_25 Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4914 Guthan's_spear_0 Guthan_the_Infested's_warspear. 40000 60000 0 75 75 75 0 0 7 7 7 0 0 75 0 +item = 4915 Guthan's_spear_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4916 Guthan's_body_100 Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4917 Guthan's_body_75 Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4918 Guthan's_body_50 Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4919 Guthan's_body_25 Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4920 Guthan's_body_0 Guthan_the_Infested's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4921 Guthan's_body_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4922 Guthan's_skirt_100 Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4923 Guthan's_skirt_75 Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4924 Guthan's_skirt_50 Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4925 Guthan's_skirt_25 Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4926 Guthan's_skirt_0 Guthan_the_Infested's_chainskirt. 110000 165000 0 0 0 0 -14 -7 75 72 73 -4 82 0 0 +item = 4927 Guthan's_skirt_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4928 Karil's_coif_100 Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4929 Karil's_coif_75 Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4930 Karil's_coif_50 Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4931 Karil's_coif_25 Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4932 Karil's_coif_0 Karil_the_Tainted's_coif_and_facemask. 5200 7800 0 0 0 0 -3 3 6 9 12 6 10 0 0 +item = 4933 Karil's_coif_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 5200 7800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4934 Karil's_x-bow_100 Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4935 Karil's_x-bow_75 Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4936 Karil's_x-bow_50 Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4937 Karil's_x-bow_25 Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4938 Karil's_x-bow_0 Karil_the_Tainted's_repeating_crossbow. 64000 96000 0 0 0 0 0 84 0 0 0 0 0 0 0 +item = 4939 Karil's_x-bow_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4940 Karil's_top_100 Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4941 Karil's_top_75 Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4942 Karil's_top_50 Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4943 Karil's_top_25 Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4944 Karil's_top_0 Karil_the_Tainted's_leather_body_armour. 20000 30000 0 0 0 0 -15 30 47 42 50 65 57 0 0 +item = 4945 Karil's_top_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 20000 30000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4946 Karil's_skirt_100 Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4947 Karil's_skirt_75 Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4948 Karil's_skirt_50 Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4949 Karil's_skirt_25 Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4950 Karil's_skirt_0 Karil_the_Tainted's_leather_skirt. 18800 28200 0 0 0 0 -10 17 26 20 28 35 33 0 0 +item = 4951 Karil's_skirt_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 18800 28200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4952 Torag's_helm_100 Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4953 Torag's_helm_75 Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4954 Torag's_helm_50 Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4955 Torag's_helm_25 Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4956 Torag's_helm_0 Torag_the_Corrupted's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 -1 62 0 0 +item = 4957 Torag's_helm_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4958 Torag's_hammers_100 Torag's_hammers Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4959 Torag's_hammers_75 Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4960 Torag's_hammers_50 Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4961 Torag's_hammers_25 Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4962 Torag's_hammers_0 Torag_the_Corrupted's_twin_hammers. 64000 96000 0 -4 -4 85 -4 0 0 0 0 0 0 72 0 +item = 4963 Torag's_hammers_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4964 Torag's_body_100 Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4965 Torag's_body_75 Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4966 Torag's_body_50 Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4967 Torag's_body_25 Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4968 Torag's_body_0 Torag_the_Corrupted's_plate_body_armour. 112000 168000 0 0 0 0 -30 -10 122 120 107 -6 132 0 0 +item = 4969 Torag's_body_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4970 Torag's_legs_100 Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4971 Torag's_legs_75 Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4972 Torag's_legs_50 Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4973 Torag's_legs_25 Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4974 Torag's_legs_0 Torag_the_Corrupted's_plate_leg_armour. 110000 165000 0 0 0 0 -21 -7 85 82 83 -4 92 0 0 +item = 4975 Torag's_legs_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4976 Verac's_helm_100 Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4977 Verac's_helm_75 Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4978 Verac's_helm_50 Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4979 Verac's_helm_25 Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4980 Verac's_helm_0 Verac_the_Defiled's_helm. 41200 61800 0 0 0 0 -6 -2 55 58 54 0 56 0 3 +item = 4981 Verac's_helm_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 41200 61800 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4982 Verac's_flail_100 Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4983 Verac's_flail_75 Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4984 Verac's_flail_50 Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4985 Verac's_flail_25 Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4986 Verac's_flail_0 Verac_the_Defiled's_flail. 64000 96000 0 68 -2 82 0 0 0 0 0 0 0 72 6 +item = 4987 Verac's_flail_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 64000 96000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4988 Verac's_top_100 Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4989 Verac's_top_75 Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4990 Verac's_top_50 Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4991 Verac's_top_25 Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4992 Verac's_top_0 Verac_the_Defiled's_brassard. 112000 168000 0 0 0 0 -6 -2 81 95 85 0 81 0 5 +item = 4993 Verac's_top_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 112000 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 4994 Verac's_skirt_100 Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4995 Verac's_skirt_75 Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4996 Verac's_skirt_50 Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4997 Verac's_skirt_25 Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4998 Verac's_skirt_0 Verac_the_Defiled's_plate_skirt. 110000 165000 0 0 0 0 -21 -7 85 82 83 0 84 0 4 +item = 4999 Verac's_skirt_0 Swap_this_note_at_any_bank_for_the_equivalent_item. 110000 165000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5001 Raw_cave_eel It's_incredibly_slimy. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5002 Burnt_cave_eel It's_no_longer_slimy,_or_edible. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5003 Cave_eel It's_a_bit_slimy. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5004 Frog_spawn That's_disgusting! 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5005 Raw_cave_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5006 Burnt_cave_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5007 Cave_eel Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5008 Brooch A_stone_brooch_with_a_symbol_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5009 Goblin_symbol_book A_book_about_the_ancient_goblin_tribes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5010 Key The_key_you_stole_from_Sigmund. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5011 Silverware You_found_the_Lumbridge_silverware_in_the_HAM_cave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5012 Peace_treaty A_peace_treaty_between_Lumbridge_and_the_Cave_Goblins. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5013 Mining_helmet A_helmet_with_a_lamp_on_it. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5014 Mining_helmet A_helmet_with_an_unlit_lamp_on_it. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5015 Mining_helmet Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5016 Bone_spear Basic_but_brutal! 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5017 Bone_spear Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5018 Bone_club Basic_but_brutal! 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5019 Bone_club Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5020 Minecart_ticket A_ticket_to_take_you_from_Keldagrim_to_the_dwarven_mines_under_Ice_Mountain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5021 Minecart_ticket A_ticket_to_take_you_from_the_dwarven_mines_under_Ice_Mountain_to_Keldagrim. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5022 Minecart_ticket A_ticket_to_take_you_from_Keldagrim_to_the_passage_under_White_Wolf_Mountain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5023 Minecart_ticket A_ticket_to_take_you_from_the_passage_under_White_Wolf_Mountain_to_Keldagrim. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5024 Woven_top Far_too_small_to_wear. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5025 Woven_top Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5026 Woven_top Yellow_top,_too_small_for_me. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5027 Woven_top Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5028 Woven_top Blue_top,_very_tiny. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5029 Woven_top Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5030 Shirt Tiny! 450 450 450 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5031 Shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 450 450 450 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5032 Shirt Tiny! 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5033 Shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5034 Shirt Tiny! 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5035 Shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5036 Trousers A_pair_of_long_dwarven_trousers..._long_for_dwarves,_of_course. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5037 Trousers Swap_this_note_at_any_bank_for_the_equivalent_item. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5038 Trousers A_pair_of_long_dwarven_trousers..._long_for_dwarves,_of_course. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5039 Trousers Swap_this_note_at_any_bank_for_the_equivalent_item. 700 700 700 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5040 Trousers A_pair_of_long_dwarven_trousers..._long_for_dwarves,_of_course. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5041 Trousers Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5042 Shorts These_look_great,_on_dwarves! 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5043 Shorts Swap_this_note_at_any_bank_for_the_equivalent_item. 280 280 280 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5044 Shorts Yellow_shorts._Far_too_small_for_you. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5045 Shorts Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5046 Shorts Blue_shorts,_these_would_look_great_on_dwarves! 390 390 390 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5047 Shorts Swap_this_note_at_any_bank_for_the_equivalent_item. 390 390 390 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5048 Skirt A_brown_skirt._Size_small! 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5049 Skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5050 Skirt Lilac_skirt. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5051 Skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5052 Skirt A_blue_skirt. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5053 Skirt Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5054 Dwarf Petit. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5055 Dwarf Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5056 Dwarven_battleaxe This_looks_very_rusty_and_worn. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5057 Dwarven_battleaxe This_axe_blade_has_been_sharpened. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5058 Dwarven_battleaxe Three_sapphires_have_been_crafted_onto_the_hilt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5059 Dwarven_battleaxe This_axe_has_a_sharp_blade_and_there_are_sapphires_in_the_hilt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5060 Dwarven_battleaxe This_battleaxe_is_in_the_process_of_having_sapphires_fitted_onto_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5061 Dwarven_battleaxe This_battleaxe_is_in_the_process_of_having_sapphires_fitted_onto_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5062 Left_boot One_of_a_pair_I_assume. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5063 Right_boot A_good_looking_boot,_for_the_right_foot._Literally. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5064 Exquisite_boots A_lovely_pair_of_boots. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5065 Book_on_costumes An_old_library_book._It_bears_the_title_'Scholars_Guide_to_Dwarven_Costumes'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5066 Meeting_notes These_notes_are_from_a_meeting_of_the_Keldagrim_Consortium. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5067 Exquisite_clothes Clothes_for_the_sculptor's_model. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5068 Master_farmer A_master_at_farming. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5069 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5070 Bird_nest It's_a_bird's_nest_with_an_egg_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5071 Bird_nest It's_a_bird's_nest_with_an_egg_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5072 Bird_nest It's_a_bird's_nest_with_an_egg_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5073 Bird_nest It's_a_bird's_nest_with_some_seeds_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5074 Bird_nest It's_a_bird's_nest_with_a_ring_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5075 Bird_nest It's_an_empty_bird's_nest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5076 Bird's_egg A_red_bird's_egg. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5077 Bird's_egg A_blue_bird's_egg. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5078 Bird's_egg A_green_bird's_egg. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5081 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5083 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5085 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5087 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5089 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5091 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5093 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5095 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5096 Marigold_seed A_marigold_seed_-_plant_in_a_flower_patch. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5097 Rosemary_seed A_rosemary_seed_-_plant_in_a_flower_patch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5098 Nasturtium_seed A_nasturtium_seed_-_plant_in_a_flower_patch. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5099 Woad_seed A_woad_seed_-_plant_in_a_flower_patch. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5100 Limpwurt_seed A_limpwurt_seed_-_plant_in_a_flower_patch. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5101 Redberry_seed A_redberry_bush_seed_-_plant_in_a_bush_patch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5102 Cadavaberry_seed A_cadavaberry_bush_seed_-_plant_in_a_bush_patch. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5103 Dwellberry_seed A_dwellberry_bush_seed_-_plant_in_a_bush_patch. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5104 Jangerberry_seed A_jangerberry_bush_seed_-_plant_in_a_bush_patch. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5105 Whiteberry_seed A_whiteberry_bush_seed_-_plant_in_a_bush_patch. 133 133 133 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5106 Poison_ivy_seed A_poison_ivy_bush_seed_-_plant_in_a_bush_patch. 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5171 Seeds Some_seeds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5280 Cactus_seed A_Cactus_seed_-_plant_in_a_cactus_patch. 99 99 99 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5281 Belladonna_seed Also_known_as_Deadly_Nightshade_-_plant_in_a_belladonna_patch. 177 177 177 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5282 Mushroom_spore A_Bittercap_mushroom_spore_-_plant_in_a_mushroom_patch. 86 86 86 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5283 Apple_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5284 Banana_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5285 Orange_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5286 Curry_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 39 39 39 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5287 Pineapple_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 74 74 74 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5288 Papaya_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 115 115 115 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5289 Palm_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 254 254 254 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5290 Calquat_tree_seed Plant_in_a_plantpot_of_soil_to_grow_a_sapling. 340 340 340 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5291 Guam_seed A_guam_seed_-_plant_in_a_herb_patch. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5292 Marrentill_seed A_marrentill_seed_-_plant_in_a_herb_patch. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5293 Tarromin_seed A_tarromin_seed_-_plant_in_a_herb_patch. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5294 Harralander_seed A_harralander_seed_-_plant_in_a_herb_patch. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5295 Ranarr_seed A_ranarr_seed_-_plant_in_a_herb_patch. 19 19 19 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5296 Toadflax_seed A_toadflax_seed_-_plant_in_a_herb_patch. 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5297 Irit_seed An_irit_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5298 Avantoe_seed An_avantoe_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5299 Kwuarm_seed A_kwuarm_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5300 Snapdragon_seed A_snapdragon_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5301 Cadantine_seed A_cadantine_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5302 Lantadyme_seed A_lantadyme_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5303 Dwarf_weed_seed A_dwarf_weed_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5304 Torstol_seed A_torstol_seed_-_plant_in_a_herb_patch. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5305 Barley_seed A_barley_seed_-_plant_in_a_hops_patch. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5306 Jute_seed A_jute_plant_seed_-_plant_in_a_hops_patch. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5307 Hammerstone_seed A_Hammerstone_hop_seed_-_plant_in_a_hops_patch. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5308 Asgarnian_seed An_Asgarnian_hop_seed_-_plant_in_a_hops_patch. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5309 Yanillian_seed A_Yanillian_hop_seed_-_plant_in_a_hops_patch. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5310 Krandorian_seed A_Krandorian_hop_seed_-_plant_in_a_hops_patch. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5311 Wildblood_seed A_Wildblood_hop_seed_-_plant_in_a_hops_patch. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5312 Acorn Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5313 Willow_seed Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5314 Maple_seed Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5315 Yew_seed Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 143 143 143 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5316 Magic_seed Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 422 422 422 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5317 Spirit_seed Plant_this_in_a_plantpot_of_soil_to_grow_a_sapling. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5318 Potato_seed A_potato_seed_-_plant_in_an_allotment. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5319 Onion_seed An_onion_seed_-_plant_in_an_allotment. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5320 Sweetcorn_seed A_sweetcorn_seed_-_plant_in_an_allotment. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5321 Watermelon_seed A_watermelon_seed_-_plant_in_an_allotment. 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5322 Tomato_seed A_tomato_seed_-_plant_in_an_allotment. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5323 Strawberry_seed A_strawberry_seed_-_plant_in_an_allotment. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5324 Cabbage_seed A_cabbage_seed_-_plant_in_an_allotment. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5325 Gardening_trowel Not_suitable_for_archaeological_digs. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5326 Gardening_trowel Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5327 Spade_handle I_need_to_attach_this_to_its_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5328 Spade_head I_need_to_attach_this_to_its_handle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5329 Secateurs Good_for_pruning_away_diseased_leaves. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5330 Secateurs Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5331 Watering_can This_watering_can_is_empty. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5332 Watering_can Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5333 Watering_can(1) This_watering_can_is_almost_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5334 Watering_can(2) This_watering_can_is_three-quarters_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5335 Watering_can(3) This_watering_can_is_just_under_half-full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5336 Watering_can(4) Some_would_say_this_watering_can_is_half-full,_others_half-empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5337 Watering_can(5) This_watering_can_is_just_over_half-full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5338 Watering_can(6) This_watering_can_is_three_quarters_full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5339 Watering_can(7) This_watering_can_is_almost_completely_full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5340 Watering_can(8) This_watering_can_is_completely_full. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5341 Rake Use_this_to_clear_weeds. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5342 Rake Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5343 Seed_dibber Use_this_to_plant_seeds_with. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5344 Seed_dibber Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5345 Gardening_boots A_pair_of_gardening_boots. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5346 Gardening_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5347 Rake_handle I_need_to_reattach_this_to_its_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5348 Rake_head I_need_to_reattach_this_to_its_handle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5349 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5350 Plant_pot An_empty_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5351 Plant_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5352 Unfired_plant_pot An_unfired_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5353 Unfired_plant_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5354 Plant_pot A_plant_pot_filled_with_soil. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5355 Plant_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5356 Plant_pot A_plant_pot_filled_with_soil. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5357 Plant_pot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5358 Oak_seedling An_acorn_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5359 Willow_seedling A_willow_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5360 Maple_seedling A_maple_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5361 Yew_seedling A_yew_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5362 Magic_seedling A_magic_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5363 Spirit_seedling A_spirit_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5364 Oak_seedling An_acorn_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5365 Willow_seedling A_willow_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5366 Maple_seedling A_maple_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5367 Yew_seedling A_yew_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5368 Magic_seedling A_magic_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5369 Spirit_seedling A_spirit_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5370 Oak_sapling This_sapling_is_ready_to_be_replanted_in_a_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5371 Willow_sapling This_sapling_is_ready_to_be_replanted_in_a_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5372 Maple_sapling This_sapling_is_ready_to_be_replanted_in_a_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5373 Yew_sapling This_sapling_is_ready_to_be_replanted_in_a_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5374 Magic_sapling This_sapling_is_ready_to_be_replanted_in_a_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5375 Spirit_sapling This_sapling_is_ready_to_be_replanted_in_a_Spirit_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5376 Basket An_empty_fruit_basket. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5377 Basket Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5378 Apples(1) A_fruit_basket_filled_with_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5379 Apples(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5380 Apples(2) A_fruit_basket_filled_with_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5381 Apples(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5382 Apples(3) A_fruit_basket_filled_with_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5383 Apples(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5384 Apples(4) A_fruit_basket_filled_with_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5385 Apples(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5386 Apples(5) A_fruit_basket_filled_with_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5387 Apples(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5388 Oranges(1) A_fruit_basket_filled_with_oranges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5389 Oranges(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5390 Oranges(2) A_fruit_basket_filled_with_oranges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5391 Oranges(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5392 Oranges(3) A_fruit_basket_filled_with_oranges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5393 Oranges(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5394 Oranges(4) A_fruit_basket_filled_with_oranges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5395 Oranges(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5396 Oranges(5) A_fruit_basket_filled_with_oranges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5397 Oranges(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5398 Strawberries(1) A_fruit_basket_filled_with_strawberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5399 Strawberries(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5400 Strawberries(2) A_fruit_basket_filled_with_strawberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5401 Strawberries(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5402 Strawberries(3) A_fruit_basket_filled_with_strawberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5403 Strawberries(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5404 Strawberries(4) A_fruit_basket_filled_with_strawberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5405 Strawberries(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5406 Strawberries(5) A_fruit_basket_filled_with_strawberries. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5407 Strawberries(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5408 Bananas(1) A_fruit_basket_filled_with_bananas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5409 Bananas(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5410 Bananas(2) A_fruit_basket_filled_with_bananas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5411 Bananas(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5412 Bananas(3) A_fruit_basket_filled_with_bananas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5413 Bananas(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5414 Bananas(4) A_fruit_basket_filled_with_bananas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5415 Bananas(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5416 Bananas(5) A_fruit_basket_filled_with_bananas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5417 Bananas(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5418 Empty_sack An_empty_vegetable_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5419 Empty_sack Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5420 Potatoes(1) There_is_1_potato_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5421 Potatoes(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5422 Potatoes(2) There_are_2_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5423 Potatoes(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5424 Potatoes(3) There_are_3_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5425 Potatoes(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5426 Potatoes(4) There_are_4_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5427 Potatoes(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5428 Potatoes(5) There_are_5_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5429 Potatoes(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5430 Potatoes(6) There_are_6_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5431 Potatoes(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5432 Potatoes(7) There_are_7_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5433 Potatoes(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5434 Potatoes(8) There_are_8_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5435 Potatoes(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5436 Potatoes(9) There_are_9_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5437 Potatoes(9) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5438 Potatoes(10) There_are_10_potatoes_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5439 Potatoes(10) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5440 Onions(1) There_is_1_onion_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5441 Onions(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5442 Onions(2) There_are_2_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5443 Onions(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5444 Onions(3) There_are_3_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5445 Onions(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5446 Onions(4) There_are_4_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5447 Onions(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5448 Onions(5) There_are_5_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5449 Onions(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5450 Onions(6) There_are_6_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5451 Onions(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5452 Onions(7) There_are_7_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5453 Onions(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5454 Onions(8) There_are_8_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5455 Onions(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5456 Onions(9) There_are_9_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5457 Onions(9) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5458 Onions(10) There_are_10_onions_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5459 Onions(10) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5460 Cabbages(1) There_is_1_cabbage_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5461 Cabbages(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5462 Cabbages(2) There_are_2_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5463 Cabbages(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5464 Cabbages(3) There_are_3_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5465 Cabbages(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5466 Cabbages(4) There_are_4_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5467 Cabbages(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5468 Cabbages(5) There_are_5_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5469 Cabbages(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5470 Cabbages(6) There_are_6_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5471 Cabbages(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5472 Cabbages(7) There_are_7_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5473 Cabbages(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5474 Cabbages(8) There_are_8_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5475 Cabbages(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5476 Cabbages(9) There_are_9_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5477 Cabbages(9) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5478 Cabbages(10) There_are_10_cabbages_in_this_sack. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5479 Cabbages(10) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5480 Apple_seedling An_apple_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5481 Banana_seedling A_banana_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5482 Orange_seedling An_orange_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5483 Curry_seedling A_curry_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5484 Pineapple_seedling A_pineapple_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5485 Papaya_seedling A_papaya_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5486 Palm_seedling A_palm_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5487 Calquat_seedling A_Calquat_tree_seed_has_been_sown_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5488 Apple_seedling An_apple_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5489 Banana_seedling A_banana_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5490 Orange_seedling An_orange_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5491 Curry_seedling A_curry_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5492 Pineapple_seedling A_pineapple_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5493 Papaya_seedling A_papaya_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5494 Palm_seedling A_palm_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5495 Calquat_seedling A_Calquat_tree_seed_has_been_sown_and_watered_in_this_plant_pot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5496 Apple_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5497 Banana_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5498 Orange_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5499 Curry_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5500 Pineapple_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5501 Papaya_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5502 Palm_sapling This_sapling_is_ready_to_be_replanted_in_a_fruit_tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5503 Calquat_sapling This_sapling_is_ready_to_be_replanted_in_a_Calquat_Tree_patch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5504 Strawberry A_freshly_picked_strawberry. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5505 Strawberry Swap_this_note_at_any_bank_for_the_equivalent_item. 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5506 Old_man's_message The_Wise_Old_Man_of_Draynor_Village_asked_you_to_take_this_to_someone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5507 Strange_book A_tatty_old_book_belonging_to_the_Wise_Old_Man_of_Draynor_Village. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5508 Book_of_folklore A_tatty_old_book_belonging_to_the_Wise_Old_Man_of_Draynor_Village. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5509 Small_pouch A_small_pouch_used_for_storing_essence. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5510 Medium_pouch A_medium-sized_pouch_used_for_storing_essence. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5511 Medium_pouch A_damaged_medium-sized_pouch_used_for_storing_essence. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5512 Large_pouch A_large_pouch_used_for_storing_essence. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5513 Large_pouch A_large_damaged_pouch_used_for_storing_essence. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5514 Giant_pouch A_giant-sized_pouch_used_for_storing_essence. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5515 Giant_pouch A_damaged_giant-sized_pouch_used_for_storing_essence. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5516 Elemental_talisman A_mysterious_power_emanates_from_the_talisman... 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5517 Elemental_talisman Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5518 Scrying_orb This_contains_mystical_teleport_information... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5519 Scrying_orb This_orb_apparently_contains_a_cypher_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5520 Abyssal_book Some_research_notes_on_abyssal_space. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5521 Binding_necklace A_necklace_embedded_with_mystical_power. 1425 1425 1425 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5522 Binding_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 1425 1425 1425 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5523 Tiara_mould A_mould_for_tiaras. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5524 Tiara_mould Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5525 Tiara Makes_me_feel_like_a_Princess. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5526 Tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5527 Air_tiara A_tiara_infused_with_the_properties_of_air. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5528 Air_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5529 Mind_tiara A_tiara_infused_with_the_properties_of_the_mind. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5530 Mind_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5531 Water_tiara A_tiara_infused_with_the_properties_of_water. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5532 Water_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5533 Body_tiara A_tiara_infused_with_the_properties_of_the_body. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5534 Body_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5535 Earth_tiara A_tiara_infused_with_the_properties_of_the_earth. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5536 Earth_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5537 Fire_tiara A_tiara_infused_with_the_properties_of_fire. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5538 Fire_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5539 Cosmic_tiara A_tiara_infused_with_the_properties_of_the_cosmos. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5540 Cosmic_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5541 Nature_tiara A_tiara_infused_with_the_properties_of_nature. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5542 Nature_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5543 Chaos_tiara A_tiara_infused_with_the_properties_of_chaos. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5544 Chaos_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5545 Law_tiara A_tiara_infused_with_the_properties_of_law. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5546 Broken_tiara This_tiara_has_decayed_and_is_useless. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5547 Death_tiara A_tiara_infused_with_the_properties_of_death. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5548 Death_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5549 Blood_tiara A_tiara_infused_with_the_properties_of_blood. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5550 Blood_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5551 Soul_tiara A_tiara_infused_with_the_properties_of_the_soul. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5552 Soul_tiara Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5553 Rogue_top Black_banded_leather_armour,_a_rogue's_dream! 625 625 625 0 0 0 0 0 10 10 10 10 10 0 0 +item = 5554 Rogue_mask Black_banded_leather_armour,_a_rogue's_dream! 375 375 375 0 0 0 0 0 5 5 5 5 5 0 0 +item = 5555 Rogue_trousers Black_banded_leather_armour,_a_rogue's_dream! 500 500 500 0 0 0 0 0 7 7 7 7 7 0 0 +item = 5556 Rogue_gloves Black_banded_leather_gloves,_a_rogue's_dream! 250 250 250 0 0 0 0 0 2 2 2 2 2 0 0 +item = 5557 Rogue_boots Black_banded_leather_boots,_a_rogue's_dream! 250 250 250 0 0 0 0 0 2 2 2 2 2 0 0 +item = 5558 Rogue_kit It_can_do_almost_anything! 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5559 Flash_powder A_small_satchel_of_bright_powder! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5560 Stethoscope A_useful_hearing_aid. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5561 Mystic_jewel I_can_escape_the_Maze_with_this! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5562 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5563 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5564 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5565 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5566 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5567 Gear Used_in_machines_and_locks_the_rune_over. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5568 Tile For_a_mosaic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5569 Tiles For_a_mosaic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5570 Tiles For_a_mosaic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5571 Tiles For_a_mosaic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5572 Dial I_wonder_what_this_does? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5573 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5574 Initiate_sallet An_initiate_Temple_Knight's_helm. 3000 3000 0 0 0 0 -6 -2 13 14 11 -1 13 0 3 +item = 5575 Initiate_hauberk An_initiate_Temple_Knight's_Armour. 4000 6000 0 0 0 0 -30 -10 46 44 38 -6 44 0 6 +item = 5576 Initiate_cuisse An_initiate_Temple_Knight's_leg_armour. 2400 3600 0 0 0 0 -21 -7 24 22 20 -4 22 0 5 +item = 5577 Cupric_sulfate A_vial_of_something_labelled_'Cupric_Sulfate'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5578 Acetic_acid A_vial_of_something_labelled_'Acetic_Acid'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5579 Gypsum A_vial_of_something_labelled_'Gypsum'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5580 Sodium_chloride A_vial_of_something_labelled_'Sodium_Chloride'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5581 Nitrous_oxide A_vial_of_something_labelled_'Nitrous_Oxide'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5582 Vial_of_liquid A_vial_of_something_labelled_'Dihydrogen_Monoxide'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5583 Tin_ore_powder A_vial_of_something_labelled_'Powdered_Tin_Ore'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5584 Cupric_ore_powder A_vial_of_something_labelled_'Powdered_Cupric_Ore'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5585 Bronze_key I_hope_the_mould_was_accurate_enough... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5586 Metal_spade It's_a_metal_spade_with_a_wooden_handle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5587 Metal_spade It's_a_metal_spade_without_a_handle. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5588 Alchemical_notes Looks_like_a_pretty_boring_read. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5589 ???_mixture A_very_hot_vial_of_something_or_other._The_label_says_'Cupric_Sulfate'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5590 ???_mixture A_very_warm_vial_of_something_or_other._It's_a_bit_lumpy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5591 ???_mixture It_looks_horrible._I_think_I_messed_something_up. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5592 Tin I_could_probably_pour_something_into_this. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5593 Tin It's_full_of_a_white_lumpy_mixture_that_seems_to_be_hardening. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5594 Tin There_is_an_impression_of_a_key_embedded_in_it. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5595 Tin There_is_an_impression_of_a_key,_filled_with_tin_ore. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5596 Tin There_is_an_impression_of_a_key,_filled_with_copper_ore. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5597 Tin There_is_an_impression_of_a_key,_filled_with_tin_and_copper_ore. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5598 Tin There_is_a_bronze_key_surrounded_by_plaster_in_this_tin. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5599 Tin There_is_a_strange_concoction_filling_this_tin. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5600 Tin A_tin_layered_with_some_stuff_from_a_vial. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5601 Chisel Good_for_detailed_crafting. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5602 Bronze_wire Useful_for_crafting_items. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5603 Shears For_shearing_sheep. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5604 Magnet A_very_attractive_magnet. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5605 Knife A_dangerous_looking_knife. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5606 Makeover_voucher I_can_exchange_this_for_one_free_makeover_with_the_makeover_mage. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5607 Grain A_sack_full_of_grain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5608 Fox I_don't_think_he_likes_being_carried. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5609 Chicken He'd_be_easier_to_carry_if_I_cooked_and_ate_him_first... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5610 Hourglass It's_an_hourglass. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5611 Initiate_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5612 Initiate_platemail Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5613 Initiate_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5614 Magic_carpet A_flying_Magic_carpet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5615 Bonemeal A_pot_of_crushed_Shaikahan_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5616 Bronze_arrow(p+) Venomous_looking_arrows. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5617 Iron_arrow(p+) Venomous_looking_arrows. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5618 Steel_arrow(p+) Venomous_looking_arrows. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5619 Mithril_arrow(p+) Venomous_looking_arrows. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5620 Adamant_arrow(p+) Venomous_looking_arrows. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5621 Rune_arrow(p+) Venomous_looking_arrows. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5622 Bronze_arrow(s) Venomous_looking_arrows. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5623 Iron_arrow(s) Venomous_looking_arrows. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5624 Steel_arrow(s) Venomous_looking_arrows. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 +item = 5625 Mithril_arrow(s) Venomous_looking_arrows. 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5626 Adamant_arrow(s) Venomous_looking_arrows. 80 80 80 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5627 Rune_arrow(s) Venomous_looking_arrows. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5628 Bronze_dart(p+) A_deadly_poisoned_dart_with_a_bronze_tip. 1 1 1 0 0 0 0 3 0 0 0 0 0 0 0 +item = 5629 Iron_dart(p+) A_deadly_poisoned_dart_with_an_iron_tip. 2 2 2 0 0 0 0 4 0 0 0 0 0 0 0 +item = 5630 Steel_dart(p+) A_deadly_poisoned_dart_with_a_steel_tip. 10 10 10 0 0 0 0 5 0 0 0 0 0 0 0 +item = 5631 Black_dart(p+) A_deadly_poisoned_dart_with_a_black_tip. 18 18 18 0 0 0 0 7 0 0 0 0 0 0 0 +item = 5632 Mithril_dart(p+) A_deadly_poisoned_dart_with_a_mithril_tip. 25 25 25 0 0 0 0 8 0 0 0 0 0 0 0 +item = 5633 Adamant_dart(p+) A_deadly_poisoned_dart_with_an_adamantite_tip. 65 65 65 0 0 0 0 11 0 0 0 0 0 0 0 +item = 5634 Rune_dart(p+) A_deadly_poisoned_dart_with_a_rune_tip. 350 350 350 0 0 0 0 15 0 0 0 0 0 0 0 +item = 5635 Bronze_dart(s) A_deadly_poisoned_dart_with_a_bronze_tip. 1 1 1 0 0 0 0 3 0 0 0 0 0 0 0 +item = 5636 Iron_dart(s) A_deadly_poisoned_dart_with_an_iron_tip. 2 2 2 0 0 0 0 4 0 0 0 0 0 0 0 +item = 5637 Steel_dart(s) A_deadly_poisoned_dart_with_a_steel_tip. 10 10 10 0 0 0 0 5 0 0 0 0 0 0 0 +item = 5638 Black_dart(s) A_deadly_poisoned_dart_with_a_black_tip. 18 18 18 0 0 0 0 7 0 0 0 0 0 0 0 +item = 5639 Mithril_dart(s) A_deadly_poisoned_dart_with_a_mithril_tip. 25 25 25 0 0 0 0 8 0 0 0 0 0 0 0 +item = 5640 Adamant_dart(s) A_deadly_poisoned_dart_with_an_adamantite_tip. 65 65 65 0 0 0 0 11 0 0 0 0 0 0 0 +item = 5641 Rune_dart(s) A_deadly_poisoned_dart_with_a_rune_tip. 350 350 350 0 0 0 0 15 0 0 0 0 0 0 0 +item = 5642 Bronze_javelin(p+) A_bronze_tipped_javelin. 4 4 4 0 0 0 0 5 0 0 0 0 0 0 0 +item = 5643 Iron_javelin(p+) An_iron_tipped_javelin. 6 6 6 0 0 0 0 8 0 0 0 0 0 0 0 +item = 5644 Steel_javelin(p+) A_steel_tipped_javelin. 24 24 24 0 0 0 0 12 0 0 0 0 0 0 0 +item = 5645 Mithril_javelin(p+) A_mithril_tipped_javelin. 64 64 64 0 0 0 0 17 0 0 0 0 0 0 0 +item = 5646 Adamant_javelin(p+) An_adamantite_tipped_javelin. 160 160 160 0 0 0 0 24 0 0 0 0 0 0 0 +item = 5647 Rune_javelin(p+) A_rune_tipped_javelin. 400 400 400 0 0 0 0 38 0 0 0 0 0 0 0 +item = 5648 Bronze_javelin(s) A_bronze_tipped_javelin. 4 4 4 0 0 0 0 5 0 0 0 0 0 0 0 +item = 5649 Iron_javelin(s) An_iron_tipped_javelin. 6 6 6 0 0 0 0 0 8 0 0 0 0 0 0 +item = 5650 Steel_javelin(s) A_steel_tipped_javelin. 24 24 24 0 0 0 0 0 12 0 0 0 0 0 0 +item = 5651 Mithril_javelin(s) A_mithril_tipped_javelin. 64 64 64 0 0 0 0 17 0 0 0 0 0 0 0 +item = 5652 Adamant_javelin(s) An_adamantite_tipped_javelin. 160 160 160 0 0 0 0 24 0 0 0 0 0 0 0 +item = 5653 Rune_javelin(s) A_rune_tipped_javelin. 400 400 400 0 0 0 0 38 0 0 0 0 0 0 0 +item = 5654 Bronze_knife(p+) A_finely_balanced_throwing_knife. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5655 Iron_knife(p+) A_finely_balanced_throwing_knife. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5656 Steel_knife(p+) A_finely_balanced_throwing_knife. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5657 Mithril_knife(p+) A_finely_balanced_throwing_knife. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5658 Black_knife(p+) A_finely_balanced_throwing_knife. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5659 Adamant_knife(p+) A_finely_balanced_throwing_knife. 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5660 Rune_knife(p+) A_finely_balanced_throwing_knife. 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5661 Bronze_knife(s) A_finely_balanced_throwing_knife. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5662 Iron_knife(s) A_finely_balanced_throwing_knife. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5663 Steel_knife(s) A_finely_balanced_throwing_knife. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5664 Mithril_knife(s) A_finely_balanced_throwing_knife. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5665 Black_knife(s) A_finely_balanced_throwing_knife. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5666 Adamant_knife(s) A_finely_balanced_throwing_knife. 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5667 Rune_knife(s) A_finely_balanced_throwing_knife. 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5668 Iron_dagger(p+) The_blade_is_covered_with_poison. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5669 Iron_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5670 Bronze_dagger(p+) This_dagger_is_poisoned. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5671 Bronze_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5672 Steel_dagger(p+) The_blade_has_been_poisoned. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5673 Steel_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5674 Mithril_dagger(p+) A_poisoned_Mithril_dagger. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5675 Mithril_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5676 Adamant_dagger(p+) A_very_dangerous_poisoned_dagger. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5677 Adamant_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5678 Rune_dagger(p+) The_blade_is_covered_with_a_nasty_poison. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5679 Rune_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5680 Dragon_dagger(p+) A_powerful_dagger. 24000 24000 24000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5681 Dragon_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 24000 24000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5682 Black_dagger(p+) This_dagger_is_poisoned. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5683 Black_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5684 Poisoned_dagger(p+) The_blade_is_covered_with_poison. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5685 Poisoned_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5686 Iron_dagger(s) The_blade_is_covered_with_poison. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5687 Iron_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5688 Bronze_dagger(s) This_dagger_is_poisoned. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5689 Bronze_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5690 Steel_dagger(s) The_blade_has_been_poisoned. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5691 Steel_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5692 Mithril_dagger(s) A_poisoned_Mithril_dagger. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5693 Mithril_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5694 Adamant_dagger(s) A_very_dangerous_poisoned_dagger. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5695 Adamant_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5696 Rune_dagger(s) The_blade_is_covered_with_a_nasty_poison. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5697 Rune_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5698 Dragon_dagger(s) A_powerful_dagger. 9600 14400 0 40 25 -4 1 0 0 0 0 1 0 40 0 +item = 5699 Dragon_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 9600 14400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5700 Black_dagger(s) This_dagger_is_poisoned. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5701 Black_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5702 Poisoned_dagger(s) The_blade_is_covered_with_poison. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5703 Poisoned_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 565 565 565 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5704 Bronze_spear(p+) A_poisoned_bronze_tipped_spear. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5705 Bronze_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5706 Iron_spear(p+) A_poisoned_iron_tipped_spear. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5707 Iron_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5708 Steel_spear(p+) A_poisoned_steel_tipped_spear. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5709 Steel_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5710 Mithril_spear(p+) A_poisoned_mithril_tipped_spear. 845 845 845 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5711 Mithril_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 845 845 845 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5712 Adamant_spear(p+) A_poisoned_adamantite_tipped_spear. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5713 Adamant_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5714 Rune_spear(p+) A_poisoned_rune_tipped_spear. 20800 20800 20800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5715 Rune_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 20800 20800 20800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5716 Dragon_spear(p+) A_poisoned_dragon_tipped_spear. 62400 62400 62400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5717 Dragon_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 62400 62400 62400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5718 Bronze_spear(s) A_poisoned_bronze_tipped_spear. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5719 Bronze_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5720 Iron_spear(s) A_poisoned_iron_tipped_spear. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5721 Iron_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5722 Steel_spear(s) A_poisoned_steel_tipped_spear. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5723 Steel_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5724 Mithril_spear(s) A_poisoned_mithril_tipped_spear. 845 845 845 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5725 Mithril_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 845 845 845 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5726 Adamant_spear(s) A_poisoned_adamantite_tipped_spear. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5727 Adamant_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 2080 2080 2080 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5728 Rune_spear(s) A_poisoned_rune_tipped_spear. 20800 20800 20800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5729 Rune_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 20800 20800 20800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5730 Dragon_spear(s) A_poisoned_dragon_tipped_spear. 62400 62400 62400 55 55 55 0 0 5 5 5 5 5 60 0 +item = 5731 Dragon_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 62400 62400 62400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5732 Stool A_stool_for_milking 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5733 Rotten_potato Yuk! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5734 Black_spear(p+) A_poisoned_black_tipped_spear. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5735 Black_spear(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5736 Black_spear(s) A_poisoned_black_tipped_spear. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5737 Black_spear(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5738 Woad_leaf A_slightly_bluish_leaf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5739 Asgarnian_ale(m) This_looks_a_good_deal_stronger_than_normal_Asgarnian_Ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5740 Asgarnian_ale(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5741 Mature_wmb This_looks_a_good_deal_stronger_than_normal_Wizards_Mind_Bomb. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5742 Mature_wmb Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5743 Greenman's_ale(m) This_looks_a_good_deal_stronger_than_normal_Greenman's_Ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5744 Greenman's_ale(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5745 Dragon_bitter(m) This_looks_a_good_deal_stronger_than_normal_Dragon_Bitter. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5746 Dragon_bitter(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5747 Dwarven_stout(m) This_looks_a_good_deal_stronger_than_normal_Dwarven_Stout. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5748 Dwarven_stout(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5749 Moonlight_mead(m) This_looks_a_good_deal_stronger_than_normal_Moonlight_Mead. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5750 Moonlight_mead(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5751 Axeman's_folly This_might_help_me_chop_harder. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5752 Axeman's_folly Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5753 Axeman's_folly(m) This_looks_a_good_deal_stronger_than_normal_Axeman's_Folly. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5754 Axeman's_folly(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5755 Chef's_delight A_fruity,_full-bodied_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5756 Chef's_delight Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5757 Chef's_delight(m) This_looks_a_good_deal_stronger_than_normal_Chef's_Delight. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5758 Chef's_delight(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5759 Slayer's_respite Ale_with_bite. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5760 Slayer's_respite Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5761 Slayer's_respite(m) This_looks_a_good_deal_stronger_than_normal_Slayer's_Respite. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5762 Slayer's_respite(m) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5763 Cider A_glass_of_cider. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5764 Cider Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5765 Mature_cider This_looks_a_good_deal_stronger_than_normal_cider. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5766 Mature_cider Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5767 Ale_yeast A_pot_filled_with_ale_yeast. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5768 Ale_yeast Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5769 Calquat_keg Sliced_and_hollowed_out_to_form_a_keg. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5770 Calquat_keg Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5771 Dwarven_stout(1) This_keg_contains_1_pint_of_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5772 Dwarven_stout(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5773 Dwarven_stout(2) This_keg_contains_2_pints_of_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5774 Dwarven_stout(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5775 Dwarven_stout(3) This_keg_contains_3_pints_of_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5776 Dwarven_stout(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5777 Dwarven_stout(4) This_keg_contains_4_pints_of_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5778 Dwarven_stout(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5779 Asgarnian_ale(1) This_keg_contains_1_pint_of_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5780 Asgarnian_ale(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5781 Asgarnian_ale(2) This_keg_contains_2_pints_of_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5782 Asgarnian_ale(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5783 Asgarnian_ale(3) This_keg_contains_3_pints_of_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5784 Asgarnian_ale(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5785 Asgarnian_ale(4) This_keg_contains_4_pints_of_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5786 Asgarnian_ale(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5787 Greenmans_ale(1) This_keg_contains_1_pint_of_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5788 Greenmans_ale(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5789 Greenmans_ale(2) This_keg_contains_2_pints_of_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5790 Greenmans_ale(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5791 Greenmans_ale(3) This_keg_contains_3_pints_of_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5792 Greenmans_ale(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5793 Greenmans_ale(4) This_keg_contains_4_pints_of_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5794 Greenmans_ale(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5795 Mind_bomb(1) This_keg_contains_1_pint_of_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5796 Mind_bomb(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5797 Mind_bomb(2) This_keg_contains_2_pints_of_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5798 Mind_bomb(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5799 Mind_bomb(3) This_keg_contains_3_pints_of_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5800 Mind_bomb(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5801 Mind_bomb(4) This_keg_contains_4_pints_of_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5802 Mind_bomb(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5803 Dragon_bitter(1) This_keg_contains_1_pint_of_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5804 Dragon_bitter(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5805 Dragon_bitter(2) This_keg_contains_2_pints_of_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5806 Dragon_bitter(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5807 Dragon_bitter(3) This_keg_contains_3_pints_of_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5808 Dragon_bitter(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5809 Dragon_bitter(4) This_keg_contains_4_pints_of_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5810 Dragon_bitter(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5811 Moonlight_mead(1) This_keg_contains_1_pint_of_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5812 Moonlight_mead(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5813 Moonlight_mead(2) This_keg_contains_2_pints_of_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5814 Moonlight_mead(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5815 Moonlight_mead(3) This_keg_contains_3_pints_of_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5816 Moonlight_mead(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5817 Moonlight_mead(4) This_keg_contains_4_pints_of_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5818 Moonlight_mead(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5819 Axeman's_folly(1) This_keg_contains_1_pint_of_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5820 Axeman's_folly(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5821 Axeman's_folly(2) This_keg_contains_2_pints_of_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5822 Axeman's_folly(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5823 Axeman's_folly(3) This_keg_contains_3_pints_of_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5824 Axeman's_folly(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5825 Axeman's_folly(4) This_keg_contains_4_pints_of_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5826 Axeman's_folly(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5827 Chef's_delight(1) This_keg_contains_1_pint_of_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5828 Chef's_delight(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5829 Chef's_delight(2) This_keg_contains_2_pints_of_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5830 Chef's_delight(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5831 Chef's_delight(3) This_keg_contains_3_pints_of_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5832 Chef's_delight(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5833 Chef's_delight(4) This_keg_contains_4_pints_of_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5834 Chef's_delight(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5835 Slayer's_respite(1) This_keg_contains_1_pint_of_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5836 Slayer's_respite(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5837 Slayer's_respite(2) This_keg_contains_2_pints_of_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5838 Slayer's_respite(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5839 Slayer's_respite(3) This_keg_contains_3_pints_of_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5840 Slayer's_respite(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5841 Slayer's_respite(4) This_keg_contains_4_pints_of_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5842 Slayer's_respite(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5843 Cider(1) This_keg_contains_1_pint_of_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5844 Cider(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5845 Cider(2) This_keg_contains_2_pints_of_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5846 Cider(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5847 Cider(3) This_keg_contains_3_pints_of_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5848 Cider(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5849 Cider(4) This_keg_contains_4_pints_of_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5850 Cider(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5851 Dwarven_stout(m1) This_keg_contains_1_pint_of_mature_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5852 Dwarven_stout(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5853 Dwarven_stout(m2) This_keg_contains_2_pints_of_mature_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5854 Dwarven_stout(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5855 Dwarven_stout(m3) This_keg_contains_3_pints_of_mature_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5856 Dwarven_stout(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5857 Dwarven_stout(m4) This_keg_contains_4_pints_of_mature_Dwarven_Stout. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5858 Dwarven_stout(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5859 Asgarnian_ale(m1) This_keg_contains_1_pint_of_mature_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5860 Asgarnian_ale(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5861 Asgarnian_ale(m2) This_keg_contains_2_pints_of_mature_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5862 Asgarnian_ale(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5863 Asgarnian_ale(m3) This_keg_contains_3_pints_of_mature_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5864 Asgarnian_ale(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5865 Asgarnian_ale(m4) This_keg_contains_4_pints_of_mature_Asgarnian_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5866 Asgarnian_ale(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5867 Greenmans_ale(m1) This_keg_contains_1_pint_of_mature_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5868 Greenmans_ale(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5869 Greenmans_ale(m2) This_keg_contains_2_pints_of_mature_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5870 Greenmans_ale(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5871 Greenmans_ale(m3) This_keg_contains_3_pints_of_mature_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5872 Greenmans_ale(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5873 Greenmans_ale(m4) This_keg_contains_4_pints_of_mature_Greenmans_Ale. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5874 Greenmans_ale(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5875 Mind_bomb(m1) This_keg_contains_1_pint_of_mature_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5876 Mind_bomb(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5877 Mind_bomb(m2) This_keg_contains_2_pints_of_mature_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5878 Mind_bomb(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5879 Mind_bomb(m3) This_keg_contains_3_pints_of_mature_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5880 Mind_bomb(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5881 Mind_bomb(m4) This_keg_contains_4_pints_of_mature_Wizards_Mind_Bomb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5882 Mind_bomb(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5883 Dragon_bitter(m1) This_keg_contains_1_pint_of_mature_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5884 Dragon_bitter(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5885 Dragon_bitter(m2) This_keg_contains_2_pints_of_mature_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5886 Dragon_bitter(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5887 Dragon_bitter(m3) This_keg_contains_3_pints_of_mature_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5888 Dragon_bitter(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5889 Dragon_bitter(m4) This_keg_contains_4_pints_of_mature_Dragon_Bitter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5890 Dragon_bitter(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5891 M'light_mead(m1) This_keg_contains_1_pint_of_mature_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5892 M'light_mead(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5893 M'light_mead(m2) This_keg_contains_2_pints_of_mature_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5894 M'light_mead(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5895 M'light_mead(m3) This_keg_contains_3_pints_of_mature_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5896 M'light_mead(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5897 M'light_mead(m4) This_keg_contains_4_pints_of_mature_Moonlight_Mead. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5898 M'light_mead(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5899 Axeman's_folly(m1) This_keg_contains_1_pint_of_mature_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5900 Axeman's_folly(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5901 Axeman's_folly(m2) This_keg_contains_2_pints_of_mature_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5902 Axeman's_folly(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5903 Axeman's_folly(m3) This_keg_contains_3_pints_of_mature_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5904 Axeman's_folly(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5905 Axeman's_folly(m4) This_keg_contains_4_pints_of_mature_Axeman's_Folly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5906 Axeman's_folly(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5907 Chef's_delight(m1) This_keg_contains_1_pint_of_mature_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5908 Chef's_delight(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5909 Chef's_delight(m2) This_keg_contains_2_pints_of_mature_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5910 Chef's_delight(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5911 Chef's_delight(m3) This_keg_contains_3_pints_of_mature_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5912 Chef's_delight(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5913 Chef's_delight(m4) This_keg_contains_4_pints_of_mature_Chef's_Delight. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5914 Chef's_delight(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5915 Slayer_respite(m1) This_keg_contains_1_pint_of_mature_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5916 Slayer_respite(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5917 Slayer_respite(m2) This_keg_contains_2_pints_of_mature_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5918 Slayer_respite(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5919 Slayer_respite(m3) This_keg_contains_3_pints_of_mature_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5920 Slayer_respite(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5921 Slayer_respite(m4) This_keg_contains_4_pints_of_mature_Slayer's_Respite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5922 Slayer_respite(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5923 Cider(m1) This_keg_contains_1_pint_of_mature_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5924 Cider(m1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5925 Cider(m2) This_keg_contains_2_pints_of_mature_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5926 Cider(m2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5927 Cider(m3) This_keg_contains_3_pints_of_mature_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5928 Cider(m3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5929 Cider(m4) This_keg_contains_4_pints_of_mature_Cider. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5930 Cider(m4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5931 Jute_fibre I_can_weave_this_to_make_sacks. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5932 Jute_fibre Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5933 Willow_branch A_branch_from_a_willow_tree. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5934 Willow_branch Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5935 Coconut_milk A_vial_filled_with_coconut_milk 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5936 Weapon_poison+(unf) A_vial_of_coconut_milk_and_Cactus_spine. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5937 Weapon_poison(p+) A_vial_of_extra-strength_weapon_poison,_for_spears_and_daggers. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5938 Weapon_poison(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5939 Weapon_poison++(unf) A_vial_of_coconut_milk_and_Deadly_Nightshade. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5940 Weapon_poison(s) A_vial_of_super-strength_weapon_poison,_for_spears_and_daggers. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5941 Weapon_poison(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5942 Antipoison+(unf) A_vial_of_coconut_milk_and_Toadflax. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5943 Antidote+(4) An_extra-strong_antipoision_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5944 Antidote+(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5945 Antidote+(3) An_extra-strong_antipoision_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5946 Antidote+(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5947 Antidote+(2) An_extra-strong_antipoision_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5948 Antidote+(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5949 Antidote+(1) An_extra-strong_antipoision_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5950 Antidote+(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5951 Antipoison++(unf) A_vial_of_coconut_milk_and_Irit_Leaf. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5952 Antidote(s) A_super-strong_antipoison_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5953 Antidote(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5954 Antidote(s) A_super-strong_antipoison_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5955 Antidote(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5956 Antidote(s) A_super-strong_antipoison_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5957 Antidote(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5958 Antidote(s) A_super-strong_antipoison_potion. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5959 Antidote++(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 14 14 14 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5960 Tomatoes(1) A_fruit_basket_filled_with_tomatoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5961 Tomatoes(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5962 Tomatoes(2) A_fruit_basket_filled_with_tomatoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5963 Tomatoes(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5964 Tomatoes(3) A_fruit_basket_filled_with_tomatoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5965 Tomatoes(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5966 Tomatoes(4) A_fruit_basket_filled_with_tomatoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5967 Tomatoes(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5968 Tomatoes(5) A_fruit_basket_filled_with_tomatoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5969 Tomatoes(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5970 Curry_leaf I_could_make_a_spicy_curry_with_this. 19 19 19 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5971 Curry_leaf Swap_this_note_at_any_bank_for_the_equivalent_item. 19 19 19 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5972 Papaya_fruit Looks_delicious. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5973 Papaya_fruit Swap_this_note_at_any_bank_for_the_equivalent_item. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5974 Coconut It's_a_coconut. 87 87 87 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5975 Coconut Swap_this_note_at_any_bank_for_the_equivalent_item. 87 87 87 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5976 Coconut It's_a_coconut. 87 87 87 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5977 Coconut Swap_this_note_at_any_bank_for_the_equivalent_item. 87 87 87 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5978 Coconut_shell All_the_milk_has_been_removed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5979 Coconut_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5980 Calquat_fruit This_is_the_largest_fruit_I've_ever_seen. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5981 Calquat_fruit Swap_this_note_at_any_bank_for_the_equivalent_item. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5982 Watermelon A_juicy_watermelon. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5983 Watermelon Swap_this_note_at_any_bank_for_the_equivalent_item. 48 48 48 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5984 Watermelon_slice A_slice_of_watermelon. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5985 Watermelon_slice Swap_this_note_at_any_bank_for_the_equivalent_item. 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5986 Sweetcorn Raw_sweetcorn. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5987 Sweetcorn Swap_this_note_at_any_bank_for_the_equivalent_item. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5988 Sweetcorn Delicious_cooked_sweetcorn. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5989 Sweetcorn Swap_this_note_at_any_bank_for_the_equivalent_item. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5990 Burnt_sweetcorn This_sweetcorn_has_been_cooked_for_too_long. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5991 Burnt_sweetcorn Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5992 Apple_mush A_bucket_of_apple_mush. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5993 Apple_mush Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5994 Hammerstone_hops A_handful_of_Hammerstone_Hops. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5995 Hammerstone_hops Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5996 Asgarnian_hops A_handful_of_Asgarnian_Hops. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5997 Asgarnian_hops Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5998 Yanillian_hops A_handful_of_Yanillian_Hops. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 5999 Yanillian_hops Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6000 Krandorian_hops A_handful_of_Krandorian_Hops. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6001 Krandorian_hops Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6002 Wildblood_hops A_handful_of_Wildblood_Hops. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6003 Wildblood_hops Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6004 Mushroom A_Bittercap_Mushroom 38 38 38 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6005 Mushroom Swap_this_note_at_any_bank_for_the_equivalent_item. 38 38 38 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6006 Barley A_handful_of_Barley. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6007 Barley Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6008 Barley_malt A_handful_of_barley_malt. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6009 Barley_malt Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6010 Marigolds A_bunch_of_marigolds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6011 Marigolds Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6012 Nasturtiums A_bunch_of_nasturtiums. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6013 Nasturtiums Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6014 Rosemary Some_rosemary. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6015 Rosemary Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6016 Cactus_spine Don't_prick_yourself_with_this. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6017 Cactus_spine Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6018 Poisonivy_berries They_look_sweet_and_juicy,_but_only_a_fool_would_eat_them. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6019 Poisonivy_berries Swap_this_note_at_any_bank_for_the_equivalent_item. 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6020 Leaves A_pile_of_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6021 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6022 Leaves A_pile_of_Oak_tree_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6023 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6024 Leaves A_pile_of_Willow_tree_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6025 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6026 Leaves A_pile_of_Yew_tree_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6027 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6028 Leaves A_pile_of_Maple_tree_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6029 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6030 Leaves A_pile_of_Magic_tree_leaves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6031 Leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6032 Compost Good_for_plants,_helps_them_grow. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6033 Compost Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6034 Super_compost Super-good_for_the_smallest_or_largest_of_plants. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6035 Super_compost Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6036 Plant_cure Use_this_on_plants_to_cure_disease. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6037 Plant_cure Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6038 Magic_string I_could_use_this_to_make_jewellery. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6039 Magic_string Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6040 Amulet_of_nature An_Amulet_of_Nature. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6041 Emerald_amulet This_amulet_has_been_strung_with_the_root_of_a_Magic_Tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6042 Emerald_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6043 Oak_roots The_roots_of_the_Oak_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6044 Oak_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6045 Willow_roots The_roots_of_the_Willow_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6046 Willow_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6047 Maple_roots The_roots_of_the_Maple_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6048 Maple_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6049 Yew_roots The_roots_of_the_Yew_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6050 Yew_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6051 Magic_roots The_roots_of_the_Magic_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6052 Magic_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6053 Spirit_roots The_roots_of_the_Spirit_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6054 Spirit_roots Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6055 Weeds A_handful_of_weeds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6056 Weeds Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6057 Hay_sack A_sack_filled_with_hay. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6058 Hay_sack This_sack_of_hay_has_a_bronze_spear_sticking_through_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6059 Scarecrow This_should_scare_the_birds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6060 Stool Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6061 Bolts(p+) Vicious_poisoned_bolts. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6062 Bolts(s) Vicious_poisoned_bolts. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6063 Spirit_tree A_Spirit_Tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6064 Bloody_mourner_top How_do_I_wash_blood_stains_out? 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6065 Mourner_top A_thick_heavy_leather_top. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6066 Mourner_trousers These_are_in_need_of_a_good_tailor. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6067 Mourner_trousers A_pair_of_mourner_trousers. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6068 Mourner_gloves These_will_keep_my_hands_warm! 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6069 Mourner_boots Comfortable_leather_boots. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6070 Mourner_cloak A_dull_brown_cape. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6071 Mourner_letter A_letter_of_recommendation. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6072 Tegid's_soap A_bar_of_soap_taken_from_Tegid. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6073 Prifddinas'_history A_book_on_the_history_of_Prifddinas. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6074 Prifddinas'_history Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6075 Eastern_discovery A_book_on_the_exploration_of_the_eastern_realm. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6076 Eastern_discovery Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6077 Eastern_settlement A_book_on_the_settlement_of_the_eastern_realm. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6078 Eastern_settlement Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6079 The_great_divide A_book_about_the_great_divide. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6080 The_great_divide Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6081 Broken_device A_strange_broken_device_of_gnomic_design. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6082 Fixed_device A_device_for_firing_dye. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6083 Tarnished_key This_key_has_seen_a_lot_of_use. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6084 Worn_key This_key_has_seen_a_lot_of_use. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6085 Red_dye_bellows A_large_pair_of_ogre_bellows_filled_with_red_dye. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6086 Blue_dye_bellows A_large_pair_of_ogre_bellows_filled_with_blue_dye. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6087 Yellow_dye_bellows A_large_pair_of_ogre_bellows_filled_with_yellow_dye. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6088 Green_dye_bellows A_large_pair_of_ogre_bellows_filled_with_green_dye. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6089 Blue_toad A_blue_dye_filled_toad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6090 Red_toad A_red_dye_filled_toad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6091 Yellow_toad A_yellow_dye_filled_toad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6092 Green_toad A_green_dye_filled_toad. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6093 Rotten_apples A_barrel_full_of_rotten_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6094 Apple_barrel A_barrel_full_of_mushed_apples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6095 Naphtha_apple_mix A_barrel_full_of_rotten_apples_and_naphtha. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6096 Toxic_naphtha A_barrel_full_of_toxic_naphtha. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6097 Sieve It's_a_sieve. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6098 Toxic_powder A_pile_of_toxic_powder. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6099 Teleport_crystal_(4) A_tiny_crystal_enchanted_to_return_the_user_to_Lletya. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6100 Teleport_crystal_(3) A_tiny_crystal_enchanted_to_return_the_user_to_Lletya. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6101 Teleport_crystal_(2) A_tiny_crystal_enchanted_to_return_the_user_to_Lletya. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6102 Teleport_crystal_(1) A_tiny_crystal_enchanted_to_return_the_user_to_Lletya. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6103 Tiny_elf_crystal A_tiny_Elf_crystal,_I_need_to_have_this_re-enchanted. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6104 New_key This_key_is_newly_cut. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6105 Elf One_of_the_fair_elven_folk. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6106 Ghostly_boots They_seem_to_be_not_quite_of_this_world... 300 300 300 0 0 0 2 0 0 0 0 2 0 0 0 +item = 6107 Ghostly_robetop A_particularly_spooky_robe_top. 300 300 300 0 0 0 5 0 0 0 0 5 0 0 0 +item = 6108 Ghostly_bottoms An_unearthly_set_of_robe_bottoms. 300 300 300 0 0 0 4 0 0 0 0 4 0 0 0 +item = 6109 Ghostly_hood A_ghostly_hood,_fit_for_a_ghostly_head. 300 300 300 0 0 0 3 0 0 0 0 3 0 0 0 +item = 6110 Ghostly_gloves They_seem_to_fade_in_and_out_of_existence... 300 300 300 0 0 0 2 0 0 0 0 2 0 0 0 +item = 6111 Ghostly_cloak Made_of_a_strange_ghostly_material... 250 250 250 0 0 0 5 0 0 0 0 5 0 0 0 +item = 6112 Kelda_seed Kelda_hop_seeds_can_only_be_grown_underground! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6113 Kelda_hops A_handful_of_Kelda_Hops. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6118 Kelda_stout A_pint_of_bluish_beer. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6119 Square_stone There_is_a_strange_yellow_marking_on_this_stone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6120 Square_stone There_is_a_strange_green_marking_on_this_stone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6121 Letter A_letter_addressed_to_Elstan_of_Falador. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6122 A_chair For_sitting_on. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6123 Beer_glass For_drinking..._if_it_were_filled. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6124 Coconut_milk Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6125 Enchanted_lyre(2) This_will_teleport_me_to_Rellekka_when_I_play_it. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6126 Enchanted_lyre(3) This_will_teleport_me_to_Rellekka_when_I_play_it. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6127 Enchanted_lyre(4) This_will_teleport_me_to_Rellekka_when_I_play_it. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6128 Rock-shell_helm Protective_headwear_made_from_crabs._Better_than_that_sounds. 14080 21120 0 0 0 0 -6 -2 30 32 27 -1 30 0 0 +item = 6129 Rock-shell_plate A_sturdy_body_armour_made_from_rock_crab_pieces. 26000 39000 0 0 0 0 -30 -10 82 80 72 -6 80 0 0 +item = 6130 Rock-shell_legs Some_tough_leggings_made_from_rock_crab_parts. 25600 38400 0 0 0 0 -21 -7 51 49 47 -4 49 0 0 +item = 6131 Spined_helm A_helm_fit_for_any_Fremennik_ranger. 60000 60000 60000 0 -6 -6 -6 6 6 6 -6 6 0 0 0 +item = 6132 Spined_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 60000 60000 60000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6133 Spined_body A_constant_reminder_that_I'm_above_a_Dagannoth_in_the_food_chain. 7800 7800 7800 0 0 0 -15 15 40 32 45 20 40 0 0 +item = 6134 Spined_body Swap_this_note_at_any_bank_for_the_equivalent_item. 7800 7800 7800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6135 Spined_chaps Stylish_leg_armour_for_rangers_with_a_lingering_smell_of_raw_fish... 1560 2340 0 0 0 0 10 8 22 16 24 8 22 0 0 +item = 6136 Spined_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 1560 2340 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6137 Skeletal_helm Make_your_foes_cower_by_wearing_a_skull_as_a_helmet! 10000 10000 10000 0 0 0 2 -2 10 9 11 3 0 0 0 +item = 6138 Skeletal_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 10000 10000 10000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6139 Skeletal_top The_bones_in_this_armour_seem_to_vibrate_with_a_magical_quality... 45000 45000 45000 0 0 0 8 -10 35 25 42 15 0 0 0 +item = 6140 Skeletal_top Swap_this_note_at_any_bank_for_the_equivalent_item. 45000 45000 45000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6141 Skeletal_bottoms A_superior_set_of_strengthened_slacks_for_any_self_respecting_seer. 40000 40000 40000 0 6 -7 22 20 24 10 0 0 0 0 0 +item = 6142 Skeletal_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 40000 40000 0 0 0 6 -7 22 20 24 10 0 0 0 +item = 6143 Spined_boots Some_finely_crafted_Fremennik_boots,_made_from_spined_dagannoth_hide. 650 650 650 0 0 0 0 0 1 1 0 0 0 0 0 +item = 6144 Spined_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6145 Rock-shell_boots Some_Fremennik_boots,_made_from_the_shards_of_a_rock_crabs'_shell. 650 650 650 0 0 0 0 0 0 1 1 0 0 0 0 +item = 6146 Rock-shell_boots Swap_this_note_at_any_bank_for_the_equivalent_item-shell_boots. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6147 Skeletal_boots Some_finely_crafted_Fremennik_boots,_made_from_the_bones_of_a_wallasalki. 650 650 650 0 0 0 0 0 1 1 0 0 0 0 0 +item = 6148 Skeletal_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6149 Spined_gloves Fremennik_gloves_stitched_together_from_spined_dagannoth_hide. 650 650 650 0 0 0 0 0 0 0 0 1 2 0 0 +item = 6150 Spined_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6151 Rock-shell_gloves Fremennik_gloves_stitched_together_from_rock_crab_shell_shards. 650 650 650 0 0 0 0 0 0 0 0 0 1 2 0 +item = 6152 Rock-shell_gloves Swap_this_note_at_any_bank_for_the_equivalent_item-shell_gloves. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6153 Skeletal_gloves Fremennik_gloves_stitched_together_from_wallasalki_bones_fragments. 650 650 650 0 0 0 0 0 0 0 0 1 2 0 0 +item = 6154 Skeletal_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 650 650 650 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6155 Dagannoth_hide A_sturdy_piece_of_dagannoth_hide. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6156 Dagannoth_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6157 Rock-shell_chunk A_spherical_chunk_of_rock-shell. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6158 Rock-shell_chunk Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6159 Rock-shell_shard A_curved_piece_of_rock-shell. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6160 Rock-shell_shard Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6161 Rock-shell_splinter A_slim_piece_of_rock-shell. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6162 Rock-shell_splinter Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6163 Skull_piece A_fearsome_looking_skull. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6164 Skull_piece Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6165 Ribcage_piece A_slightly_damaged_ribcage. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6166 Ribcage_piece Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6167 Fibula_piece An_interesting_looking_bone_shard. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6168 Fibula_piece Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6169 Circular_hide A_toughened_chunk_of_dagannoth_hide. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6170 Circular_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6171 Flattened_hide A_tattered_chunk_of_dagannoth_hide. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6172 Flattened_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6173 Stretched_hide A_weathered_chunk_of_dagannoth_hide. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6174 Stretched_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6175 Rock-shell_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6176 Rock-shell_plate Swap_this_note_at_any_bank_for_the_equivalent_item. 26000 39000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6177 Rock-shell_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 38400 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6178 Raw_pheasant I_need_to_cook_this_first. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6179 Raw_pheasant I_need_to_cook_this_first. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6180 Lederhosen_top A_leather_strapped_top. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6181 Lederhosen_shorts Brown_leather_shorts_with_bright_white_socks? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6182 Lederhosen_hat A_hat_with_a_goat's_hair_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6183 Frog_token I_can_use_this_at_the_Varrock_clothes_shop. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6184 Prince_tunic Very_posh! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6185 Prince_leggings Very_posh! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6186 Princess_blouse Very_posh! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6187 Princess_skirt Very_posh! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6188 Frog_mask Now_that's_just_silly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6199 Mystery_box Oooh,_I_wonder_what_could_be_inside? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6200 Raw_fishlike_thing A_raw..._fish?_Is_this_a_fish?? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6201 Fishmonger The_portable_version. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6202 Fishlike_thing It's_a_fishlike_thing_that_appears_to_already_be_cooked._It_looks_disgusting. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6203 Sine_wave Goes_up_and_down,_up_and_down._Like_a_rabbit. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6204 Raw_fishlike_thing A_raw..._fish?_Is_this_a_fish?? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6205 9mm_revolver Kills_people. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6206 Fishlike_thing It's_a_fishlike_thing_that_appears_to_already_be_cooked._It_looks_disgusting. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6207 Mobile_phone Talk_to_da_brick,_cos_da_head's_got_no_brain. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6208 Man_speak_amulet It's_an_amulet_of_Man_speak._It_makes_vague_grunting_noises. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6209 Small_fishing_net Useful_for_catching_small_fish. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6210 Sphinx_baby Not_to_be_patronised! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6211 Teak_pyre_logs Teak_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6212 Teak_pyre_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6213 Mahogany_pyre_log Mahogany_logs_prepared_with_sacred_oil_for_a_funeral_pyre. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6214 Mahogany_pyre_log Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6215 Broodoo_shield_(10) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6216 Broodoo_shield_(10) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6217 Broodoo_shield_(9) A_scary_broodoo_shield. 2750 2750 2750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6218 Broodoo_shield_(9) Swap_this_note_at_any_bank_for_the_equivalent_item. 2750 2750 2750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6219 Broodoo_shield_(8) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6220 Broodoo_shield_(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6221 Broodoo_shield_(7) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6222 Broodoo_shield_(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6223 Broodoo_shield_(6) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6224 Broodoo_shield_(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6225 Broodoo_shield_(5) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6226 Broodoo_shield_(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6227 Broodoo_shield_(4) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6228 Broodoo_shield_(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6229 Broodoo_shield_(3) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6230 Broodoo_shield_(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6231 Broodoo_shield_(2) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6232 Broodoo_shield_(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6233 Broodoo_shield_(1) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6234 Broodoo_shield_(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6235 Broodoo_shield A_scary_broodoo_shield. 3000 3000 3000 0 0 0 3 -7 10 10 15 5 0 0 5 +item = 6236 Broodoo_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6249 Broodoo_shield_(4) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6250 Broodoo_shield_(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6251 Broodoo_shield_(3) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6252 Broodoo_shield_(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6253 Broodoo_shield_(2) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6254 Broodoo_shield_(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6255 Broodoo_shield_(1) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6256 Broodoo_shield_(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6257 Broodoo_shield A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6258 Broodoo_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6259 Broodoo_shield_(10) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6260 Broodoo_shield_(10) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6261 Broodoo_shield_(9) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6262 Broodoo_shield_(9) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6263 Broodoo_shield_(8) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6264 Broodoo_shield_(8) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6265 Broodoo_shield_(7) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6266 Broodoo_shield_(7) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6267 Broodoo_shield_(6) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6268 Broodoo_shield_(6) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6269 Broodoo_shield_(5) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6270 Broodoo_shield_(5) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6271 Broodoo_shield_(4) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6272 Broodoo_shield_(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6273 Broodoo_shield_(3) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6274 Broodoo_shield_(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6275 Broodoo_shield_(2) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6276 Broodoo_shield_(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6277 Broodoo_shield_(1) A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6278 Broodoo_shield_(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6279 Broodoo_shield A_scary_broodoo_shield. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6280 Broodoo_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6281 Thatch_spar_light A_wooden_pole_for_use_in_primitive_construction. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6282 Thatch_spar_light Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6283 Thatch_spar_med A_wooden_pole_for_use_in_primitive_construction. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6284 Thatch_spar_med Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6285 Thatch_spar_dense A_wooden_pole_for_use_in_primitive_construction. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6286 Thatch_spar_dense Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6287 Snake_hide Scaly_but_not_slimy! 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6288 Snake_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6289 Snakeskin Scaly_but_not_slimy! 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6290 Snakeskin Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6291 Spider_carcass Its_creeping_days_are_over! 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6292 Spider_carcass Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6293 Spider_on_stick A_raw_spider_threaded_onto_a_skewer_stick. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6294 Spider_on_stick Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6295 Spider_on_shaft A_raw_spider_threaded_onto_an_arrow_shaft. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6296 Spider_on_shaft Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6297 Spider_on_stick A_nicely_roasted_spider_threaded_onto_a_skewer_stick. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6298 Spider_on_stick Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6299 Spider_on_shaft A_nicely_roasted_spider_threaded_onto_an_arrow_shaft. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6300 Spider_on_shaft Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6301 Burnt_spider A_badly_burnt_spider_threaded_onto_a_charred_skewer_stick. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6302 Burnt_spider Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6303 Spider_on_shaft A_badly_burnt_spider_threaded_onto_a_charred_arrow_shaft. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6304 Spider_on_shaft Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6305 Skewer_stick A_sharp_pointed_stick,_quite_resistant_to_fire. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6306 Trading_sticks Karamja_currency. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6311 Gout_tuber Plant_this_in_a_herb_patch_to_grow_Goutweed. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6312 Gout_tuber Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6313 Opal_machete A_jungle_specific_slashing_device. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6314 Opal_machete Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6315 Jade_machete A_jungle_specific_slashing_device. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6316 Jade_machete Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6317 Red_topaz_machete A_jungle_specific_slashing_device. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6318 Red_topaz_machete Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6319 Proboscis A_giant_mosquito's_proboscis,_aerodynamic_and_sharp! 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6322 Snakeskin_body Made_from_100%_real_snakeskin. 1250 1250 1250 0 0 0 -5 12 25 38 32 15 35 0 0 +item = 6323 Snakeskin_body Swap_this_note_at_any_bank_for_the_equivalent_item. 1250 1250 1250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6324 Snakeskin_chaps Made_from_100%_real_snake. 1175 1175 1175 0 0 0 -5 6 8 8 10 4 10 0 0 +item = 6325 Snakeskin_chaps Swap_this_note_at_any_bank_for_the_equivalent_item. 1175 1175 1175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6326 Snakeskin_bandana Lightweight_head_protection. 120 180 0 0 0 0 -5 4 2 4 4 2 2 0 0 +item = 6327 Snakeskin_bandana Swap_this_note_at_any_bank_for_the_equivalent_item. 120 180 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6328 Snakeskin_boots Made_from_snakes. 100 150 0 0 0 0 -10 3 1 1 2 1 0 0 0 +item = 6329 Snakeskin_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 10 150 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6330 Snakeskin_v'brace Made_from_100%_real_snake. 174 260 0 0 0 0 -5 6 2 2 2 1 0 0 0 +item = 6331 Snakeskin_v'brace Swap_this_note_at_any_bank_for_the_equivalent_item. 174 260 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6332 Mahogany_logs Some_rare_mahogany_logs. 20 30 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6333 Teak_logs Some_rare_teak_logs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6334 Teak_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6335 Tribal_mask A_ceremonial_wooden_mask. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6336 Tribal_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6337 Tribal_mask A_ceremonial_wooden_mask. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6338 Tribal_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6339 Tribal_mask A_ceremonial_wooden_mask. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6340 Tribal_mask Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6341 Tribal_top Local_dress. 300 300 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6342 Tribal_top Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6343 Villager_robe A_brightly_coloured_robe_prized_by_the_Tai_Bwo_Wannai_peoples. 250 250 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6344 Villager_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6345 Villager_hat A_brightly_coloured_hat_prized_by_the_Tai_Bwo_Wannai_peoples. 200 200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6346 Villager_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6347 Villager_armband A_brown_armband,_as_worn_by_the_Tai_Bwo_Wannai_locals. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6348 Villager_armband Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6349 Villager_sandals A_brightly_coloured_pair_of_local_sandals. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6350 Villager_sandals Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6351 Tribal_top Local_dress. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6352 Tribal_top Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6353 Villager_robe A_brightly_coloured_robe_prized_by_the_Tai_Bwo_Wannai_peoples. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6354 Villager_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6355 Villager_hat A_brightly_coloured_hat_prized_by_the_Tai_Bwo_Wannai_peoples. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6356 Villager_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6357 Villager_sandals A_brightly_coloured_pair_of_local_sandals. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6358 Villager_sandals Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6359 Villager_armband A_light_blue_armband,_as_worn_by_the_Tai_Bwo_Wannai_locals. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6360 Villager_armband Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6361 Tribal_top Local_dress. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6362 Tribal_top Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6363 Villager_robe A_brightly_coloured_robe_prized_by_the_Tai_Bwo_Wannai_peoples. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6364 Villager_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6365 Villager_hat A_brightly_coloured_hat_prized_by_the_Tai_Bwo_Wannai_peoples. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6366 Villager_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6367 Villager_sandals A_brightly_coloured_pair_of_local_sandals. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6368 Villager_sandals Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6369 Villager_armband A_dark_blue_armband,_as_worn_by_the_Tai_Bwo_Wannai_locals. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6370 Villager_armband Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6371 Tribal_top Local_dress. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6372 Tribal_top Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6373 Villager_robe A_brightly_coloured_robe_prized_by_the_Tai_Bwo_Wannai_peoples. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6374 Villager_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 250 250 250 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6375 Villager_hat A_brightly_coloured_hat_prized_by_the_Tai_Bwo_Wannai_peoples. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6376 Villager_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6377 Villager_sandals A_brightly_coloured_pair_of_local_sandals. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6378 Villager_sandals Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6379 Villager_armband A_white_armband,_as_worn_by_the_Tai_Bwo_Wannai_locals. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6380 Villager_armband Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6381 Tax_relief Suitable_for_children. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6382 Fez A_Fez_hat._Juss_like_that. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6383 Fez Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6384 Desert_top A_bit_itchy. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6385 Desert_top Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6386 Desert_robes Has_a_coarse_hard_wearing_texture. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6387 Desert_robes Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6388 Desert_top Good_for_those_cold_desert_nights. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6389 Desert_top Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6390 Desert_legs Better_than_factor_50_sun_cream. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6391 Desert_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6392 Menap_headgear Good_for_keeping_the_sun_off_my_neck. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6393 Menap_headgear Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6394 Menaphite_top Colourful. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6395 Menaphite_top Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6396 Menaphite_robe A_cool_light_Menaphite_robe. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6397 Menaphite_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6398 Menap_action_kilt Look_at_those_nobbily_knees. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6399 Menap_action_kilt Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6400 Menap_headgear Good_for_keeping_the_sun_off_my_neck. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6401 Menap_headgear Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6402 Menaphite_top Colourful. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6403 Menaphite_top Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6404 Menaphite_robe A_cool_light_Menaphite_robe. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6405 Menaphite_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6406 Menap_action_kilt Look_at_those_nobbily_knees. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6407 Menap_action_kilt Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6408 Oak_blackjack(a) An_assault_blackjack. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6409 Oak_blackjack(a) Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6410 Oak_blackjack(d) A_defensive_blackjack. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6411 Oak_blackjack(d) Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6412 Willow_blackjack(a) An_assault_blackjack. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6413 Willow_blackjack(a) Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6414 Willow_blackjack(d) A_defensive_blackjack. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6415 Willow_blackjack(d) Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6416 Maple_blackjack A_solid_bit_of_maple. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6417 Maple_blackjack Swap_this_note_at_any_bank_for_the_equivalent_item. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6418 Maple_blackjack(a) An_assault_blackjack. 1600 1600 1600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6419 Maple_blackjack(a) Swap_this_note_at_any_bank_for_the_equivalent_item. 1600 1600 1600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6420 Maple_blackjack(d) A_defensive_blackjack. 1600 1600 1600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6421 Maple_blackjack(d) Swap_this_note_at_any_bank_for_the_equivalent_item. 1600 1600 1600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6422 Air_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6423 Air_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6424 Water_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6425 Water_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6426 Earth_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6427 Earth_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6428 Fire_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6429 Fire_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6430 Chaos_rune Used_for_low_level_missile_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6431 Chaos_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6432 Death_rune Used_for_medium_level_missile_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6433 Death_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6434 Law_rune Used_for_teleport_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6435 Law_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6436 Mind_rune Used_for_basic_level_missile_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6437 Mind_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6438 Body_rune Used_for_curse_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6439 Body_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6448 Spadeful_of_coke A_spadeful_of_refined_coal. 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6450 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6452 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6453 White_rose_seed A_white_rosebush_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6454 Red_rose_seed A_red_rosebush_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6455 Pink_rose_seed A_pink_rosebush_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6456 Vine_seed A_grapevine_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6457 Delphinium_seed A_delphinium_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6458 Orchid_seed A_pink_orchid_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6459 Orchid_seed A_yellow_orchid_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6460 Snowdrop_seed A_snowdrop_seed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6461 White_tree_shoot A_shoot_that_has_been_cut_from_a_dying_White_Tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6462 White_tree_shoot A_shoot_that_has_been_cut_from_a_dying_White_Tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6463 White_tree_shoot This_shoot_from_a_White_Tree_has_been_watered_and_will_soon_grow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6464 White_tree_sapling A_young_White_Tree_sapling. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6465 Ring_of_charos(u) The_power_within_this_ring_has_been_unlocked. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6466 Rune_shards A_rune_essence_chip_that_has_been_broken_into_shards. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6467 Rune_dust Crushed_rune_essence. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6468 Plant_cure This_plant_cure_emits_potency. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6469 White_tree_fruit Looks_delicious. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6470 Compost_potion(4) Pour_this_on_compost_to_turn_it_into_super-compost. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6471 Compost_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 120 120 120 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6472 Compost_potion(3) Pour_this_on_compost_to_turn_it_into_super-compost. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6473 Compost_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6474 Compost_potion(2) Pour_this_on_compost_to_turn_it_into_super-compost. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6475 Compost_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6476 Compost_potion(1) Pour_this_on_compost_to_turn_it_into_super-compost. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6477 Compost_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6478 Trolley I_can_use_this_to_move_heavy_objects. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6479 List A_list_of_things_that_I_must_collect_for_Queen_Ellamaria. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6514 Agility_jump Ability_to_jump,_swing_or_use_monkey_bars. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6515 Agility_balance Ability_to_balance_using_the_agility_skill. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6516 Agility_contortion Ability_to_squeeze_your_body_through_small_areas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6517 Agility_climb Ability_to_climb_surfaces. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6518 Agility_jump Ability_to_jump,_swing_or_use_monkey_bars. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6519 Agility_balance Ability_to_balance_using_the_agility_skill. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6520 Agility_contortion Ability_to_squeeze_your_body_through_small_areas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6521 Agility_climb Ability_to_climb_surfaces. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6522 Toktz-xil-ul A_razor_sharp_ring_of_obsidian. 250 250 250 0 0 0 0 69 0 0 0 0 0 0 0 +item = 6523 Toktz-xil-ak A_razor_sharp_sword_of_obsidian. 40000 40000 40000 47 38 -2 0 0 2 3 0 0 0 49 0 +item = 6524 Toktz-ket-xil A_spiked_shield_of_obsidian. 45000 45000 45000 0 0 0 -12 -8 40 42 38 0 65 5 0 +item = 6525 Toktz-xil-ek A_large_knife_of_obsidian. 25000 25000 25000 16 48 0 0 0 0 0 0 0 0 39 0 +item = 6526 Toktz-mej-tal A_staff_of_obsidian. 35000 35000 35000 15 -1 55 15 0 10 15 5 15 0 55 0 +item = 6527 Tzhaar-ket-em A_mace_of_obsidian. 12800 18000 0 -4 -4 62 0 0 0 0 0 0 0 56 0 +item = 6528 Tzhaar-ket-om A_maul_of_obsidian. 50000 50000 50000 0 0 80 -4 0 0 0 0 0 0 85 0 +item = 6529 Tokkul It's_a_token_of_some_kind_made_from_obsidian. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6535 Toktz-xil-ak Swap_this_note_at_any_bank_for_the_equivalent_item. 40000 40000 40000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6536 Toktz-ket-xil Swap_this_note_at_any_bank_for_the_equivalent_item. 45000 45000 45000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6537 Toktz-xil-ek Swap_this_note_at_any_bank_for_the_equivalent_item. 25000 25000 25000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6538 Toktz-mej-tal Swap_this_note_at_any_bank_for_the_equivalent_item. 35000 35000 35000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6539 Tzhaar-ket-em Swap_this_note_at_any_bank_for_the_equivalent_item. 12800 18000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6540 Tzhaar-ket-om Swap_this_note_at_any_bank_for_the_equivalent_item. 50000 50000 50000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6541 Mouse_toy An_Advanced_Combat_Training_Device. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6542 Present Thanks_for_all_your_help!__Love,_Bob_&_Neite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6543 Magical_Lamp I_wonder_what_happens_if_I_rub_it... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6544 Catspeak_amulet(e) It's_an_amulet_of_cat_speak._It_makes_vague_purring_noises. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6545 Chores A_list_of_chores_that_Bob_gave_you_to_do. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6546 Recipe It_says_on_the_back_'My_favourite_recipe.' 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6547 Doctors_hat A_mirror_helps_reflect_light_on_the_subject. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6548 Nurse_hat A_nurses_hat,_but_does_it_have_healing_powers? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6549 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6550 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6551 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6552 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6553 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6554 Lazy_cat Lethargic. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6555 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6556 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6557 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6558 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6559 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6560 Wily_cat Wild. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6561 Ahab's_beer Looks_nice. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6562 Mud_battlestaff It's_a_slightly_magical_stick. 17000 17000 17000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6563 Mystic_mud_staff It's_a_slightly_magical_stick. 45000 45000 45000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6564 Onyx_ring A_valuable_ring. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6565 Onyx_necklace I_wonder_if_this_is_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6566 Onyx_amulet It_needs_a_string_so_I_can_wear_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6568 Obsidian_cape A_cape_of_woven_obsidian_plates. 24000 36000 0 0 0 0 0 0 9 9 9 9 9 0 0 +item = 6569 Obsidian_cape Swap_this_note_at_any_bank_for_the_equivalent_item. 24000 36000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6570 Fire_cape A_cape_of_fire. 60000 60000 60000 1 1 1 1 1 11 11 11 11 11 4 2 +item = 6571 Uncut_onyx This_would_be_worth_more_cut. 200000 200000 200000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6572 Uncut_onyx Swap_this_note_at_any_bank_for_the_equivalent_item. 200000 200000 200000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6573 Onyx This_looks_valuable. 200000 200000 200000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6574 Onyx Swap_this_note_at_any_bank_for_the_equivalent_item. 200000 200000 200000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6575 Onyx_ring A_valuable_ring. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6576 Onyx_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6577 Onyx_necklace I_wonder_if_this_is_valuable. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6578 Onyx_necklace Swap_this_note_at_any_bank_for_the_equivalent_item. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6579 Onyx_amulet It_needs_a_string_so_I_can_wear_it. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6580 Onyx_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6581 Onyx_amulet I_wonder_if_I_can_get_this_enchanted. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6582 Onyx_amulet Swap_this_note_at_any_bank_for_the_equivalent_item. 201000 201000 201000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6583 Ring_of_stone An_enchanted_ring. 202000 202000 202000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6584 Ring_of_stone Swap_this_note_at_any_bank_for_the_equivalent_item. 202000 202000 202000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6585 Amulet_of_fury A_very_powerful_onyx_amulet. 80800 121200 0 10 10 10 10 10 15 15 15 15 15 8 5 +item = 6586 Amulet_of_fury Swap_this_note_at_any_bank_for_the_equivalent_item. 80800 121200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6587 White_claws A_set_of_fighting_claws. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 1 +item = 6588 White_claws Swap_this_note_at_any_bank_for_the_equivalent_item. 360 360 360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6589 White_battleaxe A_vicious_looking_axe. 1248 1248 1248 -2 20 15 0 0 0 0 0 0 -1 24 1 +item = 6590 White_battleaxe Swap_this_note_at_any_bank_for_the_equivalent_item. 1248 1248 1248 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6591 White_dagger A_vicious_white_dagger. 240 240 240 10 5 -4 1 0 0 0 0 1 0 7 1 +item = 6592 White_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6593 White_dagger(p) This_dagger_is_poisoned. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6594 White_dagger(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6595 White_dagger(p+) This_dagger_is_poisoned. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6596 White_dagger(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6597 White_dagger(s) This_dagger_is_poisoned. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6598 White_dagger(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 240 240 240 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6599 White_halberd A_white_halberd. 1920 1920 1920 19 25 0 -4 0 -1 2 3 0 0 20 1 +item = 6600 White_halberd Swap_this_note_at_any_bank_for_the_equivalent_item. 1920 1920 1920 19 25 0 -4 0 -1 2 3 0 0 0 0 +item = 6601 White_mace A_spiky_mace. 432 432 432 8 -2 16 0 0 0 0 0 0 0 13 1 +item = 6602 White_mace Swap_this_note_at_any_bank_for_the_equivalent_item. 432 432 432 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6603 Magic_staff A_Magical_staff. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6604 Magic_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6605 White_sword A_razor_sharp_sword. 624 624 624 14 10 -2 0 0 0 2 1 0 0 12 1 +item = 6606 White_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 624 624 624 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6607 White_longsword A_razor_sharp_longsword. 960 960 960 13 18 -2 0 0 0 3 2 0 0 16 1 +item = 6608 White_longsword Swap_this_note_at_any_bank_for_the_equivalent_item. 960 960 960 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6609 White_2h_sword A_two_handed_sword. 1920 1920 1920 -4 27 21 -4 0 0 0 0 0 -1 26 1 +item = 6610 White_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 1920 1920 1920 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6611 White_scimitar A_vicious,_curved_sword. 768 768 768 4 19 -2 0 0 0 1 0 0 0 14 1 +item = 6612 White_scimitar Swap_this_note_at_any_bank_for_the_equivalent_item. 768 768 768 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6613 White_warhammer I_don't_think_it's_intended_for_joinery. 980 980 980 -4 -4 22 -4 0 0 0 0 0 0 19 1 +item = 6614 White_warhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 980 980 980 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6615 White_chainbody A_series_of_connected_metal_rings. 1440 1440 1440 0 0 0 -15 0 22 32 39 -3 24 0 1 +item = 6616 White_chainbody Swap_this_note_at_any_bank_for_the_equivalent_item. 1440 1440 1440 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6617 Dragon_platebody Provides_excellent_protection. 566667 850000 0 0 0 0 -30 0 109 107 97 -6 106 0 0 +item = 6618 White_platebody Swap_this_note_at_any_bank_for_the_equivalent_item. 1536 2304 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6619 White_boots These_will_protect_my_feet. 576 576 576 0 0 0 -3 -1 7 8 9 0 0 0 1 +item = 6620 White_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 576 576 576 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6621 White_med_helm A_medium_sized_helmet. 576 576 576 0 0 0 0 0 0 0 0 0 0 0 1 +item = 6622 White_med_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 576 576 576 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6623 White_full_helm A_full_face_helmet. 422 634 0 0 0 0 -6 -2 12 13 10 -1 12 0 1 +item = 6624 White_full_helm Swap_this_note_at_any_bank_for_the_equivalent_item. 422 634 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6625 White_platelegs Big,_White_and_heavy_looking. 768 1152 0 0 0 0 -21 -7 21 20 19 -4 20 0 1 +item = 6626 White_platelegs Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6627 White_plateskirt Big,_White_and_heavy_looking. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 1 +item = 6628 White_plateskirt Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6629 White_gloves These_will_keep_my_hands_warm! 6 6 6 0 0 0 0 0 0 1 2 0 0 0 1 +item = 6630 White_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6631 White_sq_shield A_medium_square_shield. 1152 1152 1152 0 0 0 0 0 0 0 0 0 0 0 1 +item = 6632 White_sq_shield Swap_this_note_at_any_bank_for_the_equivalent_item. 1152 1152 1152 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6633 White_kiteshield A_large_metal_shield. 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 1 +item = 6634 White_kiteshield Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6635 Commorb A_Temple_Knight_Communication_Orb._Top_Secret! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6636 Solus's_hat Proof_that_I_have_defeated_the_evil_mage_Solus. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6637 Dark_beast A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6638 Colour_wheel A_key_to_the_nature_of_light_itself. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6639 Hand_mirror A_small_hand_mirror. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6640 Red_crystal A_red_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6641 Yellow_crystal A_yellow_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6642 Green_crystal A_green_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6643 Cyan_crystal A_cyan_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6644 Blue_crystal A_blue_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6645 Magenta_crystal A_magenta_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6646 Fractured_crystal A_fractured_crystal,_one_of_the_edges_is_clear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6647 Fractured_crystal A_fractured_crystal,_one_of_the_edges_is_clear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6648 Item_list It's_a_list_of_items_I_need_to_collect. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6649 Edern's_journal The_journal_of_Nissyen_Edern. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6650 Blackened_crystal A_blackened_crystal_sample. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6651 Newly_made_crystal A_newly_formed_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6652 Newly_made_crystal A_warm_energy_radiates_from_this_crystal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6653 Crystal_trinket A_small_crystal_trinket. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6654 Camo_top Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6655 Camo_bottoms Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6656 Camo_helmet Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6657 Camo_top Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6658 Camo_bottoms Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6659 Camo_helmet Examine_what? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6660 Fishing_explosive A_vial_that_explodes_in_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6661 Mogre A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6662 Broken_fishing_rod This_fishing_rod_seems_to_have_been_bitten_in_half... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6663 Forlorn_boot It_seems_someone_vacated_this_boot_in_a_hurry... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6664 Fishing_explosive The_jar_keeps_shaking...I'm_scared. 60 60 60 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6665 Mudskipper_hat Fishy,_damp_and_smelly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6666 Flippers Strangely_uncomfortable_flippers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6667 Fishbowl An_empty_fishbowl. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6668 Fishbowl A_fishless_fishbowl. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6669 Fishbowl A_fishless_fishbowl_with_some_seaweed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6670 Fishbowl A_fishbowl_with_a_Tiny_Bluefish_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6671 Fishbowl A_fishbowl_with_a_Tiny_Greenfish_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6672 Fishbowl A_fishbowl_with_a_Tiny_Spinefish_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6673 Fishbowl_and_net An_empty_fishbowl_in_a_net. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6674 Tiny_net A_tiny_net_for_grabbing_tiny_fish. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6675 An_empty_box 'Ingredients;_Ground_Guam_and_Ground_Seaweed.' 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6676 An_empty_box Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6677 Guam_in_a_box 'Ingredients;_Ground_Guam_Leaf_and_Ground_Seaweed.'_Well,_I_have_the_Guam_Leaf... 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6678 Guam_in_a_box? 'Ingredients;_Ground_Guam_Leaf_and_Ground_Seaweed.'_Well,_I_have_the_Guam_Leaf... 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6679 Seaweed_in_a_box 'Ingredients;_Ground_Guam_and_Ground_Seaweed.'_Well,_I_have_the_Seaweed... 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6680 Seaweed_in_a_box? 'Ingredients;_Ground_Guam_and_Ground_Seaweed.'_Well,_I_have_the_Seaweed... 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6681 Ground_guam One_of_the_ingredients_for_making_fish_food. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6682 Ground_guam Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6683 Ground_seaweed One_of_the_ingredients_for_making_fish_food. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6684 Ground_seaweed Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6685 Saradomin_brew(4) A_Saradomin_brew. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6686 Saradomin_brew(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6687 Saradomin_brew(3) A_Saradomin_brew. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6688 Saradomin_brew(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6689 Saradomin_brew(2) A_Saradomin_brew. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6690 Saradomin_brew(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6691 Saradomin_brew(1) A_Saradomin_brew. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6692 Saradomin_brew(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6693 Crushed_nest A_crushed_bird's_nest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6694 Crushed_nest Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6695 Desert_lizard A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6696 Ice_cooler Contains_ice_cubes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6697 Pat_of_butter A_pat_of_freshly_churned_butter. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6698 Pat_of_butter Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6699 Burnt_potato This_potato_doesn't_look_edible. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6700 Burnt_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6701 Baked_potato It'd_taste_even_better_with_some_toppings. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6702 Baked_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6703 Potato_with_butter A_baked_potato_with_butter. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6704 Potato_with_butter Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6705 Potato_with_cheese A_baked_potato_with_butter_and_cheese. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6706 Potato_with_cheese Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6707 Camulet An_amulet_of_Camel-speak._It_makes_vague_braying_noises. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6708 Slayer_gloves Too_thick_for_monsters_to_bite_through. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6709 Fever_spider A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6710 Blindweed_seed A_Blindweed_seed_-_plant_in_a_Blindweed_patch. 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6711 Blindweed An_inedible,_foul_smelling_herb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6712 Bucket_of_water It's_a_bucket_of..._water? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6713 Wrench A_heavy_metal_wrench. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6714 Holy_wrench A_shining_paragon_of_wrenchly_virtue. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6715 Sluglings They_look_at_you_balefully._'Feed_us...' 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6716 Karamthulhu A_sinister_looking_squid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6717 Karamthulhu My_pet_sinister_squid. 20000 20000 20000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6718 Fever_spider_body A_diseased_deceased_Fever_Spider._Handle_with_care. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6719 Unsanitary_swill Sorry,_I_mean_a_bucket_of_'rum'. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6720 Slayer_gloves Especially_good_against_diseased_arachnids. 200 200 200 0 0 0 0 0 4 5 3 0 0 0 0 +item = 6721 Rusty_scimitar A_decent_enough_weapon_gone_rusty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6722 Zombie_head Alas...I_hardly_knew_him. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6723 Fishbowl Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6724 Seercull An_ancient_Fremennik_bow_that_was_once_used_to_battle_the_Moon_Clan. 8000 8000 8000 0 0 0 0 69 0 0 0 0 0 0 0 +item = 6725 Seercull Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6726 Mud_battlestaff Swap_this_note_at_any_bank_for_the_equivalent_item. 17000 17000 17000 10 -1 40 10 0 2 3 1 10 0 35 0 +item = 6727 Mystic_mud_staff Swap_this_note_at_any_bank_for_the_equivalent_item. 45000 45000 45000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6728 Bonemeal A_pot_of_crushed_Dagannoth-king_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6729 Dagannoth_bones These_would_feed_a_dogfish_for_months! 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6730 Dagannoth_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6731 Seer's_ring A_mysterious_ring_that_can_fill_the_wearer_with_magical_power... 6000 10000 0 0 0 0 4 0 0 0 0 4 0 0 0 +item = 6732 Seer's_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 6000 10000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6733 Archers_ring A_fabled_ring_that_improves_the_wearer's_skill_with_a_bow... 6000 10000 0 0 0 0 0 4 0 0 0 0 4 0 0 +item = 6734 Archers_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 6000 10000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6735 Warrior_ring A_legendary_ring_once_worn_by_Fremennik_warriors. 6000 10000 0 0 4 0 0 0 0 4 0 0 0 0 0 +item = 6736 Warrior_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 6000 10000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6737 Berserker_ring A_ring_reputed_to_bring_out_a_berserk_fury_in_its_wearer. 6000 10000 0 0 0 0 0 0 0 0 4 0 0 4 0 +item = 6738 Berserker_ring Swap_this_note_at_any_bank_for_the_equivalent_item. 6000 10000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6739 Dragon_axe A_very_powerful_axe. 33000 55000 0 -2 38 32 0 0 0 1 0 0 0 42 0 +item = 6740 Dragon_axe Swap_this_pote_at_any_bank_for_a_Dragon_axe. 33000 55000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6741 Broken_axe Bob_can_fix_this_for_me. 1800 1800 1800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6742 Broken_axe Swap_this_note_at_any_bank_for_the_equivalent_item. 1800 1800 1800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6743 Dragon_axe_head It's_missing_a_handle. 32999 54999 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6744 Dragon_axe_head Swap_this_note_at_any_bank_for_the_equivalent_item. 32999 54999 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6745 Silverlight The_magical_sword_'Silverlight',_stained_black_with_mushroom_ink. 50 50 50 9 14 -2 0 0 0 3 2 1 0 12 0 +item = 6746 Darklight The_magical_sword_'Silverlight',_enhanced_with_the_blood_of_Agrith-Naar. 500 500 500 10 16 -2 0 0 0 3 2 2 0 13 0 +item = 6747 Demonic_sigil_mould Used_to_make_the_sigil_of_the_demon_Agrith-Naar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6748 Demonic_sigil A_sigil_used_for_the_summoning_of_the_demon_Agrith-Naar. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6749 Demonic_tome Will_this_book_help_in_summoning_Agrith-Naar? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6750 Black_desert_shirt A_desert_shirt_stained_black_with_mushroom_ink. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6751 Black_desert_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6752 Black_desert_robe A_desert_robe_stained_black_with_mushroom_ink. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6753 Black_desert_robe Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6754 Enchanted_key It_seems_to_change_temperature_as_I_walk. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6755 Journal Somebody's_private_journal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6756 Letter A_sealed_letter_to_the_king. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6757 Letter A_sealed_letter_to_Jorral. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6758 Scroll A_timeline_of_the_outpost. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6759 Chest A_dirty_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6760 Guthix_mjolnir A_Guthix_Mjolnir. 625 625 625 0 0 11 0 0 0 0 0 0 0 14 0 +item = 6761 Guthix_mjolnir Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6762 Saradomin_mjolnir A_Saradomin_Mjolnir. 625 625 625 0 0 11 0 0 0 0 0 0 0 14 0 +item = 6763 Saradomin_mjolnir Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6764 Zamorak_mjolnir A_Zamorak_Mjolnir. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6765 Zamorak_mjolnir Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6766 Cat_antipoison Antipoison_for_Pox. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6767 Book The_book_of_Rats. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6768 Poisoned_cheese A_little_more_smelly_than_usual. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6769 Music_scroll Charming. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6770 Directions Jimmy_Dazzler's_directions. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6771 Pot_of_weeds Contains_garden_weeds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6772 Smouldering_pot Contains_slowly_burning_garden_weeds. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6773 Rat_pole A_pole_for_putting_rats_on. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6774 Rat_pole A_pole_with_one_rat_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6775 Rat_pole A_pole_with_two_rats_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6776 Rat_pole A_pole_with_three_rats_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6777 Rat_pole A_pole_with_four_rats_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6778 Rat_pole A_pole_with_five_rats_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6779 Rat_pole A_pole_with_six_rats_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6780 Menaphite_thug Mean_looking. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6781 Bandit Nasty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6782 Bandit Nasty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6784 Whoopsie Just_chuck_this_away,_it's_useless! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6785 Statuette A_statue_of_the_goddess_Elidinis. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6786 Robe_of_elidinis This_looks_quite_old. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6787 Robe_of_elidinis A_patched_up_robe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6788 Torn_robe This_robe_is_too_torn_to_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6789 Torn_robe This_robe_is_too_torn_to_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6790 Shoes Awusah's_Shoes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6791 Sole Awusah's_Sole. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6792 Ancestral_key An_ancient_key_from_the_shrine_in_Nardah. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6793 Ballad The_Ballad_of_Jareesh. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6794 Choc-ice Better_eat_this_before_it_melts. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6795 Choc-ice Swap_this_note_at_any_bank_for_the_equivalent_item. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6796 Lamp Ooh_a_nice_shiny_lamp. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6797 Watering_can Handy_for_watering_crops. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6798 Champion_scroll It's_a_challenge_from_the_Earth_Warrior_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6799 Champion_scroll It's_a_challenge_from_the_Ghoul_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6800 Champion_scroll It's_a_challenge_from_the_Giant_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6801 Champion_scroll It's_a_challenge_from_the_Goblin_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6802 Champion_scroll It's_a_challenge_from_the_Hobgoblin_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6803 Champion_scroll It's_a_challenge_from_the_Imp_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6804 Champion_scroll It's_a_challenge_from_the_Jogre_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6805 Champion_scroll It's_a_challenge_from_the_Lesser_Demon_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6806 Champion_scroll It's_a_challenge_from_the_Skeleton_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6807 Champion_scroll It's_a_challenge_from_the_Zombie_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6808 Champion_scroll It's_a_challenge_from_the_Human_Champion! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6809 Granite_legs These_look_pretty_heavy. 66000 66000 66000 0 0 0 -31 -18 43 45 41 -4 68 0 0 +item = 6810 Bonemeal A_pot_of_crushed_wyvern_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6811 Skeletal_wyvern A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6812 Wyvern_bones Bones_of_a_large_flying_creature! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6813 Granite_legs Swap_this_note_at_any_bank_for_the_equivalent_item. 66000 66000 66000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6814 Fur This_would_make_warm_clothing. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6815 Fur Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6816 Wyvern_bones Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6817 Slender_blade A_slender_two-handed_sword. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6818 Bow-sword A_sharp_sword_that_can_also_fire_arrows. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6819 Large_pouch A_large_pouch_used_for_storing_essence. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6820 Relic There_seems_to_be_bits_missing... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6821 Orb A_glowing_orb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6822 Star_bauble An_unpainted_bauble_shaped_like_a_star. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6823 Star_bauble A_bauble_shaped_like_a_star_painted_yellow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6824 Star_bauble A_bauble_shaped_like_a_star_painted_red. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6825 Star_bauble A_bauble_shaped_like_a_star_painted_blue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6826 Star_bauble A_bauble_shaped_like_a_star_painted_green. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6827 Star_bauble A_bauble_shaped_like_a_star_painted_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6828 Box_bauble An_unpainted_bauble_shaped_like_a_gift. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6829 Box_bauble A_bauble_shaped_like_a_gift_painted_yellow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6830 Box_bauble A_bauble_shaped_like_a_gift_painted_red. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6831 Box_bauble A_bauble_shaped_like_a_gift_painted_blue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6832 Box_bauble A_bauble_shaped_like_a_gift_painted_green. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6833 Box_bauble A_bauble_shaped_like_a_gift_painted_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6834 Diamond_bauble An_unpainted_bauble_shaped_like_a_diamond. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6835 Diamond_bauble A_bauble_shaped_like_a_diamond_painted_yellow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6836 Diamond_bauble A_bauble_shaped_like_a_diamond_painted_red. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6837 Diamond_bauble A_bauble_shaped_like_a_diamond_painted_blue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6838 Diamond_bauble A_bauble_shaped_like_a_diamond_painted_green. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6839 Diamond_bauble A_bauble_shaped_like_a_diamond_painted_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6840 Tree_bauble An_unpainted_bauble_shaped_like_a_wintumber_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6841 Tree_bauble A_bauble_shaped_like_a_wintumber_tree_painted_yellow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6842 Tree_bauble A_bauble_shaped_like_a_wintumber_tree_painted_red. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6843 Tree_bauble A_bauble_shaped_like_a_wintumber_tree_painted_blue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6844 Tree_bauble A_bauble_shaped_like_a_wintumber_tree_painted_green. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6845 Tree_bauble A_bauble_shaped_like_a_wintumber_tree_painted_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6846 Bell_bauble An_unpainted_bauble_shaped_like_a_bell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6847 Bell_bauble A_bauble_shaped_like_a_bell_painted_yellow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6848 Bell_bauble A_bauble_shaped_like_a_bell_painted_red. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6849 Bell_bauble A_bauble_shaped_like_a_bell_painted_blue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6850 Bell_bauble A_bauble_shaped_like_a_bell_painted_green. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6851 Bell_bauble A_bauble_shaped_like_a_bell_painted_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6852 Puppet_box A_box_for_storing_completed_puppets. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6853 Bauble_box A_box_for_storing_painted_baubles. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6854 Puppet_box A_box_full_of_puppets._Bring_to_the_Taverly_members_gate. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6855 Bauble_box A_box_full_of_painted_baubles._Give_to_a_Pixie_or_use_to_decorate_a_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6856 Bobble_hat A_woolly_bobble_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6857 Bobble_scarf A_woolly_scarf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6858 Jester_hat A_woolly_jester_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6859 Jester_scarf A_woolly_jester_scarf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6860 Tri-jester_hat A_woolly_triple_bobble_jester_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6861 Tri-jester_scarf A_woolly_jester_scarf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6862 Woolly_hat A_woolly_tobogganing_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6863 Woolly_scarf A_woolly_tobogganing_scarf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6864 Marionette_handle The_controlling_part_of_a_marionette. 60000 60000 60000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6865 Blue_marionette I've_got_no_strings_..._oh_hang_on! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6866 Green_marionette I've_got_no_strings_..._oh_hang_on! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6867 Red_marionette I've_got_no_strings_..._oh_hang_on! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6868 Blue_marionette I_want_to_be_a_real_boy! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6869 Green_marionette I_want_to_be_a_real_boy! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6870 Red_marionette I_want_to_be_a_real_boy! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6871 Red_marionette The_torso_of_a_marionette. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6872 Red_marionette The_torso_and_head_of_a_marionette. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6873 Red_marionette The_torso,_head_and_arms_of_a_marionette. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6874 Red_marionette No_strings_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6875 Blue_marionette Needs_a_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6876 Blue_marionette Needs_arms. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6877 Blue_marionette Needs_legs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6878 Blue_marionette No_strings_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6879 Green_marionette Needs_a_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6880 Green_marionette Needs_arms. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6881 Green_marionette Needs_legs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6882 Green_marionette No_strings_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6883 Peach A_tasty_fruit. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6885 Progress_hat A_magic_training_arena_progress_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6886 Progress_hat A_magic_training_arena_progress_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6887 Progress_hat A_magic_training_arena_progress_hat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6888 Guardian_statue The_statue_looks_like_he_can_be_moved. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6889 Mage's_book The_magical_book_of_the_Mage. 500 500 500 0 0 0 15 0 0 0 0 15 0 0 0 +item = 6890 Mage's_book Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6891 Arena_book A_book_about_the_Training_Arena. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6892 Arena_book Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6893 Leather_boots Comfortable_leather_boots. 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 +item = 6894 Adamant_kiteshield A_large_metal_shield. 0 0 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 6895 Adamant_med_helm A_medium_sized_helmet. 0 0 0 0 0 0 -3 -1 14 15 13 -1 14 0 0 +item = 6896 Emerald This_looks_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6897 Rune_longsword A_razor_sharp_longsword. 0 0 0 38 47 -2 0 0 0 0 0 0 0 0 0 +item = 6898 Cylinder A_green_cylinder. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6899 Cube A_yellow_cube. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6900 Icosahedron A_blue_icosahedron. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6901 Pentamid A_red_pentamid. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6902 Orb A_white_sphere. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6903 Dragonstone This_looks_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6904 Animals'_bones Various_animals'_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6905 Animals'_bones Various_animals'_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6906 Animals'_bones Various_animals'_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6907 Animals'_bones Various_animals'_bones. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6908 Beginner_wand A_beginner_level_wand. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6909 Beginner_wand Swap_this_note_at_any_bank_for_the_equivalent_item. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6910 Apprentice_wand A_apprentice_level_wand. 1500 1500 1500 0 0 0 10 0 0 0 0 10 0 0 0 +item = 6911 Apprentice_wand Swap_this_note_at_any_bank_for_the_equivalent_item. 1500 1500 1500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6912 Teacher_wand A_teacher_level_wand. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6913 Teacher_wand Swap_this_note_at_any_bank_for_the_equivalent_item. 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6914 Master_wand A_master_level_wand. 2500 2500 2500 0 0 0 20 0 0 0 0 20 0 0 0 +item = 6915 Master_wand Swap_this_note_at_any_bank_for_the_equivalent_item. 2500 2500 2500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6916 Infinity_top Mystical_robes. 140000 140000 140000 0 0 0 22 0 0 0 22 0 0 0 0 +item = 6917 Infinity_top Swap_this_note_at_any_bank_for_the_equivalent_item. 140000 140000 140000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6918 Infinity_hat A_mystic_hat. 17000 17000 17000 0 0 0 6 0 0 0 0 6 0 0 0 +item = 6919 Infinity_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 17000 17000 17000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6920 Infinity_boots Mystical_boots. 12000 12000 12000 0 0 0 5 0 0 0 0 5 0 0 0 +item = 6921 Infinity_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 12000 12000 12000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6922 Infinity_gloves Mystical_gloves. 12000 12000 12000 0 0 5 0 0 0 5 0 0 0 0 0 +item = 6923 Infinity_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 12000 12000 12000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6924 Infinity_bottoms Mystical_robes. 90000 90000 90000 0 0 0 17 0 0 0 0 17 0 0 0 +item = 6925 Infinity_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 90000 90000 90000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6926 Bones_to_peaches A_spell_to_turn_bones_to_peaches. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6945 Sandy_hand A_severed_hand_covered_with_sand. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6946 Beer_soaked_hand A_severed_hand_dripping_with_beer. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6947 Bert's_rota A_copy_of_a_work_rota. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6948 Sandy's_rota An_original_work_rota. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6949 A_magic_scroll This_scroll_glows_with_an_inner_light. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6950 Magical_orb An_ordinary_looking_magical_scrying_orb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6951 Magical_orb_(a) This_magical_scrying_orb_pulsates_as_it_stores_information. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6952 Truth_serum Fluid_sloshes_innocently_in_this_vial. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6953 Bottled_water A_bottle_of_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6954 Redberry_juice Redberry_Juice_sloshes_around_in_this_vial_waiting_for_white_berries_to_be_added. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6955 Pink_dye A_vial_of_pink_dye. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6956 Rose_tinted_lens This_lens_has_a_pinkish_tinge_to_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6957 Wizard's_head A_decapitated,_sand_covered_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6958 Sand A_handful_of_sand_from_Sandy's_pocket. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6959 Cape It's_a_bit_pink. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6960 Cape Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6961 Baguette A_freshly_baked_baguette. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6962 Triangle_sandwich A_freshly_made_triangle_sandwich. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6963 Roll A_freshly_made_roll. 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6964 Waste_disposal Gets_rid_of_all_that_nasty_kitchen_waste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6965 Square_sandwich A_freshly_made_square_sandwich 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6966 Prison_key A_key_to_the_prison. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6967 Waste_disposal Gets_rid_of_all_that_nasty_kitchen_waste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6968 Waste_disposal Gets_rid_of_all_that_nasty_kitchen_waste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6969 Waste_disposal Gets_rid_of_all_that_nasty_kitchen_waste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6970 Pyramid_top It's_a_solid_gold_pyramid! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6971 Sandstone_(1kg) A_tiny_chunk_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6972 Sandstone_(1kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6973 Sandstone_(2kg) A_small_chunk_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6974 Sandstone_(2kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6975 Sandstone_(5kg) A_medium-sized_chunk_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6976 Sandstone_(5kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6977 Sandstone_(10kg) A_large_chunk_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6978 Sandstone_(10kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6979 Granite_(500g) A_tiny_chunk_of_granite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6980 Granite_(500g) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6981 Granite_(2kg) A_small_chunk_of_granite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6982 Granite_(2kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6983 Granite_(5kg) A_medium-sized_chunk_of_granite. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6984 Granite_(5kg) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6985 Sandstone_(20kg) A_huge_twenty-kilo_block_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6986 Sandstone_(32kg) A_huge_thirty-two-kilo_block_of_sandstone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6987 Sandstone_body The_body_of_a_sandstone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6988 Sandstone_base The_base_and_legs_of_a_sandstone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6989 Stone_head A_granite_head_shaped_like_the_sculptor_Lazim. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6990 Stone_head A_granite_head_shaped_like_the_god_Zamorak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6991 Stone_head A_granite_head_shaped_like_the_god_Icthlarin. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6992 Stone_head A_granite_head_shaped_like_a_camel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6993 Z_sigil A_metal_sigil_in_the_shape_of_a_Z. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6994 M_sigil A_metal_sigil_in_the_shape_of_an_M. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6995 R_sigil A_metal_sigil_in_the_shape_of_an_R. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6996 K_sigil A_metal_sigil_in_the_shape_of_a_K. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6997 Stone_left_arm The_left_arm_of_a_large_stone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6998 Stone_right_arm The_right_arm_of_a_large_stone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6999 Stone_left_leg The_left_leg_of_a_large_stone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7000 Stone_right_leg The_right_leg_of_a_large_stone_statue. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7001 Camel_mould_(p) A_positive_clay_mould_of_a_camel's_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7002 Stone_head A_granite_head_that_will_fit_exactly_into_the_pedestal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7003 Camel_mask Blend_in_in_the_desert. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7004 Chisel For_chipping_at_stuff. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7050 Swarm A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7051 Unlit_bug_lantern A_lantern_to_aid_attacking_Harpie_bugs. 130 130 130 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7052 Unlit_bug_lantern Swap_this_note_at_any_bank_for_the_equivalent_item. 130 130 130 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7053 Lit_bug_lantern A_lantern_to_aid_attacking_Harpie_bugs. 130 130 130 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7054 Chilli_potato A_baked_potato_with_chilli_con_carne. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7055 Chilli_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7056 Egg_potato A_baked_potato_with_egg_and_tomato. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7057 Egg_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7058 Mushroom_potato A_baked_potato_with_mushroom_and_onions. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7059 Mushroom_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7060 Tuna_potato A_baked_potato_with_tuna_and_sweetcorn. 113 113 113 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7061 Tuna_potato Swap_this_note_at_any_bank_for_the_equivalent_item. 113 113 113 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7062 Chilli_con_carne A_bowl_of_meat_in_chilli-con-carne_sauce. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7063 Chilli_con_carne Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7064 Egg_and_tomato A_bowl_of_scrambled_eggs_and_tomato. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7065 Egg_and_tomato Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7066 Mushroom_&_onion A_bowl_of_fried_mushroom_and_onions. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7067 Mushroom_&_onion Swap_this_note_at_any_bank_for_the_equivalent_item&_onion. 45 45 45 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7068 Tuna_and_corn A_bowl_of_cooked_tuna_and_sweetcorn. 113 113 113 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7069 Tuna_and_corn Swap_this_note_at_any_bank_for_the_equivalent_item. 113 113 113 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7070 Minced_meat A_bowl_of_finely_minced_meat. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7071 Minced_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7072 Spicy_sauce A_bowl_of_spicy_sauce. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7073 Spicy_sauce Swap_this_note_at_any_bank_for_the_equivalent_item. 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7074 Chopped_garlic A_bowl_of_chopped_garlic. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7075 Chopped_garlic Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7076 Uncooked_egg A_bowl_of_uncooked_egg. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7077 Uncooked_egg Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7078 Scrambled_egg A_bowl_of_scrambled_egg. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7079 Scrambled_egg Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7080 Sliced_mushrooms A_bowl_of_sliced_Bittercap_mushrooms. 42 42 42 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7081 Sliced_mushrooms Swap_this_note_at_any_bank_for_the_equivalent_item. 42 42 42 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7082 Fried_mushrooms A_bowl_of_fried_Bittercap_mushrooms. 42 42 42 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7083 Fried_mushrooms Swap_this_note_at_any_bank_for_the_equivalent_item. 42 42 42 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7084 Fried_onions A_bowl_of_sliced,_fried_onions. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7085 Fried_onions Swap_this_note_at_any_bank_for_the_equivalent_item. 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7086 Chopped_tuna A_bowl_of_finely_chopped_tuna. 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7087 Chopped_tuna Swap_this_note_at_any_bank_for_the_equivalent_item. 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7088 Sweetcorn A_bowl_of_cooked_sweetcorn. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7089 Sweetcorn Swap_this_note_at_any_bank_for_the_equivalent_item. 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7090 Burnt_egg A_bowl_of_burnt,_overcooked_egg. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7091 Burnt_egg Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7092 Burnt_onion A_bowl_of_blackened_onions. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7093 Burnt_onion Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7094 Burnt_mushroom A_bowl_of_burnt_sliced_mushroom. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7095 Burnt_mushroom Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7096 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7097 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7098 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7099 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7100 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7101 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7102 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7103 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7104 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7105 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7106 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7107 Board_game_piece A_piece_used_in_board_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7108 Gunpowder Best_keep_this_away_from_naked_flames. 52 52 52 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7109 Fuse Burns_very_well. 52 52 52 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7110 Stripy_pirate_shirt A_sea_worthy_shirt. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7111 Stripy_pirate_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7112 Pirate_bandanna Essential_pirate_wear. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7113 Pirate_bandanna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7114 Pirate_boots Not_for_land_lubbers. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7115 Pirate_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7116 Pirate_leggings A_sea_worthy_pair_of_trousers. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7117 Pirate_leggings Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7118 Cannister A_cannister_holding_shrapnel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7119 Cannon_ball A_heavy_metal_ball. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7120 Ramrod For_cleaning_and_packing_the_cannon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7121 Repair_plank Quite_short,_but_not_that_thick. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7122 Stripy_pirate_shirt A_sea_worthy_shirt. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7123 Stripy_pirate_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7124 Pirate_bandanna Essential_pirate_wear. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7125 Pirate_bandanna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7126 Pirate_leggings A_sea_worthy_pair_of_trousers. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7127 Pirate_leggings Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7128 Stripy_pirate_shirt A_sea_worthy_shirt. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7129 Stripy_pirate_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7130 Pirate_bandanna Essential_pirate_wear. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7131 Pirate_bandanna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7132 Pirate_leggings A_sea_worthy_pair_of_trousers. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7133 Pirate_leggings Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7134 Stripy_pirate_shirt A_sea_worthy_shirt. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7135 Stripy_pirate_shirt Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7136 Pirate_bandanna Essential_pirate_wear. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7137 Pirate_bandanna Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7138 Pirate_leggings A_sea_worthy_pair_of_trousers. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7139 Pirate_leggings Swap_this_note_at_any_bank_for_the_equivalent_item. 350 350 350 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7140 Lucky_cutlass Feels_quite_lucky. 2560 2560 2560 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7141 Harry's_cutlass I_hope_he_doesn't_want_it_back. 1040 1040 1040 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7142 Rapier The_very_butcher_of_a_silk_button. 25600 25600 25600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7143 Plunder Looks_valuable. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7144 Book_o'_piracy By_Cap'n_Hook-Hand_Morrisane. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7145 Cannon_barrel A_working_cannon_barrel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7146 Broken_cannon Not_likely_to_work_again. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7147 Cannon_balls Some_cannon_balls. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7148 Repair_plank A_plank_of_wood_to_repair_the_hull_with. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7149 Cannister A_cannister_holding_shrapnel. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7150 Tacks Useful_for_pinning_up_paintings. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7155 Rope A_coil_of_rope. 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7156 Tinderbox Useful_for_lighting_a_fire. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7157 Braindeath_'rum' I_think_it_is_eating_through_the_bottle. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7158 Dragon_2h_sword A_two-handed_Dragon_Sword. 88000 132000 0 -4 92 80 -4 0 0 0 0 0 -1 93 0 +item = 7159 Slayer_boots They're_heavily_insulated_wellies. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7160 Killerwatt A_slayer_monster 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7161 Slayer_boots Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7162 Pie_recipe_book Lots_of_pie_recipes_for_me_to_try. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7163 Pie_recipe_book Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7164 Part_mud_pie Still_needs_two_more_ingredients. 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7165 Part_mud_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7166 Part_mud_pie Still_needs_one_more_ingredient. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7167 Part_mud_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 26 26 26 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7168 Raw_mud_pie Needs_to_be_baked_before_I_can_use_it. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7169 Raw_mud_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7170 Mud_pie All_the_good_of_the_earth. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7171 Mud_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7172 Part_garden_pie Still_needs_two_more_ingredients. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7173 Part_garden_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7174 Part_garden_pie Still_needs_one_more_ingredient. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7175 Part_garden_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7176 Raw_garden_pie Needs_cooking_before_I_eat_it. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7177 Raw_garden_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7178 Garden_pie What_I_wouldn't_give_for_a_good_steak_about_now... 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7179 Garden_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7180 Half_a_garden_pie What_I_wouldn't_give_for_a_good_steak_about_now... 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7181 Half_a_garden_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7182 Part_fish_pie Still_needs_two_more_ingredients. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7183 Part_fish_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7184 Part_fish_pie Still_needs_one_more_ingredient. 49 49 49 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7185 Part_fish_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 49 49 49 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7186 Raw_fish_pie Raw_fish_is_risky,_better_cook_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7187 Raw_fish_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7188 Fish_pie Bounty_of_the_sea. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7189 Fish_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7190 Half_a_fish_pie Bounty_of_the_sea. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7191 Half_a_fish_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7192 Part_admiral_pie Still_needs_two_more_ingredients. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7193 Part_admiral_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 54 54 54 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7194 Part_admiral_pie Still_needs_one_more_ingredient. 154 154 154 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7195 Part_admiral_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 154 154 154 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7196 Raw_admiral_pie This_would_taste_a_lot_better_cooked. 155 155 155 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7197 Raw_admiral_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 155 155 155 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7198 Admiral_pie Much_tastier_than_a_normal_fish_pie. 310 310 310 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7199 Admiral_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 310 310 310 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7200 Half_a_admiral_pie Much_tastier_than_a_normal_fish_pie. 155 155 155 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7201 Half_a_admiral_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 155 155 155 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7202 Part_wild_pie Still_needs_two_more_ingredients. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7203 Part_wild_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7204 Part_wild_pie Still_needs_one_more_ingredient. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7205 Part_wild_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7206 Raw_wild_pie Good_as_it_looks,_I'd_better_cook_it. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7207 Raw_wild_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7208 Wild_pie A_triumph_of_man_over_nature. 182 182 182 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7209 Wild_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 182 182 182 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7210 Half_a_wild_pie A_triumph_of_man_over_nature. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7211 Half_a_wild_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7212 Part_summer_pie Still_needs_two_more_ingredients. 21 21 21 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7213 Part_summer_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 21 21 21 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7214 Part_summer_pie Still_needs_one_more_ingredient. 69 69 69 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7215 Part_summer_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 69 69 69 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7216 Raw_summer_pie Fresh_fruit_may_be_good_for_you,_but_I_should_really_cook_this. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7217 Raw_summer_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7218 Summer_pie All_the_fruits_of_a_very_small_forest. 140 140 140 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7219 Summer_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 140 140 140 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7220 Half_a_summer_pie All_the_fruits_of_a_very_small_forest. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7221 Half_a_summer_pie Swap_this_note_at_any_bank_for_the_equivalent_item. 70 70 70 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7222 Burnt_rabbit This_could_be_mistaken_for_charcoal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7223 Roast_rabbit A_delicious_looking_piece_of_roast_rabbit. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7224 Skewered_rabbit All_ready_to_be_used_on_a_fire. 84 84 84 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7225 Iron_spit An_iron_spit. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7226 Burnt_chompy Overly_crispy_chompy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7227 Burnt_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7228 Cooked_chompy Roasted_chompy_bird. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7229 Cooked_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7230 Skewered_chompy A_skewered_chompy_bird. 149 149 149 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7231 Burnt_rabbit Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7232 Roast_rabbit Swap_this_note_at_any_bank_for_the_equivalent_item. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7233 Skewered_rabbit Swap_this_note_at_any_bank_for_the_equivalent_item. 84 84 84 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7234 Iron_spit Swap_this_note_at_any_bank_for_the_equivalent_item. 64 64 64 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7235 Skewered_chompy Swap_this_note_at_any_bank_for_the_equivalent_item. 149 149 149 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7236 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7237 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7238 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7239 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7240 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7241 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7242 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7243 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7244 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7245 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7246 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7247 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7248 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7249 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7250 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7251 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7252 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7253 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7254 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7255 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7256 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7257 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7258 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7259 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7260 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7261 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7262 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7263 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7264 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7265 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7266 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7267 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7268 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7269 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7270 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7271 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7272 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7273 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7274 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7275 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7276 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7277 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7278 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7279 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7280 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7281 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7282 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7283 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7284 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7285 Challenge_scroll I_need_to_answer_this_correctly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7286 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7287 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7288 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7289 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7290 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7291 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7292 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7293 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7294 Clue_scroll Part_of_the_world_map,_but_where? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7295 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7296 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7297 Key A_key_to_a_chest. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7298 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7299 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7300 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7301 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7302 Key A_key_to_some_drawers. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7303 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7304 Clue_scroll A_clue! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7305 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7306 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7307 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7308 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7309 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7310 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7311 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7312 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7313 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7314 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7315 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7316 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7317 Clue_scroll Perhaps_someone_at_the_observatory_can_teach_me_to_navigate? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7318 Casket I_hope_there's_treasure_in_it. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7319 Red_boater Stylish! 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7320 Red_boater Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7321 Orange_boater Stylish! 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7322 Orange_boater Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7323 Green_boater Stylish! 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7324 Green_boater Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7325 Blue_boater Stylish! 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7326 Blue_boater Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7327 Black_boater Stylish! 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7328 Black_boater Swap_this_note_at_any_bank_for_the_equivalent_item. 225 225 225 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7329 Red_firelighter Makes_firelighting_lots_easier 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7330 Green_firelighter Makes_firelighting_lots_easier 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7331 Blue_firelighter Makes_firelighting_lots_easier 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7332 Black_kiteshield(h) A_shield_with_a_heraldic_design 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 7333 Black_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7334 Adam_kiteshield(h) A_shield_with_a_heraldic_design 2176 3264 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 7335 Adam_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7336 Rune_kiteshield(h) A_shield_with_a_heraldic_design 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 7337 Rune_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7338 Black_kiteshield(h) A_shield_with_a_heraldic_design 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 7339 Black_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7340 Adam_kiteshield(h) A_shield_with_a_heraldic_design 2176 3264 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 7341 Adam_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7342 Rune_kiteshield(h) A_shield_with_a_heraldic_design 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 7343 Rune_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7344 Black_kiteshield(h) A_shield_with_a_heraldic_design 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 7345 Black_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7346 Adam_kiteshield(h) A_shield_with_a_heraldic_design 2176 3264 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 7347 Adam_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7348 Rune_kiteshield(h) A_shield_with_a_heraldic_design 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 7349 Rune_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7350 Black_kiteshield(h) A_shield_with_a_heraldic_design 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 7351 Black_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7352 Adam_kiteshield(h) A_shield_with_a_heraldic_design 2176 3264 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 7353 Adam_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7354 Rune_kiteshield(h) A_shield_with_a_heraldic_design 14080 21120 0 0 0 0 -8 -2 44 48 46 -1 46 0 0 +item = 7355 Rune_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7356 Black_kiteshield(h) A_shield_with_a_heraldic_design 653 1272 0 0 0 0 -8 -2 17 19 18 -1 18 0 0 +item = 7357 Black_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 653 1272 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7358 Adam_kiteshield(h) A_shield_with_a_heraldic_design 2176 3264 0 0 0 0 -8 -2 21 31 29 -1 29 0 0 +item = 7359 Adam_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 2176 3264 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7360 Rune_kiteshield(h) A_shield_with_a_heraldic_design 14080 21120 0 0 0 0 -8 -2 -44 -48 46 -1 46 0 0 +item = 7361 Rune_kiteshield(h) Swap_this_note_at_any_bank_for_the_equivalent_item. 14080 21120 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7362 Studded_body_(g) Those_studs_should_provide_a_bit_more_protection,_nice_trim_too! 850 850 850 0 0 0 -4 8 18 25 22 8 25 0 0 +item = 7363 Studded_body_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 850 850 850 0 0 0 0 0 -4 8 18 25 22 8 25 +item = 7364 Studded_body_(t) Those_studs_should_provide_a_bit_more_protection,_nice_trim_too! 850 850 850 0 0 0 -4 8 18 25 22 8 25 0 0 +item = 7365 Studded_body_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 850 850 850 0 0 0 0 0 -4 8 18 25 22 8 25 +item = 7366 Studded_chaps_(g) Those_studs_should_provide_a_bit_more_protection._Nice_trim_too! 750 750 750 0 0 0 -4 8 18 25 22 8 25 0 0 +item = 7367 Studded_chaps_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 -4 8 18 25 22 8 25 +item = 7368 Studded_chaps_(t) Those_studs_should_provide_a_bit_more_protection._Nice_trim_too! 750 750 750 0 0 0 -4 8 18 25 22 8 25 0 0 +item = 7369 Studded_chaps_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 750 750 750 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7370 D-hide_body(g) Made_from_100%_real_dragonhide._With_colourful_trim! 7800 7800 7800 0 0 0 -15 15 40 32 45 20 40 0 0 +item = 7371 D-hide_body(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 7800 7800 7800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7372 D-hide_body_(t) Made_from_100%_real_dragonhide._With_colourful_trim! 7800 7800 7800 0 0 0 -15 15 40 32 45 20 40 0 0 +item = 7373 D-hide_body_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 7800 7800 7800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7374 D-hide_body_(g) Made_from_100%_real_dragonhide._With_colourful_trim! 9360 9360 9360 0 0 0 -15 20 45 37 50 30 45 0 0 +item = 7375 D-hide_body_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 9360 9360 9360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7376 D-hide_body_(t) Made_from_100%_real_dragonhide._With_colourful_trim! 9360 9360 9360 0 0 0 -15 20 45 37 50 30 45 0 0 +item = 7377 D-hide_body_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 9360 9360 9360 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7378 D-hide_chaps_(g) Made_from_100%_real_dragonhide._With_colourful_trim! 1560 2340 0 0 0 0 -10 8 22 16 24 8 22 0 0 +item = 7379 D-hide_chaps_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 1560 2340 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7380 D-hide_chaps_(t) Made_from_100%_real_dragonhide._With_colourful_trim! 1560 2340 0 0 0 0 -10 8 22 16 24 8 22 0 0 +item = 7381 D-hide_chaps_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 1560 2340 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7382 D-hide_chaps_(g) Made_from_100%_real_dragonhide._With_colourful_trim! 1728 2592 0 0 0 0 -10 11 25 19 27 14 25 0 0 +item = 7383 D-hide_chaps_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 1728 2592 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7384 D-hide_chaps_(t) Made_from_100%_real_dragonhide._With_colourful_trim! 1728 2592 0 0 0 0 -10 11 25 19 27 14 25 0 0 +item = 7385 D-hide_chaps_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 1728 2592 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7386 Blue_skirt_(g) Leg_covering_favoured_by_women_and_wizards._With_a_colourful_trim! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7387 Blue_skirt_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7388 Blue_skirt_(t) Leg_covering_favoured_by_women_and_wizards._With_a_colourful_trim! 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7389 Blue_skirt_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7390 Wizard_robe_(g) I_can_do_magic_better_in_this. 15 15 15 0 0 0 3 0 0 0 0 3 0 0 0 +item = 7391 Wizard_robe_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7392 Wizard_robe_(t) I_can_do_magic_better_in_this. 15 15 15 0 0 0 3 0 0 0 0 3 0 0 0 +item = 7393 Wizard_robe_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7394 Wizard_hat_(g) A_silly_pointed_hat,_with_colourful_trim. 2 2 2 0 0 0 2 0 0 0 0 2 0 0 0 +item = 7395 Wizard_hat_(g) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7396 Wizard_hat_(t) A_silly_pointed_hat,_with_colourful_trim. 2 2 2 0 0 0 2 0 0 0 0 2 0 0 0 +item = 7397 Wizard_hat_(t) Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7398 Enchanted_bottoms Enchanted_Wizards_robes. 800 800 800 0 0 0 15 0 0 0 0 15 0 0 0 +item = 7399 Enchanted_top Enchanted_Wizards_robes. 1200 1200 1200 0 0 0 20 0 0 0 0 20 0 0 0 +item = 7400 Enchanted_hat A_three_pointed_hat_of_magic. 1500 1500 1500 0 0 0 4 0 0 0 0 4 0 0 0 +item = 7401 Enchanted_bottoms Swap_this_note_at_any_bank_for_the_equivalent_item. 800 800 800 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7402 Enchanted_top Swap_this_note_at_any_bank_for_the_equivalent_item. 1200 1200 1200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7403 Enchanted_hat Swap_this_note_at_any_bank_for_the_equivalent_item. 150 1500 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7404 Red_logs A_number_of_chemical_covered_wooden_logs. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7405 Green_logs A_number_of_chemical_covered_wooden_logs. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7406 Blue_logs A_number_of_chemical_covered_wooden_logs. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7407 Dragon_2h_sword Swap_this_note_at_any_bank_for_the_equivalent_item. 88000 132000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7408 Draynor_skull I_shouldn't_joke,_this_is_a_grave_matter. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7409 Magic_secateurs The_only_way_to_kill_a_Tanglefoot. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7410 Queen's_secateurs Contains_the_Fairy_Queen's_magic_essence. 1 1 1 7 9 -5 1 0 0 1 0 1 0 1 0 +item = 7411 Symptoms_list A_list_of_the_Fairy_Queen's_symptoms. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7413 Bird_nest It's_a_bird's_nest_with_some_seeds_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7414 Paddle With_it,_you_row. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7415 Paddle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7416 Mole_claw A_mole_claw. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7417 Mole_claw Swap_this_note_at_any_bank_for_the_equivalent_item. 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7418 Mole_skin The_skin_of_a_large_mole. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7419 Mole_skin Swap_this_note_at_any_bank_for_the_equivalent_item. 400 400 400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7420 Mutated_zygomite A_slayer_monster. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7421 Fungicide_spray_10 Pumps_fungicide. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7422 Fungicide_spray_9 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7423 Fungicide_spray_8 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7424 Fungicide_spray_7 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7425 Fungicide_spray_6 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7426 Fungicide_spray_5 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7427 Fungicide_spray_4 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7428 Fungicide_spray_3 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7429 Fungicide_spray_2 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7430 Fungicide_spray_1 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7431 Fungicide_spray_0 Pumps_fungicide. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7432 Fungicide Does_exactly_what_it_says_on_the_tin._(Kills_Fungi.) 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7433 Wooden_spoon Spoooooon! 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7434 Wooden_spoon Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7435 Egg_whisk A_large_whisk_of_death. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7436 Egg_whisk Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7437 Spork Use_the_spork. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7438 Spork Swap_this_note_at_any_bank_for_the_equivalent_item. 325 325 325 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7439 Spatula A_large_spatula..._of_doom! 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7440 Spatula Swap_this_note_at_any_bank_for_the_equivalent_item. 768 1152 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7441 Frying_pan Looks_like_it's_non-stick_too! 1660 1660 1660 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7442 Frying_pan Swap_this_note_at_any_bank_for_the_equivalent_item. 1660 1660 1660 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7443 Skewer Generally_used_for_impaling_fresh_meat. 3200 3200 3200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7444 Skewer Swap_this_note_at_any_bank_for_the_equivalent_item. 3200 3200 3200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7445 Rolling_pin That's_how_I_roll! 14400 14400 14400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7446 Rolling_pin Swap_this_note_at_any_bank_for_the_equivalent_item. 14400 14400 14400 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7447 Kitchen_knife A_sharp,_dependable_knife,_for_filleting_meat. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7448 Kitchen_knife Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7449 Meat_tenderiser Often_used_to_soften_tough_meat_up. 41500 41500 41500 000 000 000 000 000 000 000 000 000 000 000 000 +item = 7450 Meat_tenderiser Swap_this_note_at_any_bank_for_the_equivalent_item. 41500 41500 41500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7451 Cleaver An_effective_tool_for_chopping_tough_meat. 25600 25600 25600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7452 Cleaver Swap_this_note_at_any_bank_for_the_equivalent_item. 25600 25600 25600 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7453 Donkey_Gloves A_pair_of_gloves. 50 50 50 2 2 2 1 2 2 2 2 1 2 2 0 +item = 7454 Bronze_Gloves A_pair_of_gloves. 100 100 100 2 2 2 1 2 2 2 2 1 2 2 0 +item = 7455 Gloves A_pair_of_gloves. 250 250 250 3 3 3 2 3 3 3 3 2 3 3 0 +item = 7456 Gloves A_pair_of_gloves. 500 500 500 4 4 4 2 4 4 4 4 2 4 4 0 +item = 7457 Gloves A_pair_of_nice_gloves. 1000 1000 0 5 5 5 3 5 5 5 5 3 5 5 0 +item = 7458 Gloves A_pair_of_nice_gloves. 1500 1500 0 6 6 6 3 6 6 6 6 3 6 6 0 +item = 7459 Gloves A_pair_of_nice_gloves. 2500 2500 0 7 7 7 4 7 7 7 7 4 7 7 0 +item = 7460 Gloves A_pair_of_very_nice_gloves. 5000 5000 0 8 8 8 4 8 8 8 8 4 8 8 0 +item = 7461 Gloves A_pair_of_very_nice_gloves. 100000 100000 0 9 9 9 5 9 9 9 9 5 9 9 0 +item = 7462 Gloves A_pair_of_very_nice_gloves. 45000 60000 0 12 12 12 6 12 12 12 12 6 12 12 0 +item = 7463 Cornflour A_little_heap_of_cornflour. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7464 Book_on_chickens A_tatty_old_book_belonging_to_the_Wise_Old_Man_of_Draynor_Village. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7465 Vanilla_pod Surprise,_it_looks_like_a_vanilla_pod. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7466 Cornflour It's_cornflour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7467 Cornflour Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7468 Pot_of_cornflour It's_cornflour_in_a_pot. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7469 Pot_of_cornflour Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7470 Cornflour_mixture A_mixture_of_milk,_cream_and_cornflour. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7471 Milky_mixture It's_a_bucket_of_milk_and_cream. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7472 Cinnamon Some_cinnamon_sticks. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7473 Brulee It's_just_missing_a_sprinkling_of_cinnamon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7474 Brulee A_pot_of_brulee_mixture_-_needs_egg. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7475 Brulee Perfect,_it_just_needs_flambeing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7476 Brulee_supreme A_pot_of_brulee_supreme. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7477 Evil_chicken's_egg What_came_first,_the_chicken_or... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7478 Dragon_token It's_got_a_dragon_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7479 Spicy_stew It's_a_meat_and_potato_stew_with_fancy_seasoning. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7480 Red_spice_(4) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7481 Red_spice_(3) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7482 Red_spice_(2) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7483 Red_spice_(1) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7484 Orange_spice_(4) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7485 Orange_spice_(3) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7486 Orange_spice_(2) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7487 Orange_spice_(1) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7488 Brown_spice_(4) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7489 Brown_spice_(3) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7490 Brown_spice_(2) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7491 Brown_spice_(1) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7492 Yellow_spice_(4) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7493 Yellow_spice_(3) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7494 Yellow_spice_(2) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7495 Yellow_spice_(1) Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7496 Empty_spice_shaker Allows_for_equal_distribution_of_spice. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7497 Dirty_blast A_cool_refreshing_fruit_mix._With_ash_in_for_some_reason. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7498 Antique_lamp I_wonder_what_happens_if_I_rub_it... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7499 Evil_dave Evil_Dave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7500 Dwarf It's_a_Dwarf. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7501 Goblins Still_arguing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7502 Lumbridge_guide A_helpful_man. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7503 Monkey The_monkey_King. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7504 Osman From_the_desert. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7505 Pirate_pete AARGH. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7506 Sir_amik_varze The_whitest_of_knights. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7507 Skrach Huge_and_dumb. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7508 Asgarnian_ale_(g) There_appears_to_be_a_coin_in_the_bottom._Liked_by_dwarves. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7509 Dwarven_rock_cake Red_hot_and_glowing,_ouch!_Only_for_dwarf_consumption. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7510 Dwarven_rock_cake Cool_and_heavy_as_a_brick._Only_for_dwarf_consumption. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7511 Slop_of_compromise Two_out_of_two_goblin_generals_prefer_it! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7512 Soggy_bread Previously_a_nice_crispy_loaf_of_bread.__Now_just_kind_of_icky. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7513 Spicy_maggots They_clearly_taste_so_much_better_this_way! 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7514 Dyed_orange Orange_slices_which_have_been_dyed,_but_it_looks_more_like_they_died. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7515 Breadcrumbs Glad_these_aren't_in_my_bed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7516 Kelp Slightly_damp_seaweed. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7517 Ground_kelp Kelp_flakes._Smells_of_the_sea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7518 Crab_meat A_smelly_meat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7519 Crab_meat A_smelly_meat. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7520 Burnt_crab_meat Oh_dear,_it's_burnt. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7521 Cooked_crab_meat Nice_and_tasty! 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7522 Cooked_crab_meat Swap_this_note_at_any_bank_for_the_equivalent_item. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7523 Cooked_crab_meat Nice_and_tasty! 40 40 40 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7524 Cooked_crab_meat Nice_and_tasty! 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7525 Cooked_crab_meat Nice_and_tasty! 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7526 Cooked_crab_meat Nice_and_tasty! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7527 Ground_crab_meat A_smelly_paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7528 Ground_cod A_smelly_paste. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7529 Raw_fishcake Would_taste_nicer_if_I_cooked_it. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7530 Cooked_fishcake Mmmm,_reminds_me_of_the_seaside. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7531 Burnt_fishcake Darn_thing's_all_burnt! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7532 Mudskipper_hide Hmmm,_what_can_I_use_this_for? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7533 Rock A_rock. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7534 Fishbowl_helmet You'll_look_daft,_but_at_least_you_won't_drown! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7535 Diving_apparatus I'll_need_a_helmet_to_make_this_work. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7536 Fresh_crab_claw Fresh_off_the_crab_itself. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7537 Crab_claw If_it's_good_enough_for_crabs,_it's_good_enough_for_me! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7538 Fresh_crab_shell Fresh_off_the_crab_itself. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7539 Crab_helmet If_it's_good_enough_for_crabs,_it's_good_enough_for_me! 1 1 1 0 0 0 -3 -1 4 5 3 -1 0 0 0 +item = 7540 Broken_crab_claw Darn,_it's_useless_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7541 Broken_crab_shell Darn,_it's_useless_now. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7542 Cake_of_guidance Imbued_with_knowledge_itself. 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7543 Raw_guide_cake Now_all_I_need_to_do_is_cook_it. 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7544 Enchanted_egg Egg_containing_knowledge. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7545 Enchanted_milk Guiding_milk. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7546 Enchanted_flour A_pot_of_special_flour. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7547 Druid_pouch A_druid_pouch. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7548 Potato_seed A_potato_seed_-_plant_in_an_allotment. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7549 Potato_seed Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7550 Onion_seed An_onion_seed_-_plant_in_an_allotment. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7551 Onion_seed Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7552 Mithril_arrow Arrows_with_mithril_heads. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7553 Mithril_arrow Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7554 Fire_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7555 Fire_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7556 Water_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7557 Water_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7558 Air_rune One_of_the_4_basic_elemental_Runes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7559 Air_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7560 Chaos_rune Used_for_low_level_missile_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7561 Chaos_rune Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7562 Tomato_seed A_tomato_seed_-_plant_in_an_allotment. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7563 Tomato_seed Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7564 Balloon_toad An_inflated_toad_tied_to_a_rock_like_a_balloon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7565 Balloon_toad An_inflated_toad_tied_to_a_rock_like_a_balloon. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7566 Raw_jubbly The_uncooked_meat_of_a_Jubbly_bird. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7567 Raw_jubbly Swap_this_note_at_any_bank_for_the_equivalent_item. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7568 Cooked_jubbly Lovely_Jubbly! 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7569 Cooked_jubbly Swap_this_note_at_any_bank_for_the_equivalent_item. 150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7570 Burnt_jubbly The_burnt_meat_of_a_Jubbly_bird. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7571 Burnt_jubbly Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7572 Red_banana Like_a_banana_only_redder. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7573 Tchiki_monkey_nuts Like_Monkey_Nuts_only_Tchikier. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7574 Sliced_red_banana Perfect_for_stuffing_snakes. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7575 Tchiki_nut_paste Mixing_this_with_jam_would_just_be_wrong. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7576 Snake_corpse Like_a_snake_only_not_alive. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7577 Raw_stuffed_snake This_snake_is_stuffed_right_up. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7578 Odd_stuffed_snake Is_this_really_what_you_wanted_to_do? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7579 Stuffed_snake Fit_for_a_Monkey_King. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7580 Snake_over-cooked It's_a_burnt_snake. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7581 Overgrown_hellcat Your_hellish_pet_cat!! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7582 Hell_cat Your_hellish_pet_cat!! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7583 Hell-kitten Your_hellish_pet_cat!! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7584 Lazy_hell_cat Your_hellish_pet_cat!! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7585 Wily_hellcat Your_hellish_pet_cat!! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7586 Dummy All_is_white! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7587 Coffin Filled_with_items._Like_a_bank,_but_spookier! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7588 Coffin Filled_with_items._Like_a_bank,_but_spookier! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7589 Coffin Filled_with_items._Like_a_bank,_but_spookier! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7590 Coffin Filled_with_items._Like_a_bank,_but_spookier! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7591 Coffin Filled_with_items._Like_a_bank,_but_spookier! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7592 Zombie_shirt Aside_from_the_braaaains_on_the_lapel,_it's_still_quite_good. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7593 Zombie_trousers Good_for_a_shamble_about_town. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7594 Zombie_mask I_look_40,000_years_old_in_this... 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7595 Zombie_gloves Smells_pretty_funky. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7596 Zombie_boots Thrilling. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7597 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7598 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7599 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7600 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7601 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7602 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7603 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7604 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7605 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7606 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7607 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7608 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7609 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7610 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7611 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7612 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7613 Item It_seems_bleached_with_age. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7614 Item Its_a_symbol. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7615 Item Its_a_symbol. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7616 Item Its_a_symbol. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7617 Item Its_a_symbol. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7618 Item Its_a_symbol. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7620 Silvthrill_rod A_rod_made_from_Silver_and_Mithril. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7622 Bucket_of_rubble A_bucket_partially_filled_with_rubble. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7623 Bucket_of_rubble Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7624 Bucket_of_rubble A_bucket_almost_full_of_rubble. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7625 Bucket_of_rubble Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7626 Bucket_of_rubble A_bucket_totally_filled_with_rubble. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7627 Bucket_of_rubble Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7628 Plaster_fragment A_frament_of_plaster_with_some_impressions_on_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7629 Dusty_scroll An_ancient_tattered_scroll. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7630 Crate An_old_and_musty_looking_crate. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7631 Crate Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7632 Temple_library_key A_key_for_the_Temple_Library. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7633 Ancient_book A_book_about_seven_warrior_priests,_written_about_200_years_ago. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7634 Battered_tome An_ancient_history_book. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7635 Leather_book An_ancient_leather-bound_tome. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7636 Rod_dust Rod_of_Ivandis_dust. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7637 Silvthrill_rod A_silvery_rod_of_mithril_and_silver_with_a_sapphire_on_the_top. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7638 Silvthrill_rod A_silvery_rod_of_mithril_and_silver_with_a_sapphire_on_the_top,_it_has_been_enchanted. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7639 Rod_of_ivandis(10) A_fully_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7640 Rod_of_ivandis(9) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7641 Rod_of_ivandis(8) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7642 Rod_of_ivandis(7) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7643 Rod_of_ivandis(6) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7644 Rod_of_ivandis(5) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7645 Rod_of_ivandis(4) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7646 Rod_of_ivandis(3) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7647 Rod_of_ivandis(2) 2!_2_charges_left!_Ha_Ha_Ha. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7648 Rod_of_ivandis(1) A_partially_charged_rod. 1000 1000 1000 0 -1 7 4 0 2 3 1 4 0 3 0 +item = 7649 Rod_clay_mould Rod_of_Ivandis_mould. 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7650 Silver_dust It's_ground_up_silver. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7651 Silver_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 8000 8000 8000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7652 Guthix_balance(unf) An_unfinished_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7653 Guthix_balance(unf) Swap_this_note_at_any_bank_for_the_equivalent_item 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7654 Guthix_balance(unf) An_unfinished_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7655 Guthix_balance(unf) Swap_this_note_at_any_bank_for_the_equivalent_item 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7656 Guthix_balance(unf) An_unfinished_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7657 Guthix_balance(unf) Swap_this_note_at_any_bank_for_the_equivalent_item 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7658 Guthix_balance(unf) An_unfinished_potion. 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7659 Guthix_balance(unf) Swap_this_note_at_any_bank_for_the_equivalent_item 110 110 110 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7660 Guthix_balance(4) A_potion_of_harralander,_red_spiders_eggs,_garlic_and_silver_dust. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7661 Guthix_balance(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7662 Guthix_balance(3) A_potion_of_harralander,_red_spiders_eggs,_garlic_and_silver_dust. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7663 Guthix_balance(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7664 Guthix_balance(2) A_potion_of_harralander,_red_spiders_eggs,_garlic_and_silver_dust. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7665 Guthix_balance(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7666 Guthix_balance(1) A_potion_of_harralander,_red_spiders_eggs,_garlic_and_silver_dust. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7667 Guthix_balance(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 200 200 200 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7668 Gadderhammer A_specially_crafted_hammer_with_strange_markings_on_it. 3000 3000 3000 -4 -4 35 -4 0 0 0 0 0 0 35 0 +item = 7669 Gadderhammer Swap_this_note_at_any_bank_for_the_equivalent_item. 3000 3000 3000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7671 Boxing_gloves I_think_they_look_a_bit_silly. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7672 Boxing_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7673 Boxing_gloves I_think_they_look_a_bit_silly. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7674 Boxing_gloves Swap_this_note_at_any_bank_for_the_equivalent_item. 75 75 75 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7675 Wooden_sword A_less-than_razor_sharp_sword. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7676 Wooden_shield A_less-than_strong_shield. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7677 Magic_stone It_knows_where_the_treasure_is. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7678 Prize_key You_can_use_this_to_open_the_prize_chest! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7679 Pugel A_good_tool_for_bashing_someone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7680 Pugel Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7681 Game_book Party_Pete's_Bumper_Book_Of_Games 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7682 Hoop Try_to_throw_it_over_the_stick. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7683 Hoop Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7684 Dart Not_much_good_in_combat,_but_perfect_for_the_dart_board! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7685 Dart Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7686 Bow_and_arrow A_safe_arrow_for_indoor_ranging_games. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7687 Bow_and_arrow Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7688 Kettle The_kettle_is_empty 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7689 Kettle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7690 Full_kettle It's_full_of_cold_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7691 Hot_kettle It's_full_of_boiling_water. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7692 Pot_of_tea_4 I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7693 Pot_of_tea_4 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7694 Pot_of_tea_3 I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7695 Pot_of_tea_3 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7696 Pot_of_tea_2 I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7697 Pot_of_tea_2 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7698 Pot_of_tea_1 I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7699 Pot_of_tea_1 Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7700 Teapot_with_leaves Add_boiling_water_to_make_a_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7701 Teapot_with_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7702 Teapot This_teapot_is_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7703 Teapot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7704 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7705 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7706 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7707 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7708 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7709 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7710 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7711 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7712 Teapot_with_leaves Add_boiling_water_to_make_a_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7713 Teapot_with_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7714 Teapot This_teapot_is_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7715 Teapot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7716 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7717 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7718 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7719 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7720 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7721 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7722 Pot_of_tea I'd_really_like_a_nice_cup_of_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7723 Pot_of_tea Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7724 Teapot_with_leaves Add_boiling_water_to_make_a_tea. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7725 Teapot_with_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7726 Teapot This_teapot_is_empty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7727 Teapot Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7728 Empty_cup An_empty_cup. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7729 Empty_cup Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7730 Cup_of_tea A_nice_cup_of_nettle_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7731 Cup_of_tea A_milky_cup_of_nettle_tea. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7732 Porcelain_cup A_porcelain_cup. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7733 Cup_of_tea Some_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7734 Cup_of_tea Some_milky_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7735 Porcelain_cup A_porcelain_cup. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7736 Cup_of_tea Some_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7737 Cup_of_tea Some_milky_nettle_tea_in_a_porcelain_cup. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7738 Tea_leaves Mmm,_how_about_a_nice_cup_of_tea? 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7739 Tea_leaves Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7740 Beer A_glass_of_frothy_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7741 Beer Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7742 Beer_glass I_need_to_fill_this_with_beer. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7743 Beer_glass Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7744 Asgarnian_ale Probably_the_finest_ale_in_Asgarnia. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7745 Asgarnian_ale Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7746 Greenman's_ale A_glass_of_frothy_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7747 Greenman's_ale Swap_this_note_at_any_bank_for_the_equivalent_item's_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7748 Dragon_bitter A_glass_of_bitter. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7749 Dragon_bitter Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7750 Moonlight_mead A_foul_smelling_brew. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7751 Moonlight_mead Swap_this_note_at_any_bank_for_the_equivalent_item. 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7752 Cider A_glass_of_cider. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7753 Cider Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7754 Chef's_delight A_fruity,_full-bodied_ale. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7755 Chef's_delight Swap_this_note_at_any_bank_for_the_equivalent_item. 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7756 Paintbrush Try_dipping_it_in_paint_and_applying_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7757 Paintbrush Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7758 Rusty_sword A_decent_enough_weapon_gone_rusty. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7759 Toy_soldier Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7760 Toy_soldier Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7761 Toy_soldier_(wound) Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7762 Toy_soldier_(wound) Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7763 Toy_doll Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7764 Toy_doll Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7765 Toy_doll_(wound) Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7766 Toy_doll_(wound) ISwap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7767 Toy_mouse Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7768 Toy_mouse Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7769 Toy_mouse_(wound) Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7770 Toy_mouse_(wound) Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7771 Toy_cat Nice_bit_of_crafting! 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7772 Toy_cat Swap_this_note_at_any_bank_for_the_equivalent_item. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7773 Branch Leafless_bush_branch. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7774 Reward_token Yellow_reward_token. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7775 Reward_token Red_reward_token. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7776 Reward_token Blue_reward_token. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7777 Long_vine A_long_section_of_vine_made_up_of_lots_of_shorter_sections. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7778 Short_vine A_short_section_of_vines. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7779 Fishing_tome A_tome_of_learning_which_focuses_on_fishing. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7780 Fishing_tome A_tome_of_learning_which_focuses_on_fishing. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7781 Fishing_tome A_tome_of_learning_which_focuses_on_fishing. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7782 Agility_tome A_tome_of_learning_which_focuses_on_agility. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7783 Agility_tome A_tome_of_learning_which_focuses_on_agility. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7784 Agility_tome A_tome_of_learning_which_focuses_on_agility. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7785 Thieving_tome A_tome_of_learning_which_focuses_on_thieving. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7786 Thieving_tome A_tome_of_learning_which_focuses_on_thieving. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7787 Thieving_tome A_tome_of_learning_which_focuses_on_thieving. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7788 Slayer_tome A_tome_of_learning_which_focuses_on_the_slayer_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7789 Slayer_tome A_tome_of_learning_which_focuses_on_the_slayer_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7790 Slayer_tome A_tome_of_learning_which_focuses_on_the_slayer_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7791 Mining_tome A_tome_of_learning_which_focuses_on_the_mining_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7792 Mining_tome A_tome_of_learning_which_focuses_on_the_mining_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7793 Mining_tome A_tome_of_learning_which_focuses_on_the_mining_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7794 Firemaking_tome A_tome_of_learning_which_focuses_on_the_firemaking_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7795 Firemaking_tome A_tome_of_learning_which_focuses_on_the_firemaking_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7796 Firemaking_tome A_tome_of_learning_which_focuses_on_the_firemaking_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7797 Woodcutting_tome A_tome_of_learning_which_focuses_on_the_woodcutting_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7798 Woodcutting_tome A_tome_of_learning_which_focuses_on_the_woodcutting_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7799 Woodcutting_tome A_tome_of_learning_which_focuses_on_the_woodcutting_skill. 5000 5000 5000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7800 Snail_shell A_shell_from_a_Giant_Snail. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7801 Snake_hide Scaly_but_not_slimy! 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7802 Snake_hide Swap_this_note_at_any_bank_for_the_equivalent_item. 35 35 35 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7803 Yin_yang_amulet A_non-magical_copy_of_the_make-over_mage's_amulet. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7804 Zaros_mjolnir A_Zaros_Mjolnir. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7805 Zaros_mjolnir Swap_this_note_at_any_bank_for_the_equivalent_item. 625 625 625 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7806 Anger_sword A_heavy_duty_sword. 26 26 26 20 20 20 0 0 0 2 1 0 0 5 0 +item = 7807 Anger_battleaxe A_heavy_duty_axe. 182 182 182 20 20 20 0 0 0 0 0 0 -1 13 0 +item = 7808 Anger_mace A_heavy_duty_mace. 18 18 18 20 20 20 0 0 0 0 0 0 0 5 0 +item = 7809 Anger_spear A_heavy_duty_spear. 26 26 26 20 20 20 0 0 1 1 0 0 0 6 0 +item = 7810 Jug_of_vinegar This_wine_clearly_did_not_age_well. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7811 Pot_of_vinegar Well,_this_pot_is_certainly_full_of_vinegar_and_no_mistake. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7812 Goblin_skull This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7813 Bone_in_vinegar There_is_a_goblin_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7814 Goblin_skull This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7815 Bear_ribs This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7816 Bone_in_vinegar There_is_a_bear_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7817 Bear_ribs This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7818 Ram_skull This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7819 Bone_in_vinegar There_is_a_ram_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7820 Ram_skull This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7821 Unicorn_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7822 Bone_in_vinegar There_is_a_unicorn_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7823 Unicorn_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7824 Giant_rat_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7825 Bone_in_vinegar There_is_a_giant_rat_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7826 Giant_rat_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7827 Giant_bat_wing This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7828 Bone_in_vinegar There_is_a_giant_bat_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7829 Giant_bat_wing This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7830 Wolf_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7831 Bone_in_vinegar There_is_a_wolf_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7832 Wolf_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7833 Bat_wing This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7834 Bone_in_vinegar There_is_a_bat_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7835 Bat_wing This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7836 Rat_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7837 Bone_in_vinegar There_is_a_rat_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7838 Rat_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7839 Baby_dragon_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7840 Bone_in_vinegar There_is_a_baby_blue_dragon_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7841 Baby_dragon_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7842 Ogre_ribs This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7843 Bone_in_vinegar There_is_an_ogre_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7844 Ogre_ribs This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7845 Jogre_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7846 Bone_in_vinegar There_is_a_jogre_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7847 Jogre_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7848 Zogre_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7849 Bone_in_vinegar There_is_a_zogre_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7850 Zogre_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7851 Mogre_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7852 Bone_in_vinegar There_is_a_mogre_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7853 Mogre_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7854 Monkey_paw This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7855 Bone_in_vinegar There_is_a_monkey_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7856 Monkey_paw This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7857 Dagannoth_ribs This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7858 Bone_in_vinegar There_is_a_Dagannoth_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7859 Dagannoth_ribs This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7860 Snake_spine This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7861 Bone_in_vinegar There_is_a_snake_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7862 Snake_spine This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7863 Zombie_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7864 Bone_in_vinegar There_is_a_zombie_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7865 Zombie_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7866 Werewolf_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7867 Bone_in_vinegar There_is_a_werewolf_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7868 Werewolf_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7869 Moss_giant_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7870 Bone_in_vinegar A_Moss_Giant's_bone 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7871 Moss_giant_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7872 Fire_giant_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7873 Bone_in_vinegar There_is_a_fire_giant_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7874 Fire_giant_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7875 Ice_giant_ribs This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7876 Bone_in_vinegar There_is_an_ice_giant_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7877 Ice_giant_ribs This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7878 Terrorbird_wing This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7879 Bone_in_vinegar There_is_a_terrorbird_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7880 Terrorbird_wing This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7881 Ghoul_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7882 Bone_in_vinegar There_is_a_ghoul_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7883 Ghoul_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7884 Troll_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7885 Bone_in_vinegar There_is_a_troll_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7886 Troll_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7887 Seagull_wing This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7888 Bone_in_vinegar There_is_a_seagull_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7889 Seagull_wing This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7890 Undead_cow_ribs This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7891 Bone_in_vinegar There_is_an_undead_cow_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7892 Undead_cow_ribs This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7893 Experiment_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7894 Bone_in_vinegar There_is_an_experiment_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7895 Experiment_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7896 Rabbit_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7897 Bone_in_vinegar There_is_a_rabbit_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7898 Rabbit_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7899 Basilisk_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7900 Bone_in_vinegar There_is_a_basilisk_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7901 Basilisk_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7902 Desert_lizard_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7903 Bone_in_vinegar There_is_a_desert_lizard_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7904 Desert_lizard_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7905 Cave_goblin_skull This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7906 Bone_in_vinegar There_is_a_cave_goblin_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7907 Cave_goblin_skull This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7908 Big_frog_leg This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7909 Bone_in_vinegar There_is_a_big_frog_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7910 Big_frog_leg This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7911 Vulture_wing This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7912 Bone_in_vinegar There_is_a_vulture_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7913 Vulture_wing This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7914 Jackal_bone This_needs_a_good_polish. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7915 Bone_in_vinegar There_is_a_jackal_bone_in_here. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7916 Jackal_bone This_bone_belongs_in_a_museum! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7917 Ram_skull_helm Makes_me_feel_baaad_to_the_bone. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7918 Bonesack The_Bonesack_is_a_little_old_item_that_protects_like_leather. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7919 Bottle_of_wine A_very_good_vintage. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7920 Bottle_of_wine Swap_this_note_at_any_bank_for_the_equivalent_item. 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7921 Empty_wine_bottle This_one_has_clearly_been_taken_down_and_passed_around. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7922 Al_kharid_flyer The_money_off_voucher_has_expired. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7927 Easter_ring A_ring_given_to_you_by_the_Easter_Bunny. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7928 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7929 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7930 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7931 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7932 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7933 Easter_egg "Best_before_24th_April." 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7934 Field_ration A_field_ration_to_help_your_wounds_go_away. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7935 Field_ration Swap_this_note_at_any_bank_for_the_equivalent_item. 300 300 300 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7936 Pure_essence An_uncharged_Rune_Stone_of_extra_capability. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7937 Pure_essence Swap_this_note_at_any_bank_for_the_equivalent_item. 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7938 Bob Bobbity_bob! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7939 Tortoise_shell A_word_in_your_shell-like. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7940 Tortoise_shell Swap_this_note_at_any_bank_for_the_equivalent_item. 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7941 Iron_sheet A_sturdy_sheet_of_iron. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7942 Fresh_monkfish Freshly_caught._Needs_cooking. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7943 Fresh_monkfish Freshly_caught_and_cooked_-_perfect_for_storing._Not_so_good_for_eating. 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7944 Raw_monkfish I_should_try_cooking_this. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7945 Raw_monkfish Swap_this_note_at_any_bank_for_the_equivalent_item. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7946 Monkfish A_tasty_fish. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7947 Monkfish Swap_this_note_at_any_bank_for_the_equivalent_item. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7948 Burnt_monkfish Maybe_a_little_less_heat_next_time. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7949 Burnt_monkfish Swap_this_note_at_any_bank_for_the_equivalent_item. 230 230 230 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7950 Bone_seeds An_highly_portable_army_of_skeletal_magi. 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7951 Herman's_book A_book_taken_from_the_desk_of_Herman_Caranos. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7952 Axe_handle Useless_without_the_head. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7953 Axe_handle Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7954 Burnt_shrimp Oops! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7955 Burnt_shrimp Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7956 Casket I_hope_there's_treasure_in_it. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7957 White_apron A_mostly_clean_apron. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7958 Mining_prop A_prop_for_holding_up_a_tunnel_roof. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7959 Heavy_box A_box_full_of_stolen_Etceterian_items. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7960 Empty_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7961 Burnt_diary A_diary_with_one_page. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7962 Burnt_diary A_diary_with_two_pages. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7963 Burnt_diary A_diary_with_three_pages. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7964 Burnt_diary A_diary_with_four_pages. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7965 Burnt_diary A_diary_with_five_pages. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7966 Letter Sigrid's_letter_to_Vargas. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7967 Engine A_dwarf-made_coal_engine._It_looks_very_sturdy. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7968 Scroll An_official-looking_scroll. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7969 Pulley_beam A_beam_with_a_pulley_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7970 Long_pulley_beam A_long_beam_with_a_pulley_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7971 Longer_pulley_beam A_very_long_beam_with_a_pulley_attached. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7972 Lift_manual The_manual_for_an_AMCE_Lift-In-A-Box. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7973 Beam A_wooden_beam. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7974 Servant_bell Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7975 Crawling_hand I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7976 Cockatrice_head I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7977 Basilisk_head I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7978 Kurask_head I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7979 Abyssal_head I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7980 Kbd_heads I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7981 Kq_head I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7982 Crawling_hand I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7983 Cockatrice_head I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7984 Basilisk_head I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7985 Kurask_head I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7986 Abyssal_head I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7987 Kbd_heads I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7988 Kq_head I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7989 Big_bass I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7990 Big_bass I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7991 Big_swordfish I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7992 Big_swordfish I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7993 Big_shark I_should_get_it_stuffed! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7994 Big_shark I_could_mount_this_on_my_wall! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7995 Arthur_portrait A_portrait_of_King_Arthur. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7996 Elena_portrait A_portrait_of_Elena. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7997 Keldagrim_portrait A_painting_of_the_statue_of_King_Alvis_of_Keldagrim. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7998 Misc._portrait A_portrait_of_Prince_Brand_and_Princess_Astrid_of_Miscellania. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 7999 Desert_painting The_searing_Kharid_Desert. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8000 Isafdar_painting The_exotic_land_of_the_Elves. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8001 Karamja_painting The_tropical_coast_of_Karamja. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8002 Lumbridge_painting Oxtable's_famous_painting_of_the_Lumbridge_water_mill. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8003 Morytania_painting A_painting_of_the_spooky_forests_of_Morytania. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8004 Small_map A_small_map_of_Runescape. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8005 Medium_map A_medium_map_of_Runescape. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8006 Large_map A_large_map_of_Runescape. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8007 Varrock_teleport A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8008 Lumbridge_teleport A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8009 Falador_teleport A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8010 Camelot_teleport A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8011 Ardougne_teleport A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8012 Watchtower_t'port A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8013 Teleport_to_house A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8014 Bones_to_bananas A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8015 Bones_to_peaches A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8016 Enchant_sapphire A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8017 Enchant_emerald A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8018 Enchant_ruby A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8019 Enchant_diamond A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8020 Enchant_dragonstn. A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8021 Enchant_onyx A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8022 Telekinetic_grab A_tablet_containing_a_magic_spell. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8023 Boxing_ring Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8024 Fencing_ring Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8025 Combat_ring Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8026 Ranging_pedestals Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8027 Balance_beam Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8028 Glove_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8029 Weapons_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8030 Extra_weapons_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8031 Wooden_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8032 Oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8033 Large_oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8034 Teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8035 Large_teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8036 4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8037 Gilded_4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8038 Shoe_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8039 Oak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8040 Oak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8041 Teak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8042 Teak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8043 Mahogany_'drobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8044 Gilded_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8045 Shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8046 Oak_shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8047 Oak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8048 Teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8049 Fancy_teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8050 Mahogany_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8051 Gilded_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8052 Oak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8053 Teak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8054 Gilded_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8055 Saradomin_symbol Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8056 Zamorak_symbol Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8057 Guthix_symbol Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8058 Saradomin_icon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8059 Zamorak_icon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8060 Guthix_icon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8061 Icon_of_bob Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8062 Oak_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8063 Teak_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8064 Cloth-cover'd_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8065 Mahogany_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8066 Limestone_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8067 Marble_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8068 Gilded_altar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8069 Wooden_torches Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8070 Steel_torches Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8071 Steel_candlesticks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8072 Gold_candlesticks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8073 Incense_burners Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8074 Mahogany_burners Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8075 Marble_burners Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8076 Shuttered_window Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8077 Decorative_window Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8078 Stained_glass Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8079 Windchimes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8080 Bells Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8081 Organ Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8082 Small_statues Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8083 Medium_statues Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8084 Large_statues Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8085 Suit_of_armour Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8086 Small_portrait Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8087 Minor_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8088 Medium_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8089 Major_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8090 Mounted_sword Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8091 Small_landscape Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8092 Guild_trophy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8093 Large_portrait Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8094 Large_landscape Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8095 Rune_display_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8096 Low-level_plants Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8097 Mid-level_plants Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8098 High-level_plants Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8099 Rope_bell-pull Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8100 Bell-pull Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8101 Posh_bell-pull Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8102 Oak_decoration Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8103 Teak_decoration Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8104 Gilded_decoration Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8105 Round_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8106 Square_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8107 Kite_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8108 Wooden_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8109 Oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8110 Carved_oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8111 Teak_dining_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8112 Carved_teak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8113 Mahogany_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8114 Gilded_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8115 Wood_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8116 Oak_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8117 Carved_oak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8118 Teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8119 Carved_teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8120 Mahogany_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8121 Opulent_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8122 Oak_door Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8123 Steel-plated_door Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8124 Marble_door Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8125 Decorative_blood Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8126 Decorative_pipe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8127 Hanging_skeleton Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8128 Candles Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8129 Torches Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8130 Skull_torches Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8131 Skeleton_guard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8132 Guard_dog Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8133 Hobgoblin_guard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8134 Baby_red_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8135 Huge_spider Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8136 Troll_guard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8137 Hellhound Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8138 Demon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8139 Kalphite_soldier Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8140 Tok-xil Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8141 Dagannoth Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8142 Steel_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8143 Spike_trap Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8144 Man_trap Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8145 Tangle_vine Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8146 Marble_trap Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8147 Teleport_trap Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8148 Wooden_crate Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8149 Oak_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8150 Teak_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8151 Mahogany_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8152 Magic_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8153 Clay_attack_stone Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8154 Attack_stone Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8155 Marble_att._stone Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8156 Magical_balance_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8157 Magical_balance_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8158 Magical_balance_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8159 Jester Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8160 Treasure_hunt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8161 Hangman_game Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8162 Hoop_and_stick Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8163 Dartboard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8164 Archery_target Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8165 Oak_prize_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8166 Teak_prize_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8167 Mahogany_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8168 Exit_portal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8169 Decorative_rock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8170 Pond Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8171 Imp_statue Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8172 Dungeon_entrance Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8173 Tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8174 Nice_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8175 Oak_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8176 Willow_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8177 Maple_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8178 Yew_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8179 Magic_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8180 Plant Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8181 Small_fern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8182 Fern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8183 Dock_leaf Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8184 Thistle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8185 Reeds Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8186 Fern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8187 Bush Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8188 Tall_plant Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8189 Short_plant Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8190 Large-leaf_plant Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8191 Huge_plant Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8192 Gazebo Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8193 Small_fountain Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8194 Large_fountain Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8195 Posh_fountain Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8196 Boundary_stones Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8197 Wooden_fence Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8198 Stone_wall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8199 Iron_railings Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8200 Picket_fence Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8201 Garden_fence Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8202 Marble_wall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8203 Thorny_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8204 Nice_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8205 Small_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8206 Topiary_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8207 Fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8208 Tall_fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8209 Tall_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8210 Rosemary Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8211 Daffodils Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8212 Bluebells Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8213 Sunflower Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8214 Marigolds Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8215 Roses Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8216 Firepit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8217 Firepit_with_hook Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8218 Firepit_with_pot Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8219 Small_oven Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8220 Large_oven Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8221 Steel_range Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8222 Fancy_range Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8223 Wooden_shelves_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8224 Wooden_shelves_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8225 Wooden_shelves_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8226 Oak_shelves_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8227 Oak_shelves_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8228 Teak_shelves_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8229 Teak_shelves_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8230 Pump_and_drain Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8231 Pump_and_tub Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8232 Sink Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8233 Wooden_larder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8234 Oak_larder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8235 Teak_larder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8236 Cat_blanket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8237 Cat_basket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8238 Cushioned_basket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8239 Beer_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8240 Cider_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8241 Asgarnian_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8242 Greenman's_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8243 Dragon_bitter Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8244 Chef's_delight Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8245 Blank_poh_entity Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8246 Wood_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8247 Oak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8248 Teak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8249 Oak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8250 Oak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8251 Oak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8252 Teak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8253 Teak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8254 Teak_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8255 Marble_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8256 Marble_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8257 Marble_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8258 Spiral_staircase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8259 Marble_spiral Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8260 Crawling_hand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8261 Cockatrice_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8262 Basilisk_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8263 Kurask_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8264 Abyssal_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8265 Kbd_heads Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8266 Kq_head Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8267 Mounted_bass Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8268 Mounted_swordfish Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8269 Mounted_shark Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8270 Mithril_armour Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8271 Adamantite_armour Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8272 Runite_armour Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8273 Cw_armour_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8274 Cw_armour_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8275 Cw_armour_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8276 Rune_case_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8277 Rune_case_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8278 Rune_case_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8279 Silverlight Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8280 Excalibur Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8281 Darklight Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8282 Anti-dragon_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8283 Amulet_of_glory Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8284 Cape_of_legends Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8285 King_arthur Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8286 Elena Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8287 Giant_dwarf Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8288 Miscellanians Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8289 Lumbridge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8290 The_desert Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8291 Morytania Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8292 Karamja Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8293 Isafdar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8294 Small_map Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8295 Medium_map Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8296 Large_map Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8297 Oak_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8298 Oak_and_steel_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8299 Steel_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8300 Spiked_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8301 Bone_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8302 Spikes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8303 Tentacle_pool Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8304 Flame_pit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8305 Rocnar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8306 Oak_ladder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8307 Teak_ladder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8308 Mahogany_ladder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8309 Crude_wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8310 Wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8311 Rocking_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8312 Oak_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8313 Oak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8314 Teak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8315 Mahogany_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8316 Brown_rug Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8317 Rug Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8318 Opulent_rug Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8319 Wooden_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8320 Oak_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8321 Mahogany_b'kcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8322 Torn_curtains Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8323 Curtains Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8324 Opulent_curtains Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8325 Clay_fireplace Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8326 Stone_fireplace Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8327 Marble_fireplace Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8328 Teak_portal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8329 Mahogany_portal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8330 Marble_portal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8331 Teleport_focus Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8332 Greater_focus Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8333 Scrying_pool Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8334 Oak_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8335 Eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8336 Demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8337 Teak_eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8338 Teak_demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8339 Mahogany_eagle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8340 Mahogany_demon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8341 Globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8342 Ornamental_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8343 Lunar_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8344 Celestial_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8345 Armillary_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8346 Small_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8347 Large_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8348 Wooden_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8349 Teak_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8350 Mahogany_'scope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8351 Crystal_ball Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8352 Elemental_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8353 Crystal_of_power Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8354 Alchemical_chart Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8355 Astronomical_chart Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8356 Infernal_chart Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8357 Oak_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8358 Teak_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8359 Mahogany_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8360 Gilded_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8361 Skeleton_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8362 Crystal_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8363 Demonic_throne Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8364 Oak_lever Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8365 Teak_lever Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8366 Mahogany_lever Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8367 Trapdoor Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8368 Trapdoor Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8369 Trapdoor Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8370 Floor_decoration Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8371 Steel_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8372 Trapdoor Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8373 Lesser_magic_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8374 Greater_magic_cage Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8375 Wooden_workbench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8376 Oak_workbench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8377 Steel_framed_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8378 Bench_with_vice Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8379 Bench_with_lathe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8380 Crafting_table_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8381 Crafting_table_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8382 Crafting_table_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8383 Crafting_table_4 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8384 Tool_store_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8385 Tool_store_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8386 Tool_store_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8387 Tool_store_4 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8388 Tool_store_5 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8389 Repair_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8390 Whetstone Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8391 Armour_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8392 Pluming_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8393 Shield_easel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8394 Banner_easel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8395 Parlour Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8396 Kitchen Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8397 Dining_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8398 Bedroom Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8399 Games_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8400 Combat_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8401 Hall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8402 Hall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8403 Hall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8404 Hall Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8405 Chapel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8406 Workshop Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8407 Study Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8408 Portal_chamber Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8409 Throne_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8410 Oubliette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8411 Dungeon_corridor Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8412 Dungeon_cross Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8413 Dungeon_stairs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8414 Treasure_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8415 Garden Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8416 Formal_garden Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8417 Bagged_dead_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8418 Bagged_dead_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8419 Bagged_nice_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8420 Bagged_nice_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8421 Bagged_oak_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8422 Bagged_oak_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8423 Bagged_willow_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8424 Bagged_willow_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8425 Bagged_maple_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8426 Bagged_maple_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8427 Bagged_yew_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8428 Bagged_yew_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8429 Bagged_magic_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8430 Bagged_magic_tree Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8431 Bagged_plant_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8432 Bagged_plant_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8433 Bagged_plant_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8434 Bagged_plant_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8435 Bagged_plant_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8436 Bagged_plant_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8437 Thorny_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8438 Thorny_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8439 Nice_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8440 Nice_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8441 Small_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8442 Small_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8443 Topiary_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8444 Topiary_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8445 Fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8446 Fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8447 Tall_fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8448 Tall_fancy_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8449 Tall_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8450 Tall_box_hedge Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8451 Bagged_rosemary Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8452 Bagged_rosemary Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8453 Bagged_daffodils Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8454 Bagged_daffodils Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8455 Bagged_bluebells Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8456 Bagged_bluebells Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8457 Bagged_sunflower Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8458 Bagged_sunflower Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8459 Bagged_marigolds Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8460 Bagged_marigolds Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8461 Bagged_roses Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8462 Bagged_roses Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8463 Construction_guide Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8464 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8465 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8466 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8467 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8468 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8469 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8470 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8471 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8472 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8473 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8474 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8475 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8476 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8477 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8478 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8479 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8480 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8481 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8482 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8483 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8484 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8485 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8486 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8487 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8488 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8489 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8490 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8491 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8492 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8493 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8494 Rune_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8495 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8496 Crude_wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8497 Crude_wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8498 Wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8499 Wooden_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8500 Rocking_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8501 Rocking_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8502 Oak_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8503 Oak_chair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8504 Oak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8505 Oak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8506 Teak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8507 Teak_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8508 Mahogany_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8509 Mahogany_armchair Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8510 Wooden_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8511 Wooden_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8512 Oak_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8513 Oak_bookcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8514 Mahogany_b'kcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8515 Mahogany_b'kcase Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8516 Beer_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8517 Beer_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8518 Cider_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8519 Cider_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8520 Asgarnian_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8521 Asgarnian_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8522 Greenman's_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8523 Greenman's_ale Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8524 Dragon_bitter Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8525 Dragon_bitter Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8526 Chef's_delight Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8527 Chef's_delight Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8528 Wood_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8529 Wood_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8530 Oak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8531 Oak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8532 Teak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8533 Teak_kitchen_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8534 Oak_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8535 Oak_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8536 Eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8537 Eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8538 Demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8539 Demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8540 Teak_eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8541 Teak_eagle_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8542 Teak_demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8543 Teak_demon_lectern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8544 Mahogany_eagle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8545 Mahogany_eagle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8546 Mahogany_demon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8547 Mahogany_demon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8548 Wood_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8549 Wood_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8550 Oak_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8551 Oak_dining_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8552 Carved_oak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8553 Carved_oak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8554 Teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8555 Teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8556 Carved_teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8557 Carved_teak_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8558 Mahogany_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8559 Mahogany_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8560 Opulent_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8561 Opulent_table Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8562 Wooden_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8563 Wooden_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8564 Oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8565 Oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8566 Carved_oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8567 Carved_oak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8568 Teak_dining_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8569 Teak_dining_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8570 Carved_teak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8571 Carved_teak_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8572 Mahogany_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8573 Mahogany_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8574 Gilded_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8575 Gilded_bench Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8576 Wooden_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8577 Wooden_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8578 Oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8579 Oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8580 Large_oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8581 Large_oak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8582 Teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8583 Teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8584 Large_teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8585 Large_teak_bed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8586 4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8587 4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8588 Gilded_4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8589 Gilded_4-poster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8590 Oak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8591 Oak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8592 Teak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8593 Teak_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8594 Gilded_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8595 Gilded_clock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8596 Shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8597 Shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8598 Oak_shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8599 Oak_shaving_stand Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8600 Oak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8601 Oak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8602 Teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8603 Teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8604 Fancy_teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8605 Fancy_teak_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8606 Mahogany_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8607 Mahogany_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8608 Gilded_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8609 Gilded_dresser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8610 Shoe_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8611 Shoe_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8612 Oak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8613 Oak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8614 Oak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8615 Oak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8616 Teak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8617 Teak_drawers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8618 Teak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8619 Teak_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8620 Mahogany_'drobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8621 Mahogany_'drobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8622 Gilded_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8623 Gilded_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8624 Crystal_ball Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8625 Crystal_ball Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8626 Elemental_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8627 Elemental_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8628 Crystal_of_power Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8629 Crystal_of_power Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8630 Globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8631 Globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8632 Ornamental_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8633 Ornamental_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8634 Lunar_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8635 Lunar_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8636 Celestial_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8637 Celestial_globe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8638 Armillary_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8639 Armillary_sphere Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8640 Small_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8641 Small_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8642 Large_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8643 Large_orrery Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8644 Wooden_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8645 Wooden_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8646 Teak_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8647 Teak_telescope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8648 Mahogany_'scope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8649 Mahogany_'scope Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8650 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8651 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8652 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8653 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8654 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8655 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8656 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8657 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8658 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8659 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8660 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8661 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8662 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8663 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8664 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8665 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8666 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8667 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8668 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8669 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8670 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8671 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8672 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8673 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8674 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8675 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8676 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8677 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8678 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8679 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8680 Banner Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8681 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8682 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8683 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8684 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8685 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8686 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8687 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8688 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8689 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8690 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8691 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8692 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8693 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8694 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8695 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8696 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8697 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8698 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8699 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8700 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8701 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8702 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8703 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8704 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8705 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8706 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8707 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8708 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8709 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8710 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8711 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8712 Steel_heraldic_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8713 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8714 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8715 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8716 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8717 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8718 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8719 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8720 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8721 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8722 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8723 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8724 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8725 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8726 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8727 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8728 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8729 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8730 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8731 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8732 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8733 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8734 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8735 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8736 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8737 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8738 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8739 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8740 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8741 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8742 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8743 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8744 Rune_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8745 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8746 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8747 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8748 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8749 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8750 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8751 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8752 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8753 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8754 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8755 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8756 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8757 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8758 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8759 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8760 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8761 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8762 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8763 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8764 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8765 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8766 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8767 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8768 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8769 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8770 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8771 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8772 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8773 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8774 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8775 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8776 Steel_kiteshield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8777 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8778 Oak_plank A_plank_of_sturdy_oak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8779 Oak_plank Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8780 Teak_plank A_plank_of_fine_teak. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8781 Teak_plank Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8782 Mahogany_plank A_plank_of_expensive_mahogany. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8783 Mahogany_plank Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8784 Gold_leaf Very_delicate_thin_pressed_gold. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8785 Gold_leaf Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8786 Marble_block A_beautifully_carved_marble_block. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8787 Marble_block Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8788 Magic_stone Doesn't_look_very_special. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8789 Magic_stone Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8790 Bolt_of_cloth A_bolt_of_ordinary_cloth. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8791 Bolt_of_cloth Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8792 Clockwork A_clockwork_mechanism. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8793 Clockwork Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8794 Saw Good_for_cutting_wood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8795 Saw Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8796 Thing A_well_carved_thing. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8797 Picture Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8798 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8799 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8800 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8801 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8802 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8803 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8804 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8805 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8806 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8807 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8808 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8809 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8810 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8811 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8812 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8813 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8814 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8815 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8816 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8817 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8818 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8819 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8820 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8821 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8822 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8823 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8824 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8825 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8826 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8827 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8828 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8829 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8830 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8831 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8832 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8833 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8834 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8835 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 6332 Mahogany_logs Some_rare_mahogany_logs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8836 Mahogany_logs Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8837 Timber_beam A_hefty_beam_of_timber,_perfect_for_building_temples. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8838 Timber_beam Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8839 Void_knight_top Torso_armour_of_the_order_of_the_Void_Knights. 1 1 1 0 0 0 0 0 45 45 45 45 45 0 0 +item = 8840 Void_knight_robe Leg_armour_of_the_order_of_the_Void_Knights. 1 1 1 0 0 0 0 0 30 30 30 30 30 0 0 +item = 8841 Void_knight_mace A_mace_used_by_the_order_of_the_Void_knights. 1 1 1 22 0 41 8 0 2 2 2 2 2 38 6 +item = 8842 Void_knight_gloves Gloves_as_used_by_the_order_of_the_void_knights. 1 1 1 0 0 0 0 0 6 6 6 4 6 0 0 +item = 8843 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8844 Bronze_defender A_defensive_weapon. 1 1 1 3 2 1 -3 -2 3 2 1 -3 -2 0 0 +item = 8845 Iron_defender A_defensive_weapon. 1 1 1 5 4 3 -3 -2 5 4 3 -3 -2 0 0 +item = 8846 Steel_defender A_defensive_weapon. 1 1 1 7 6 5 -3 -2 7 6 5 -3 -2 1 0 +item = 8847 Black_defender A_defensive_weapon. 1 1 1 9 8 7 -3 -2 9 8 7 -3 -2 2 0 +item = 8848 Mithril_defender A_defensive_weapon. 1 1 1 11 10 9 -3 -2 11 10 9 -3 -2 3 0 +item = 8849 Adamant_defender A_defensive_weapon. 1 1 1 13 12 11 -3 -2 13 12 11 -3 -2 4 0 +item = 8850 Rune_defender A_defensive_weapon. 1 1 1 20 19 18 -3 -2 20 19 18 -3 -2 5 0 +item = 8851 Warrior_guild_token Warrior_Guild_Token. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8852 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8853 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8854 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8855 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8856 Defensive_shield Large,_round,_heavy_shield. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8857 Shot Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8858 18lb_shot Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8859 22lb_shot Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8860 One_barrel Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8861 Two_barrels Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8862 Three_barrels Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8863 Four_barrels Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8864 Five_barrels Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8865 Ground_ashes A_heap_of_finely_ground_ashes. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8866 Steel_key You_stole_this_key_from_a_guard_deep_in_the_HAM_cave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8867 Bronze_key You_stole_this_key_from_a_guard_deep_in_the_HAM_cave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8868 Silver_key You_stole_this_key_from_a_guard_deep_in_the_HAM_cave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8869 Iron_key You_stole_this_key_from_a_guard_deep_in_the_HAM_cave. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8870 Zanik She's_dead,_but_the_mark_on_her_forehead_is_glowing_brightly. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8871 Crate_with_zanik Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8872 Bone_dagger A_powerful_dagger. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8873 Bone_dagger Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8874 Bone_dagger_(p) A_powerful_dagger. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8875 Bone_dagger_(p) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8876 Bone_dagger_(p+) A_powerful_dagger.. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8877 Bone_dagger_(p+) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8878 Bone_dagger_(s) A_powerful_dagger. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8879 Bone_dagger_(s) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8880 Dorgeshuun_c'bow This_fires_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8881 Dorgeshuun_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8882 Bone_bolts Good_if_you_have_a_bone_crossbow! 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8883 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8884 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8885 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8886 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8887 Zanik Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8888 Zanik_(ham) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8889 Zanik_(showdown) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8890 Coins Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8891 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8892 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8893 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8894 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8895 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8896 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8897 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8898 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8899 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8900 Cave_horror Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8901 Black_mask_(10) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8902 Black_mask_(10) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8903 Black_mask_(9) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8904 Black_mask_(9) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8905 Black_mask_(8) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8906 Black_mask_(8) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8907 Black_mask_(7) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8908 Black_mask_(7) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8909 Black_mask_(6) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8910 Black_mask_(6) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8911 Black_mask_(5) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8912 Black_mask_(5) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8913 Black_mask_(4) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8914 Black_mask_(4) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8915 Black_mask_(3) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8916 Black_mask_(3) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8917 Black_mask_(2) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8918 Black_mask_(2) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8919 Black_mask_(1) A_magic_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8920 Black_mask_(1) Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8921 Black_mask An_inert-seeming_cave_horror_mask. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8922 Black_mask Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8923 Witchwood_icon A_stick_on_a_string..._pure_style. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8924 Bandana_and_eyepatch Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8925 Bandana_and_eyepatch Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8926 Bandana_and_eyepatch Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8927 Bandana_and_eyepatch Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8928 Hat_and_eyepatch Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8929 Crabclaw_and_hook Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8930 Pipe_section Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8931 Pipe_section Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8932 Lumber_patch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8933 Lumber_patch Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8934 Scrapey_tree_logs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8935 Scrapey_tree_logs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8936 Blue_flowers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8937 Blue_flowers Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8938 Red_flowers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8939 Red_flowers Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8940 Rum Alcohol_in_the_loosest_sense_of_the_word. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8941 Rum Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8942 Monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8943 Blue_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8944 Blue_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8945 Blue_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8946 Red_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8947 Red_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8948 Red_monkey Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8949 Pirate_bandana Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8950 Pirate_hat Essential_pirate_wear. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8951 Pieces_of_eight Piratical_currency. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8952 Blue_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8953 Green_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8954 Red_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8955 Brown_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8956 Black_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8957 Purple_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8958 Grey_naval_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8959 Blue_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8960 Green_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8961 Red_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8962 Brown_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8963 Black_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8964 Purple_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8965 Grey_tricorn_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8966 Cutthroat_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8967 Guilded_smile_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8968 Bronze_fist_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8969 Lucky_shot_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8970 Treasure_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8971 Phasmatys_flag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8972 Bowl_of_red_water Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8973 Bowl_of_red_water Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8974 Bowl_of_blue_water Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8975 Bowl_of_blue_water Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8976 Bitternut Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8977 Scrapey_bark Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8978 Scrapey_bark Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8979 Bridge_section Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8980 Bridge_section Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8981 Sweetgrubs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8982 Sweetgrubs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8983 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8984 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8985 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8986 Bucket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8987 Torch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8988 The_stuff Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8989 Brewin'_guide Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8990 Brewin'_guide Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8991 Blue_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8992 Green_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8993 Red_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8994 Brown_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8995 Black_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8996 Purple_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8997 Grey_navy_slacks Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8924 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8998 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8925 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8999 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8926 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9000 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8927 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9001 Bandana_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 8928 Hat_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9002 Hat_and_eyepatch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9003 Security_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9004 Stronghold_notes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9005 Fancy_boots Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9006 Fighting_boots Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9007 Right_skull_half Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9008 Left_skull_half Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9009 Strange_skull Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9010 Top_of_sceptre Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9011 Bottom_of_sceptre Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9012 Runed_sceptre Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9013 Skull_sceptre Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9014 Security_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9015 Stronghold_notes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9016 Gorak_claws Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9017 Star_flower Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9018 Gorak_claw_powder Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9019 Magic_essence(unf) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9020 Queen's_secateurs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9021 Magic_essence(4) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9022 Magic_essence(3) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9023 Magic_essence(2) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9024 Magic_essence(1) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9025 Nuff's_certificate Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9026 Ivory_comb Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9027 Ivory_comb Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9028 Golden_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9029 Golden_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9030 Stone_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9031 Stone_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9032 Pottery_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9033 Pottery_scarab Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9034 Golden_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9035 Golden_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9036 Pottery_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9037 Pottery_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9038 Stone_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9039 Stone_statuette Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9040 Gold_seal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9041 Gold_seal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9042 Stone_seal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9043 Stone_seal Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9044 Pharaoh's_sceptre This_sceptre_has_3_remaining_charges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9045 Pharaoh's_sceptre Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9046 Pharaoh's_sceptre This_sceptre_has_2_remaining_charges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9047 Pharaoh's_sceptre Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9048 Pharaoh's_sceptre This_sceptre_has_1_remaining_charges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9049 Pharaoh's_sceptre Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9050 Pharaoh's_sceptre This_sceptre_has_0_remaining_charges. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9051 Pharaoh's_sceptre Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9052 Locust_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9053 Locust_meat Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9054 Red_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9055 Black_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9056 Yellow_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9057 Green_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9058 Purple_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9059 Pink_goblin_mail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9060 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9061 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9062 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9063 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9064 Emerald_lantern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9065 Emerald_lantern Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9066 Emerald_lens Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9067 Dream_log Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9068 Moonclan_helm Mystical_headgear. 1 1 0 0 0 0 3 -5 3 3 3 3 -5 0 0 +item = 9069 Moonclan_hat A_mystical_hat. 1 1 0 0 0 0 3 -5 3 3 3 3 -5 0 0 +item = 9070 Moonclan_armour Provides_good_protection. 1 1 0 0 0 0 5 -10 5 5 5 5 -10 0 0 +item = 9071 Moonclan_skirt This_should_protect_my_legs. 1 1 0 0 0 0 5 -7 5 5 5 5 -7 0 0 +item = 9072 Moonclan_gloves These_should_keep_my_hands_safe. 1 1 0 0 0 0 2 -5 2 2 2 2 -5 0 0 +item = 9073 Moonclan_boots Groovy_foot_protection. 1 1 0 0 0 0 2 -5 2 2 2 2 -5 0 0 +item = 9074 Moonclan_cape A_mystical_cape. 1 1 0 0 0 0 2 -2 0 1 1 2 -2 0 0 +item = 9075 Astral_rune Used_for_Lunar_spells. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9076 Lunar_ore This_needs_refining. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9077 Lunar_bar It's_a_bar_of_magic_metal. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9078 Moonclan_manual A_book_of_moonclan_history. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9079 Suqah_tooth Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9080 Suqah_hide Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9081 Suqah_leather Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9082 Ground_tooth Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9083 Seal_of_passage Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9084 Lunar_staff A_moonclan_staff. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9085 Empty_vial Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9086 Vial_of_water Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9087 Waking_sleep_vial Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9088 Guam_vial Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9089 Marr_vial Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9090 Guam-marr_vial Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9091 Lunar_staff_-_pt1 A_staff_enchanted_by_air. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9092 Lunar_staff_-_pt2 A_staff_enchanted_by_air_and_fire. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9093 Lunar_staff_-_pt3 A_staff_enchanted_by_air_,_fire,_and_water. 1 1 10 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9094 Kindling Small_bits_of_wood_from_the_first_magic_tree. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9095 Soaked_kindling Null 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9096 Lunar_helm A_mystical_helmet. 1 1 0 0 0 0 3 -2 8 7 10 2 0 0 0 +item = 9097 Lunar_torso Provides_good_protection 1 1 1 0 0 0 10 -10 34 22 40 12 0 0 0 +item = 9098 Lunar_legs These_should_protect_my_legs. 1 1 0 0 0 0 7 7 20 19 23 9 0 0 0 +item = 9099 Lunar_gloves These_should_keep_my_hands_safe. 1 1 0 0 0 0 4 -1 2 1 1 2 0 0 0 +item = 9100 Lunar_boots Mystical_foot_protection. 1 1 0 0 0 0 2 -1 0 0 0 1 0 0 0 +item = 9101 Lunar_cape Oooo_pretty! 1 1 0 0 0 0 0 0 1 1 0 2 0 0 0 +item = 9102 Lunar_amulet Awesome. 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 +item = 9103 A_special_tiara 'll_be_the_take_of_the_town_with_this..._maybe. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9104 Lunar_ring A_mysterious_ring_that_can_fill_the_wearer_with_magical_power... 1 1 0 0 0 0 2 0 0 0 0 2 0 0 0 +item = 9105 Suqah_monster Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9106 Astral_tiara A_tiara_infused_with_the_properties_of_astral. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9107 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9108 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9109 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9110 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9111 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9112 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9113 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9114 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9115 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9116 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9117 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9118 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9119 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9120 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9121 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9122 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9123 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9124 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9125 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9126 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9127 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9128 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9129 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9130 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9131 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9132 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9133 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9134 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9135 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9136 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9137 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9138 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9139 Blurite_bolts Blurite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9140 Iron_bolts Iron_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9141 Steel_bolts Steel_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9142 Mithril_bolts Mithril_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9143 Adamant_bolts Adamant_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9144 Runite_bolts Runite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9145 Silver_bolts Silver_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9146 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9147 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9148 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9149 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9150 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9151 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9152 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9153 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9154 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9155 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9156 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9157 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9158 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9159 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9160 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9161 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9162 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9163 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9164 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9165 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9166 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9167 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9168 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9169 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9170 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9171 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9172 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9173 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9174 Bronze_c'bow A_bronze_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9175 Bronze_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9176 Blurite_c'bow A_blurite_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9177 Iron_c'bow An_iron_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9178 Iron_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9179 Steel_c'bow A_steel_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9180 Steel_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9181 Mith_c'bow A_mithril_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9182 Mith_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9183 Adamant_c'bow An_adamant_crossbow. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9184 Adamant_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9185 Rune_c'bow A_runite_crossbow. 1 1 0 0 0 0 0 90 0 0 0 0 0 0 0 +item = 9186 Rune_c'bow Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9187 Jade_bolt_tips Jade_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9188 Topaz_bolt_tips Topaz_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9189 Sapphire_bolt_tips Sapphire_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9190 Emerald_bolt_tips Emerald_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9191 Ruby_bolt_tips Ruby_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9192 Diamond_bolt_tips Diamond_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9193 Dragon_bolt_tips Dragon_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9194 Onyx_bolt_tips Onyx_bolt_tips. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9195 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9196 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9197 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9198 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9199 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9200 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9201 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9202 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9203 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9204 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9205 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9206 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9207 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9208 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9209 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9210 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9211 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9212 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9213 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9214 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9215 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9216 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9217 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9218 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9219 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9220 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9221 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9222 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9223 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9224 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9225 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9226 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9227 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9228 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9229 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9230 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9231 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9232 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9233 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9234 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9235 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9236 Opal_bolts_(e) Enchanted_opal_tipped_bronze_crossbow_bolts. 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9237 Jade_bolts_(e) Enchanted_jade_tipped_blurite_crossbow_bolts. 5 7 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9238 Pearl_bolts_(e) Enchanted_pearl_tipped_iron_crossbow_bolts. 8 10 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9239 Topaz_bolts_(e) Enchanted_red_topaz_tipped_steel_crossbow_bolts. 11 13 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9240 Sapphire_bolts_(e) Enchanted_sapphire_tipped_mithril_crossbow_bolts. 14 16 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9241 Emerald_bolts_(e) Enchanted_emerald_tipped_mithril_crossbow_bolts. 17 19 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9242 Ruby_bolts_(e) Enchanted_ruby_tipped_adamantite_crossbow_bolts. 19 22 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9243 Diamond_bolts_(e) Enchanted_diamond_tipped_adamantite_crossbow_bolts. 22 25 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9244 Dragon_bolts_(e) Enchanted_dragonstone_tipped_rune_crossbow_bolts. 4200 6200 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9245 Onyx_bolts_(e) Enchanted_onyx_tipped_runite_crossbow_bolts. 6000 9000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9246 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9247 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9248 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9249 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9250 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9251 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9252 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9253 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9254 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9255 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9256 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9257 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9258 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9259 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9260 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9261 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9262 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9263 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9264 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9265 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9266 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9267 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9268 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9269 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9270 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9271 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9272 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9273 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9274 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9275 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9276 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9277 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9278 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9279 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9280 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9281 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9282 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9283 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9284 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9285 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9286 Blurite_bolts(p) Some_poisoned_blurite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9287 Iron_bolts_(p) Some_poisoned_iron_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9288 Steel_bolts_(p) Some_poisoned_steel_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9289 Mithril_bolts_(p) Some_poisoned_mithril_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9290 Addy_bolts_(p) Some_poisoned_adamant_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9291 Runite_bolts_(p) Some_poisoned_runite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9292 Silver_bolts_(p) Some_poisoned_silver_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9293 Blurite_bolts(p+) Some_poisoned_blurite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9294 Iron_bolts(p+) Some_poisoned_iron_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9295 Steel_bolts(p+) Some_poisoned_steel_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9296 Mithril_bolts(p+) Some_poisoned_mithril_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9297 Addy_bolts(p+) Some_poisoned_adamant_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9298 Runite_bolts(p+) Some_poisoned_runite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9299 Silver_bolts(p+) Some_poisoned_silver_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9300 Blurite_bolts(s) Some_poisoned_blurite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9301 Iron_bolts(s) Some_poisoned_iron_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9302 Steel_bolts(s) Some_poisoned_steel_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9303 Mithril_bolts(s) Some_poisoned_mithril_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9304 Addy_bolts(s) Some_poisoned_adamant_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9305 Runite_bolts(s) Some_poisoned_runite_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9306 Silver_bolts(s) Some_poisoned_silver_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9307 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9308 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9309 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9310 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9311 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9312 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9313 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9314 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9315 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9316 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9317 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9318 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9319 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9320 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9321 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9322 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9323 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9324 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9325 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9326 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9327 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9328 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9329 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9330 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9331 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9332 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9333 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9334 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9335 Jade_bolts Jade_tipped_Blurite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9336 Topaz_bolts Topaz_tipped_Steel_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9337 Sapphire_bolts Sapphire_tipped_Mithril_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9338 Emerald_bolts Emerald_tipped_Mithril_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9339 Ruby_bolts Ruby_tipped_Adamantite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9340 Diamond_bolts Diamond_tipped_Adamantite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9341 Dragon_bolts Dragonstone_tipped_Runite_crossbow_bolts. 423 637 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9342 Onyx_bolts Onyx_tipped_Runite_crossbow_bolts. 6000 9000 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9343 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9344 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9345 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9346 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9347 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9348 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9349 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9350 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9351 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9352 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9353 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9354 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9355 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9356 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9357 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9358 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9359 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9360 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9361 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9362 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9363 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9364 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9365 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9366 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9367 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9368 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9369 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9370 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9371 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9372 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9373 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9374 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9375 Bronze_bolts_(unf) Unfeathered_bronze_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9376 Blurite_bolts_(unf) Unfeathered_blurite_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9377 Iron_bolts_(unf) Unfeathered_iron_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9378 Steel_bolts_(unf) Unfeathered_steel_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9379 Mithril_bolts_(unf) Unfeathered_mithril_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9380 Adamant_bolts(unf) Unfeathered_adamant_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9381 Runite_bolts_(unf) Unfeathered_rune_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9382 Silver_bolts_(unf) Unfeathered_silver_crossbow_bolts. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9383 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9384 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9385 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9386 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9387 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9388 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9389 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9390 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9391 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9392 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9393 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9394 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9395 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9396 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9397 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9398 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9399 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9400 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9401 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9402 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9403 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9404 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9405 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9406 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9407 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9408 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9409 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9410 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9411 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9412 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9413 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9414 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9415 Grapple Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9416 Mith_grapple_tip A_mithril_grapple_tip. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9417 Mith_grapple_tip Swap_this_note_at_any_bank_for_te_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9418 Mith_grapple A_mithril_grapple_tipped_bolt_-_needs_a_rope. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9419 Mith_grapple Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9420 Bronze_limbs A_pair_of_bronze_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9421 Bronze_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9422 Blurite_limbs A_pair_of_blurite_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9423 Iron_limbs A_pair_of_iron_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9424 Iron_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9425 Steel_limbs A_pair_of_steel_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9426 Steel_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9427 Mithril_limbs A_pair_of_mithril_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9428 Mithril_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9429 Adamantite_limbs A_pair_of_adamant_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9430 Adamantite_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9431 Runite_limbs A_pair_of_rune_crossbow_limbs. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9432 Runite_limbs Swap_this_note_at_any_bank_for_the_equivelent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9433 Bolt_pouch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9434 Bolt_mould Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9435 Bolt_mould Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9436 Sinew Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9437 Sinew Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9438 Crossbow_string Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9439 Crossbow_string Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9440 Wooden_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9441 Wooden_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9442 Oak_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9443 Oak_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9444 Willow_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9445 Willow_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9446 Teak_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9447 Teak_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9448 Maple_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9449 Maple_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9450 Mahogany_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9451 Mahogany_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9452 Yew_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9453 Yew_stock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9454 Bronze_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9455 Bronze_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9456 Blurite_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9457 Iron_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9458 Iron_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9459 Steel_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9460 Steel_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9461 Mithril_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9462 Mithril_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9463 Adamant_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9464 Adamant_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9465 Runite_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9466 Runite_c'bow_(u) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9467 Blurite_bar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9468 Sawdust Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9469 Grand_seed_pod Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9470 Gnome_scarf Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9471 Gnome_scarf Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9472 Gnome_goggles Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9473 Gnome_goggles Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9474 Reward_token Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9475 Mint_cake Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9476 Mint_cake Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9477 Aluft_aloft_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9478 Half_made_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9479 Unfinished_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9480 Half_made_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9481 Unfinished_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9482 Half_made_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9483 Half_made_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9484 Unfinished_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9485 Half_made_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9486 Unfinished_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9487 Wizard_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9488 Wizard_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9489 Wizard_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9490 Picture Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9491 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9492 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9493 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9494 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9495 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9496 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9497 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9498 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9499 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9500 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9501 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9502 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9503 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9504 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9505 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9506 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9507 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9508 Wizard_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9509 Wizard_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9510 Short_green_guy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9511 Short_green_guy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9512 Pineapple_punch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9513 Pineapple_punch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9514 Fruit_blast Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9515 Fruit_blast Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9516 Drunk_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9517 Drunk_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9518 Choc_saturday Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9519 Choc_saturday Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9520 Blurberry_special Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9521 Blurberry_special Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9522 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9523 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9524 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9525 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9526 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9527 Fruit_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9528 Fruit_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9529 Toad_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9530 Toad_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9531 Worm_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9532 Worm_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9533 Vegetable_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9534 Vegetable_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9535 Cheese+tom_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9536 Cheese+tom_batta Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9537 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9538 Toad_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9539 Toad_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9540 Spicy_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9541 Spicy_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9542 Worm_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9543 Worm_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9544 Chocchip_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9545 Chocchip_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9546 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9547 Worm_hole Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9548 Worm_hole Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9549 Veg_ball Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9550 Veg_ball Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9551 Tangled_toads'_legs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9552 Tangled_toads'_legs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9553 Chocolate_bomb Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9554 Chocolate_bomb Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9555 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9556 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9557 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9558 Half_made_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9559 Half_made_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9560 Unfinished_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9561 Half_made_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9562 Unfinished_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9563 Half_made_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9564 Unfinished_bowl Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2025 Cocktail_shaker Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9565 Cocktail_shaker Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9566 Mixed_blizzard Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9567 Mixed_sgg Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9568 Mixed_blast Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9569 Mixed_punch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9570 Mixed_blurberry_special Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9571 Mixed_saturday Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9572 Mixed_saturday Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9573 Mixed_saturday Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9574 Mixed_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9575 Mixed_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9576 Mixed_dragon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9577 Half_made_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9578 Unfinished_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9579 Half_made_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9580 Unfinished_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9581 Half_made_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9582 Unfinished_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9583 Half_made_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9584 Unfinished_crunchy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2164 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9585 Batta_tin Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2165 Crunchy_tray Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9586 Crunchy_tray Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2166 Gnomebowl_mould Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9587 Gnomebowl_mould Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 2202 Raw_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9588 Raw_crunchies Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9589 Dossier Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9590 Dossier Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9591 Broken_cauldron Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9592 Magic_glue Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9593 Weird_gloop Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9594 Ground_mud_runes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9595 Hazelmere's_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9596 Picture Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9597 Red_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9598 Red_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9599 Red_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9600 Red_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9601 Orange_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9602 Orange_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9603 Orange_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9604 Orange_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9605 Yellow_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9606 Yellow_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9607 Yellow_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9608 Yellow_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9609 Green_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9610 Green_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9611 Green_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9612 Green_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9613 Blue_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9614 Blue_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9615 Blue_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9616 Blue_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9617 Indigo_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9618 Indigo_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9619 Indigo_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9620 Indigo_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9621 Violet_circle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9622 Violet_triangle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9623 Violet_square Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9624 Violet_pentagon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9625 Crystal_saw Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9626 Small_crystal_seed Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9627 A_handwritten_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9628 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9629 Tyras_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9630 Tyras_helm Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9631 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9632 Daeyalt_ore Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9633 Message Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9634 Vyrewatch_top Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9635 Vyrewatch_top Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9636 Vyrewatch_legs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9637 Vyrewatch_legs Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9638 Vyrewatch_shoes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9639 Vyrewatch_shoes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9640 Citizen_top Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9641 Citizen_top Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9642 Citizen_trousers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9643 Citizen_trousers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9644 Citizen_shoes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9645 Citizen_shoes Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9646 Castle_sketch_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9647 Castle_sketch_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9648 Castle_sketch_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9649 Message Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9650 Blood_tithe_pouch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9651 Large_ornate_key Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9652 Haemalchemy Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9653 Sealed_message Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9654 Door_key Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9655 Ladder_top Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9656 Tome_of_xp_(3) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9657 Tome_of_xp_(2) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9658 Tome_of_xp_(1) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9659 Bucket_of_water Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9660 Bucket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9661 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9662 Shortcut_key Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9663 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9664 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9665 Torch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9666 Pros'yte_harness_m Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9667 Pros'yte_harness_m Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9668 Initiate_harness_m Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9669 Initiate_harness_m Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9670 Pros'yte_harness_f Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9671 Pros'yte_harness_f Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9672 Proselyte_sallet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9673 Proselyte_sallet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9674 Proselyte_hauberk Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9675 Proselyte_hauberk Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9676 Proselyte_cuisse Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9677 Proselyte_cuisse Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9678 Proselyte_tasset Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9679 Proselyte_tasset Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9680 Sea_slug_glue Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9681 Commorb_v2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9682 Door_transcription Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9683 Dead_sea_slug Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9684 Page_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9685 Page_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9686 Page_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9687 Fragment_1 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9688 Fragment_2 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9689 Fragment_3 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9690 Blank_water_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9691 Water_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9692 Blank_air_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9693 Air_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9694 Blank_earth_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9695 Earth_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9696 Blank_mind_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9697 Mind_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9698 Blank_fire_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9699 Fire_rune Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9700 Picture Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9701 Torch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9702 Stick Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9703 Training_sword Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9704 Training_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9705 Training_bow Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9706 Training_arrows Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9707 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9708 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9709 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9710 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9711 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9712 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9713 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9714 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9715 Slashed_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9716 Rock Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9717 Beaten_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9718 Crane_schematic Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9719 Lever_schematic Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9720 Crane_claw Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9721 Scroll Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9722 Key Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9723 Pipe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9724 Large_cog Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9725 Medium_cog Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9726 Small_cog Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9727 Primed_bar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9728 Elemental_mind_bar Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9729 Elemental_helmet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9730 Elemental_helmet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9731 Mind_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9732 Mind_shield Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9733 Mind_helmet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9734 Mind_helmet Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9735 Desert_goat_horn Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9736 Goat_horn_dust Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9737 Goat_horn_dust Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9738 Desert_goat_horn Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9739 Combat_potion(4) A_combat_potion. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9740 Combat_potion(4) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9741 Combat_potion(3) A_combat_potion. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9742 Combat_potion(3) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9743 Combat_potion(2) A_combat_potion. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9744 Combat_potion(2) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9745 Combat_potion(1) A_combat_potion 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9746 Combat_potion(1) Swap_this_note_at_any_bank_for_the_equivalent_item. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9747 Attack_cape The_cape_worn_by_masters_of_Attack. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9748 Attack_cape(t) The_cape_worn_by_masters_of_Attack. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9749 Attack_hood Attack_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9750 Strength_cape The_cape_worn_by_masters_of_Strength. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9751 Strength_cape(t) The_cape_worn_by_masters_of_Strength. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9752 Strength_hood Strength_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9753 Defence_cape The_cape_worn_by_masters_of_Defence. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9754 Defence_cape(t) The_cape_worn_by_masters_of_Defence. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9755 Defence_hood Defence_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9756 Ranging_cape The_cape_worn_by_masters_of_Ranging. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9757 Ranging_cape(t) The_cape_worn_by_masters_of_Ranging. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9758 Ranging_hood Ranging_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9759 Prayer_cape The_cape_worn_by_masters_of_Prayer. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9760 Prayer_cape(t) The_cape_worn_by_masters_of_Prayer. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9761 Prayer_hood Prayer_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9762 Magic_cape The_cape_worn_by_masters_of_Magic. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9763 Magic_cape(t) The_cape_worn_by_masters_of_Magic. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9764 Magic_hood Magic_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9765 Runecraft_cape The_cape_worn_by_masters_of_Runecraft. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9766 Runecraft_cape(t) The_cape_worn_by_masters_of_Runecraft. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9767 Runecraft_hood Runecraft_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9768 Hitpoints_cape The_cape_worn_by_masters_of_Hitpoints. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9769 Hitpoints_cape(t) The_cape_worn_by_masters_of_Hitpoints. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9770 Hitpoints_hood Hitpoints_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9771 Agility_cape The_cape_worn_by_masters_of_Agility. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9772 Agility_cape(t) The_cape_worn_by_masters_of_Agility. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9773 Agility_hood Agility_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9774 Herblore_cape The_cape_worn_by_masters_of_Herblore. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9775 Herblore_cape(t) The_cape_worn_by_masters_of_Herblore. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9776 Herblore_hood Herblore_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9777 Thieving_cape The_cape_worn_by_masters_of_Thieving. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9778 Thieving_cape(t) The_cape_worn_by_masters_of_Thieving. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9779 Thieving_hood Thieving_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9780 Crafting_cape The_cape_worn_by_masters_of_Crafting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9781 Crafting_cape(t) The_cape_worn_by_masters_of_Crafting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9782 Crafting_hood Crafting_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9783 Fletching_cape The_cape_worn_by_masters_of_Fletching. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9784 Fletching_cape(t) The_cape_worn_by_masters_of_Fletching. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9785 Fletching_hood Fletching_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9786 Slayer_cape The_cape_worn_by_masters_of_Slayer. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9787 Slayer_cape(t) The_cape_worn_by_masters_of_Slayer. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9788 Slayer_hood Slayer_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9789 Construct._cape The_cape_worn_by_masters_of_Construct.. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9790 Construct._cape(t) The_cape_worn_by_masters_of_Construct.. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9791 Construct._hood Construct._skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9792 Mining_cape The_cape_worn_by_masters_of_Mining. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9793 Mining_cape(t) The_cape_worn_by_masters_of_Mining. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9794 Mining_hood Mining_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9795 Smithing_cape The_cape_worn_by_masters_of_Smithing. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9796 Smithing_cape(t) The_cape_worn_by_masters_of_Smithing. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9797 Smithing_hood Smithing_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9798 Fishing_cape The_cape_worn_by_masters_of_Fishing. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9799 Fishing_cape(t) The_cape_worn_by_masters_of_Fishing. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9800 Fishing_hood Fishing_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9801 Cooking_cape The_cape_worn_by_masters_of_Cooking. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9802 Cooking_cape(t) The_cape_worn_by_masters_of_Cooking. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9803 Cooking_hood Cooking_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9804 Firemaking_cape The_cape_worn_by_masters_of_Firemaking. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9805 Firemaking_cape(t) The_cape_worn_by_masters_of_Firemaking. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9806 Firemaking_hood Firemaking_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9807 Woodcutting_cape The_cape_worn_by_masters_of_Woodcutting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9808 Woodcutting_cape(t) The_cape_worn_by_masters_of_Woodcutting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9809 Woodcutting_hood Woodcutting_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9810 Farming_cape The_cape_worn_by_masters_of_Farming. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9811 Farming_cape(t) The_cape_worn_by_masters_of_Farming. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9812 Farming_hood Farming_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9813 Quest_point_cape The_cape_worn_by_masters_of_Quests. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9814 Quest_point_hood Quest_point_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9815 Bobble_hat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9816 Bobble_scarf Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9817 Oak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9818 Teak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9819 M'gany_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9820 Gilded_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9821 Marble_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9822 Magical_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9823 Oak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9824 Teak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9825 Mahogany_cos_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9826 Oak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9827 Teak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9828 M'gany_arm'r_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9829 Oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9830 Carved_oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9831 Teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9832 Carved_teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9833 Mahogany_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9834 Gilded_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9835 Marble_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9836 Oak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9837 Teak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9838 Mahogany_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9839 Oak_treasure_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9840 Teak_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9841 M'gany_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9842 Costume_room Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9843 Oak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9844 Teak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9845 M'gany_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9846 Gilded_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9847 Marble_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9848 Magical_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9849 Oak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9850 Teak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9851 Mahogany_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9852 Oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9853 Carved_oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9854 Teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9855 Carved_teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9856 Mahogany_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9857 Gilded_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9858 Marble_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9859 Oak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9860 Teak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9861 M'gany_arm'r_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9862 Oak_treasure_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9863 Teak_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9864 M'gany_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9865 Oak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9866 Teak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9867 Mahogany_cos_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9868 Oak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9869 Teak_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9870 M'gany_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9871 Gilded_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9872 Marble_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9873 Magical_cape_rack Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9874 Oak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9875 Teak_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9876 Mahogany_toy_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9877 Oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9878 Carved_oak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9879 Teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9880 Carved_teak_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9881 Mahogany_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9882 Gilded_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9883 Marble_magic_wardrobe Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9884 Oak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9885 Teak_armour_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9886 M'gany_arm'r_case Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9887 Oak_treasure_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9888 Teak_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9889 M'gany_treas'_chest Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9890 Oak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9891 Teak_costume_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9892 Mahogany_cos_box Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9893 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9894 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9895 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9896 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9897 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9898 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9899 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9900 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9901 Goutweedy_lump Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9902 Hardy_gout_tubers Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9903 Farming_manual Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9904 Sailing_book Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9905 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9906 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9907 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9908 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9909 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9910 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9911 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9912 Ghost_buster_500 Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9913 White_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9914 Red_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9915 Blue_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9916 Green_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9917 Yellow_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9918 Black_destabiliser Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9919 Evil_root Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9920 Jack_lantern_mask Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9921 Skeleton_boots Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9922 Skeleton_gloves Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9923 Skeleton_leggings Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9924 Skeleton_shirt Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9925 Skeleton_mask Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9926 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9927 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9928 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9929 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9930 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9931 Null Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9932 Auguste's_sapling Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9933 Balloon_structure Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9934 Origami_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9935 Yellow_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9936 Blue_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9937 Red_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9938 Orange_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9939 Green_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9940 Purple_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9941 Pink_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9942 Black_balloon Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9943 Sandbag Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9944 Bomber_jacket Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9945 Bomber_cap Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9946 Cap_and_goggles Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9947 Old_red_disk Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9948 Hunter_cape The_cape_worn_by_masters_of_Hunting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 0 +item = 9949 Hunter_cape(t) The_cape_worn_by_masters_of_Hunting. 1 1 1 0 0 0 0 0 9 9 9 9 9 0 4 +item = 9950 Hunter_hood Hunting_skillcape_hood. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9951 Footprint Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9952 Imp Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9953 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9954 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9955 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9956 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9957 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9958 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9959 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9960 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9961 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9962 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9963 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9964 Kebbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9965 Crimson_swift Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9966 Copper_longtail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9967 Cerulean_twitch Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9968 Golden_warbler Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9969 Tropical_wagtail Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9970 Butterfly Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9971 Butterfly Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9972 Butterfly Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9973 Butterfly Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9974 Giant_eagle Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9975 Rabbit Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9976 Chinchompa Handle_with_care. 1 1 1 0 0 0 0 45 0 0 0 0 0 0 0 +item = 9977 Red_chinchompa Even_more_volatile_than_its_vegetarian_counterpart. 1 1 1 0 0 0 0 70 0 0 0 0 0 0 0 +item = 9978 Raw_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9979 Raw_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9980 Roast_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9981 Roast_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9982 Burnt_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9983 Burnt_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9984 Skewered_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9985 Skewered_bird_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9986 Raw_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9987 Raw_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9988 Roast_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9989 Roast_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9990 Burnt_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9991 Burnt_beast_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9992 Skewered_beast Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9993 Skewered_beast Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9994 Spicy_tomato Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9995 Spicy_tomato Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9996 Spicy_minced_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9997 Spicy_minced_meat Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9998 Hunter_potion(4) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 9999 Hunter_potion(4) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +item = 10000 Hunter_potion(3) Null 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +[ENDOFITEMLIST] \ No newline at end of file diff --git a/2006Redone Server/data/cfg/npc.cfg b/2006Redone Server/data/cfg/npc.cfg new file mode 100644 index 00000000..0dd86efd --- /dev/null +++ b/2006Redone Server/data/cfg/npc.cfg @@ -0,0 +1,2891 @@ +// NpcID NpcName combat health +npc = 0 Hans 0 0 +npc = 1 Man 2 7 +npc = 2 Man 2 7 +npc = 3 Man 2 7 +npc = 4 Woman 2 7 +npc = 5 Woman 2 7 +npc = 6 Woman 2 7 +npc = 7 Farmer 7 12 +npc = 8 Thief 16 17 +npc = 9 Guard 21 22 +npc = 10 Guard 22 22 +npc = 11 Tramp 2 7 +npc = 12 Barbarian 7 14 +npc = 13 Wizard 9 14 +npc = 14 Druid 33 30 +npc = 15 Warrior_woman 24 20 +npc = 16 Man 2 7 +npc = 17 Barbarian_woman 8 18 +npc = 18 Al-Kharid_warrior 9 19 +npc = 19 White_Knight 36 52 +npc = 20 Paladin 62 57 +npc = 21 Hero 69 83 +npc = 22 Forester 0 0 +npc = 23 Knight_of_Ardougne 46 52 +npc = 24 Man 2 7 +npc = 25 Woman 2 7 +npc = 26 Knight_of_Ardougne 46 52 +npc = 27 Archer 42 68 +npc = 28 Zoo_keeper 0 0 +npc = 29 Chuck 0 0 +npc = 30 Barman 0 0 +npc = 31 Priest 0 0 +npc = 32 Guard 20 22 +npc = 33 Door_man 0 0 +npc = 34 Watchman 33 22 +npc = 35 Soldier 28 22 +npc = 36 Wyson_the_gardener 0 0 +npc = 37 Sigbert_the_Adventurer 0 0 +npc = 38 Shipyard_worker 11 10 +npc = 39 Shipyard_worker 11 10 +npc = 40 Shark 0 0 +npc = 41 Chicken 1 3 +npc = 42 Sheep 0 0 +npc = 43 Sheep 0 0 +npc = 44 Duck 1 3 +npc = 45 Duck 1 3 +npc = 46 Duckling 1 2 +npc = 47 Rat 1 2 +npc = 48 Oomlie_Bird 46 40 +npc = 49 Hellhound 122 116 +npc = 50 King_black_dragon 276 240 +npc = 51 Baby_dragon 48 51 +npc = 52 Baby_blue_dragon 48 51 +npc = 53 Red_dragon 152 145 +npc = 54 Black_dragon 227 199 +npc = 55 Blue_dragon 111 109 + +//------------------------Not In DB------------------------ +npc = 56 Dryad 0 0 +//------------------------Not In DB------------------------ + +npc = 57 Fairy 0 0 +npc = 58 Shadow_spider 49 55 +npc = 59 Giant_spider 2 2 +npc = 60 Giant_spider 27 26 +npc = 61 Spider 1 2 +npc = 62 Jungle_spider 44 50 +npc = 63 Deadly_red_spider 34 36 +npc = 64 Ice_spider 61 54 + +//------------------------Not In DB------------------------ +npc = 65 Leprechaun 12 0 +//------------------------Not In DB------------------------ + +npc = 66 Gnome 1 3 +npc = 67 Gnome 1 3 +npc = 68 Gnome 1 3 + +//------------------------Not In DB------------------------ +npc = 69 Lizard_man 22 0 +//------------------------Not In DB------------------------ + +npc = 70 Turael 0 0 +npc = 71 Orc 20 33 +npc = 72 Troll 69 91 +npc = 73 Zombie 13 22 +npc = 74 Zombie 18 30 +npc = 75 Zombie 24 30 +npc = 76 Zombie 25 31 +npc = 77 Summoned_Zombie 13 21 +npc = 78 Giant_bat 27 32 +npc = 79 Death_wing 83 80 +npc = 80 Camel 0 0 +npc = 81 Cow 2 8 +npc = 82 Lesser_demon 82 79 +npc = 83 Greater_demon 92 87 +npc = 84 Black_Demon 172 157 + +//------------------------Not In DB------------------------ +npc = 85 Golem 55 0 +//------------------------Not In DB------------------------ + +npc = 86 Giant_rat 3 5 +npc = 87 Giant_rat 6 10 +npc = 88 Dungeon_rat 12 12 +npc = 89 Unicorn 15 19 +npc = 90 Skeleton 25 29 +npc = 91 Skeleton 21 24 +npc = 92 Skeleton 22 29 +npc = 93 Skeleton 45 59 +npc = 94 Skeleton_Mage 16 17 +npc = 95 Wolf 64 70 +npc = 96 White_wolf 25 34 +npc = 97 White_wolf 25 34 +npc = 98 Dog 0 0 +npc = 99 Guard_dog 44 49 +npc = 100 Goblin 2 5 +npc = 101 Goblin 5 14 +npc = 102 Goblin 13 16 +npc = 103 Ghost 19 25 +npc = 104 Ghost 19 25 +npc = 105 Bear 21 26 +npc = 106 Bear 19 25 +npc = 107 Scorpion 14 17 +npc = 108 Poison_Scorpion 20 24 +npc = 109 Pit_Scorpion 28 17 +npc = 110 Fire_giant 86 111 +npc = 111 Ice_giant 53 70 +npc = 112 Moss_giant 42 60 +npc = 113 Jogre 53 60 +npc = 114 Ogre 53 60 +npc = 115 Ogre 53 60 +npc = 116 Cyclops 56 57 +npc = 117 Hill_giant 28 35 +npc = 118 Dwarf 10 16 +npc = 119 Chaos_dwarf 48 62 +npc = 120 Dwarf 20 27 +npc = 121 Dwarf 10 16 +npc = 122 Hobgoblin 28 29 +npc = 123 Hobgoblin 42 50 +npc = 124 Earth_warrior 51 60 +npc = 125 Ice_warrior 57 60 +npc = 126 Otherworldly_being 64 66 +npc = 127 Magic_axe 42 44 +npc = 128 Snake 5 6 + +//------------------------Not In DB------------------------ +npc = 129 Skavid 2 0 +npc = 130 Yeti 58 0 +//------------------------Not In DB------------------------ + +npc = 131 Penguin 2 4 +npc = 132 Monkey 3 6 +npc = 133 Black_unicorn 27 30 +npc = 134 Poison_spider 64 65 + +//------------------------Not In DB------------------------ +npc = 135 Mammoth 41 0 +//------------------------Not In DB------------------------ + +npc = 136 Terrorbird 28 34 +npc = 137 Mounted_terrorbird_gnome 31 36 +npc = 138 Mounted_terrorbird_gnome 31 36 +npc = 139 Entrana_Fire_Bird 2 5 +npc = 140 Souless 18 24 +npc = 141 Big_Wolf 73 67 +npc = 142 White_Wolf 25 34 +npc = 143 Jungle_Wolf 64 71 +npc = 144 King_Scorpion 32 30 +npc = 145 Ice_warrior 57 60 +npc = 146 Gull 0 0 +npc = 147 Cormorant 0 0 +npc = 148 Albatross 0 0 +npc = 149 Gull 0 0 +npc = 150 Gull 0 0 +npc = 151 Fly_trap 0 0 +npc = 152 Tree 0 0 +npc = 153 Butterfly 0 0 +npc = 154 Butterfly 0 0 +npc = 155 Butterfly 0 0 +npc = 156 Butterfly 0 0 +npc = 157 Butterfly 0 0 +npc = 158 Shadow_warrior 48 67 +npc = 159 Gnome_child 1 2 +npc = 160 Gnome_child 1 2 +npc = 161 Gnome_child 1 2 +npc = 162 Gnome_trainer 0 0 +npc = 163 Gnome_guard 23 33 +npc = 164 Gnome_guard 23 33 +npc = 165 Gnome_shop_keeper 0 0 +npc = 166 Gnome_banker 0 0 +npc = 167 Gnome_baller 0 0 +npc = 168 Gnome_woman 1 2 +npc = 169 Gnome_woman 1 2 +npc = 170 Gnome_pilot 0 0 +npc = 171 Brimstail 0 0 +npc = 172 Dark_wizard 20 24 +npc = 173 Invrigar_the_Necromancer 20 24 +npc = 174 Dark_wizard 7 12 +npc = 175 Mugger 6 8 +npc = 176 Witch 20 21 +npc = 177 Witch 20 21 +npc = 178 Black_Knight 33 42 +npc = 179 Black_Knight 33 42 +npc = 180 Highwayman 5 10 +npc = 181 Chaos_druid 13 20 +npc = 182 Pirate 23 23 +npc = 183 Pirate 23 23 +npc = 184 Pirate 26 23 +npc = 185 Pirate 23 32 +npc = 186 Thug 10 18 +npc = 187 Rogue 15 17 +npc = 188 Monk_of_Zamorak 22 29 +npc = 189 Monk_of_Zamorak 17 10 +npc = 190 Monk_of_Zamorak 45 42 +npc = 191 Tribesman 32 33 +npc = 192 Dark_warrior 8 18 +npc = 193 Chaos_druid_warrior 37 40 +npc = 194 Necromancer 26 44 +npc = 195 Gaurd_Bandit 21 28 +npc = 196 Guard_Bandit 21 28 + +//------------------------Not In DB------------------------ +npc = 197 Barbarian_guard 8 0 +//------------------------Not In DB------------------------ + +npc = 198 Guild_master 0 0 +npc = 199 Gunthor_the_brave 29 35 +npc = 200 Lord_Daquarius 0 0 +npc = 201 Jailer 42 47 +npc = 202 Black_Heather 34 37 +npc = 203 Donny_the_lad 34 37 +npc = 204 Speedy_Keith 34 37 +npc = 205 Salarin_the_twisted 70 70 +npc = 206 Dwarf 10 16 +npc = 207 Dwarf_youngster 0 0 +npc = 208 Dwarf_Commander 0 0 +npc = 209 Nulodion 0 0 +npc = 210 Grail_Maiden 0 0 +npc = 211 Sir_Percival 0 0 +npc = 212 King_Percival 0 0 +npc = 213 Merlin 0 0 +npc = 214 Peasant 0 0 +npc = 215 Peasant 0 0 +npc = 216 High_Priest 0 0 +npc = 217 Crone 0 0 +npc = 218 Galahad 0 0 +npc = 219 Fisherman 0 0 +npc = 220 The_Fisher_King 0 0 +npc = 221 Black_Knight_Titan 120 142 +npc = 222 Monk 5 15 +npc = 223 Brother_Kojo 0 0 +npc = 224 Dungeon_rat 12 12 +npc = 225 Bonzo 0 0 +npc = 226 Sinister_Stranger 0 0 +npc = 227 Morris 0 0 +npc = 228 Big_Dave 0 0 +npc = 229 Joshua 0 0 +npc = 230 Grandpa_Jack 0 0 +npc = 231 Forester 0 0 +npc = 232 Mountain_Dwarf 20 26 +npc = 233 Fishing_spot 0 0 +npc = 234 Fishing_spot 0 0 +npc = 235 Fishing_spot 0 0 +npc = 236 Fishing_spot 0 0 +npc = 237 Renegade_Knight 37 49 + +//------------------------Not In DB------------------------ +npc = 238 Thrantax_the_Mighty 92 0 +//------------------------Not In DB------------------------ + +npc = 239 Sir_Lancelot 0 0 +npc = 240 Sir_Gawain 0 0 +npc = 241 Sir_Kay 0 0 +npc = 242 Sir_Bedivere 0 0 +npc = 243 Sir_Tristram 0 0 +npc = 244 Sir_Pelleas 0 0 +npc = 245 Sir_Lucan 0 0 +npc = 246 Sir_Palomedes 0 0 +npc = 247 Sir_Mordred 39 39 +npc = 248 Morgan_Le_Faye 0 0 +npc = 249 Merlin 0 0 +npc = 250 The_Lady_of_the_Lake 0 0 +npc = 251 King_Arthur 0 0 +npc = 252 Beggar 0 0 +npc = 253 Khazard_Guard 23 22 +npc = 254 Khazard_Guard 23 22 +npc = 255 Khazard_Guard 23 22 +npc = 256 Khazard_Guard 23 22 +npc = 257 Khazard_Guard 23 22 +npc = 258 General_Khazard 112 170 +npc = 259 Khazard_barman 0 0 +npc = 260 Kelvin 0 0 +npc = 261 Joe 0 0 +npc = 262 Fightslave 0 0 +npc = 263 Hengrad 0 0 +npc = 264 Lady_Servil 0 0 +npc = 265 Jeremy_Servil 0 0 +npc = 266 Jeremy_Servil 0 0 +npc = 267 Justin_Servil 0 0 +npc = 268 Local 0 0 +npc = 269 Bouncer 137 118 +npc = 270 Khazard_Ogre 48 61 +npc = 271 Khazard_Scorpion 44 29 +npc = 272 Lucien 0 0 +npc = 273 Lucien 0 0 + +//------------------------Not In DB------------------------ +npc = 274 Guardian_of_Armadyl 45 0 +npc = 275 Guardian_of_Armadyl 43 0 +//------------------------Not In DB------------------------ + +npc = 276 Winelda 0 0 +npc = 277 Fire_Warrior_of_Lesarkus 84 102 +npc = 278 Cook 0 0 +npc = 279 Brother_Omad 0 0 +npc = 280 Brother_Cedric 0 0 +npc = 281 Monk 5 15 +npc = 282 Thief 16 16 +npc = 283 Head_Thief 26 37 +npc = 284 Doric 0 0 +npc = 285 Veronica 0 0 +npc = 286 Professor_Oddenstein 0 0 +npc = 287 Ernest 0 0 +npc = 288 Ernest 0 0 +npc = 289 Councillor_Halgrive 0 0 +npc = 290 Doctor_Orbon 0 0 +npc = 291 Farmer_Brumty 0 0 +npc = 292 plaguesheep_1 0 0 +npc = 293 plaguesheep_2 0 0 +npc = 294 plaguesheep_3 0 0 +npc = 295 plaguesheep_4 0 0 +npc = 296 General_Bentnoze 0 0 +npc = 297 General_Wartface 0 0 +npc = 298 Goblin 5 13 +npc = 299 Goblin 5 13 +npc = 300 Sedridor 0 0 +npc = 301 Twig 0 0 +npc = 302 Hadley 0 0 +npc = 303 Gerald 0 0 +npc = 304 Almera 0 0 +npc = 305 Hudon 0 0 +npc = 306 Golrie 0 0 +npc = 307 Hetty 0 0 +npc = 308 Master_fisher 0 0 +npc = 309 Fishing_spot 0 0 +npc = 310 Fishing_spot 0 0 +npc = 311 Fishing_spot 0 0 +npc = 312 Fishing_spot 0 0 +npc = 313 Fishing_spot 0 0 +npc = 314 Fishing_spot 0 0 +npc = 315 Fishing_spot 0 0 +npc = 316 Fishing_spot 0 0 +npc = 317 Fishing_spot 0 0 +npc = 318 Fishing_spot 0 0 +npc = 319 Fishing_spot 0 0 +npc = 320 Fishing_spot 0 0 +npc = 321 Fishing_spot 0 0 +npc = 322 Fishing_spot 0 0 +npc = 323 Fishing_spot 0 0 +npc = 324 Fishing_spot 0 0 +npc = 325 Fishing_spot 0 0 +npc = 326 Fishing_spot 0 0 +npc = 327 Fishing_spot 0 0 +npc = 328 Fishing_spot 0 0 +npc = 329 Fishing_spot 0 0 +npc = 330 Fishing_spot 0 0 +npc = 331 Fishing_spot 0 0 +npc = 332 Fishing_spot 0 0 +npc = 333 Fishing_spot 0 0 +npc = 334 Fishing_spot 0 0 +npc = 335 Elena 0 0 +npc = 336 DeVinci 0 0 +npc = 337 DeVinci 0 0 +npc = 338 Chancy 0 0 +npc = 339 Chancy 0 0 +npc = 340 Hops 0 0 +npc = 341 Hops 0 0 +npc = 342 Guidor's_wife 0 0 +npc = 343 Guidor 0 0 +npc = 344 Guard 0 0 +npc = 345 Guard 0 0 +npc = 346 Guard 0 0 +npc = 347 Mourner 11 19 +npc = 348 Mourner 24 25 +npc = 349 Kilron 0 0 +npc = 350 Omart 0 0 +npc = 351 Man 2 7 +npc = 352 Woman 2 7 +npc = 353 Woman 2 7 +npc = 354 Woman 2 7 +npc = 355 Child 0 0 +npc = 356 Child 0 0 +npc = 357 Mourner 18 13 +npc = 358 Priest 0 0 +npc = 359 Man 2 7 +npc = 360 Woman 4 13 +npc = 361 Woman 4 13 +npc = 362 Woman 2 7 +npc = 363 Woman 4 13 +npc = 364 King_Lathas 0 0 +npc = 365 Paladin 62 57 +npc = 366 Jerico 0 0 +npc = 367 Chemist 0 0 +npc = 368 Guard 0 0 +npc = 369 Mourner 24 25 +npc = 370 Mourner 11 19 +npc = 371 Mourner 11 19 +npc = 372 Mourner 0 0 +npc = 373 Nurse_Sarah 0 0 +npc = 374 Ogre 63 60 +npc = 375 Redbeard_Frank 0 0 +npc = 376 Captain_Tobias 0 0 +npc = 377 Seaman_Lorris 0 0 +npc = 378 Seaman_Thresnor 0 0 +npc = 379 Luthas 0 0 +npc = 380 Customs_officer 0 0 +npc = 381 Captain_Barnaby 0 0 +npc = 382 Dwarf 0 0 +npc = 383 Stankers 0 0 +npc = 384 Barbarian_guard 0 0 +npc = 385 Kharid_Scorpion 0 0 +npc = 386 Kharid_Scorpion 0 0 +npc = 387 Kharid_Scorpion 0 0 +npc = 388 Seer 0 0 +npc = 389 Thormac 0 0 +npc = 390 Big_fish 0 0 +npc = 391 River_troll 14 28 +npc = 392 River_troll 29 36 +npc = 393 River_troll 49 57 +npc = 394 River_troll 79 90 +npc = 395 River_troll 120 130 +npc = 396 River_troll 159 160 +npc = 397 Cow 2 8 +npc = 398 Legends_Guard 0 0 +npc = 399 Legends_Guard 0 0 +npc = 400 Radimus_Erkle 0 0 +npc = 401 Jungle_Forester 0 0 +npc = 402 Jungle_Forester 0 0 +npc = 403 Fishing_spot 0 0 +npc = 404 Fishing_spot 0 0 +npc = 405 Fishing_spot 0 0 +npc = 406 Fishing_spot 0 0 +npc = 407 Strange_plant 0 0 +npc = 408 Strange_plant 0 0 +npc = 409 Genie 0 0 +npc = 410 Mysterious_Old_Man 0 0 +npc = 411 Swarm 0 0 +npc = 412 Bat 6 8 +npc = 413 Rock_Golem 14 28 +npc = 414 Rock_Golem 29 36 +npc = 415 Rock_Golem 49 57 +npc = 416 Rock_Golem 79 90 +npc = 417 Rock_Golem 120 130 +npc = 418 Rock_Golem 159 160 +npc = 419 Zombie 14 28 +npc = 420 Zombie 29 36 +npc = 421 Zombie 49 57 +npc = 422 Zombie 79 90 +npc = 423 Zombie 120 130 +npc = 424 Zombie 159 160 +npc = 425 Shade 14 28 +npc = 426 Shade 29 36 +npc = 427 Shade 49 57 +npc = 428 Shade 79 90 +npc = 429 Shade 120 130 +npc = 430 Shade 159 160 +npc = 431 Watchman 14 28 +npc = 432 Watchman 29 36 +npc = 433 Watchman 49 57 +npc = 434 Watchman 79 90 +npc = 435 Watchman 120 130 +npc = 436 Watchman 159 160 +npc = 437 Cap'n_Izzy_No-Beard 0 0 +npc = 438 Tree_spirit 14 28 +npc = 439 Tree_spirit 29 36 +npc = 440 Tree_spirit 49 57 +npc = 441 Tree_spirit 79 90 +npc = 442 Tree_spirit 120 130 +npc = 443 Tree_spirit 159 160 +npc = 444 Goblin 5 13 +npc = 445 Goblin 5 13 +npc = 446 Giant_rat 3 5 +npc = 447 Jail_guard 26 29 +npc = 448 Jail_guard 26 29 +npc = 449 Jail_guard 26 29 +npc = 450 Gull 0 0 +npc = 451 Gull 0 0 +npc = 452 Seth_Groats 0 0 +npc = 453 Suit_of_armour 19 29 +npc = 454 Sanfew 0 0 +npc = 455 Kaqemeex 0 0 +npc = 456 Father_Aereck 0 0 +npc = 457 Restless_ghost 0 0 +npc = 458 Father_Urhney 0 0 +npc = 459 Skeleton 21 24 +npc = 460 Wizard_Frumscone 0 0 +npc = 461 Magic_Store_owner 0 0 +npc = 462 Wizard_Distentor 0 0 +npc = 463 Murphy 0 0 +npc = 464 Murphy 0 0 +npc = 465 Murphy 0 0 +npc = 466 Murphy 0 0 +npc = 467 Shark 0 0 +npc = 468 Shark 0 0 +npc = 469 King_Bolren 0 0 +npc = 470 Commander_Montai 0 0 +npc = 471 Bolkoy 0 0 +npc = 472 Remsai 0 0 +npc = 473 Elkoy 0 0 +npc = 474 Elkoy 0 0 +npc = 475 Khazard_trooper 19 22 +npc = 476 Khazard_trooper 19 22 +npc = 477 Khazard_warlord 112 124 +npc = 478 Khazard_commander 48 22 +npc = 479 Gnome_troop 1 3 +npc = 480 Gnome_troop 1 3 +npc = 481 Tracker_gnome_ 0 0 +npc = 482 Tracker_gnome_ 0 0 +npc = 483 Tracker_gnome_ 0 0 +npc = 484 Local_Gnome 0 0 +npc = 485 Local_Gnome 0 0 +npc = 486 Kalron 0 0 +npc = 487 Observatory_assistant 0 0 +npc = 488 Observatory_professor 0 0 +npc = 489 Goblin_guard 26 26 +npc = 490 Observatory_professor 0 0 +npc = 491 Ghost 19 25 +npc = 492 Spirit_of_Scorpius 0 0 +npc = 493 Grave_Scorpion 12 7 +npc = 494 Banker 0 0 +npc = 495 Banker 0 0 +npc = 496 Banker 0 0 +npc = 497 Banker 0 0 +npc = 498 Banker 0 0 +npc = 499 Banker 0 0 +npc = 500 Mosol_Rei 0 0 +npc = 501 Spirit_of_Zadimus 0 0 +npc = 502 Undead_One 68 47 +npc = 503 Undead_One 68 47 +npc = 504 Undead_One 68 47 +npc = 505 Undead_One 73 59 +npc = 506 Rashiliyia 0 0 + +//------------------------Not In DB------------------------ +npc = 507 Nazastarool 91 0 +npc = 508 Nazastarool 68 0 +npc = 509 Nazastarool 93 0 +//------------------------Not In DB------------------------ + +npc = 510 Hajedy 0 0 +npc = 511 Vigroy 0 0 +npc = 512 Kaleb_Paramaya 0 0 +npc = 513 Yohnus 0 0 +npc = 514 Seravel 0 0 +npc = 515 Yanni_Salika 0 0 +npc = 516 Obli 0 0 +npc = 517 Fernahei 0 0 +npc = 518 Captain_Shanks 0 0 +npc = 519 Bob 0 0 +npc = 520 Shop Keeper 0 0 +npc = 521 Shop Assistant 0 0 +npc = 522 Shop Keeper 0 0 +npc = 523 Shop Assistant 0 0 +npc = 524 Shop Keeper 0 0 +npc = 525 Shop assistant 0 0 +npc = 526 Shop Keeper 0 0 +npc = 527 Shop Assistant 0 0 +npc = 528 Shop Keeper 0 0 +npc = 529 Shop Assistant 0 0 +npc = 530 Shop Keeper 0 0 +npc = 531 Shop Assistant 0 0 +npc = 532 Shop Keeper 0 0 +npc = 533 Shop Assistant 0 0 +npc = 534 Fairy Shop Keeper 0 0 +npc = 535 Fairy Shop assistant 0 0 +npc = 536 Valaine 0 0 +npc = 537 Scavvo 0 0 +npc = 538 Peksa 0 0 +npc = 539 Silk_trader 0 0 +npc = 540 Gem_trader 0 0 +npc = 541 Zeke 0 0 +npc = 542 Louie_legs 0 0 +npc = 543 Kebab_seller 0 0 +npc = 544 Ranael 0 0 +npc = 545 Dommik 0 0 +npc = 546 Zaff 0 0 +npc = 547 Baraek 0 0 +npc = 548 Thessalia 0 0 +npc = 549 Horvik 0 0 +npc = 550 Lowe 0 0 +npc = 551 Shop_keeper 0 0 +npc = 552 Shop_assistant 0 0 +npc = 553 Aubury 0 0 +npc = 554 Fancy_dress_shop_owner 0 0 +npc = 555 Shop_keeper 0 0 +npc = 556 Grum 0 0 +npc = 557 Wydin 0 0 +npc = 558 Gerrant 0 0 +npc = 559 Brian 0 0 +npc = 560 Jiminua 0 0 +npc = 561 Shop_keeper 0 0 +npc = 562 Candle_maker 0 0 +npc = 563 Arhein 0 0 +npc = 564 Jukat 0 0 +npc = 565 Lunderwin 0 0 +npc = 566 Irksol 0 0 +npc = 567 Fairy 0 0 +npc = 568 Zambo 0 0 +npc = 569 Silver_merchant 0 0 +npc = 570 Gem_merchant 0 0 +npc = 571 Baker 0 0 +npc = 572 Spice_seller 0 0 +npc = 573 Fur_trader 0 0 +npc = 574 Silk_merchant 0 0 +npc = 575 Hickton 0 0 +npc = 576 Harry 0 0 +npc = 577 Cassie 0 0 +npc = 578 Frincos 0 0 +npc = 579 Drogo_dwarf 0 0 +npc = 580 Flynn 0 0 +npc = 581 Wayne 0 0 +npc = 582 Dwarf 0 0 +npc = 583 Betty 0 0 +npc = 584 Herquin 0 0 +npc = 585 Rommik 0 0 +npc = 586 Gaius 0 0 +npc = 587 Jatix 0 0 +npc = 588 Davon 0 0 +npc = 589 Zenesha 0 0 +npc = 590 Aemad 0 0 +npc = 591 Kortan 0 0 +npc = 592 Roachey 0 0 +npc = 593 Frenita 0 0 +npc = 594 Nurmof 0 0 +npc = 595 Tea_seller 0 0 +npc = 596 Fat_Tony 0 0 +npc = 597 Noterazzo 0 0 +npc = 598 Hairdresser 0 0 +npc = 599 Make-over_mage 0 0 +npc = 600 Hudo 0 0 +npc = 601 Rometti 0 0 +npc = 602 Gulluck 0 0 +npc = 603 Heckel_Funch 0 0 +npc = 604 Thurgo 0 0 +npc = 605 Sir_Vyvin 0 0 +npc = 606 Squire 0 0 +npc = 607 Gunnjorn 0 0 +npc = 608 Sir_Amik_Varze 0 0 +npc = 609 Fortress_Guard 20 22 +npc = 610 Black_Knight 33 42 +npc = 611 Witch 25 10 +npc = 612 Greldo 0 0 +npc = 613 Digsite_workman 0 0 +npc = 614 Digsite_workman 0 0 +npc = 615 Student 0 0 +npc = 616 Student 0 0 +npc = 617 Student 0 0 +npc = 618 Examiner 0 0 +npc = 619 Archaeological_expert 0 0 +npc = 620 Panning_guide 0 0 +npc = 621 Gnome_baller 0 0 +npc = 622 Gnome_baller 0 0 +npc = 623 Gnome_baller 0 0 +npc = 624 Gnome_baller 0 0 +npc = 625 Gnome_baller 0 0 +npc = 626 Gnome_baller 0 0 +npc = 627 Gnome_baller 0 0 +npc = 628 Gnome_baller 0 0 +npc = 629 Gnome_baller 0 0 +npc = 630 Gnome_baller 0 0 +npc = 631 Gnome_baller 0 0 +npc = 632 Gnome_baller 0 0 +npc = 633 Gnome_winger 0 0 +npc = 634 Gnome_winger 0 0 +npc = 635 Gnome_ball_referee 0 0 +npc = 636 Cheerleader 0 0 +npc = 637 Juliet 0 0 +npc = 638 Apothecary 0 0 +npc = 639 Romeo 0 0 +npc = 640 Father_Lawrence 0 0 +npc = 641 Tramp 0 0 +npc = 642 Katrine 0 0 + +//------------------------Not In DB------------------------ +npc = 643 Weaponsmaster 23 0 +//------------------------Not In DB------------------------ + +npc = 644 Straven 23 20 +npc = 645 Jonny_the_beard 0 0 +npc = 646 Curator 0 0 +npc = 647 Reldo 0 0 +npc = 648 King_Roald 0 0 +npc = 649 Archer 42 50 +npc = 650 Warrior 48 50 +npc = 651 Monk 5 15 +npc = 652 Wizard 9 14 +npc = 653 Fairy_Queen 0 0 +npc = 654 Shamus 0 0 +npc = 655 Tree_spirit 101 96 +npc = 656 Cave_monk 0 0 +npc = 657 Monk of Entrana 0 0 +npc = 658 Monk of Entrana 0 0 +npc = 659 Party_Pete 0 0 +npc = 660 Knight 0 0 +npc = 661 Megan 0 0 +npc = 662 Lucy 0 0 +npc = 663 Avan 0 0 +npc = 664 Dimintheis 0 0 +npc = 665 Boot 0 0 +npc = 666 Caleb 0 0 +npc = 667 Chronozon 170 150 +npc = 668 Johnathon 0 0 +npc = 669 Hazelmere 0 0 +npc = 670 King_Narnode_Shareen 0 0 +npc = 671 Glough 0 0 +npc = 672 Anita 0 0 +npc = 673 Charlie 0 0 +npc = 674 Foreman 23 20 +npc = 675 Shipyard_worker 0 0 +npc = 676 Femi 0 0 +npc = 677 Black_Demon 172 157 +npc = 678 Guard 37 40 +npc = 679 Ranging_Guild_Doorman 0 0 +npc = 680 Leatherworker 0 0 +npc = 681 Weapon_poison_salesman 0 0 +npc = 682 Armour_salesman 0 0 +npc = 683 Bow_and_Arrow_salesman 0 0 +npc = 684 Tower_Advisor 0 0 +npc = 685 Tower_Advisor 0 0 +npc = 686 Tower_Advisor 0 0 +npc = 687 Tower_Advisor 0 0 +npc = 688 Tower_Archer 19 30 +npc = 689 Tower_Archer 34 52 +npc = 690 Tower_Archer 49 70 +npc = 691 Tower_Archer 64 90 +npc = 692 Tribal_Weapon_Salesman 0 0 +npc = 693 Competition_Judge 0 0 +npc = 694 Ticket_Merchant 0 0 +npc = 695 Bailey 0 0 +npc = 696 Caroline 0 0 +npc = 697 Kennith 0 0 +npc = 698 Holgart 0 0 +npc = 699 Holgart 0 0 +npc = 700 Holgart 0 0 +npc = 701 Kent 0 0 +npc = 702 Fisherman 0 0 +npc = 703 Fisherman 0 0 +npc = 704 Fisherman 0 0 +npc = 705 Fisherman 0 0 +npc = 706 Wizard_Mizgog 0 0 +npc = 707 Wizard_Grayzag 41 34 +npc = 708 Imp 2 8 +npc = 709 Imp 3 9 +npc = 710 Alrena 0 0 +npc = 711 Bravek 0 0 +npc = 712 Carla 0 0 +npc = 713 Clerk 0 0 +npc = 714 Edmond 0 0 +npc = 715 Elena 0 0 +npc = 716 Head_mourner 0 0 +npc = 717 Mourner 0 0 +npc = 718 Mourner 0 0 +npc = 719 Mourner 0 0 +npc = 720 Recruiter 0 0 +npc = 721 Ted_Rehnison 0 0 +npc = 722 Martha_Rehnison 0 0 +npc = 723 Billy_Rehnison 0 0 +npc = 724 Milli_Rehnison 0 0 +npc = 725 Jethick 0 0 +npc = 726 Man 0 0 +npc = 727 Man 0 0 +npc = 728 Man 0 0 +npc = 729 Man 0 0 +npc = 730 Man 0 0 +npc = 731 Bartender 0 0 +npc = 732 Bartender 0 0 +npc = 733 Bartender 0 0 +npc = 734 Bartender 0 0 +npc = 735 Bartender 0 0 +npc = 736 Barmaid 0 0 +npc = 737 Bartender 0 0 +npc = 738 Bartender 0 0 +npc = 739 Bartender 0 0 +npc = 740 Trufitus 0 0 +npc = 741 Duke_Horacio 0 0 +npc = 742 Elvarg 83 80 +npc = 743 Ned 0 0 +npc = 744 Klarense 0 0 +npc = 745 Wormbrain 2 0 +npc = 746 Oracle 0 0 +npc = 747 Oziach 0 0 +npc = 748 Giant_rat 6 10 +npc = 749 Ghost 19 25 +npc = 750 Skeleton 22 29 +npc = 751 Zombie 25 30 +npc = 752 Lesser_demon 82 79 +npc = 753 Melzar_the_mad 43 44 +npc = 754 Cabin_Boy_Jenkins 0 0 +npc = 755 Morgan 0 0 +npc = 756 Dr_Harlow 0 0 +npc = 757 Count_Draynor 34 0 +npc = 758 Fred_the_Farmer 0 0 +npc = 759 Gertrude's_cat 0 0 +npc = 760 Kitten 0 0 +npc = 761 Kitten 0 0 +npc = 762 Kitten 0 0 +npc = 763 Kitten 0 0 +npc = 764 Kitten 0 0 +npc = 765 Kitten 0 0 +npc = 766 Kitten 0 0 +npc = 767 Crate 0 0 +npc = 768 Cat 0 0 +npc = 769 Cat 0 0 +npc = 770 Cat 0 0 +npc = 771 Cat 0 0 +npc = 772 Cat 0 0 +npc = 773 Cat 0 0 +npc = 774 Overgrown_cat 0 0 +npc = 775 Overgrown_cat 0 0 +npc = 776 Overgrown_cat 0 0 +npc = 777 Overgrown_cat 0 0 +npc = 778 Overgrown_cat 0 0 +npc = 779 Overgrown_cat 0 0 +npc = 780 Gertrude 0 0 +npc = 781 Shilop 0 0 +npc = 782 Philop 0 0 +npc = 783 Wilough 0 0 +npc = 784 Kanel 0 0 +npc = 785 Civilian 0 0 +npc = 786 Civilian 0 0 +npc = 787 Civilian 0 0 +npc = 788 Garv 0 0 +npc = 789 Grubor 0 0 +npc = 790 Trobert 0 0 +npc = 791 Seth 0 0 + +//------------------------Not In DB------------------------ +npc = 792 Grip 22 0 +//------------------------Not In DB------------------------ + +npc = 793 Alfonse The Waiter 0 0 +npc = 794 Charlie The Cook 0 0 +npc = 795 Ice_Queen 111 105 +npc = 796 Achietties 0 0 +npc = 797 Helemos 0 0 +npc = 798 Velrak the explorer 0 0 +npc = 799 Pirate_Guard 19 25 +npc = 800 Fishing_spot 0 0 +npc = 801 Abbot_Langley 0 0 +npc = 802 Brother_Jered 0 0 +npc = 803 Monk 5 15 +npc = 804 Tanner 0 0 +npc = 805 Master_crafter 0 0 +npc = 806 Donovan_the_Family_Handyman 0 0 +npc = 807 Pierre 0 0 +npc = 808 Hobbes 0 0 +npc = 809 Louisa 0 0 +npc = 810 Mary 0 0 +npc = 811 Stanford 0 0 +npc = 812 Guard 0 0 +npc = 813 Gossip 0 0 +npc = 814 Anna 0 0 +npc = 815 Bob 0 0 +npc = 816 Carol 0 0 +npc = 817 David 0 0 +npc = 818 Elizabeth 0 0 +npc = 819 Frank 0 0 +npc = 820 Poison_Salesman 0 0 +npc = 821 Sinclair_Guard_dog 1 0 +npc = 822 Ana 0 0 +npc = 823 anabarrel 0 0 +npc = 824 Female_slave 0 0 +npc = 825 Male_slave 0 0 +npc = 826 Escaping_slave 0 0 +npc = 827 Rowdy_slave 10 16 +npc = 828 Mercenary 45 60 +npc = 829 Mercenary 45 60 +npc = 830 Mercenary_Captain 47 68 +npc = 831 Captain_Siad 0 0 +npc = 832 Al_Shabim 0 0 +npc = 833 Bedabin_Nomad 0 0 +npc = 834 Bedabin_Nomad_Guard 0 0 +npc = 835 Irena 0 0 +npc = 836 Shantay 0 0 +npc = 837 Shantay_Guard 22 32 +npc = 838 Shantay_Guard 22 32 +npc = 839 Desert_Wolf 27 34 +npc = 840 Ugthanki 42 45 +npc = 841 Mine_cart_driver 0 0 +npc = 842 Rowdy_Guard 43 60 +npc = 843 RPDT_employee 0 0 +npc = 844 Wizard Cromperty 0 0 +npc = 845 Horacio 0 0 +npc = 846 Kangai_Mau 0 0 +npc = 847 Head_chef 0 0 +npc = 848 Blurberry 0 0 +npc = 849 Barman 0 0 +npc = 850 Aluft_Gianne 0 0 +npc = 851 Gnome Waiter 0 0 +npc = 852 Ogre_chieftain 81 60 +npc = 853 Og 0 0 +npc = 854 Grew 0 0 +npc = 855 Toban 0 0 +npc = 856 Gorad 68 81 +npc = 857 Ogre_guard 83 80 +npc = 858 Ogre_guard 83 80 +npc = 859 Ogre_guard 83 80 +npc = 860 Ogre_guard 83 80 +npc = 861 Ogre_guard 83 80 + +//------------------------Not In DB------------------------ +npc = 862 City_guard 83 0 +//------------------------Not In DB------------------------ + +npc = 863 Scared_skavid 0 0 +npc = 864 Mad_skavid 0 0 +npc = 865 Skavid 0 0 +npc = 866 Skavid 0 0 +npc = 867 Skavid 0 0 +npc = 868 Skavid 0 0 +npc = 869 Skavid 0 0 +npc = 870 Enclave_guard 83 80 +npc = 871 Ogre_shaman 113 110 +npc = 872 Watchtower_wizard 0 0 +npc = 873 Ogre_trader 70 60 +npc = 874 Ogre_merchant 60 60 +npc = 875 Ogre_trader 70 60 +npc = 876 Ogre_trader 70 60 +npc = 877 Tower_guard 25 22 +npc = 878 Colonel_Radick 37 65 +npc = 879 Delrith 27 7 +npc = 880 Weakened_Delrith 2 1 +npc = 881 Traiborn 0 0 +npc = 882 Gypsy 0 0 +npc = 883 Sir_Prysin 0 0 +npc = 884 Captain_Rovin 0 0 +npc = 885 Ceril_Carnillean 0 0 +npc = 886 Claus_the_chef 0 0 +npc = 887 Guard 0 0 +npc = 888 Philipe_Carnillean 0 0 +npc = 889 Henryeta_Carnillean 0 0 +npc = 890 Butler_Jones 0 0 +npc = 891 Alomone 13 25 +npc = 892 Hazeel 296 0 +npc = 893 Clivet 13 25 +npc = 894 Hazeel_Cultist 13 25 +npc = 895 Boy 0 0 +npc = 896 Nora_T._Hagg 0 0 +npc = 897 Witches_experiment 19 21 +npc = 898 Witches_experiment_second_form 30 32 +npc = 899 Witches_experiment_third_form 42 43 +npc = 900 Witches_experiment_fourth_form 53 55 +npc = 901 Mouse 0 0 +npc = 902 Gundai 0 0 +npc = 903 Lundail 0 0 +npc = 904 Chamber_guardian 0 0 +npc = 905 Kolodion 0 0 +npc = 906 Kolodion 0 0 +npc = 907 Kolodion 0 0 +npc = 908 Kolodion 0 0 +npc = 909 Kolodion 0 0 +npc = 910 Kolodion 0 0 +npc = 911 Kolodion 0 0 +npc = 912 Battle_mage 54 127 +npc = 913 Battle_mage 54 127 +npc = 914 Battle_mage 54 127 +npc = 915 Leela 0 0 +npc = 916 Joe 0 0 +npc = 917 Jail_guard 26 26 +npc = 918 Ned 0 0 +npc = 919 Lady_Keli 0 0 +npc = 920 Prince_Ali 0 0 +npc = 921 Prince_Ali 0 0 +npc = 922 Aggie 0 0 +npc = 923 Hassan 0 0 +npc = 924 Osman 0 0 +npc = 925 Border_Guard 0 0 +npc = 926 Border_Guard 0 0 +npc = 927 Fishing_spot 0 0 +npc = 928 Gujuo 0 0 +npc = 929 Ungadulu 70 70 +npc = 930 Ungadulu 70 70 +npc = 931 Jungle_Savage 84 90 +npc = 932 Fionella 0 0 +npc = 933 Siegfried_Erkle 0 0 +npc = 934 Nezikchened 187 154 + +//------------------------Not In DB------------------------ +npc = 935 Viyeldi 79 0 +//------------------------Not In DB------------------------ + +npc = 936 San_Tojalon 106 120 +npc = 937 Irvig_Senay 100 126 +npc = 938 Ranalph_Devere 92 115 +npc = 939 Boulder 0 0 + +//------------------------Not In DB------------------------ +npc = 940 Echned_Zekin 187 0 +//------------------------Not In DB------------------------ + +npc = 941 Green_dragon 79 85 +npc = 942 Master_Chef 0 0 +npc = 943 Survival_Expert 0 0 +npc = 944 Combat_Instructor 146 180 +npc = 945 RuneScape_Guide 0 0 +npc = 946 Magic_Instructor 0 0 +npc = 947 Financial_Advisor 0 0 +npc = 948 Mining_Instructor 0 0 +npc = 949 Quest_Guide 0 0 +npc = 950 Giant_rat 3 5 +npc = 951 Chicken 1 3 +npc = 952 Fishing_spot 0 0 +npc = 953 Banker 0 0 +npc = 954 Brother_Brace 0 0 +npc = 955 Cow 2 8 +npc = 956 Drunken_Dwarf 0 0 +npc = 957 Mubariz 0 0 +npc = 958 Fadli 0 0 +npc = 959 A'abla 0 0 +npc = 960 Sabreen 0 0 +npc = 961 Tafani 0 0 +npc = 962 Jaraah 0 0 +npc = 963 Zahwa 0 0 +npc = 964 Ima 0 0 +npc = 965 Sabeil 0 0 +npc = 966 Jadid 0 0 +npc = 967 Dalal 0 0 +npc = 968 Afrah 0 0 +npc = 969 Jeed 0 0 +npc = 970 Diango 0 0 +npc = 971 Chadwell 0 0 +npc = 972 Koftik 0 0 +npc = 973 Koftik 0 0 +npc = 974 Koftik 0 0 +npc = 975 Koftik 0 0 +npc = 976 Koftik 0 0 +npc = 977 Blessed_spider 39 32 +npc = 978 Blessed_Giant_rat 9 30 +npc = 979 Slave 0 0 +npc = 980 Slave 0 0 +npc = 981 Slave 0 0 +npc = 982 Slave 0 0 +npc = 983 Slave 0 0 +npc = 984 Slave 0 0 +npc = 985 Slave 0 0 +npc = 986 Boulder 0 0 +npc = 987 Unicorn 15 19 +npc = 988 Sir_Jerro 62 58 +npc = 989 Sir_Carl 62 57 +npc = 990 Sir_Harry 62 57 + +//------------------------Not In DB------------------------ +npc = 991 Half-Souless 1 0 +//------------------------Not In DB------------------------ + +npc = 992 Kardia 0 0 +npc = 993 Witch's_cat 0 0 +npc = 994 Niloof 0 0 +npc = 995 Klank 0 0 +npc = 996 Kamen 0 0 +npc = 997 Kalrag 89 79 +npc = 998 Othainian 91 90 +npc = 999 Doomion 91 90 +npc = 1000 Holthion 91 90 +npc = 1001 Dark_mage 0 0 +npc = 1002 Iban_disciple 13 21 +npc = 1003 Lord_Iban 0 0 +npc = 1004 Spider 1 2 +npc = 1005 Giant_bat 0 0 +npc = 1006 Sea_slug 0 0 +npc = 1007 Zamorak_Wizard 65 80 +npc = 1008 Hamid 0 0 +npc = 1009 Poison_spider 64 65 +npc = 1010 Rantz 0 0 +npc = 1011 Fycie 0 0 +npc = 1012 Bugs 0 0 +npc = 1013 Swamp_toad 0 0 +npc = 1014 Bloated_Toad 0 0 +npc = 1015 Chompy_bird 6 10 +npc = 1016 Chompy_bird 6 10 +npc = 1017 Chicken 1 3 +npc = 1018 Rooster 2 5 +npc = 1019 Fire_elemental 35 30 +npc = 1020 Earth_elemental 35 35 +npc = 1021 Air_elemental 34 30 +npc = 1022 Water_elemental 34 30 +npc = 1023 Earth_elemental 35 35 +npc = 1024 Man 24 61 +npc = 1025 Man 24 61 +npc = 1026 Man 24 61 +npc = 1027 Woman 24 61 +npc = 1028 Woman 24 61 +npc = 1029 Woman 24 61 +npc = 1030 Wolfman 88 100 +npc = 1031 Wolfman 88 100 +npc = 1032 Wolfman 88 100 +npc = 1033 Wolfwoman 88 100 +npc = 1034 Wolfwoman 88 100 +npc = 1035 Wolfwoman 88 100 +npc = 1036 Banker 0 0 +npc = 1037 Man 0 0 +npc = 1038 Rufus 0 0 +npc = 1039 Barker 0 0 +npc = 1040 Fidelio 0 0 +npc = 1041 Sbott 0 0 +npc = 1042 Roavar 0 0 +npc = 1043 Will_o'_the_wisp 0 0 +npc = 1044 Monk_of_Zamorak 22 23 +npc = 1045 Monk_of_Zamorak 17 11 +npc = 1046 Monk_of_Zamorak 45 42 +npc = 1047 Temple_guardian 30 30 +npc = 1048 Drezel 0 0 +npc = 1049 Drezel 0 0 +npc = 1050 Filliman_Tarlock 0 0 +npc = 1051 Nature_Spirit 0 0 +npc = 1052 Ghast 30 40 +npc = 1053 Ghast 30 40 +npc = 1054 Ulizius 0 0 +npc = 1055 Pirate_Jackie_the_Fruit 0 0 +npc = 1056 Mime 0 0 +npc = 1057 Strange_watcher 0 0 +npc = 1058 Strange_watcher 0 0 +npc = 1059 Strange_watcher 0 0 +npc = 1060 Denulth 0 0 +npc = 1061 Sergeant 0 0 +npc = 1062 Sergeant 0 0 +npc = 1063 Soldier 0 0 +npc = 1064 Soldier 0 0 +npc = 1065 Soldier 48 50 +npc = 1066 Soldier 0 0 +npc = 1067 Soldier 0 0 +npc = 1068 Soldier 0 0 +npc = 1069 Soldier 0 0 +npc = 1070 Saba 0 0 +npc = 1071 Tenzing 0 0 +npc = 1072 Eadburg 4 10 +npc = 1073 Archer 42 50 +npc = 1074 Archer 42 50 +npc = 1075 Archer 42 50 +npc = 1076 Guard 37 40 +npc = 1077 Guard 37 40 +npc = 1078 Harold 0 0 +npc = 1079 Tostig 0 0 +npc = 1080 Eohric 0 0 +npc = 1081 Servant 5 10 +npc = 1082 Dunstan 0 0 +npc = 1083 Wistan 0 0 +npc = 1084 Breoca 5 10 +npc = 1085 Ocga 5 10 +npc = 1086 Unferth 6 10 +npc = 1087 Penda 5 10 +npc = 1088 Hygd 4 10 +npc = 1089 Ceolburg 4 10 +npc = 1090 Hild 4 10 +npc = 1091 Bob 0 0 +npc = 1092 White_Knight 36 52 +npc = 1093 Billy 0 0 +npc = 1094 Mountain_Goat 0 0 +npc = 1095 Rock 111 140 +npc = 1096 Stick 104 140 +npc = 1097 Pee_Hat 91 121 +npc = 1098 Kraka 91 121 +npc = 1099 Dung 0 0 +npc = 1100 Ash 0 0 +npc = 1101 Thrower_Troll 68 96 +npc = 1102 Thrower_Troll 68 96 +npc = 1103 Thrower_Troll 68 96 +npc = 1104 Thrower_Troll 68 96 +npc = 1105 Thrower_Troll 68 96 +npc = 1106 Mountain_Troll 69 91 +npc = 1107 Mountain_Troll 69 91 +npc = 1108 Mountain_Troll 69 91 +npc = 1109 Mountain_Troll 69 91 +npc = 1110 Mountain_Troll 69 91 +npc = 1111 Mountain_Troll 69 91 +npc = 1112 Mountain_Troll 69 91 +npc = 1113 Eadgar 0 0 +npc = 1114 Godric 0 0 +npc = 1115 Troll_General 113 140 +npc = 1116 Troll_General 113 140 +npc = 1117 Troll_General 113 140 +npc = 1118 Troll_Spectator 71 71 +npc = 1119 Troll_Spectator 71 71 +npc = 1120 Troll_Spectator 71 71 +npc = 1121 Troll_Spectator 71 71 +npc = 1122 Troll_Spectator 71 71 +npc = 1123 Troll_Spectator 71 71 +npc = 1124 Troll_Spectator 71 71 +npc = 1125 Dad 101 150 +npc = 1126 Twig 71 71 +npc = 1127 Berry 71 71 +npc = 1128 Twig 71 71 +npc = 1129 Berry 71 71 +npc = 1130 Thrower_Troll 68 96 +npc = 1131 Thrower_Troll 68 96 +npc = 1132 Thrower_Troll 68 96 +npc = 1133 Thrower_Troll 68 96 +npc = 1134 Thrower_Troll 68 96 +npc = 1135 Cook 0 0 +npc = 1136 Cook 0 0 +npc = 1137 Cook 0 0 +npc = 1138 Mountain_Troll 71 71 +npc = 1139 Mushroom 0 0 +npc = 1140 Mountain_Goat 0 0 +npc = 1141 Mountain_Goat 0 0 +npc = 1142 Guard 0 0 +npc = 1143 Guard 0 0 +npc = 1144 Guard 0 0 +npc = 1145 Guard 0 0 +npc = 1146 Guard 0 0 +npc = 1147 Guard 0 0 +npc = 1148 Guard 0 0 +npc = 1149 Guard 0 0 +npc = 1150 Guard 0 0 +npc = 1151 Burntmeat 0 0 +npc = 1152 Weird_Old_Man 0 0 +npc = 1153 Kalphite_Worker 28 40 +npc = 1154 Kalphite_Soldier 85 90 +npc = 1155 Kalphite_Guardian 141 171 +npc = 1156 Kalphite_Worker 28 40 +npc = 1157 Kalphite_Guardian 141 171 +npc = 1158 Kalphite_Queen 333 267 +npc = 1159 Kalphite_Queen 333 267 +npc = 1160 Kalphite_Queen 333 267 +npc = 1161 Kalphite_Larva 0 0 +npc = 1162 Timfraku 0 0 +npc = 1163 Tiadeche 0 0 +npc = 1164 Tiadeche 0 0 +npc = 1165 Tinsay 0 0 +npc = 1166 Tinsay 0 0 +npc = 1167 Tamayu 0 0 +npc = 1168 Tamayu 0 0 +npc = 1169 Tamayu 0 0 +npc = 1170 Tamayu 0 0 +npc = 1171 Lubufu 0 0 +npc = 1172 The_Shaikahan 83 100 +npc = 1173 The_Shaikahan 83 100 +npc = 1174 Fishing_spot 0 0 +npc = 1175 Fishing_spot 0 0 +npc = 1176 Fishing_spot 0 0 +npc = 1177 Fishing_spot 0 0 +npc = 1178 Fishing_spot 0 0 +npc = 1179 Gull 0 0 +npc = 1180 Cormorant 0 0 +npc = 1181 Albatross 0 0 +npc = 1182 Lord_Iorwerth 0 0 +npc = 1183 Elf_warrior 90 110 +npc = 1184 Elf_warrior 108 110 +npc = 1185 Elven_city_guard 0 0 +npc = 1186 Idris 0 0 +npc = 1187 Essyllt 0 0 +npc = 1188 Morvran 0 0 +npc = 1189 Fishing_spot 0 0 +npc = 1190 Fishing_spot 0 0 +npc = 1191 Fishing_spot 0 0 +npc = 1192 Rabbit 2 0 +npc = 1193 Rabbit 2 0 +npc = 1194 Rabbit 2 0 +npc = 1195 Grizzly_bear 24 30 +npc = 1196 Grizzly_bear_cub 19 20 +npc = 1197 Grizzly_bear_cub 19 20 +npc = 1198 Dire_Wolf 88 86 +npc = 1199 Elf_Tracker 0 0 +npc = 1200 Tyras_guard 110 112 +npc = 1201 Elf_warrior 0 0 +npc = 1202 Arianwyn 0 0 +npc = 1203 Tyras_guard 110 112 +npc = 1204 Tyras_guard 110 112 +npc = 1205 Tyras_guard 0 0 +npc = 1206 Tyras_guard 0 0 +npc = 1207 General_Hining 0 0 +npc = 1208 Quartermaster 0 0 +npc = 1209 Koftik 0 0 +npc = 1210 Kings_messenger 0 0 +npc = 1211 Will_o'_the_wisp 0 0 +npc = 1212 Will_o'_the_wisp 0 0 +npc = 1213 Tegid 0 0 +npc = 1214 Thistle 0 0 +npc = 1215 Parrots 0 0 +npc = 1216 Parroty_Pete 0 0 +npc = 1217 Gardener 3 7 +npc = 1218 Ghoul 42 50 +npc = 1219 Leech 52 45 +npc = 1220 Vampire 72 56 +npc = 1221 Spider 0 0 +npc = 1222 vampire_misty 0 0 +npc = 1223 Vampire 61 45 + +//------------------------Not In DB------------------------ +npc = 1224 vampire_juve_hound 0 0 +//------------------------Not In DB------------------------ + +npc = 1225 vampire_count 25 24 +npc = 1226 Tree 0 0 +npc = 1227 Myre_Blamish_Snail 9 8 +npc = 1228 Blood_Blamish_Snail 20 10 +npc = 1229 Ochre_Blamish_Snail 10 20 +npc = 1230 Bruise_Blamish_Snail 20 13 +npc = 1231 Bark_Blamish_Snail 15 23 +npc = 1232 Myre_Blamish_Snail 10 9 +npc = 1233 Blood_Blamish_Snail 20 10 +npc = 1234 Ochre_Blamish_Snail 15 20 +npc = 1235 Bruise_Blamish_Snail 20 13 +npc = 1236 Fishing_spot 0 0 +npc = 1237 Fishing_spot 0 0 +npc = 1238 Fishing_spot 0 0 +npc = 1239 Bedabin_Nomad_Fighter 56 50 +npc = 1240 Loar_Shadow 40 0 +npc = 1241 Loar_Shade 40 38 +npc = 1242 Shade_Spirit 0 0 +npc = 1243 Phrin_Shadow 60 0 +npc = 1244 Phrin_Shade 60 56 +npc = 1245 Riyl_Shadow 80 0 +npc = 1246 Riyl_Shade 80 74 +npc = 1247 Asyn_Shadow 100 0 +npc = 1248 Asyn_Shade 100 92 +npc = 1249 Fiyr_Shadow 120 0 +npc = 1250 Fiyr_Shade 120 110 +npc = 1251 Afflicted(Ulsquire) 0 0 +npc = 1252 Ulsquire_Shauncy 0 0 +npc = 1253 Afflicted(Razmire) 0 0 +npc = 1254 Razmire_Keelgan 0 0 +npc = 1255 Mort'ton_Local 0 0 +npc = 1256 Mort'ton_Local 0 0 +npc = 1257 Afflicted 37 30 +npc = 1258 Afflicted 34 38 +npc = 1259 Mort'ton_local 0 0 +npc = 1260 Mort'ton_local 0 0 +npc = 1261 Afflicted 32 28 +npc = 1262 Afflicted 30 24 +npc = 1263 Wizard 0 0 +npc = 1264 Saradomin_Wizard 108 0 +npc = 1265 Rock_Crab 13 50 +npc = 1266 Rocks 0 50 +npc = 1267 Rock_Crab 13 50 +npc = 1268 Rocks 0 50 +npc = 1269 Olaf_the_Bard 0 0 +npc = 1270 Lalli 0 0 +npc = 1271 Golden_sheep 0 0 +npc = 1272 Golden_sheep 0 0 +npc = 1273 Fossegrimen 0 0 +npc = 1274 Ospak 0 0 +npc = 1275 Styrmir 0 0 +npc = 1276 Torbrund 0 0 +npc = 1277 Fridgeir 0 0 +npc = 1278 Longhall_Bouncer 0 0 +npc = 1279 The_Draugen 69 69 +npc = 1280 Butterfly 0 0 +npc = 1281 Sigli_the_Huntsman 0 0 +npc = 1282 Sigmund_The_Merchant 0 0 +npc = 1283 Swensen_the_Navigator 0 0 +npc = 1284 Bjorn 0 0 +npc = 1285 Eldgrim 0 0 +npc = 1286 Manni_the_Reveller 0 0 +npc = 1287 Council_workman 0 0 +npc = 1288 Peer_the_Seer 0 0 +npc = 1289 Thorvald_the_Warrior 0 0 +npc = 1290 Koschei_the_deathless 0 0 +npc = 1291 Koschei_the_deathless 0 0 +npc = 1292 Koschei_the_deathless 0 0 +npc = 1293 Koschei_the_deathless 0 0 +npc = 1294 Brundt_the_Chieftain 0 0 +npc = 1295 Askeladden 0 0 +npc = 1296 Guard 0 0 +npc = 1297 Guard 0 0 +npc = 1298 Town_Guard 0 0 +npc = 1299 Town_Guard 0 0 +npc = 1300 Thora_the_Barkeep 0 0 +npc = 1301 Yrsa 0 0 +npc = 1302 Fisherman 0 0 +npc = 1303 Skulgrimen 0 0 +npc = 1304 Sailor 0 0 +npc = 1305 Agnar 48 50 +npc = 1306 Freidir 48 50 +npc = 1307 Borrokar 48 50 +npc = 1308 Lanzig 48 50 +npc = 1309 Pontak 48 50 +npc = 1310 Freygerd 48 50 +npc = 1311 Lensa 48 50 +npc = 1312 Jennella 48 50 +npc = 1313 Sassilik 48 50 +npc = 1314 Inga 48 50 +npc = 1315 Fish_monger 0 0 +npc = 1316 Fur_trader 0 0 +npc = 1317 Market_Guard 48 50 +npc = 1318 Warrior 48 50 +npc = 1319 Fox 0 0 +npc = 1320 Bunny 2 5 +npc = 1321 Bunny 2 5 +npc = 1322 Gull 0 0 +npc = 1323 Gull 0 0 +npc = 1324 Gull 0 0 +npc = 1325 Gull 0 0 +npc = 1326 Bear_Cub 15 21 +npc = 1327 Bear_Cub 15 21 +npc = 1328 Unicorn_Foal 12 14 +npc = 1329 Black_unicorn_Foal 22 25 +npc = 1330 Wolf 64 70 +npc = 1331 Fishing_spot 0 0 +npc = 1332 Fishing_spot 0 0 +npc = 1333 Fishing_spot 0 0 +npc = 1334 Jossik 0 0 +npc = 1335 Jossik 0 0 +npc = 1336 Larrissa 0 0 +npc = 1337 Larrissa 0 0 +npc = 1338 Dagannoth 74 70 +npc = 1339 Dagannoth 74 70 +npc = 1340 Dagannoth 74 70 +npc = 1341 Dagannoth 92 120 +npc = 1342 Dagannoth 92 120 +npc = 1343 Dagannoth 92 120 +npc = 1344 Dagannoth 92 123 +npc = 1345 Dagannoth 92 123 +npc = 1346 Dagannoth 92 123 +npc = 1347 Dagannoth 92 123 +npc = 1348 Dagannoth_mother 100 100 +npc = 1349 Dagannoth_mother 100 100 +npc = 1350 Dagannoth_mother 100 100 +npc = 1351 Dagannoth_mother 100 100 +npc = 1352 Dagannoth_mother 100 100 +npc = 1353 Dagannoth_mother 100 100 +npc = 1354 Dagannoth_mother 100 100 +npc = 1355 Dagannoth_mother 100 100 +npc = 1356 Dagannoth_mother 100 100 +npc = 1357 Sam 0 0 +npc = 1358 Rachael 0 0 +npc = 1359 Queen_Sigrid 0 0 +npc = 1360 Banker 0 0 +npc = 1361 Arnor 1 1 +npc = 1362 Haming 1 1 +npc = 1363 Moldof 1 1 +npc = 1364 Helga 1 1 +npc = 1365 Matilda 1 1 +npc = 1366 Ashild 1 1 +npc = 1367 Skraeling 2 1 +npc = 1368 Skraeling 2 1 +npc = 1369 Fishmonger 0 0 +npc = 1370 Greengrocer 0 0 +npc = 1371 Prince_Brand 0 0 +npc = 1372 Princess_Astrid 0 0 +npc = 1373 King_Vargas 0 0 +npc = 1374 Guard 0 0 +npc = 1375 Advisor_Ghrim 0 0 +npc = 1376 Derrik 0 0 +npc = 1377 Farmer 0 0 +npc = 1378 Flower_Girl 0 0 +npc = 1379 Ragnar 1 1 +npc = 1380 Einar 1 1 +npc = 1381 Alrik 1 1 +npc = 1382 Thorhild 1 1 +npc = 1383 Halla 1 1 +npc = 1384 Yrsa 1 1 +npc = 1385 Sailor 0 0 +npc = 1386 Rannveig 2 1 +npc = 1387 Thora 2 1 +npc = 1388 Valgerd 2 1 +npc = 1389 Skraeling 2 1 +npc = 1390 Broddi 2 1 +npc = 1391 Skraeling 2 1 +npc = 1392 Ragnvald 2 1 +npc = 1393 Fishmonger 0 0 +npc = 1394 Greengrocer 0 0 +npc = 1395 Lumberjack_Leif 0 0 +npc = 1396 Miner_Magnus 0 0 +npc = 1397 Fisherman_Frodi 0 0 +npc = 1398 Gardener_Gunnhild 0 0 +npc = 1399 Fishing_spot 0 0 +npc = 1400 Gull 0 0 +npc = 1401 Chicken 1 3 +npc = 1402 Chicken 1 3 +npc = 1403 Rooster 2 5 +npc = 1404 Rabbit 2 5 +npc = 1405 Fishing_spot 0 0 +npc = 1406 Fishing_spot 0 0 +npc = 1407 Daero 0 0 +npc = 1408 Waydar 0 0 +npc = 1409 Waydar 0 0 +npc = 1410 Waydar 0 0 +npc = 1411 Garkor 0 0 +npc = 1412 Garkor 0 0 +npc = 1413 Lumo 0 0 +npc = 1414 Lumo 0 0 +npc = 1415 Bunkdo 0 0 +npc = 1416 Bunkdo 0 0 +npc = 1417 Carado 0 0 +npc = 1418 Carado 0 0 +npc = 1419 Lumdo 0 0 +npc = 1420 Karam 0 0 +npc = 1421 Karam 0 0 +npc = 1422 Karam 0 0 +npc = 1423 Bunkwicket 0 0 +npc = 1424 Waymottin 0 0 +npc = 1425 Zooknock 0 0 +npc = 1426 Zooknock 0 0 +npc = 1427 G.L.O._Caranock 0 0 +npc = 1428 G.L.O._Caranock 0 0 +npc = 1429 Dugopul 0 0 +npc = 1430 Salenab 0 0 +npc = 1431 Trefaji 0 0 +npc = 1432 Aberab 0 0 +npc = 1433 Solihib 0 0 +npc = 1434 Daga 0 0 +npc = 1435 Tutab 0 0 +npc = 1436 Ifaba 0 0 +npc = 1437 Hamab 0 0 +npc = 1438 Hafuba 0 0 +npc = 1439 Denadu 0 0 +npc = 1440 Lofu 0 0 +npc = 1441 Kruk 149 0 +npc = 1442 Duke 149 0 +npc = 1443 Oipuis 149 0 +npc = 1444 Uyoro 149 0 +npc = 1445 Ouhai 149 0 +npc = 1446 Uodai 149 0 +npc = 1447 Padulah 149 0 +npc = 1448 Awowogei 0 0 +npc = 1449 Uwogo 0 0 +npc = 1450 Muruwoi 0 0 +npc = 1451 Sleeping_Monkey 0 0 +npc = 1452 Monkey_Child 0 0 +npc = 1453 The_Monkey's_Uncle 0 0 +npc = 1454 The_Monkey's_Aunt 0 0 +npc = 1455 Monkey_Guard 167 120 +npc = 1456 Monkey_Archer 86 50 +npc = 1457 Monkey_Archer 86 50 +npc = 1458 Monkey_Archer 86 50 +npc = 1459 Monkey_Guard 167 120 +npc = 1460 Monkey_Guard 167 120 +npc = 1461 Elder_Guard 0 0 +npc = 1462 Elder_Guard 0 0 +npc = 1463 Monkey 3 6 +npc = 1464 Monkey 3 6 +npc = 1465 Monkey_Zombie 98 80 +npc = 1466 Monkey_Zombie 129 92 +npc = 1467 Monkey_Zombie 82 60 +npc = 1468 Bonzara 0 0 +npc = 1469 Monkey_Minder 0 0 +npc = 1470 Foreman 0 0 +npc = 1471 Skeleton 142 112 +npc = 1472 Jungle_Demon 195 170 +npc = 1473 Spider 1 2 +npc = 1474 Spider 1 2 +npc = 1475 Bird 11 10 +npc = 1476 Bird 5 5 +npc = 1477 Scorpion 38 15 +npc = 1478 Jungle_spider 27 35 +npc = 1479 Snake 24 25 + +//------------------------Confusing------------------------ +npc = 1480 mm_transmogrification_small_ninja_monkey 0 0 +npc = 1481 mm_transmogrification_medium_ninja_monkey 0 0 +npc = 1482 mm_transmogrification_normal_gorilla 0 0 +npc = 1483 mm_transmogrification_bearded_gorilla 0 0 +npc = 1484 mm_transmogrification_ancient_monkey 0 0 +npc = 1485 mm_transmogrification_small_zombie_monkey 0 0 +npc = 1486 mm_transmogrification_large_zombie_monkey 0 0 +npc = 1487 mm_transmogrification_normal_monkey 0 0 +npc = 1488 toms_food_monkey 0 0 +npc = 1489 toms__general_store_monkey 0 0 +npc = 1490 toms_sword_monkey 0 0 +npc = 1491 toms_magic_monkey 0 0 +npc = 1492 toms_crafting_monkey 0 0 +npc = 1493 toms_basic_monkey 0 0 +npc = 1494 toms_zombie_monkey 0 0 +npc = 1495 toms_zombie_monkey_small 0 0 +npc = 1496 toms_female_monkey 0 0 +npc = 1497 toms_uncle_monkey 0 0 +npc = 1498 toms_caretaker 0 0 +npc = 1499 toms_jail_guard 0 0 +npc = 1500 toms_adviser 0 0 +npc = 1501 toms_child 0 0 +npc = 1502 toms_ninja_guard 35 0 +npc = 1503 toms_monkey_archer 61 0 +npc = 1504 toms_ninja_guard_captin 35 0 +npc = 1505 toms_gorilla 35 0 +npc = 1506 toms_gorilla_pound 35 0 +npc = 1507 toms_gorilla_beard 35 0 +npc = 1508 toms_gorilla_priest 35 0 +npc = 1509 toms_gorilla_guard 35 0 +npc = 1510 toms_acolyte 0 0 +npc = 1511 toms_gnome_assassin 0 0 +npc = 1512 toms_gnome_sapper 0 0 +npc = 1513 toms_gnome_mage 0 0 +npc = 1514 toms_ape_ruler 0 0 +npc = 1515 toms_skeleton 0 0 +npc = 1516 demo 0 0 +npc = 1517 toms_gnome_troop1 0 0 +npc = 1518 toms_gnome_troop2 0 0 +npc = 1519 toms_gnome_troop3 0 0 +npc = 1520 toms_gnome_troop4 0 0 +//------------------------Confusing------------------------ + +npc = 1521 Bird 0 0 +npc = 1522 Bird 0 0 +npc = 1523 King_Scorpion 32 31 +npc = 1524 Jungle_spider 44 50 + +//------------------------Confusing------------------------ +npc = 1525 toms_jungle_snake 1 0 +//------------------------Confusing------------------------ + +npc = 1526 Lanthus 0 0 +npc = 1527 Mine_cart 0 0 +npc = 1528 Zealot 0 0 +npc = 1529 Sheep 0 0 +npc = 1530 Rabbit 2 5 +npc = 1531 Imp 2 8 +npc = 1532 Barricade 0 0 +npc = 1533 Barricade 0 0 +npc = 1534 Barricade 0 0 +npc = 1535 Barricade 0 0 +npc = 1536 Possessed_Pickaxe 50 40 +npc = 1537 Bronze_pickaxe 0 0 +npc = 1538 Corpse 0 0 +npc = 1539 Skeletal_miner 42 39 +npc = 1540 Treus_Dayth 95 100 +npc = 1541 Ghost 0 0 +npc = 1542 Loading_crane 0 0 +npc = 1543 Innocent_looking_key 0 0 +npc = 1544 Mine_cart 0 0 +npc = 1545 Mine_cart 0 0 +npc = 1546 Mine_cart 0 0 +npc = 1547 Mine_cart 0 0 +npc = 1548 Mine_cart 0 0 +npc = 1549 Ghost 29 31 +npc = 1550 Haze 0 0 +npc = 1551 Mischievous_Ghost 0 0 +npc = 1552 Santa 0 0 +npc = 1553 Ug 0 0 +npc = 1554 Aga 0 0 +npc = 1555 Arrg 113 150 +npc = 1556 Arrg 113 150 +npc = 1557 Ug 0 0 +npc = 1558 Ice_wolf 96 85 +npc = 1559 Ice_wolf 96 85 +npc = 1560 Ice_Troll 124 86 +npc = 1561 Ice_Troll 123 86 +npc = 1562 Ice_Troll 120 95 +npc = 1563 Ice_Troll 121 86 +npc = 1564 Ice_Troll 120 95 +npc = 1565 Ice_Troll 120 95 +npc = 1566 Ice_Troll 121 86 +npc = 1567 Cyreg_Paddlehorn 0 0 +npc = 1568 Curpile_Fyod 0 0 +npc = 1569 Veliaf_Hurtz 0 0 +npc = 1570 Sani_Piliu 0 0 +npc = 1571 Harold_Evans 0 0 +npc = 1572 Radigad_Ponfit 0 0 +npc = 1573 Polmafi_Ferdygris 0 0 +npc = 1574 Ivan_Strom 0 0 +npc = 1575 Skeleton_Hellhound 97 116 +npc = 1576 Stranger 0 0 +npc = 1577 Vanstrom_Klause 0 0 +npc = 1578 Mist 0 0 +npc = 1579 Vanstrom_Klause 0 0 +npc = 1580 Vanstrom_Klause 0 0 +npc = 1581 Vanstrom_Klause 0 0 +npc = 1582 Fire_giant 86 111 +npc = 1583 Fire_giant 86 111 +npc = 1584 Fire_giant 86 111 +npc = 1585 Fire_giant 86 111 +npc = 1586 Fire_giant 86 111 +npc = 1587 Moss_giant 42 60 +npc = 1588 Moss_giant 42 60 +npc = 1589 Baby_red_dragon 65 68 +npc = 1590 Bronze_dragon 131 125 +npc = 1591 Iron_dragon 189 173 +npc = 1592 Steel_dragon 246 220 +npc = 1593 Wild_Dog 63 56 +npc = 1594 Wild_dog 63 56 +npc = 1595 Saniboch 0 0 +npc = 1596 Mazchna 0 0 +npc = 1597 Vannaka 0 0 +npc = 1598 Chaeldar 0 0 +npc = 1599 Duradel 0 0 +npc = 1600 Cave_crawler 23 22 +npc = 1601 Cave_crawler 23 22 +npc = 1602 Cave_crawler 23 22 +npc = 1603 Cave_crawler 23 22 +npc = 1604 Aberrant_specter 96 90 +npc = 1605 Aberrant_specter 96 90 +npc = 1606 Aberrant_specter 96 90 +npc = 1607 Aberrant_specter 96 90 +npc = 1608 Kurask 106 97 +npc = 1609 Kurask 106 97 +npc = 1610 Gargoyle 111 105 +npc = 1611 Gargoyle 111 105 +npc = 1612 Banshee 23 22 +npc = 1613 Nechryael 115 105 +npc = 1614 Death_spawn 46 60 +npc = 1615 Abyssal_demon 124 150 +npc = 1616 Basilisk 61 75 +npc = 1617 Basilisk 61 75 +npc = 1618 Bloodveld 76 120 +npc = 1619 Bloodveld 76 120 +npc = 1620 Cockatrice 37 37 +npc = 1621 Cockatrice 37 37 +npc = 1622 Rockslug 29 27 +npc = 1623 Rockslug 29 27 +npc = 1624 Dustdevil 93 105 +npc = 1625 Smokedevil 93 105 +npc = 1626 Turoth 85 77 +npc = 1627 Turoth 89 81 +npc = 1628 Turoth 87 79 +npc = 1629 Turoth 85 77 +npc = 1630 Turoth 83 76 +npc = 1631 Turoth 89 81 +npc = 1632 Turoth 89 81 +npc = 1633 Pyrefiend 43 45 +npc = 1634 Pyrefiend 43 45 +npc = 1635 Pyrefiend 43 45 +npc = 1636 Pyrefiend 43 45 +npc = 1637 Jelly 78 75 +npc = 1638 Jelly 78 75 +npc = 1639 Jelly 78 75 +npc = 1640 Jelly 78 75 +npc = 1641 Jelly 78 75 +npc = 1642 Jelly 78 75 +npc = 1643 Infernal_Mage 66 60 +npc = 1644 Infernal_Mage 66 60 +npc = 1645 Infernal_Mage 66 60 +npc = 1646 Infernal_Mage 66 60 +npc = 1647 Infernal_Mage 66 60 +npc = 1648 Crawling_Hand 8 16 +npc = 1649 Crawling_Hand 8 16 +npc = 1650 Crawling_Hand 8 16 +npc = 1651 Crawling_Hand 8 16 +npc = 1652 Crawling_Hand 8 16 +npc = 1653 Crawling_Hand 12 19 +npc = 1654 Crawling_Hand 12 19 +npc = 1655 Crawling_Hand 11 19 +npc = 1656 Crawling_Hand 12 19 +npc = 1657 Crawling_Hand 12 19 +npc = 1658 Robe_Store_owner 0 0 +npc = 1659 Skullball 0 0 +npc = 1660 Skullball_Boss 0 0 +npc = 1661 Agility_Boss 0 0 +npc = 1662 Skullball_Trainer 0 0 +npc = 1663 Agility_Trainer 0 0 +npc = 1664 Agility_Trainer 0 0 +npc = 1665 Werewolf 0 0 +npc = 1666 fenk_gardener_multi 0 0 +npc = 1667 fenk_gardener_multi_2 0 0 +npc = 1668 fenk_fenkenstrain 0 0 +npc = 1669 fenk_fenkenstrain_in_tower 0 0 +npc = 1670 Dr_Fenkenstrain 0 0 +npc = 1671 fenk_creature 0 0 +npc = 1672 fenk_creature_released 0 0 +npc = 1673 Fenkenstrain's_Monster 0 0 +npc = 1674 Lord_Rologarth 0 0 +npc = 1675 Gardener_Ghost 0 0 +npc = 1676 Experiment 51 40 +npc = 1677 Experiment 25 101 +npc = 1678 Experiment 25 101 +npc = 1679 Eluned 0 0 +npc = 1680 Islwyn 0 0 +npc = 1681 Moss_giant 84 120 +npc = 1682 Golrie 0 0 +npc = 1683 Velorina 0 0 +npc = 1684 Necrovarus 0 0 +npc = 1685 Gravingas 0 0 +npc = 1686 Ghost_Disciple 0 0 +npc = 1687 ahoy_akharanu_multi 0 0 +npc = 1688 Ak-Haranu 0 0 +npc = 1689 Slime 0 0 +npc = 1690 Slime 0 0 +npc = 1691 Undead_Cow 2 8 +npc = 1692 Undead_Chicken 1 3 +npc = 1693 Giant_Lobster 32 32 +npc = 1694 Robin 0 0 +npc = 1695 Old_crone 0 0 +npc = 1696 Old_man 0 0 +npc = 1697 Ghost_Villager 0 0 +npc = 1698 Tortured_Soul 59 51 +npc = 1699 Ghost_Shopkeeper 0 0 +npc = 1700 Ghost_Innkeeper 0 0 +npc = 1701 Ghost_Farmer 0 0 +npc = 1702 Ghost_Banker 0 0 +npc = 1703 Ghost_Sailor 0 0 +npc = 1704 Ghost_Captain 0 0 +npc = 1705 Ghost_Captain 0 0 +npc = 1706 Ghost_Guard 0 0 +npc = 1707 Ghost_(?) 0 0 +npc = 1708 Ghost_(?) 0 0 +npc = 1709 Johanhus_Ulsbrecht 0 0 +npc = 1710 H.A.M._Guard 12 15 +npc = 1711 H.A.M._Guard 18 20 +npc = 1712 H.A.M._Guard 22 31 +npc = 1713 H.A.M._Deacon 0 0 +npc = 1714 H.A.M._Member 0 0 +npc = 1715 H.A.M._Member 0 0 +npc = 1716 H.A.M._Member 0 0 +npc = 1717 H.A.M._Member 0 0 +npc = 1718 Jimmy_the_Chisel 0 0 +npc = 1719 Tree 0 0 +npc = 1720 Tree 0 0 +npc = 1721 Tree 0 0 +npc = 1722 Dead_tree 0 0 +npc = 1723 Dead_tree 0 0 +npc = 1724 Dead_tree 0 0 +npc = 1725 Dead_tree 0 0 +npc = 1726 Dead_tree 0 0 +npc = 1727 Dead_tree 0 0 +npc = 1728 Dead_tree 0 0 +npc = 1729 Dead_tree 0 0 +npc = 1730 Dead_tree 0 0 +npc = 1731 Dead_tree 0 0 +npc = 1732 Dead_tree 0 0 +npc = 1733 Dramen_tree 0 0 +npc = 1734 Magic_tree 0 0 +npc = 1735 Maple_tree 0 0 +npc = 1736 Willow 0 0 +npc = 1737 Willow 0 0 +npc = 1738 Willow 0 0 +npc = 1739 Oak 0 0 +npc = 1740 Yew 0 0 +npc = 1741 Evergreen 0 0 +npc = 1742 Evergreen 0 0 +npc = 1743 Evergreen 0 0 +npc = 1744 Tree 0 0 +npc = 1745 Dead_tree 0 0 +npc = 1746 Achey_Tree 0 0 +npc = 1747 tree1 0 0 +npc = 1748 tree1 0 0 +npc = 1749 tree1 0 0 +npc = 1750 tree1 0 0 +npc = 1751 Crow 0 0 +npc = 1752 Crow 0 0 +npc = 1753 Crow 0 0 +npc = 1754 Crow 0 0 +npc = 1755 Crow 0 0 +npc = 1756 Crow 0 0 +npc = 1757 Farmer 7 12 +npc = 1758 Farmer 7 12 +npc = 1759 Farmer 0 0 +npc = 1760 Farmer 0 0 +npc = 1761 Farmer 0 0 +npc = 1762 Sheep 0 0 +npc = 1763 Sheep 0 0 +npc = 1764 Sheep 0 0 +npc = 1765 Sheep 0 0 +npc = 1766 Cow_calf 2 6 +npc = 1767 Cow 2 8 +npc = 1768 Cow_calf 2 6 +npc = 1769 Goblin 2 5 +npc = 1770 Goblin 2 5 +npc = 1771 Goblin 2 5 +npc = 1772 Goblin 2 5 +npc = 1773 Goblin 2 5 +npc = 1774 Goblin 2 5 +npc = 1775 Goblin 2 5 +npc = 1776 Goblin 2 5 +npc = 1777 Ilfeen 0 0 +npc = 1778 William 0 0 +npc = 1779 Ian 0 0 +npc = 1780 Larry 0 0 +npc = 1781 Darren 0 0 +npc = 1782 Edward 0 0 +npc = 1783 Richard 0 0 +npc = 1784 Neil 0 0 +npc = 1785 Edmond 0 0 +npc = 1786 Simon 0 0 +npc = 1787 Sam 0 0 +npc = 1788 Lumdo 0 0 +npc = 1789 Bunkwicket 0 0 +npc = 1790 Waymottin 0 0 +npc = 1791 Jungle_Tree 0 0 +npc = 1792 Jungle_Tree 0 0 +npc = 1793 Tassie_Slipcast 0 0 +npc = 1794 Hammerspike_Stoutbeard 0 0 +npc = 1795 Dwarf_gang_member 0 0 +npc = 1796 Dwarf_gang_member 0 0 +npc = 1797 Dwarf_gang_member 0 0 +npc = 1798 Phantuwti_Fanstuwi_Farsight 0 0 +npc = 1799 Tindel_Marchant 0 0 +npc = 1800 Gnormadium_Avlafrim 0 0 +npc = 1801 Petra_Fiyed 0 0 + +//------------------------Not In DB------------------------ +npc = 1802 Slagilith 92 0 +//------------------------Not In DB------------------------ + +npc = 1803 Rock_pile 0 0 +npc = 1804 Slagilith 0 0 +npc = 1805 Guard 0 0 +npc = 1806 Guard 0 0 +npc = 1807 Hamal_the_Chieftain 0 0 +npc = 1808 Ragnar 0 0 +npc = 1809 Svidi 0 0 +npc = 1810 Jokul 0 0 +npc = 1811 mdaughter_multi_bear 0 0 +npc = 1812 The_Kendal 70 63 +npc = 1813 The_Kendal 70 63 +npc = 1814 Camp_dweller 31 30 +npc = 1815 Camp_dweller 31 30 +npc = 1816 Camp_dweller 31 30 +npc = 1817 Camp_dweller 31 30 +npc = 1818 Camp_dweller 25 25 +npc = 1819 Mountain_Goat 0 0 +npc = 1820 Mountain_Goat 0 0 +npc = 1821 Bald_Headed_Eagle 0 0 +npc = 1822 Cave_goblin 3 13 +npc = 1823 Cave_goblin 3 13 +npc = 1824 Cave_goblin 3 13 +npc = 1825 Cave_goblin 3 13 +npc = 1826 Hole_in_the_wall 0 0 +npc = 1827 Wall_Beast 49 105 +npc = 1828 Giant_frog 99 100 +npc = 1829 Big_frog 24 25 +npc = 1830 Frog 0 0 +npc = 1831 Cave_Slime 23 25 +npc = 1832 Cave_Bug 6 0 +npc = 1833 Cave_bug_larva 0 0 +npc = 1834 Candle_seller 0 0 +npc = 1835 Easter_Bunny 0 0 +npc = 1836 dwarfrock_multi_dondakan 0 0 +npc = 1837 Dondakan_the_Dwarf 0 0 +npc = 1838 Dondakan_the_Dwarf 0 0 +npc = 1839 Dondakan_the_Dwarf 0 0 +npc = 1840 Dwarven_Engineer 0 0 +npc = 1841 Rolad 0 0 +npc = 1842 Khorvak,_a_dwarven_engineer 0 0 +npc = 1843 Dwarven_Ferryman 0 0 +npc = 1844 Dwarven_Ferryman 0 0 +npc = 1845 dwarfrock_multi_gold_boatman 0 0 +npc = 1846 Dwarven_Boatman 0 0 +npc = 1847 Miodvetnir 0 0 +npc = 1848 Dernu 0 0 +npc = 1849 Derni 0 0 +npc = 1850 Arzinian_Avatar_of_Strength 0 0 +npc = 1851 Arzinian_Avatar_of_Strength 125 99 + +//------------------------Not In DB------------------------ +npc = 1852 Arzinian_Avatar_of_Strength 75 0 +//------------------------Not In DB------------------------ + +npc = 1853 Arzinian_Avatar_of_Ranging 0 0 +npc = 1854 Arzinian_Avatar_of_Ranging 125 99 + +//------------------------Not In DB------------------------ +npc = 1855 Arzinian_Avatar_of_Ranging 75 0 +//------------------------Not In DB------------------------ + +npc = 1856 Arzinian_Avatar_of_Magic 0 0 +npc = 1857 Arzinian_Avatar_of_Magic 125 99 + +//------------------------Not In DB------------------------ +npc = 1858 Arzinian_Avatar_of_Magic 75 0 +npc = 1859 Arzinian_Being_of_Bordanzan 781 0 +//------------------------Not In DB------------------------ + +npc = 1860 Brian 0 0 +npc = 1861 Monkey_boy 0 0 +npc = 1862 Ali_Morrisane 0 0 +npc = 1863 Drunken_Ali 0 0 +npc = 1864 Ali_The_barman 0 0 +npc = 1865 Ali_the_Kebab_seller 0 0 +npc = 1866 Market_seller 0 0 +npc = 1867 Ali_the_Camel_Man 0 0 +npc = 1868 Street_urchin 0 0 +npc = 1869 feud_mayor 0 0 +npc = 1870 Ali_the_Mayor 0 0 +npc = 1871 Ali_the_Hag 0 0 +npc = 1872 Ali_the_Snake_Charmer 0 0 +npc = 1873 Ali_the_Camel 0 0 +npc = 1874 Desert_snake 5 6 +npc = 1875 Snake 0 0 +npc = 1876 Blackjack_seller 0 0 +npc = 1877 feud_bandit_boss 0 0 +npc = 1878 Bandit_Leader 0 0 +npc = 1879 feud_arabian_guard_multi 0 0 +npc = 1880 Bandit 56 30 +npc = 1881 Bandit 56 30 +npc = 1882 feud_arabian_guard2_multi 0 0 +npc = 1883 Bandit 41 30 +npc = 1884 Bandit 41 30 +npc = 1885 Bandit_champion 70 50 +npc = 1886 Cowardly_Bandit 56 30 + +//------------------------Not In DB------------------------ +npc = 1887 feud_villager_multi_1 3 0 +npc = 1888 Villager 3 0 +npc = 1889 Villager 3 0 +npc = 1890 Villager 3 0 +npc = 1891 feud_villager_multi_2 3 0 +npc = 1892 Villager 3 0 +npc = 1893 Villager 3 0 +npc = 1894 Villager 3 0 +npc = 1895 feud_villager_multi_3 3 0 +npc = 1896 Villager 3 0 +npc = 1897 Villager 3 0 +npc = 1898 Villager 3 0 +//------------------------Not In DB------------------------ + +npc = 1899 feud_menap_boss 0 0 +npc = 1900 feud_menap_boss2 0 0 +npc = 1901 Menaphite_Leader 0 0 +npc = 1902 Ali_the_Operator 0 0 +npc = 1903 feud_egyptian_doorman_multi 0 0 +npc = 1904 Menaphite_Thug 55 60 +npc = 1905 Menaphite_Thug 55 60 +npc = 1906 Tough_Guy 75 75 +npc = 1907 Golem 0 0 +npc = 1908 Broken_clay_golem 0 0 +npc = 1909 Damaged_clay_golem 0 0 +npc = 1910 Clay_golem 0 0 +npc = 1911 Desert_Phoenix 0 0 +npc = 1912 Elissa 0 0 + +//------------------------Not In DB------------------------ +npc = 1913 Kamil 154 0 +npc = 1914 Dessous 139 0 +npc = 1915 Dessous 139 0 +//------------------------Not In DB------------------------ + +npc = 1916 Ruantun 0 0 +npc = 1917 Bandit_shopkeeper 0 0 +npc = 1918 Archaeologist 0 0 + +//------------------------Not In DB------------------------ +npc = 1919 Stranger 95 0 +//------------------------Not In DB------------------------ + +npc = 1920 Malak 0 0 +npc = 1921 Bartender 0 0 +npc = 1922 fourdiamonds_elder 0 0 +npc = 1923 Eblis 0 0 +npc = 1924 fourdiamonds_elder2 0 0 +npc = 1925 Eblis 0 0 +npc = 1926 Bandit 74 65 +npc = 1927 Bandit 0 0 +npc = 1928 Bandit 0 0 +npc = 1929 Bandit 0 0 +npc = 1930 Bandit 0 0 +npc = 1931 Bandit 57 50 +npc = 1932 fourdiamonds_troll_child 0 0 +npc = 1933 Troll_child 0 0 +npc = 1934 Troll_child 0 0 +npc = 1935 Ice_troll 0 0 +npc = 1936 Ice_Troll 124 86 +npc = 1937 Ice_Troll 123 86 +npc = 1938 Ice_Troll 120 95 +npc = 1939 Ice_Troll 121 86 +npc = 1940 Ice_Troll 120 95 +npc = 1941 Ice_Troll 120 95 +npc = 1942 Ice_Troll 121 86 +npc = 1943 troll_block_1 0 0 +npc = 1944 Ice_block 0 0 +npc = 1945 troll_block_2 0 0 +npc = 1946 Ice_block 0 0 +npc = 1947 Troll_father 0 0 +npc = 1948 Troll_father 0 0 +npc = 1949 Troll_Mother 0 0 +npc = 1950 Troll_mother 0 0 + +//------------------------Not In DB------------------------ +npc = 1951 Ice_wolf 132 0 +npc = 1952 Ice_wolf 132 0 +npc = 1953 Ice_wolf 132 0 +npc = 1954 Ice_wolf 132 0 +npc = 1955 Ice_wolf 132 0 +npc = 1956 Ice_wolf 132 0 +//------------------------Not In DB------------------------ + +npc = 1957 desert_treasure_invisible_npc 0 0 +npc = 1958 Mummy 0 0 +npc = 1959 Mummy 0 0 +npc = 1960 Mummy 84 91 +npc = 1961 Mummy 103 91 +npc = 1962 Mummy 103 91 +npc = 1963 Mummy 103 91 +npc = 1964 Mummy 103 91 +npc = 1965 Mummy 103 91 +npc = 1966 Mummy 103 91 +npc = 1967 Mummy 103 91 +npc = 1968 Mummy 103 91 +npc = 1969 Scarabs 0 0 +npc = 1970 azzanadra 0 0 +npc = 1971 Azzanadra 0 0 +npc = 1972 Rasool 0 0 +npc = 1973 Giant_skeleton 80 71 +npc = 1974 Damis 103 95 +npc = 1975 Damis 174 160 + +//------------------------Not In DB------------------------ +npc = 1976 Shadow_Hound 63 0 +npc = 1977 Fareed 167 0 +//------------------------Not In DB------------------------ + +npc = 1978 Slave 0 0 +npc = 1979 Slave 0 0 +npc = 1980 Embalmer 0 0 +npc = 1981 Carpenter 0 0 +npc = 1982 Linen_Worker 0 0 +npc = 1983 Siamun 0 0 +npc = 1984 ics_little_hipriest 0 0 +npc = 1985 ics_little_hipriest_town 0 0 +npc = 1986 High_Priest 0 0 +npc = 1987 ics_little_temple_priest 0 0 +npc = 1988 Priest 0 0 +npc = 1989 Priest 0 0 +npc = 1990 Sphinx 0 0 +npc = 1991 Possessed_Priest 91 90 +npc = 1992 Neite 0 0 +npc = 1993 Crocodile 63 63 +npc = 1994 Jackal 21 21 +npc = 1995 Locust 18 28 +npc = 1996 Vulture 31 10 +npc = 1997 Plague_Frog 11 10 +npc = 1998 Plagued_Cow 0 0 +npc = 1999 Plagued_Cow 0 0 +npc = 2000 Plagued_Cow 0 0 +npc = 2001 Scarabs 0 0 +npc = 2002 ics_little_multi_wanderer 0 0 +npc = 2003 ics_little_multi_wanderer1 0 0 +npc = 2004 ics_little_multi_wanderer2 0 0 +npc = 2005 Wanderer 0 0 +npc = 2006 Wanderer 0 0 + +//------------------------Not In DB------------------------ +npc = 2007 Het 81 0 +npc = 2008 Apmeken 75 0 +npc = 2009 Scabaras 75 0 +//------------------------Not In DB------------------------ + +npc = 2010 Crondis 60 60 +npc = 2011 ics_multi_ic 0 0 +npc = 2012 Icthlarin 0 0 +npc = 2013 ics_little_spectre 0 0 +npc = 2014 Klenter 0 0 +npc = 2015 Mummy 84 91 +npc = 2016 Mummy 84 91 +npc = 2017 Mummy 84 91 +npc = 2018 Mummy 84 91 +npc = 2019 Mummy 84 91 +npc = 2020 multi_vanstrom_stranger_entity 0 0 +npc = 2021 Light_creature 0 0 +npc = 2022 Light_creature 0 0 +npc = 2023 Juna 0 0 +npc = 2024 Strange_Old_Man 0 0 +npc = 2025 Ahrim_the_Blighted 98 100 +npc = 2026 Dharok_the_Wretched 115 100 +npc = 2027 Guthan_the_Infested 115 100 +npc = 2028 Karil_the_Tainted 98 100 +npc = 2029 Torag_the_Corrupted 115 100 +npc = 2030 Verac_the_Defiled 115 100 +npc = 2031 Bloodworm 52 45 +npc = 2032 Crypt_rat 43 35 +npc = 2033 Giant_crypt_rat 76 70 +npc = 2034 Crypt_spider 56 60 +npc = 2035 Giant_crypt_spider 79 80 +npc = 2036 Skeleton 77 50 +npc = 2037 Skeleton 77 50 +npc = 2038 Grish 0 0 +npc = 2039 Uglug_Nar 0 0 +npc = 2040 Pilg 0 0 +npc = 2041 Grug 0 0 +npc = 2042 Ogre_guard 0 0 +npc = 2043 Ogre_guard 83 80 +npc = 2044 Zogre 44 72 +npc = 2045 Zogre 44 72 +npc = 2046 Zogre 44 72 +npc = 2047 Zogre 44 72 +npc = 2048 Zogre 44 72 +npc = 2049 Zogre 44 72 +npc = 2050 Skogre 44 72 +npc = 2051 Zogre 44 72 +npc = 2052 Zogre 44 72 +npc = 2053 Zogre 44 72 +npc = 2054 Zogre 44 72 +npc = 2055 Zogre 44 72 +npc = 2056 Zogre 44 72 +npc = 2057 Skogre 44 72 + +//------------------------Not In DB------------------------ +npc = 2058 Zombie 39 0 +//------------------------Not In DB------------------------ + +npc = 2059 Zavistic_Rarve 0 0 +npc = 2060 Slash_Bash 111 103 +npc = 2061 Sithik_Ints 0 0 +npc = 2062 Sithik_Ints 0 0 +npc = 2063 Gargh 0 0 +npc = 2064 Scarg 0 0 +npc = 2065 Gruh 0 0 +npc = 2066 Irwin_Feaselbaum 0 0 +npc = 2067 Fishing_spot 0 0 +npc = 2068 Fishing_spot 0 0 +npc = 2069 Cave_goblin_miner 11 10 +npc = 2070 Cave_goblin_miner 11 10 +npc = 2071 Cave_goblin_miner 11 10 +npc = 2072 Cave_goblin_miner 11 10 +npc = 2073 Cave_goblin_guard 26 26 +npc = 2074 Cave_goblin_guard 24 26 +npc = 2075 Cave_goblin_miner 11 10 +npc = 2076 Cave_goblin_miner 11 10 +npc = 2077 Cave_goblin_miner 11 10 +npc = 2078 Cave_goblin_miner 11 10 +npc = 2079 Sigmund 0 0 +npc = 2080 lost_tribe_sigmund_leaving 0 0 +npc = 2081 lost_tribe_sigmund_ham 0 0 +npc = 2082 Sigmund 0 0 +npc = 2083 Sigmund 0 0 +npc = 2084 Mistag 0 0 +npc = 2085 lost_tribe_guide 0 0 +npc = 2086 Kazgar 0 0 +npc = 2087 Ur-tag 0 0 +npc = 2088 Duke_Horacio 0 0 +npc = 2089 Mistag 0 0 +npc = 2090 Sigmund 0 0 +npc = 2091 Secretary 0 0 +npc = 2092 Purple_Pewter_Secretary 0 0 +npc = 2093 Yellow_Fortune_Secretary 0 0 +npc = 2094 Blue_Opal_Secretary 0 0 +npc = 2095 Green_Gemstone_Secretary 0 0 +npc = 2096 White_Chisel_Secretary 0 0 +npc = 2097 Silver_Cog_Secretary 0 0 +npc = 2098 Brown_Engine_Secretary 0 0 +npc = 2099 Red_Axe_Secretary 0 0 +npc = 2100 Purple_Pewter_Director 0 0 +npc = 2101 Blue_Opal_Director 0 0 +npc = 2102 Yellow_Fortune_Director 0 0 +npc = 2103 Green_Gemstone_Director 0 0 +npc = 2104 White_Chisel_Director 0 0 +npc = 2105 Silver_Cog_Director 0 0 +npc = 2106 Brown_Engine_Director 0 0 +npc = 2107 Red_Axe_Director 0 0 +npc = 2108 Red_Axe_Cat 0 0 +npc = 2109 Trader 0 0 +npc = 2110 Trader 0 0 +npc = 2111 Trader 0 0 +npc = 2112 Trader 0 0 +npc = 2113 Trader 0 0 +npc = 2114 Trader 0 0 +npc = 2115 Trader 0 0 +npc = 2116 Trader 0 0 +npc = 2117 Trader 0 0 +npc = 2118 Trader 0 0 +npc = 2119 Trader 0 0 +npc = 2120 Trader 0 0 +npc = 2121 Trader 0 0 +npc = 2122 Trader 0 0 +npc = 2123 Trader 0 0 +npc = 2124 Trader 0 0 +npc = 2125 Trader 0 0 +npc = 2126 Trader 0 0 +npc = 2127 Trade_Referee 0 0 +npc = 2128 Supreme_Commander 0 0 +npc = 2129 Commander_Veldaban 0 0 +npc = 2130 Black_Guard 48 40 +npc = 2131 Black_Guard 48 40 +npc = 2132 Black_Guard 48 40 +npc = 2133 Black_Guard 48 40 +npc = 2134 Black_Guard_Berserker 66 51 +npc = 2135 Black_Guard_Berserker 66 51 +npc = 2136 Black_Guard_Berserker 66 51 +npc = 2137 Gnome_emissary 0 0 +npc = 2138 Gnome_traveller 0 0 +npc = 2139 Gnome_traveller 0 0 +npc = 2140 Dromund's_cat 0 0 +npc = 2141 Blasidar_the_sculptor 0 0 +npc = 2142 Riki_the_sculptor's_model 0 0 +npc = 2143 Riki_the_sculptor's_model 0 0 +npc = 2144 Riki_the_sculptor's_model 0 0 +npc = 2145 Riki_the_sculptor's_model 0 0 +npc = 2146 Riki_the_sculptor's_model 0 0 +npc = 2147 Riki_the_sculptor's_model 0 0 +npc = 2148 Riki_the_sculptor's_model 0 0 +npc = 2149 Riki_the_sculptor's_model 0 0 +npc = 2150 Riki_the_sculptor's_model 0 0 +npc = 2151 Vigr 0 0 +npc = 2152 Santiri 0 0 +npc = 2153 Saro 0 0 +npc = 2154 Gunslik 0 0 +npc = 2155 Wemund 0 0 +npc = 2156 Randivor 0 0 +npc = 2157 Hervi 0 0 +npc = 2158 Nolar 0 0 +npc = 2159 Gulldamar 0 0 +npc = 2160 Tati 0 0 +npc = 2161 Agmundi 0 0 +npc = 2162 Vermundi 0 0 +npc = 2163 Banker 0 0 +npc = 2164 Banker 0 0 +npc = 2165 Librarian 0 0 +npc = 2166 Assistant 0 0 +npc = 2167 Customer 0 0 +npc = 2168 Customer 0 0 +npc = 2169 Dromund 0 0 +npc = 2170 Rind_the_gardener 0 0 +npc = 2171 Factory_Manager 0 0 +npc = 2172 Factory_Worker 0 0 +npc = 2173 Factory_Worker 0 0 +npc = 2174 Factory_Worker 0 0 +npc = 2175 Factory_Worker 0 0 +npc = 2176 Inn_Keeper 0 0 +npc = 2177 Inn_Keeper 0 0 +npc = 2178 Barmaid 0 0 +npc = 2179 Barman 0 0 +npc = 2180 Cart_conductor 0 0 +npc = 2181 Cart_conductor 0 0 +npc = 2182 Cart_conductor 0 0 +npc = 2183 Cart_conductor 0 0 +npc = 2184 Cart_conductor 0 0 +npc = 2185 Cart_conductor 0 0 +npc = 2186 Cart_conductor 0 0 +npc = 2187 Rowdy_dwarf 0 0 +npc = 2188 Hegir 0 0 +npc = 2189 Haera 0 0 +npc = 2190 Runvastr 0 0 +npc = 2191 Sune 0 0 +npc = 2192 Bentamir 0 0 +npc = 2193 Ulifed 0 0 +npc = 2194 Reinald 0 0 +npc = 2195 Karl 0 0 +npc = 2196 Gauss 0 0 +npc = 2197 Myndill 0 0 +npc = 2198 Kjut 0 0 +npc = 2199 Tombar 0 0 +npc = 2200 Odmar 0 0 +npc = 2201 Audmann 0 0 +npc = 2202 Drunken_Dwarf 0 0 +npc = 2203 Drunken_Dwarf 0 0 +npc = 2204 Drunken_Dwarf 0 0 +npc = 2205 Dwarven_Boatman 0 0 +npc = 2206 Dwarven_Boatman 0 0 +npc = 2207 Dwarven_Miner 0 0 +npc = 2208 Dwarven_Miner 0 0 +npc = 2209 Dwarven_Miner 0 0 +npc = 2210 Dwarven_Miner 0 0 +npc = 2211 Dwarven_Miner 0 0 +npc = 2212 Dwarven_Miner 0 0 +npc = 2213 Dwarven_Miner 0 0 +npc = 2214 Dwarven_Miner 0 0 +npc = 2215 Dwarven_Miner 0 0 +npc = 2216 Dwarven_Miner 0 0 +npc = 2217 Dwarven_Miner 0 0 +npc = 2218 Dwarven_Miner 0 0 +npc = 2219 Purple_Pewter_Director 0 0 +npc = 2220 Purple_Pewter_Director 0 0 +npc = 2221 Blue_Opal_Director 0 0 +npc = 2222 Yellow_Fortune_Director 0 0 +npc = 2223 Green_Gemstone_Director 0 0 +npc = 2224 White_Chisel_Director 0 0 +npc = 2225 Silver_Cog_Director 0 0 +npc = 2226 Brown_Engine_Director 0 0 +npc = 2227 Red_Axe_Director 0 0 +npc = 2228 Commander_Veldaban 0 0 +npc = 2229 Red_Axe_Cat 0 0 +npc = 2230 Red_Axe_Cat 0 0 +npc = 2231 Black_Guard_Berserker 0 0 +npc = 2232 Black_Guard_Berserker 0 0 +npc = 2233 Olivia 0 0 +npc = 2234 Master Farmer 0 0 +npc = 2235 Master Farmer 0 0 +npc = 2236 Market_Guard 20 22 +npc = 2237 Gee 0 0 +npc = 2238 Donie 0 0 +npc = 2239 Pig 0 0 +npc = 2240 Pig 0 0 +npc = 2241 Piglet 0 0 +npc = 2242 Piglet 0 0 +npc = 2243 Piglet 0 0 +npc = 2244 Lumbridge_Guide 0 0 +npc = 2245 Khazard_trooper 19 22 +npc = 2246 Khazard_trooper 19 22 +npc = 2247 Gnome_troop 1 2 +npc = 2248 Gnome_troop 1 2 +npc = 2249 Gnome 1 3 +npc = 2250 Gnome 1 3 +npc = 2251 Gnome 1 3 +npc = 2252 Mounted_terrorbird_gnome 49 55 +npc = 2253 Wise_Old_Man 0 0 +npc = 2254 Bed 0 0 +npc = 2255 Thing_under_the_bed 0 0 +npc = 2256 Paladin 62 57 +npc = 2257 rcu_zammy_mage1 0 0 +npc = 2258 Mage_of_Zamorak 0 0 +npc = 2259 Mage_of_Zamorak 0 0 +npc = 2260 rcu_zammy_mage1_edge 0 0 +npc = 2261 Mage_of_Zamorak 0 0 +npc = 2262 Dark_mage 0 0 +npc = 2263 Abyssal_leech 41 10 +npc = 2264 Abyssal_guardian 59 50 +npc = 2265 Abyssal_walker 81 95 +npc = 2266 Brian_O'Richard 0 0 +npc = 2267 Rogue_Guard 0 0 +npc = 2268 Rogue_Guard 0 0 +npc = 2269 Rogue_Guard 0 0 +npc = 2270 Martin_Thwait 0 0 +npc = 2271 Emerald_Benedict 0 0 +npc = 2272 Spin_Blades 0 0 +npc = 2273 Spin_Blades 0 0 +npc = 2274 Goblin 2 5 +npc = 2275 Goblin 2 5 +npc = 2276 Goblin 2 5 +npc = 2277 Goblin 2 5 +npc = 2278 Goblin 2 5 +npc = 2279 Goblin 2 5 +npc = 2280 Goblin 2 5 +npc = 2281 Goblin 2 5 +npc = 2282 Sir_Spishyus 0 0 +npc = 2283 Lady_Table 0 0 +npc = 2284 Sir_Kuam_Ferentse 0 0 +npc = 2285 Sir_Leye 20 20 +npc = 2286 Sir_Tinley 0 0 +npc = 2287 Sir_Ren_Itchood 0 0 +npc = 2288 Miss_Cheevers 0 0 +npc = 2289 Ms._Hynn_Terprett 0 0 +npc = 2290 Sir_Tiffy_Cashien 0 0 +npc = 2291 Rug_Merchant 0 0 +npc = 2292 Rug_Merchant 0 0 +npc = 2293 Rug_Merchant 0 0 +npc = 2294 Rug_Merchant 0 0 +npc = 2295 magic_carpet_seller5 0 0 +npc = 2296 Rug_Merchant 0 0 +npc = 2297 magic_carpet_seller6 0 0 +npc = 2298 Rug_Merchant 0 0 +npc = 2299 magic_carpet_seller7 0 0 +npc = 2300 Rug_Station_Attendant 0 0 +npc = 2301 Monkey 0 0 +npc = 2302 magic_carpet_multi_monkey1 0 0 +npc = 2303 magic_carpet_multi_monkey2 0 0 +npc = 2304 Sarah 0 0 +npc = 2305 Vanessa 0 0 +npc = 2306 Richard 0 0 +npc = 2307 Alice 0 0 +npc = 2308 Capt'_Arnav 0 0 +npc = 2309 --NO_IDEA-- 0 0 +npc = 2310 Cow_calf 2 6 +npc = 2311 Sheepdog 0 0 +npc = 2312 Rooster 0 0 +npc = 2313 Chicken 1 3 +npc = 2314 Chicken 1 3 +npc = 2315 Chicken 1 3 +npc = 2316 Pig 0 0 +npc = 2317 Pig 0 0 +npc = 2318 Piglet 0 0 +npc = 2319 Piglet 0 0 +npc = 2320 Piglet 0 0 +npc = 2321 Blandebir 0 0 +npc = 2322 Metarialus 0 0 +npc = 2323 Elstan 0 0 +npc = 2324 Dantaera 0 0 +npc = 2325 Kragen 0 0 +npc = 2326 Lyra 0 0 +npc = 2327 Francis 0 0 +npc = 2328 Gardener 0 0 +npc = 2329 Iago 0 0 +npc = 2330 Garth 0 0 +npc = 2331 Ellena 0 0 +npc = 2332 Selena 0 0 +npc = 2333 Vasquen 0 0 +npc = 2334 Rhonen 0 0 +npc = 2335 Dreven 0 0 +npc = 2336 Taria 0 0 +npc = 2337 Rhazien 0 0 +npc = 2338 Torrell 0 0 +npc = 2339 Alain 0 0 +npc = 2340 Heskel 0 0 +npc = 2341 Treznor 0 0 +npc = 2342 Fayeth 0 0 +npc = 2343 Bolongo 0 0 +npc = 2344 Gileth 0 0 +npc = 2345 Sick-looking_sheep_(1) 0 0 +npc = 2346 Sick-looking_sheep_(2) 0 0 +npc = 2347 Sick-looking_sheep_(3) 0 0 +npc = 2348 Sick-looking_sheep_(4) 0 0 +npc = 2349 Mourner 15 19 +npc = 2350 Mourner 15 19 +npc = 2351 Mourner 15 19 +npc = 2352 Eudav 0 0 +npc = 2353 Oronwen 0 0 +npc = 2354 Banker 0 0 +npc = 2355 Banker 0 0 +npc = 2356 Dalldav 0 0 +npc = 2357 Gethin 0 0 +npc = 2358 Arianwyn 0 0 +npc = 2359 Elf_warrior 108 110 +npc = 2360 Elf_warrior 108 110 +npc = 2361 Elf_warrior 90 105 +npc = 2362 Elf_warrior 90 105 +npc = 2363 Goreu 0 0 +npc = 2364 Ysgawyn 0 0 +npc = 2365 Arvel 0 0 +npc = 2366 Mawrth 0 0 +npc = 2367 Kelyn 0 0 +npc = 2368 Eoin 0 0 +npc = 2369 Iona 0 0 +npc = 2370 Gnomic_inventor 0 0 +npc = 2371 Gnome 1 3 +npc = 2372 Head_mourner 0 0 +npc = 2373 Mourner 108 108 +npc = 2374 Mourner 0 0 +npc = 2375 roving_female_woodelf_temp 0 0 +npc = 2376 Eluned 0 0 +npc = 2377 Sick-looking_sheep_(1) 0 0 +npc = 2378 Sick-looking_sheep_(2) 0 0 +npc = 2379 Sick-looking_sheep_(3) 0 0 +npc = 2380 Sick-looking_sheep_(4) 0 0 +npc = 2381 secret_ghost1 0 0 +npc = 2382 secret_ghost2 0 0 +npc = 2383 secret_ghost3 0 0 +npc = 2384 secret_ghost4 0 0 +npc = 2385 secret_ghost5 0 0 +npc = 2386 secret_ghost6 0 0 +npc = 2387 secret_ghost7 0 0 +npc = 2388 secret_ghost8 0 0 +npc = 2389 secret_ghost9 0 0 +npc = 2390 secret_ghost10 0 0 +npc = 2391 secret_ghost11 0 0 +npc = 2392 secret_ghost12 0 0 +npc = 2393 secret_ghost13 0 0 +npc = 2394 secret_ghost14 0 0 +npc = 2395 secret_ghost15 0 0 +npc = 2396 secret_ghost16 0 0 +npc = 2397 Mysterious_ghost 0 0 +npc = 2398 Mysterious_ghost 0 0 +npc = 2399 Mysterious_ghost 0 0 +npc = 2400 Mysterious_ghost 0 0 +npc = 2401 Mysterious_ghost 0 0 +npc = 2402 Mysterious_ghost 0 0 +npc = 2403 Red_Axe_Secretary 0 0 +npc = 2404 Red_Axe_Director 0 0 +npc = 2405 Red_Axe_Cat 0 0 +npc = 2406 Gnome_emissary 0 0 +npc = 2407 Gnome_traveller 0 0 +npc = 2408 Gnome_traveller 0 0 +npc = 2409 Cart_conductor 0 0 +npc = 2410 Red_Axe_Director 0 0 +npc = 2411 Red_Axe_Director 0 0 +npc = 2412 Red_Axe_Henchman 0 0 +npc = 2413 Red_Axe_Henchman 0 0 +npc = 2414 Red_Axe_Henchman 0 0 +npc = 2415 Colonel_Grimsson 0 0 +npc = 2416 Colonel_Grimsson 0 0 +npc = 2417 Ogre_shaman 0 0 +npc = 2418 Ogre_shaman 0 0 +npc = 2419 Grunsh 0 0 +npc = 2420 Gnome_emissary 0 0 +npc = 2421 Gnome_companion 0 0 +npc = 2422 Gnome_companion 0 0 +npc = 2423 Chaos_dwarf 48 61 +npc = 2424 Gunslik 0 0 +npc = 2425 Nolar 0 0 +npc = 2426 Factory_Worker 0 0 +npc = 2427 Cart_conductor 0 0 +npc = 2428 Gauss 0 0 +npc = 2429 Drunken_Dwarf 0 0 +npc = 2430 Rowdy_dwarf 0 0 +npc = 2431 Ulifed 0 0 + +//------------------------Not In DB------------------------ +npc = 2432 Red_Axe_Henchman 1 0 +npc = 2433 Red_Axe_Henchman 1 0 +//------------------------Not In DB------------------------ + +npc = 2434 Ogre_shaman 113 110 +npc = 2435 viking_dagganoth_cave_ferryman_rellekka 0 0 +npc = 2436 Jarvald 0 0 +npc = 2437 Jarvald 0 0 +npc = 2438 Jarvald 0 0 +npc = 2439 Askeladden 0 0 +npc = 2440 Door-support 1 1 +npc = 2441 Door 0 0 +npc = 2442 Door 0 0 +npc = 2443 Door-support 1 1 +npc = 2444 Door 0 0 +npc = 2445 Door 0 0 +npc = 2446 Door-support 1 1 +npc = 2447 Door 0 0 +npc = 2448 Door 0 0 +npc = 2449 Egg 0 0 +npc = 2450 Egg 0 0 +npc = 2451 Egg 0 0 + +//------------------------Not In DB------------------------ +npc = 2452 Giant_Rock_Crab 137 0 +//------------------------Not In DB------------------------ + +npc = 2453 Boulder 0 0 +npc = 2454 Dagannoth_spawn 42 36 +npc = 2455 Dagannoth 90 97 +npc = 2456 Dagannoth 88 85 +npc = 2457 Wallasalki 98 127 +npc = 2458 Freaky_Forester 0 0 +npc = 2459 Pheasant 3 3 +npc = 2460 Pheasant 3 3 +npc = 2461 Pheasant 3 3 +npc = 2462 Pheasant 3 3 +npc = 2463 Evil_Chicken 14 28 +npc = 2464 Evil_Chicken 29 36 +npc = 2465 Evil_Chicken 49 57 +npc = 2466 Evil_Chicken 79 90 +npc = 2467 Evil_Chicken 120 130 +npc = 2468 Evil_Chicken 159 160 +npc = 2469 Frog 0 0 +npc = 2470 Frog 0 0 +npc = 2471 Frog 0 0 +npc = 2472 Frog 0 0 +npc = 2473 Frog 0 0 +npc = 2474 Frog_prince 0 0 +npc = 2475 Frog_princess 0 0 +npc = 2476 Rick_Turpentine 0 0 +npc = 2477 Quiz_Master 0 0 +npc = 2478 Evil_Bob 0 0 +npc = 2479 Evil_Bob 0 0 +npc = 2480 Servant 0 0 +npc = 2481 Servant 0 0 +npc = 2482 Giant_bat 0 0 +npc = 2483 tbwt_tiadeche_multinpc_shore 0 0 +npc = 2484 tbwt_tiadeche_multinpc_house 0 0 +npc = 2485 tbwt_tinsay_multinpc_island 0 0 +npc = 2486 tbwt_tinsay_multinpc_house 0 0 +npc = 2487 tbwt_tamayu_multinpc_jungle 0 0 +npc = 2488 tbwt_tamayu_multinpc_house 0 0 +npc = 2489 Bush_Snake 35 26 +npc = 2490 Bush_Snake 35 26 +npc = 2491 Jungle_spider 44 50 +npc = 2492 Jungle_Spider 44 50 +npc = 2493 Large_mosquito 13 3 +npc = 2494 Mosquito_swarm 20 10 +npc = 2495 Mosquito_swarm 20 10 +npc = 2496 Tribesman 32 40 +npc = 2497 Tribesman 32 40 +npc = 2498 Broodoo_victim 0 0 +npc = 2499 Broodoo_victim 60 87 +npc = 2500 Broodoo_victim 0 0 +npc = 2501 Broodoo_victim 60 87 +npc = 2502 Broodoo_victim 0 0 +npc = 2503 Broodoo_victim 60 87 +npc = 2504 Sharimika 0 0 +npc = 2505 Sharimika 0 0 +npc = 2506 Sharimika 0 0 +npc = 2507 Mamma_Bufetta 0 0 +npc = 2508 Mamma_Bufetta 0 0 +npc = 2509 Mamma_Bufetta 0 0 +npc = 2510 tbwcu_layleen_multinpc 0 0 +npc = 2511 Layleen 0 0 +npc = 2512 Layleen 0 0 +npc = 2513 tbwcu_karaday_multinpc 0 0 +npc = 2514 Karaday 0 0 +npc = 2515 Karaday 0 0 +npc = 2516 tbwcu_safta_doc_multinpc 0 0 +npc = 2517 Safta_Doc 0 0 +npc = 2518 Safta_Doc 0 0 +npc = 2519 tbwcu_gabooty_multinpc 0 0 +npc = 2520 Gabooty 0 0 +npc = 2521 Gabooty 0 0 +npc = 2522 tbwcu_fanellaman_multinpc 0 0 +npc = 2523 Fanellaman 0 0 +npc = 2524 Fanellaman 0 0 +npc = 2525 tbwcu_jagbakoba_multinpc 0 0 +npc = 2526 Jagbakoba 0 0 +npc = 2527 Jagbakoba 0 0 +npc = 2528 tbwcu_murcaily_multinpc 0 0 +npc = 2529 Murcaily 0 0 +npc = 2530 Murcaily 0 0 +npc = 2531 tbwcu_rionasta_multinpc 0 0 +npc = 2532 Rionasta 0 0 +npc = 2533 Rionasta 0 0 +npc = 2534 Mahogany 0 0 +npc = 2535 Teak 0 0 +npc = 2536 Niles 0 0 +npc = 2537 Miles 0 0 +npc = 2538 Giles 0 0 +npc = 2539 Cap'n_Hand 0 0 +npc = 2540 Dr_Jekyll 0 0 +npc = 2541 Mr_Hyde 14 28 +npc = 2542 Mr_Hyde 29 36 +npc = 2543 Mr_Hyde 49 57 +npc = 2544 Mr_Hyde 79 90 +npc = 2545 Mr_Hyde 120 130 +npc = 2546 Mr_Hyde 159 160 +npc = 2547 Dr_Ford 0 0 +npc = 2548 Blackjack_seller 0 0 +npc = 2549 Ali_the_dyer 0 0 +npc = 2550 Dwarven_Miner 650 255 +npc = 2551 Dwarven_Miner 150 160 +npc = 2552 Dwarven_Miner 150 160 +npc = 2553 Blast_Furnace_Foreman 150 160 +npc = 2554 Tin_ore 0 0 +npc = 2555 Copper_ore 0 0 +npc = 2556 Iron_ore 0 0 +npc = 2557 Mithril_ore 0 0 +npc = 2558 Adamantite_ore 650 255 +npc = 2559 Runite_ore 150 160 +npc = 2560 Silver_ore 150 160 +npc = 2561 Gold_ore 150 160 +npc = 2562 Coal 625 255 +npc = 2563 Perfect_gold_ore 150 160 +npc = 2564 Ordan 150 160 +npc = 2565 Jorzik 150 160 +npc = 2566 Wise_Old_Man 0 0 +npc = 2567 Wise_Old_Man 0 0 +npc = 2568 Banker 0 0 +npc = 2569 Banker 0 0 +npc = 2570 Banker 0 0 +npc = 2571 Market_Guard 20 22 +npc = 2572 Olivia 0 0 + +//------------------------Custom------------------------ +npc = 2573 Watchman 253 0 +npc = 2574 Bank_guard 0 0 +npc = 2575 Purepker895 52 0 +npc = 2576 Qutiedoll 16 0 +npc = 2577 1337sp34kr 63 0 +npc = 2578 Elfinlocks 87 0 +npc = 2579 Cool_Mom227 27 0 +npc = 2580 Bernald 0 0 +npc = 2581 Ellamaria 0 0 +npc = 2582 Trolley 0 0 +npc = 2583 Trolley 0 0 +npc = 2584 Trolley 0 0 +npc = 2585 garden_trolley 1 0 +npc = 2586 Billy,_a_guard_of_Falador 0 0 +npc = 2587 Bob,_another_guard_of_Falador 0 0 +npc = 2588 Brother_Althric 0 0 +npc = 2589 PKMaster0036 87 0 +npc = 2590 King_Roald 0 0 +//------------------------Custom------------------------ + +npc = 2591 TzHaar-Mej 103 100 +npc = 2592 TzHaar-Mej 103 100 +npc = 2593 TzHaar-Mej 103 100 +npc = 2594 TzHaar-Mej 103 100 +npc = 2595 TzHaar-Mej 103 100 +npc = 2596 TzHaar-Mej 103 100 +npc = 2597 TzHaar-Mej 103 100 +npc = 2598 TzHaar-Hur 74 80 +npc = 2599 TzHaar-Hur 74 80 +npc = 2600 TzHaar-Hur 74 80 +npc = 2601 TzHaar-Hur 74 80 +npc = 2602 TzHaar-Hur 74 80 +npc = 2603 TzHaar-Hur 74 80 +npc = 2604 TzHaar-Xil 133 120 +npc = 2605 TzHaar-Xil 133 120 +npc = 2606 TzHaar-Xil 133 120 +npc = 2607 TzHaar-Xil 133 120 +npc = 2608 TzHaar-Xil 133 120 +npc = 2609 TzHaar-Xil 133 120 +npc = 2610 TzHaar-Ket 149 140 +npc = 2611 TzHaar-Ket 149 140 +npc = 2612 TzHaar-Ket 149 140 +npc = 2613 TzHaar-Ket 149 140 +npc = 2614 TzHaar-Ket 149 140 +npc = 2615 TzHaar-Ket 149 140 +npc = 2616 TzHaar-Ket 149 140 +npc = 2617 TzHaar-Mej-Jal 0 0 +npc = 2618 TzHaar-Mej-Kah 0 0 +npc = 2619 TzHaar-Ket-Zuh 0 0 +npc = 2620 TzHaar-Hur-Tel 0 0 +npc = 2621 TzHaar-Hur-Koz 0 0 +npc = 2622 TzHaar-Hur-Lek 0 0 +npc = 2623 TzHaar-Mej-Roh 0 0 +npc = 2624 TzHaar-Ket 149 140 +npc = 2625 TzHaar-Ket 149 140 +npc = 2626 Rocks 0 0 +npc = 2627 Tz-Kih 22 10 +npc = 2628 Tz-Kih 22 10 +npc = 2629 Tz-Kek 45 20 +npc = 2630 Tz-Kek 45 20 +npc = 2631 Tok-Xil 90 40 +npc = 2632 Tok-Xil 90 40 + +//------------------------Custom------------------------ +npc = 2633 Wise_Old_Man 0 0 +npc = 2634 Miss_Schism 0 0 +npc = 2635 Bob 0 0 +npc = 2636 Bob 0 0 +npc = 2637 Sphinx 0 0 +npc = 2638 Neite 0 0 +npc = 2639 Robert_the_Strong 0 0 +npc = 2640 Odysseus 0 0 +npc = 2641 Dragonkin 0 0 +npc = 2642 King_Black_Dragon 0 0 +npc = 2643 R4ng3rNo0b889 0 0 +npc = 2644 Love_Cats 0 0 +npc = 2645 Love_Cats 0 0 +npc = 2646 Neite 0 0 +npc = 2647 Bob 0 0 +npc = 2648 Beite 0 0 +npc = 2649 Gnome 0 0 +npc = 2650 Gnome 0 0 +npc = 2651 Odysseus 0 0 +npc = 2652 Neite 0 0 +npc = 2653 Neite 0 0 +npc = 2654 Unferth 0 0 +npc = 2655 Unferth 0 0 +npc = 2656 Unferth 0 0 +npc = 2657 Unferth 0 0 +npc = 2658 Unferth 0 0 +npc = 2659 Unferth 0 0 +npc = 2660 Reldo 0 0 +npc = 2661 Reldo 0 0 +npc = 2662 Cat 0 0 +npc = 2663 Cat 0 0 +npc = 2664 Cat 0 0 +npc = 2665 Cat 0 0 +npc = 2666 Cat 0 0 +npc = 2667 Cat 0 0 +npc = 2668 Cat 0 0 +npc = 2669 Cat 0 0 +npc = 2670 Cat 0 0 +npc = 2671 Cat 0 0 +npc = 2672 Cat 0 0 +npc = 2673 Cat 0 0 +npc = 2674 Thief 16 17 +npc = 2675 Man 0 0 +npc = 2676 Make-over_mage 0 0 +npc = 2677 Highwayman 0 0 +npc = 2678 Goblin 0 0 +npc = 2679 Goblin 0 0 +npc = 2680 Goblin 0 0 +npc = 2881 Dagannoth_Supreme 303 255 +npc = 2882 Dagannoth_Prime 303 255 +npc = 2883 Dagannoth_Rex 303 255 +npc = 2892 Spinolyp 76 100 +npc = 2894 Spinolyp 76 100 +npc = 3200 Chaos_Elemental 305 250 +npc = 3727 Splatter 21 18 +npc = 3728 Splatter 32 27 +npc = 3729 Splatter 43 37 +npc = 3730 Splatter 53 45 +npc = 3731 Splatter 64 54 +npc = 3732 Shifter 37 31 +npc = 3733 Shifter 37 31 +npc = 3734 Shifter 56 47 +npc = 3735 Shifter 56 47 +npc = 3736 Shifter 75 64 +npc = 3737 Shifter 75 64 +npc = 3738 Shifter 94 80 +npc = 3739 Shifter 94 80 +npc = 3740 Shifter 113 96 +npc = 3741 Shifter 113 96 +npc = 3742 Ravager 35 30 +npc = 3743 Ravager 52 44 +npc = 3744 Ravager 70 60 +npc = 3745 Ravager 88 75 +npc = 3746 Ravager 105 89 +npc = 3747 Spinner 37 31 +npc = 3748 Spinner 55 47 +npc = 3749 Spinner 74 63 +npc = 3750 Spinner 92 78 +npc = 3751 Spinner 87 74 +npc = 3752 Torcher 41 35 +npc = 3753 Torcher 41 35 +npc = 3754 Torcher 62 53 +npc = 3755 Torcher 62 53 +npc = 3756 Torcher 83 71 +npc = 3757 Torcher 83 71 +npc = 3758 Torcher 104 88 +npc = 3759 Torcher 104 88 +npc = 3760 Torcher 125 110 +npc = 3761 Torcher 125 110 +npc = 3762 Defiler 41 35 +npc = 3763 Defiler 41 35 +npc = 3764 Defiler 62 53 +npc = 3765 Defiler 62 53 +npc = 3766 Defiler 83 71 +npc = 3767 Defiler 83 71 +npc = 3768 Defiler 104 88 +npc = 3769 Defiler 104 88 +npc = 3770 Defiler 125 110 +npc = 3771 Defiler 125 110 +npc = 3772 Brawler 50 43 +npc = 3773 Brawler 75 64 +npc = 3774 Brawler 100 85 +npc = 3775 Brawler 128 109 +npc = 3776 Brawler 157 133 +npc = 3632 Dalcian_Fang 0 0 +npc = 3777 Portal 0 200 +npc = 3778 Portal 0 200 +npc = 3779 Portal 0 200 +npc = 3780 Portal 0 200 +npc = 2783 Dark_Beast 182 220 +npc = 2558 Kree 650 255 +npc = 3068 Skeletal_Wyvern 140 200 +npc = 3222 Drunken_Man 2 7 +npc = 3796 Squire 0 0 +npc = 3797 Squire 0 0 +npc = 3800 Squire 0 0 +npc = 3824 Arnold_Lydspor 0 0 +npc = 3830 Kathy Corkat 0 0 +npc = 3348 White_Knight 38 55 +npc = 3350 White_Knight 42 60 +npc = 3340 Giant_Mole 230 200 +[ENDOFNPCLIST] + diff --git a/2006Redone Server/data/cfg/prices.txt b/2006Redone Server/data/cfg/prices.txt new file mode 100644 index 00000000..705c1230 --- /dev/null +++ b/2006Redone Server/data/cfg/prices.txt @@ -0,0 +1,2313 @@ +12 292 +6 161800 +8 156900 +10 161700 +12 161600 +951 21 +36 215 +39 10 +40 26 +41 36 +42 68 +43 160 +44 460 +45 1 +46 9 +47 23 +48 32 +49 32 +1635 1 +1636 1 +2415 80000 +2416 80000 +2417 80000 +50 9 +51 9 +52 6 +53 23 +54 50 +55 50 +56 64 +57 64 +58 64 +59 64 +60 40 +61 40 +62 128 +63 128 +64 80 +65 80 +66 256 +67 256 +68 160 +69 160 +70 507 +71 507 +72 320 +73 320 +91 427 +92 427 +93 101 +94 101 +95 775 +96 775 +97 682 +98 682 +99 5321 +101 3166 +103 5617 +105 3979 +107 1629 +109 6737 +111 7417 +113 1163 +115 839 +117 658 +119 335 +121 233 +123 131 +125 71 +127 88 +128 88 +129 66 +130 66 +131 44 +132 44 +133 427 +135 244 +137 150 +139 4447 +141 3009 +143 1551 +145 1569 +147 924 +149 396 +151 47 +153 90 +155 55 +157 2831 +159 1848 +161 1454 +163 199 +165 218 +167 73 +169 5402 +171 3874 +173 1714 +175 2013 +177 1172 +179 656 +181 2305 +183 1458 +185 755 +187 35 +189 1226 +191 1174 +193 696 +195 88 +197 124 +199 217 +201 54 +203 525 +205 449 +215 1259 +217 6211 +221 35 +223 5 +224 5 +225 5 +226 5 +227 39 +229 7 +231 463 +233 425 +235 20 +236 20 +237 20 +238 20 +239 8 +240 8 +241 39 +242 39 +243 38 +244 38 +247 126 +249 258 +251 53 +253 590 +255 451 +259 2836 +261 5182 +263 3583 +265 1210 +267 6232 +269 55000 +288 46 +299 436 +301 20 +302 20 +303 40 +304 40 +305 20 +306 20 +307 5 +308 5 +309 156 +311 45 +312 45 +313 3 +314 6 +315 5 +317 8 +319 12 +321 6 +325 10 +327 12 +328 12 +329 88 +330 88 +331 88 +332 88 +333 7 +334 7 +335 7 +336 7 +339 7 +341 15 +345 17 +347 7 +349 15 +350 15 +351 15 +352 15 +353 9 +355 38 +359 51 +361 33 +363 255 +365 105 +371 90 +372 90 +373 90 +374 90 +377 80 +378 80 +379 80 +380 80 +383 90 +384 90 +385 90 +386 90 +401 1 +402 1 +403 321 +404 321 +405 38 +406 38 +407 114 +411 26 +412 26 +413 935 +414 935 +426 74 +427 74 +428 28 +434 80 +436 20 +438 20 +442 88 +447 243 +449 1300 +464 904 +534 1866 +538 193 +540 351 +542 88 +544 589 +550 1 +551 1 +554 4 +555 4 +556 4 +557 4 +558 3 +559 3 +560 180 +561 372 +562 90 +563 110 +564 232 +565 550 +566 410 +567 460 +569 1818 +571 1269 +573 1335 +575 1671 +577 4 +578 4 +579 551 +581 1771 +590 1 +591 1 +596 1 +598 277 +600 552 +626 838 +628 551 +630 561 +632 601 +634 376 +636 361 +638 293 +640 390 +642 387 +644 70 +646 245 +648 274 +650 429 +652 368 +654 128 +656 683 +658 400 +660 398 +662 1133 +664 315 +753 5 +800 4 +801 13 +802 38 +803 105 +804 262 +805 698 +806 37 +807 35 +808 37 +809 53 +810 82 +811 111 +812 65 +813 61 +814 70 +815 79 +816 64 +817 101 +819 39 +820 27 +821 64 +822 95 +823 218 +824 422 +825 3 +826 2 +827 18 +828 26 +829 39 +830 261 +831 18 +832 19 +833 32 +834 44 +835 87 +836 235 +837 149 +839 30 +841 50 +843 164 +845 160 +847 288 +849 200 +851 640 +853 400 +855 512 +856 512 +857 320 +858 320 +859 1024 +860 1024 +861 640 +862 640 +863 48 +864 46 +865 95 +866 147 +867 429 +868 1883 +869 76 +870 66 +871 71 +872 110 +873 180 +874 68 +875 449 +876 1998 +877 10 +878 20 +879 9 +880 56 +881 39 +882 7 +883 7 +884 20 +885 20 +886 46 +887 46 +888 45 +889 76 +890 172 +891 172 +892 510 +893 510 +942 308 +946 25 +948 8 +950 6 +952 5 +954 95 +958 38 +960 342 +970 173 +973 418 +975 60 +983 370 +985 57900 +987 12900 +989 73700 +991 1641 +993 75000 +1005 31 +1007 78 +1009 34 +1011 304 +1013 119 +1015 16 +1017 194 +1019 90 +1021 174 +1023 279 +1025 77 +1027 382 +1029 226 +1031 223 +1033 3989 +1035 1614 +1059 7 +1061 6 +1063 9 +1065 1500 +1066 1500 +1067 68 +1069 485 +1071 1424 +1073 3849 +1075 22 +1077 3969 +1079 38300 +1081 90 +1083 485 +1085 1449 +1087 71 +1089 2105 +1091 4195 +1093 38300 +1095 4 +1097 383 +1099 3900 +1101 118 +1103 21 +1105 336 +1107 1663 +1109 1059 +1111 2759 +1113 50000 +1115 211 +1117 15 +1119 1088 +1121 2978 +1123 9821 +1125 4433 +1127 65000 +1129 36 +1131 26 +1133 454 +1135 4680 +1136 4680 +1137 5 +1139 15 +1141 79 +1143 340 +1145 1033 +1147 11400 +1149 59700 +1151 276 +1153 115 +1155 5 +1157 226 +1159 748 +1161 1991 +1163 21000 +1165 742 +1167 5 +1169 48 +1171 20 +1173 3 +1175 17 +1177 235 +1179 592 +1181 810 +1183 2182 +1185 22900 +1187 315600 +1189 4 +1191 74 +1193 392 +1195 3806 +1197 1202 +1199 3204 +1201 34200 +1203 1 +1205 13 +1207 20 +1209 95 +1211 360 +1213 4701 +1215 30000 +1217 82 +1219 78 +1221 89 +1223 108 +1225 164 +1227 415 +1229 4712 +1231 30000 +1233 167 +1237 229 +1239 151 +1241 94 +1243 375 +1245 1118 +1247 12400 +1249 38500 +1251 375 +1253 216 +1255 161 +1257 378 +1259 1123 +1261 12400 +1263 39100 +1265 15 +1267 388 +1269 1195 +1271 1805 +1273 703 +1275 32000 +1276 32000 +1277 33 +1279 10 +1281 90 +1283 221 +1285 385 +1286 385 +1287 1131 +1288 1131 +1289 12400 +1291 5 +1293 20 +1295 183 +1297 447 +1299 651 +1300 651 +1301 1800 +1302 1800 +1303 32000 +1305 100000 +1307 15 +1309 59 +1311 470 +1313 1042 +1315 1418 +1317 3748 +1319 38600 +1321 5 +1323 19 +1325 136 +1327 2859 +1329 503 +1331 1579 +1333 16200 +1335 21 +1337 5 +1339 349 +1341 644 +1343 1163 +1345 3089 +1347 24900 +1348 24900 +1349 5 +1350 5 +1351 5 +1352 5 +1353 200 +1354 200 +1355 660 +1356 660 +1357 1625 +1358 1625 +1359 8000 +1360 8000 +1363 15 +1365 264 +1367 677 +1369 890 +1371 2450 +1373 24960 +1374 24960 +1375 3 +1376 3 +1377 131600 +1378 131600 +1379 10 +1380 10 +1381 820 +1383 1089 +1385 1137 +1387 1181 +1389 58 +1391 8282 +1393 9174 +1395 9169 +1397 9146 +1399 9187 +1401 25500 +1403 25700 +1405 25600 +1407 25300 +1420 5 +1422 2 +1424 36 +1426 2463 +1428 233 +1430 746 +1432 8517 +1434 32700 +1435 32700 +1462 622 +1464 8 +1470 104 +1472 102 +1474 250 +1476 327 +1478 3090 +1511 3 +1512 3 +1513 240 +1514 240 +1515 120 +1516 120 +1517 60 +1517 60 +1519 30 +1520 30 +1521 15 +1522 15 +1523 731 +1539 31 +1550 19 +1592 153 +1595 143 +1597 147 +1599 78 +1600 78 +1601 1500 +1602 1500 +1603 750 +1604 750 +1605 375 +1606 375 +1607 188 +1608 188 +1609 75 +1610 75 +1611 113 +1612 113 +1613 150 +1614 150 +1615 7500 +1616 7500 +1617 150 +1618 150 +1619 75 +1620 75 +1621 38 +1622 38 +1623 19 +1624 19 +1625 15 +1626 15 +1627 23 +1628 23 +1629 30 +1630 30 +1631 750 +1632 750 +1637 546 +1639 1455 +1641 1221 +1643 3824 +1644 3824 +1645 7750 +1654 204 +1656 570 +1658 768 +1660 1247 +1662 8295 +1664 25300 +1673 176 +1675 479 +1677 716 +1679 1220 +1681 3444 +1683 68500 +1692 135 +1694 443 +1696 687 +1698 1200 +1700 2109 +1702 60300 +1704 60100 +1712 62900 +1714 153 +1716 36 +1718 115 +1720 251 +1722 38 +1724 45 +1725 1154 +1727 504 +1729 702 +1731 2112 +1733 1 +1734 5 +1735 1 +1736 1 +1765 77 +1767 379 +1769 570 +1771 370 +1773 113 +1775 625 +1779 55 +1781 1 +1782 1 +1783 282 +1785 72 +1787 110 +1789 180 +1791 128 +1793 33 +1794 166 +1823 332 +1831 0136 +1833 36 +1835 32 +1837 651 +1859 724 +1861 714 +1863 94 +1865 31 +1869 79 +1871 80 +1873 335 +1875 30 +1877 330 +1879 331 +1881 393 +1883 1946 +1885 524 +1887 10 +1888 10 +1889 579 +1891 85 +189323 63 +1895 35 +1897 412 +189923 220 +1915 17 +1917 2 +1919 2 +1921 79 +1925 2 +1926 2 +1927 41 +1929 69 +1931 1 +1933 141 +1935 1 +1936 1 +1937 1 +1938 1 +1939 158 +1940 385 +1941 1 +1942 29 +1944 23 +1947 3 +1949 173 +1951 54 +1953 429 +1955 331 +1957 40 +1963 2 +1965 17 +1973 12 +1975 20 +1978 6 +1980 1 +1982 163 +1985 84 +1987 1 +1988 1 +1989 1 +1993 128 +1994 128 +1997 254 +1999 403 +2001 353 +2003 310 +2007 413 +2009 1444 +2011 449 +2015 93 +2017 101 +2019 135 +2021 95 +2028 32 +2030 17 +2032 34 +2034 53 +2036 38 +2038 30 +2040 27 +2048 283 +2054 599 +2064 4861 +2074 245 +2080 538 +2084 1676 +2092 367 +2102 30 +2104 34 +2106 21 +2108 425 +2110 40 +2112 416 +2114 60 +2116 68 +2118 24 +2120 18 +2122 13 +2124 13 +2126 53 +2128 158 +2130 52 +2132 61 +2134 49 +2136 143 +2138 91 +2150 288 +2162 14 +2169 123 +2171 2 +2185 3762 +2187 1043 +2191 366 +2195 395 +2202 160 +2205 220 +2209 593 +2213 101 +2217 1264 +2219 129 +2221 129 +2223 136 +2225 128 +2227 129 +2229 699 +2231 662 +2233 221 +2235 222 +2237 76 +2239 85 +2241 65 +2243 43 +2253 173 +2255 258 +2259 227 +2277 276 +2281 222 +2283 4 +2285 625 +2287 973 +2289 981 +2293 807 +2297 1122 +2301 1061 +2307 52 +2309 55 +2313 163 +2315 834 +2317 693 +2319 886 +2321 805 +2323 211 +2325 213 +2327 393 +2331 193 +2333 173 +2335 135 +2337 116 +2341 490 +2343 1257 +2347 13 +2348 13 +2349 147 +2351 195 +2353 827 +2355 224 +2359 1529 +2370 558 +2391 229 +2428 312 +2430 139 +2431 139 +2432 540 +2434 5921 +2436 1992 +2438 69 +2440 4291 +2442 299 +2444 8283 +2446 2759 +2448 3260 +2450 707 +2452 8313 +2454 5797 +2456 3537 +2458 2139 +2460 629 +2462 608 +2464 584 +2466 498 +2468 531 +2470 502 +2472 695 +2474 13300 +2476 2863 +2481 8386 +2483 8601 +2485 8224 +2487 2800 +2489 3160 +2491 3592 +2493 4152 +2495 4668 +2497 5292 +2499 8736 +2501 9758 +2503 11078 +2505 2568 +2532 336 +2533 304 +2534 295 +2535 293 +2536 69 +2537 281 +2538 70 +2539 84 +2540 286 +2541 367 +2550 777 +2552 1705 +2566 648 +2568 1123 +2570 9856 +2572 16300 +2577 21700000 +2579 1800000 +2581 4800000 +2583 79200 +2585 57900 +2595 360100 +2597 345700 +2599 72400 +2601 24300 +2603 41500 +2605 70200 +2607 293600 +2609 68400 +2611 138300 +2613 232200 +2615 485800 +2617 217300 +2619 510200 +2621 391600 +2623 204300 +2625 103100 +2627 293600 +2629 184700 +2631 111300 +2633 59800 +2635 195100 +2637 430200 +2639 15100 +2641 27800 +2643 449900 +2645 54600 +2647 28900 +2663 313100 +2665 1100000 +2667 881500 +2669 398100 +2671 178800 +2675 300300 +2859 757 +2861 24 +2862 48 +2864 50 +2865 113 +2866 29 +2876 1833 +2878 94 +2890 1250 +2894 1364 +2896 850 +2898 637 +2900 1061 +2902 316 +2904 1795 +2906 958 +2908 836 +2910 2224 +2912 678 +2914 1456 +2916 902 +2918 830 +2920 886 +2922 1333 +2924 912 +2926 553 +2928 794 +2930 967 +2932 494 +2934 1279 +2936 883 +2955 26 +2961 40 +2970 1511 +2972 365 +2974 749 +2976 225 +2997 1500000 +2998 5155 +3000 14700 +3002 5473 +3004 14200 +3008 23 +3010 5 +3012 9 +3014 14 +3016 6288 +3018 5293 +3020 2203 +3022 1021 +3024 16000 +3026 11800 +3028 7473 +3030 3960 +3032 99 +3034 86 +3036 93 +3038 81 +3040 10600 +3042 8303 +3044 4521 +3046 2209 +3049 5068 +3051 14800 +3053 10100 +3054 26800 +3093 694 +3094 725 +3095 485 +3096 34 +3097 23 +3122 34300 +3123 1012 +3125 845 +3138 0 +3139 0 +3142 440 +3144 460 +3157 185 +3162 21 +3183 405 +3188 222 +3190 321 +3192 95 +3194 597 +3196 3124 +3198 4065 +3200 4774 +3202 79700 +3204 199600 +3211 153 +3216 160 +3226 393 +3228 40 +3239 43 +3325 195 +3327 72 +3329 515 +3331 79 +3333 76 +3335 70 +3337 79 +3339 1010 +3341 75 +3343 338 +3345 149 +3347 595 +3349 153 +3351 282 +3353 188 +3355 148 +3357 930 +3359 148 +3361 1912 +3363 1728 +3365 950 +3367 809 +3369 1409 +3371 196 +3373 805 +3377 16 +3379 476 +3381 305 +3385 10200 +3387 70600 +3389 56600 +3391 2889 +3393 11000 +3396 27 +3398 272 +3400 265 +3402 1601 +3404 3904 +3406 96 +3420 142 +3422 306 +3424 220 +3426 152 +3428 79 +3430 1668 +3432 1415 +3434 1029 +3436 638 +3438 1003 +3440 818 +3442 882 +3444 1913 +3446 2376 +3448 3321 +3470 9714 +3472 7128 +3473 21300 +3474 7255 +3475 15400 +3476 50800 +3477 39800 +3478 87900 +3479 74500 +3480 40900 +3481 2000000 +3483 2300000 +3485 284100 +3486 483600 +3488 395300 +3749 68000 +3750 68000 +3751 68000 +3752 68000 +3753 68000 +3754 68000 +3755 68000 +3759 740 +3761 202 +3763 526 +3765 730 +3767 91 +3769 503 +3771 270 +3773 524 +3775 480 +3777 626 +3779 566 +3781 555 +3783 536 +3785 505 +3787 455 +3789 637 +3791 544 +3793 1150 +3795 881 +3797 1303 +3799 245 +3801 713 +3803 236 +3827 1671400 +3828 2368800 +3829 3220700 +3830 4239800 +3831 14300000 +3832 22600000 +3833 32600000 +3853 846 +3867 1396 +4087 258000 +4089 15000 +4091 120000 +4093 80000 +4095 10000 +4097 10000 +4099 16900 +4101 74300 +4103 48700 +4105 9338 +4107 43300 +4109 9007 +4111 71400 +4113 48500 +4115 110500 +4117 12700 +4119 920 +4121 27000 +4123 199 +4125 323 +4127 1546 +4129 3656 +4131 40600 +4150 60 +4151 1600000 +4153 68800 +4156 5000 +4160 60 +4161 1 +4162 204 +4164 921 +4166 524 +4168 411 +4170 12300 +4172 60 +4173 60 +4174 60 +4175 60 +4207 57600 +4212 908200 +4224 762200 +4287 530 +4289 478 +4291 56 +4293 65 +4315 50 +4317 467 +4319 170 +4321 407 +4323 50 +4325 112 +4327 50 +4329 517 +4331 461 +4333 660 +4335 50 +4337 671 +4339 344 +4341 520 +4343 50 +4345 226 +4347 50 +4349 827 +4351 775 +4353 537 +4355 50 +4357 769 +4359 279 +4361 531 +4363 50 +4365 216 +4367 50 +4369 979 +4371 681 +4373 697 +4375 50 +4377 499 +4379 223 +4381 449 +4383 50 +4385 150 +4387 50 +4389 733 +4391 295 +4395 50 +4397 520 +4399 158 +4401 448 +4403 50 +4405 132 +4407 50 +4409 886 +4411 519 +4413 795 +4417 164 +4419 123 +4421 83 +4423 41 +4436 183 +4438 17 +4440 2 +4456 98 +4458 38 +4460 77 +4464 12 +4466 12 +4468 18 +4470 17 +4472 16 +4474 17 +4476 17 +4478 42 +4480 40 +4482 40 +4517 952 +4522 1426 +4525 5 +4527 22 +4529 206 +4535 33 +4537 283 +4540 14 +4542 1 +4544 76 +4546 225 +4548 1354 +4551 923 +4580 2374 +4582 2909 +4585 162200 +4587 100000 +4600 229 +4608 293 +4627 784 +4675 63400 +4694 149 +4695 113 +4696 9 +4697 237 +4698 354 +4699 25 +4708 67800 +4710 74900 +4712 1900000 +4714 3300000 +4716 77050 +4717 77050 +4718 156000 +4719 156000 +4720 210000 +4721 210000 +4722 206250 +4723 206250 +4724 1500000 +4726 942500 +4728 578900 +4730 339200 +4732 32200 +4734 333000 +4736 4700000 +4738 524300 +4740 346 +4745 388900 +4747 111400 +4749 640200 +4751 882900 +4753 2500000 +4755 110300 +4757 310300 +4759 855800 +4773 71 +4778 30 +4783 33 +4788 68 +4793 90 +4798 143 +4803 196 +4812 1385 +4819 11 +4820 13 +4821 13 +4822 16 +4823 38 +4824 73 +4825 383 +4827 118 +4830 7812 +4832 8739 +4834 18800 +4840 1555 +4842 660 +4844 417 +4846 276 +4848 140 +4850 2139 +4860 30100 +4866 50700 +4872 1900000 +4878 2900000 +4884 6000000 +4890 356800 +4896 524300 +4902 838400 +4908 1300000 +4914 913900 +4920 492100 +4926 244700 +4932 8110 +4938 238400 +4944 4700000 +4950 495200 +4956 302500 +4962 97100 +4968 512900 +4974 724400 +4980 2300000 +4986 95600 +4992 214400 +4998 912100 +5001 385 +5003 221 +5014 409 +5016 248 +5018 321 +5024 755 +5026 950 +5028 1159 +5030 834 +5032 1043 +5034 1115 +5036 831 +5038 319 +5040 495 +5042 767 +5044 986 +5046 1546 +5048 721 +5050 1043 +5052 1141 +5096 2 +5097 3 +5098 1 +5099 1 +5100 118 +5101 1 +5102 1 +5103 1 +5104 1 +5105 4 +5106 20 +5280 8 +5281 19 +5282 5 +5283 3 +5284 3 +5285 23 +5286 220 +5291 2 +5292 1 +5293 2 +5294 3 +5305 1 +5306 1 +5307 1 +5308 10 +5309 7 +5310 1 +5311 8 +5312 2 +5318 1 +5319 1 +5320 2 +5324 1 +5325 319 +5329 162 +5331 315 +5341 164 +5343 194 +5345 13800 +5350 4 +5352 8 +5354 358 +5376 1 +5386 2481 +5396 3237 +5406 209 +5416 1069 +5418 3 +5438 522 +5458 383 +5478 267 +5504 12 +5516 30600 +5521 756 +5523 40 +5525 10 +5527 5 +5529 9 +5531 7125 +5533 1 +5535 5 +5537 310 +5539 11 +5541 52 +5543 93 +5545 70 +5547 904 +5549 21300 +5574 3526 +5575 6248 +5576 4697 +5616 120 +5617 134 +5618 146 +5619 157 +5620 238 +5621 314 +5622 1760 +5623 1702 +5624 1726 +5625 1681 +5626 206 +5627 1487 +5628 162 +5629 158 +5630 167 +5631 822 +5632 185 +5633 220 +5634 399 +5635 1802 +5639 1825 +5640 1857 +5641 1726 +5642 115 +5643 116 +5644 129 +5645 141 +5646 184 +5647 321 +5648 1755 +5649 1756 +5650 1769 +5651 1781 +5652 1824 +5653 1961 +5654 163 +5655 164 +5656 207 +5657 279 +5658 137 +5659 529 +5660 2002 +5661 1803 +5662 1748 +5663 1847 +5664 1897 +5665 1391 +5680 17100 +5682 687 +5686 6729 +5688 8492 +5690 8374 +5692 7684 +5694 8697 +5696 8822 +5698 25100 +5700 8067 +5704 860 +5706 701 +5708 646 +5710 893 +5712 1586 +5714 12800 +5716 38600 +5718 9059 +5720 8900 +5722 8845 +5724 8916 +5726 9842 +5728 19900 +5730 40400 +5734 3394 +5736 11600 +5739 370 +5741 1093 +5743 39500 +5745 2235 +5747 35400 +5749 18 +5751 784 +5753 14200 +5755 5002 +5757 25800 +5759 34 +5761 1658 +5763 1718 +5765 3151 +5767 46 +5769 37 +5771 1645 +5773 3204 +5775 4762 +5777 6031 +5779 3095 +5781 6103 +5783 9111 +5785 12200 +5787 2418 +5789 4750 +5791 7081 +5793 8688 +5795 1404 +5797 2721 +5799 4038 +5801 5337 +5803 1673 +5805 3259 +5807 4845 +5809 6309 +5811 1298 +5813 2510 +5815 3721 +5817 4934 +5819 3178 +5821 6269 +5823 9360 +5825 12000 +5827 3235 +5829 6383 +5831 9531 +5833 13000 +5835 1127 +5837 2168 +5839 3209 +5841 4082 +5843 5524 +5845 11000 +5847 16400 +5849 22100 +5851 27300 +5853 52300 +5855 78300 +5857 112700 +5859 1697 +5861 3307 +5863 4917 +5865 6528 +5867 39300 +5869 78400 +5871 117600 +5873 167100 +5875 3032 +5877 5977 +5879 8922 +5881 11900 +5883 2125 +5885 4163 +5887 6201 +5889 8240 +5891 1315 +5893 2543 +5895 3771 +5897 5000 +5899 12000 +5901 24000 +5903 35900 +5905 47900 +5907 15600 +5909 31100 +5911 46600 +5913 66300 +5915 3672 +5917 7258 +5919 10800 +5921 14400 +5923 2966 +5925 5845 +5927 8724 +5929 11600 +5931 247 +5933 692 +5935 1266 +5937 228 +5940 6430 +5943 3623 +5945 5129 +5947 3542 +5949 1885 +5952 2238 +5954 2195 +5956 1367 +5958 916 +5968 425 +5970 101 +5972 1554 +5974 971 +5976 1004 +5978 32 +5980 51 +5982 82 +5984 25 +5986 25 +5988 4 +5992 357 +5994 20 +5996 7 +5998 6 +6000 10 +6002 77 +6004 198 +6006 234 +6008 245 +6010 4693 +6012 122 +6014 210 +6016 5712 +6018 488 +6020 89 +6022 20 +6024 17 +6026 6 +6028 9 +6030 3 +6032 143 +6034 933 +6036 171 +6038 5583 +6041 11800 +6043 60 +6045 43 +6047 42 +6049 1157 +6051 7950 +6061 116 +6062 1673 +6128 22200 +6129 37800 +6130 37500 +6131 36300 +6133 10100 +6135 8675 +6137 38000 +6139 26900 +6141 24600 +6143 2403 +6145 3673 +6147 35300 +6149 1022 +6151 2967 +6153 104100 +6155 4295 +6157 8955 +6159 34000 +6161 34100 +6163 7085 +6165 15400 +6167 13200 +6169 26500 +6171 463 +6173 369 +6211 2218 +6213 2687 +6215 18900 +6235 85300 +6237 17300 +6257 84200 +6259 17100 +6279 81200 +6281 4 +6283 3 +6285 13 +6287 2477 +6289 2832 +6291 1455 +6293 199 +6295 100 +6297 70 +6299 82 +6305 1 +6306 5 +6311 8952 +6313 254 +6315 6968 +6317 8047 +6319 8976 +6322 30100 +6324 946 +6326 2125 +6328 13500 +6330 8009 +6332 878 +6333 137 +6335 14000 +6337 14300 +6339 11500 +6341 3389 +6343 1528 +6345 2053 +6347 699 +6349 1890 +6351 3821 +6353 1523 +6355 2488 +6357 992 +6359 809 +6361 2971 +6363 443 +6365 2259 +6367 1599 +6369 937 +6371 3371 +6373 331 +6375 2692 +6377 2003 +6379 1642 +6382 537 +6384 281 +6386 305 +6388 639 +6390 308 +6392 362 +6394 347 +6396 355 +6398 253 +6400 361 +6402 319 +6404 354 +6406 256 +6408 707 +6410 700 +6412 1122 +6414 1099 +6416 1819 +6418 1897 +6420 2022 +6470 7652 +6472 4450 +6474 2782 +6476 1392 +6522 587 +6523 23500 +6524 49500 +6525 14900 +6526 23500 +6527 18300 +6528 30600 +6562 555600 +6563 592200 +6568 36700 +6571 15300000 +6573 15600000 +6575 11400000 +6577 3100000 +6581 16700000 +6583 602900 +6585 15600000 +6587 594 +6589 1432 +6591 431 +6593 497 +6595 982 +6597 9181 +6599 2045 +6601 489 +6603 454 +6605 897 +6607 1233 +6609 4655 +6611 997 +6613 1164 +6615 738 +6617 4993 +6619 1227 +6621 752 +6623 1570 +6625 1470 +6627 1984 +6629 386 +6631 1330 +6633 2039 +6667 29 +6681 1 +6683 19 +6685 12400 +6687 9075 +6689 5581 +6691 2641 +6697 323 +6701 198 +6703 703 +6705 451 +6724 16300 +6729 13500 +6731 429000 +6733 2000000 +6735 449100 +6737 4400000 +6739 1500000 +6760 5570 +6762 10200 +6764 7106 +6794 148 +6809 54700 +6812 10200 +6814 33 +6889 5000000 +6908 17500 +6910 67100 +6912 964400 +6914 5000000 +6916 1700000 +6918 3500000 +6920 948200 +6922 1700000 +6924 4700000 +6959 112 +6962 57 +6971 26 +6973 50 +6975 119 +6977 348 +6979 325 +6981 746 +6983 1597 +7051 410 +7054 401 +7056 558 +7058 1114 +7060 1067 +7062 216 +7064 128 +7066 362 +7068 433 +7070 19 +7072 60 +7074 36 +7076 34 +7078 26 +7080 146 +7082 408 +7084 39 +7086 255 +7088 148 +7110 86 +7112 369 +7114 1078 +7116 102 +7122 608 +7124 315 +7126 212 +7128 418 +7130 259 +7132 503 +7134 426 +7136 338 +7138 110 +7158 1400000 +7159 309 +7162 49 +7164 59 +7166 86 +7168 1793 +7170 1689 +7172 40 +7174 67 +7176 950 +7178 584 +7180 291 +7182 92 +7184 131 +7186 1457 +7188 237 +7190 167 +7192 193 +7194 643 +7196 2088 +7198 165 +7200 129 +7202 60 +7204 332 +7206 3760 +7208 600 +7210 363 +7212 359 +7214 1221 +7216 2037 +7218 1063 +7220 375 +7223 36 +7224 107 +7225 18 +7228 154 +7230 272 +7319 30400 +7321 21400 +7323 61300 +7325 33100 +7327 62000 +7329 101 +7330 110 +7331 132 +7332 15600 +7334 17700 +7336 34200 +7338 8414 +7340 6966 +7342 33900 +7344 9730 +7346 10200 +7348 34000 +7350 8536 +7352 8317 +7354 32700 +7356 8795 +7358 8842 +7360 33200 +7362 94100 +7364 39700 +7366 135200 +7368 41600 +7370 119700 +7372 34900 +7374 5274 +7376 5331 +7378 973500 +7380 259400 +7382 21700 +7384 2364 +7386 298900 +7388 155700 +7390 2100000 +7392 445700 +7394 2100000 +7396 748400 +7398 116500 +7399 158200 +7400 10600 +7416 500 +7418 400 +7433 27 +7435 14 +7437 205 +7439 1008 +7441 868 +7443 1823 +7445 8497 +7447 4665 +7449 24800 +7451 15200 +7521 222 +7566 487 +7568 951 +7650 414 +7652 112 +7654 85 +7656 58 +7658 30 +7660 253 +7662 196 +7664 133 +7666 67 +7668 1666 +7759 2532 +7763 2665 +7767 2685 +7771 3018 +7801 3821 +7919 179 +7934 186 +7939 13600 +7944 69 +7945 69 +383 300 +384 300 +7946 69 +7947 69 +7948 1 +7949 1 +8007 809 +8008 784 +8009 854 +8010 732 +8011 1079 +8012 1013 +8013 922 +8014 548 +8015 866 +8016 561 +8017 625 +8018 646 +8019 548 +8020 381 +8021 68 +8431 11378 +8496 1 +8498 64 +8500 3 +8502 2 +8504 1 +8506 1 +8508 6 +8510 2 +8512 1 +8514 17 +8516 2 +8518 15600 +8520 4529 +8522 11800 +8524 12500 +8526 44000 +8528 1 +8530 1 +8532 1 +8548 1 +8550 1 +8552 1 +8554 1 +8556 245 +8558 240 +8560 338900 +8562 24 +8564 166 +8566 2 +8568 42 +8570 1 +8572 65 +8574 472200 +8576 2250 +8578 1766 +8580 1611 +8582 1696 +8584 1724 +85864 1439 +8588 4 288400 +8590 583 +8592 877 +8594 133600 +8596 528 +8598 517 +8600 181 +8602 568 +8604 514 +8606 418 +8608 105500 +8610 34 +8612 65 +8614 1 +8616 198 +8618 25 +8620 98 +8622 113000 +8778 479 +8780 769 +8782 2354 +8784 140600 +8786 337000 +8788 956900 +8790 1335 +8792 1082 +8794 131 +8837 33 +8872 2473 +8874 2377 +8876 2844 +8878 12300 +8880 1622 +8882 19 +8901 548700 +8921 516200 +8924 426 +8925 331 +8926 296 +8927 389 +8928 142000 +9003 83 +9004 11 +9026 159 +9028 548 +9030 159 +9032 71 +9034 935 +9036 91 +9038 186 +9040 375 +9042 145 +9044 1100000 +9050 1100000 +9052 59 +9075 132 +9140 38 +9141 78 +9142 130 +9143 223 +9144 836 +9145 10 +9174 18 +9177 32 +9179 116 +9181 364 +9183 1040 +9185 9907 +9187 1 +9188 1 +9189 2 +9190 97 +9191 142 +9192 787 +9193 5044 +9194 7749 +9236 19 +9238 53 +9239 53 +9240 112 +9241 275 +9242 468 +9243 1258 +9244 6128 +9245 8884 +9287 62 +9288 100 +9289 140 +9290 260 +9291 905 +9292 31 +9294 159 +9295 191 +9296 225 +9297 330 +9298 991 +9299 128 +9301 1709 +9302 1742 +9303 1470 +9304 1191 +9305 1599 +9306 1768 +9336 73 +9337 98 +9338 246 +9339 413 +9340 1113 +9341 5974 +9342 8688 +9375 11 +9377 20 +9378 57 +9379 116 +9380 255 +9381 1344 +9382 3 +9416 422 +9418 915 +9419 1116 +9420 74 +9423 56 +9425 95 +9427 366 +9429 1584 +9431 9516 +9434 103 +9436 261 +9438 136 +9440 6 +9442 7 +9444 15 +9446 22 +9448 16 +9450 44 +9452 135 +9454 23 +9457 36 +9459 126 +9461 337 +9463 902 +9465 9633 +9469 6208 +9470 1800000 +9472 84800 +9475 607 +9629 1420 +9634 1319 +9636 1255 +9638 1365 +9640 344 +9642 328 +9644 328 +9666 28800 +9668 22900 +9670 26900 +9672 4643 +9674 7091 +9676 6019 +9678 5936 +9729 97 +9731 7345 +9733 1697 +9735 714 +9736 841 +9739 66 +9741 25 +9743 51 +9745 72 +9843 14 +9844 154 +9845 62 +9846 105900 +9847 326000 +9848 991900 +9849 44 +9850 264 +9851 26 +9852 149 +9853 2 +9854 210 +9855 42 +9856 84 +9857 130400 +9858 336600 +9859 27 +9860 52 +9861 87 +9862 37 +9863 222 +9864 62 +9865 84 +9866 188 +9867 61 +9978 328 +9980 23 +9984 125 +9986 110 +9988 50 +9992 95 +9994 302 +9996 167 +9998 269 +10000 219 diff --git a/2006Redone Server/data/cfg/shops.cfg b/2006Redone Server/data/cfg/shops.cfg new file mode 100644 index 00000000..436560eb --- /dev/null +++ b/2006Redone Server/data/cfg/shops.cfg @@ -0,0 +1,146 @@ +//-----ShopID---ShopName----------------------------------------Sell----Buy-----Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount--Item----Amount +shop = 2 Amulet_Store 2 2 1718 0 1727 0 1729 0 1725 0 1731 0 +shop = 3 Lowe's Archery Emporium 2 2 882 100 884 100 886 100 888 100 890 30 841 10 839 10 843 10 845 10 849 10 847 10 853 10 851 10 +shop = 4 Hickton's Archery Emperium 2 2 882 1000 884 100 886 0 888 0 890 0 4773 0 4778 0 4783 0 4788 0 4793 0 4798 0 4803 0 39 0 40 0 41 0 42 0 43 0 44 0 841 10 843 10 1133 10 1097 10 +shop = 5 Lletya's_Archery_Shop 2 2 884 1000 886 1000 888 1000 890 500 892 300 843 10 845 10 837 10 849 10 847 10 +shop = 6 Void Knight Archery Suplies 2 2 825 300 826 300 827 100 828 100 829 250 830 10 39 100 40 100 41 100 42 30 43 30 44 10 +shop = 7 Brians's_Archery_Shop 2 2 886 100 888 50 890 30 843 10 845 10 849 10 847 10 853 10 851 10 +shop = 8 Bob's Brilliant Axes 2 2 1265 10 1351 10 1349 10 1353 6 +shop = 9 Brian's Battleaxe Bazaar 2 2 1375 10 1363 10 1365 8 1367 6 1369 5 1371 4 +shop = 10 Candle_Shop 2 2 36 10 38 10 +shop = 11 Wayne's Chains 2 2 1103 10 1101 10 1105 10 1107 10 1109 8 1111 5 +shop = 12 Clothes_Store 2 2 1005 10 1129 10 1059 10 1061 10 1757 10 1013 10 1015 10 577 10 1007 10 950 10 426 10 428 10 +shop = 13 Clothes_Store 2 2 1005 10 1129 10 1059 10 1061 10 1757 10 1013 10 1015 10 577 10 1007 10 950 10 426 10 428 10 +shop = 14 Rometti's_Fine_Fashions 2 2 656 10 658 10 660 10 662 10 664 10 636 10 638 10 640 10 642 10 644 10 646 10 648 10 650 10 652 10 654 10 626 10 628 10 630 10 632 10 634 10 +shop = 15 Yrsa's_Accoutrements 2 2 3791 10 3793 10 3795 10 3797 10 3777 10 3779 10 3781 10 3783 10 3785 10 3787 10 3789 10 3759 10 3761 10 3763 10 3765 10 3767 10 3769 10 3771 10 3773 10 3775 10 +shop = 16 Barker's Haberdashery 2 2 2894 10 2896 10 2898 10 2900 10 2902 10 2904 10 2906 10 2908 10 2910 10 2912 10 2914 10 2916 10 2918 10 2920 10 2922 10 2924 10 2926 10 2928 10 2930 10 2932 10 2934 10 2936 10 2938 10 2940 10 2942 10 1007 10 1019 10 1021 10 1023 10 1027 10 +shop = 17 Lletya_Seamstress 2 2 1734 100 1733 10 1759 100 1763 10 1765 10 1767 1 1769 10 1771 10 1773 10 +shop = 18 Dodgy_Mike's_Second-hand_Clothing 2 2 7114 10 7110 10 7112 10 7116 10 7122 10 7124 10 7126 10 7128 10 7130 10 7132 10 7134 10 7136 10 7138 10 +shop = 19 Agmundi_Quality_Clothes 2 2 5050 10 5052 10 5038 10 5040 10 5044 10 5046 10 5026 10 5028 10 5032 10 5034 10 +shop = 20 Vermundi's Clothes Stall 2 2 950 10 +shop = 21 Grand_Tree_Groceries 2 2 2171 10 2128 10 1933 10 2169 10 1957 10 1942 10 1965 10 1982 10 1985 10 2120 10 2108 10 2102 10 2114 10 2126 10 2025 10 1973 10 2130 10 1927 10 946 10 2167 10 2164 10 2165 10 2166 10 +shop = 22 Funch's_Fine_Groceries 2 2 2021 10 2019 10 2015 10 2017 10 2114 10 2128 10 2108 10 2102 10 2120 10 2126 10 2025 10 1973 10 1975 10 2130 10 1927 10 946 10 2026 10 +shop = 23 Frenita's_Cookery_Shop 2 2 2313 10 1955 0 1887 10 1923 10 1942 10 590 10 1935 10 1931 30 1973 10 1933 500 1980 10 +shop = 24 Dommik's Crafting Shop 2 2 1755 10 1733 10 1734 1000 5523 10 1592 10 1595 10 1597 10 1599 10 2976 1 +shop = 25 Rommik's Crafting shop 2 2 1755 10 1733 10 1734 1000 5523 10 1592 10 1595 10 1597 10 1599 10 2976 10 +shop = 26 Farming_Shop 2 2 5376 10 6032 10 5418 10 6036 10 5350 10 5341 10 5329 10 5343 10 952 10 5325 10 1925 10 5331 10 5996 0 6006 0 1965 0 5994 0 5931 0 6000 0 1957 0 1942 0 5504 0 5986 0 1982 0 5982 0 6002 0 5998 0 +shop = 27 Farming_Shop 2 2 5376 10 6032 10 5418 10 6036 10 5350 10 5341 10 5329 10 5343 10 952 10 5325 10 1925 10 5331 10 5996 0 6006 0 1965 0 5994 0 5931 0 6000 0 1957 0 1942 0 5504 0 5986 0 1982 0 5982 0 6002 0 5998 0 +shop = 28 Farming_Shop 2 2 5376 10 6032 10 5418 10 6036 10 5350 10 5341 10 5329 10 5343 10 952 10 5325 10 1925 10 5331 10 5996 0 6006 0 1965 0 5994 0 5931 0 6000 0 1957 0 1942 0 5504 0 5986 0 1982 0 5982 0 6002 0 5998 0 +shop = 29 Farming_Shop 2 2 5376 10 6032 10 5418 10 6036 10 5350 10 5341 10 5329 10 5343 10 952 10 5325 10 1925 10 5331 10 5996 0 6006 0 1965 0 5994 0 5931 0 6000 0 1957 0 1942 0 5504 0 5986 0 1982 0 5982 0 6002 0 5998 0 +shop = 30 Shilo_Fishing_Store 2 2 305 10 309 10 307 10 311 10 301 10 313 1000 314 1000 317 0 327 0 335 0 321 0 331 0 359 0 377 0 371 0 7944 0 +shop = 31 Gerrant's Fishy Business 2 2 314 1000 313 1000 303 100 307 100 309 100 301 100 311 100 317 0 327 10 345 0 321 0 335 0 349 0 331 0 359 0 377 0 371 0 +shop = 32 Harry's Fishing Shop 2 2 303 10 307 10 311 1000 301 10 313 1000 305 10 317 0 327 0 345 0 353 0 341 0 321 0 359 0 377 0 371 0 383 0 +shop = 33 Fishmonger 2 2 305 10 309 10 307 10 311 10 301 10 313 1000 314 1000 305 10 317 0 327 10 +shop = 34 Wydins_Food_Store 2 2 1933 500 2132 10 2138 10 1965 10 1963 0 1951 10 2309 10 1973 10 1985 10 1982 10 1942 10 1550 10 +shop = 35 Rufus's Meat Emperium 2 2 4287 100 4289 30 2134 30 331 0 335 0 383 0 +shop = 36 Solib's_Store 2 2 4012 10 1963 10 4016 10 4014 10 +shop = 37 Herquin's Gems 2 2 1623 0 1621 0 1619 0 1617 0 1607 0 1605 0 1603 0 1601 0 +shop = 38 Al_Kharid_Gems 2 2 1623 0 1621 0 1619 0 1617 0 1607 0 1605 0 1603 0 1601 0 +shop = 39 Greenstone_Gems 2 2 1607 0 1605 0 1603 0 1601 0 +shop = 40 Peksa's_Helmet_Shop 2 2 1139 10 1137 10 1141 10 1143 10 1145 10 1155 10 1153 10 1157 10 1159 10 1161 10 +shop = 41 Skulgrimens_Battle_Gear 2 2 1337 10 1335 10 1339 10 1341 10 1343 10 1345 10 1347 0 3749 10 3751 10 3753 10 3755 10 +shop = 42 Frincos_Fabulous_Herb_Store 2 2 229 10 233 10 221 10 +shop = 43 Jatix's_Herblore_Shop 2 2 229 10 233 10 221 10 +shop = 44 Gardener_Gunhild 2 2 3899 100 5341 100 +shop = 45 Grum's_Gold_Exchange 2 2 1635 0 1637 0 1639 0 1641 0 1643 0 1654 0 1656 0 1658 0 1660 0 1662 0 1673 0 1675 0 1677 0 1679 0 1681 0 +shop = 46 Ali_the_Kebab_seller 2 2 1971 1000 +shop = 47 Karim's_Kebabs 2 2 1971 1000 +shop = 48 Kjut's_Kebabs 2 2 1971 1000 +shop = 49 Flynn's Mace Shop 2 2 1422 10 1420 10 1424 8 1428 6 1430 4 +shop = 50 Ali's_Discount_Wares 2 2 1931 30 1935 10 1823 30 1833 10 1837 10 1925 10 4593 10 4591 10 970 10 946 10 590 10 1265 10 2138 10 +shop = 51 Betty's_Magic_emporium 2 2 554 300 555 300 556 300 557 100 558 100 562 30 560 10 221 100 579 10 1017 10 +shop = 52 Aubury_Magic_Shop 2 2 554 5000 555 5000 556 5000 557 5000 558 5000 559 5000 562 250 560 250 +shop = 53 Wizards_Guild_Shop 2 2 554 1000 555 1000 556 1000 557 1000 558 1000 559 1000 562 300 561 300 560 1000 563 100 565 100 1387 10 1383 10 1381 10 1385 10 +shop = 54 Lundails_Rune_Shop 2 2 554 1000 555 1000 556 1000 557 1000 558 1000 559 1000 561 300 562 300 563 100 564 100 560 300 +shop = 55 Battle_Runes 2 2 554 100 555 100 556 100 557 100 559 100 558 100 562 30 560 30 +shop = 56 Tutab's_Magic_Market 2 2 554 1000 555 1000 556 1000 557 1000 563 100 221 10 4006 10 4023 10 +shop = 57 Void_Knight_Magic_Store 2 2 554 1000 555 1000 556 1000 557 1000 558 1000 559 1000 562 300 560 300 +shop = 58 TzHaar_Mej_Roh's_Rune_Store 2 2 554 5000 555 5000 556 5000 557 5000 558 5000 559 5000 560 2500 562 2500 +shop = 59 Nurmofs_Pickaxe_Shop 2 2 1265 10 1267 10 1269 10 1273 10 1271 10 1275 10 +shop = 60 Drogo's_Mining_Emporium 2 2 2347 10 1265 10 436 0 438 0 440 0 453 0 2349 0 2351 0 2357 0 +shop = 61 Pickaxe_is_Mine 2 2 1265 10 1269 10 1273 10 1271 10 1275 10 +shop = 62 Zenesha's_Platebody_Shop 2 2 1117 10 1115 10 1119 10 1125 10 1121 10 +shop = 63 Horviks_Platebody_Shop 2 2 1103 10 1101 10 1139 10 1137 10 1115 10 1117 10 1173 10 1175 10 1075 10 1067 10 1087 10 1081 10 1119 10 1125 10 1121 10 1097 10 1133 10 +shop = 64 Louie_Legs 2 2 1075 10 1067 10 1069 10 1071 10 1073 10 +shop = 65 Seddu's_Adventurer_Store 2 2 1093 10 1079 10 1113 10 1099 10 1065 10 1193 10 1151 10 +shop = 66 Ranael's Super Skirt Store 2 2 1087 10 1081 10 1083 10 1089 10 1085 10 1091 10 +shop = 67 Zeke's Superior Scimitars 2 2 1321 10 1323 10 1325 10 1329 10 +shop = 68 Daga's Scimitar Smithy 2 2 1321 10 1323 10 1325 10 1329 10 4587 10 +shop = 69 Cassie's_Shield_Shop 2 2 1171 10 1173 10 1189 10 1175 10 1191 10 1177 10 1193 10 1181 10 +shop = 70 Silk_Trader 2 2 950 100 +shop = 71 The_Spice_is_Right 2 2 1931 30 2169 10 5970 0 175 10 +shop = 72 Zaff's_Superior_Staves 2 2 1379 10 1389 10 1381 10 1383 10 1385 10 1387 10 +shop = 73 Dwarven_Shopping_Store 2 2 1931 30 1935 10 1735 10 1925 10 590 10 1755 10 2347 10 +shop = 74 Aurel's_Supplies 2 2 1351 10 590 10 3363 10 353 10 952 10 +shop = 75 Al_Kharid_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 590 10 1755 10 2347 10 550 10 +shop = 76 Ifaba's_General_Store 1 1 1931 30 1935 10 954 10 1925 30 590 10 2347 10 +shop = 77 Aemad's Adventuring Supplies 1 1 227 10 1265 10 1349 10 2142 10 590 10 1759 100 882 1000 954 10 970 10 946 10 1935 10 +shop = 78 West_Ardougne_General_Store1 1 1931 10 954 10 1265 10 1925 30 590 10 1415 10 1061 10 841 10 882 100 329 10 2327 10 2309 10 2142 10 +shop = 79 Bandit_Bargains 1 1 1831 30 1823 30 1937 10 1921 10 1935 10 1923 10 1925 30 1837 10 1833 10 1835 10 946 10 +shop = 80 Canifis_General_Store 1 1 1733 10 1734 1000 1931 30 1925 30 1935 10 590 10 1755 10 2347 10 3377 10 946 10 +shop = 81 Arhein's_Store 1 1 1925 30 1265 10 1923 10 1887 10 590 10 1755 10 2347 10 954 10 1931 30 946 10 +shop = 82 Edgeville_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 550 10 +shop = 83 Falador_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 550 10 +shop = 84 Karamja_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 +shop = 85 Gunslik's_Assorted_Items 1 1 1935 10 1925 30 590 10 1755 10 2347 10 36 10 973 10 1059 10 229 300 233 10 954 10 +shop = 86 The_Lighthouse_Store 1 1 954 10 2347 10 1755 10 946 10 952 10 590 10 36 10 273 10 233 10 1931 30 1925 30 1929 10 1935 10 1937 300 229 10 227 10 2019 10 2021 10 2015 10 1915 10 2017 10 1909 10 1913 10 1907 10 +shop = 87 Lletya_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 +shop = 88 Lumbridge_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 550 10 +shop = 89 Razmire's_General_Store 1 1 1931 30 1935 10 1735 10 1925 10 590 10 1755 10 2347 10 3424 500 227 300 1933 10 3678 10 +shop = 90 Nardah_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 +shop = 91 Arnold's_Ecletic_Supplies 1 1 303 10 311 1 2309 10 1925 30 1927 10 1733 10 1734 1000 1917 10 1785 10 946 10 +shop = 92 Pollniveach_General_Store 1 1 1931 30 1935 10 1825 10 1833 10 1837 10 1925 10 4593 10 4591 10 1985 10 2120 10 1982 10 1937 10 1921 10 1929 10 +shop = 93 Port_Phasmatys_General_Store 1 1 1931 300 1925 300 1735 10 1935 10 590 10 1735 10 2347 10 +shop = 94 Sigmund_the_Merchant 1 1 590 10 954 1 1931 30 2142 10 2309 10 952 10 36 10 1755 10 229 10 227 10 1925 10 1944 10 1942 10 233 10 2347 10 1929 10 +shop = 95 Rimmington_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 1887 10 590 10 1755 10 2347 10 550 10 +shop = 96 Obli's_General_Store 1 1 590 10 229 10 233 10 1931 30 1351 10 1265 10 1349 10 1129 10 1059 10 2142 10 2309 10 952 10 36 10 1755 10 2347 10 970 10 973 10 227 10 975 10 954 10 +shop = 97 Jiminua's_Jungle_Store 1 1 590 10 36 10 1931 30 954 10 1129 10 1059 10 1061 10 2142 10 2309 10 229 300 227 300 233 10 175 10 970 10 973 10 946 10 2347 10 975 10 1755 10 952 10 1351 10 1265 10 1349 10 +shop = 98 Bolkoy's_Village_Shop 1 1 1931 30 1265 10 1935 10 1735 10 1925 30 590 10 1755 10 2347 10 882 1000 2142 10 +shop = 99 Quartermaster's_Store 1 1 1931 30 1935 10 1735 10 590 10 2309 10 3190 10 3192 10 3194 10 3196 10 3198 10 3200 10 3202 10 3204 10 +shop = 100 Varrock_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 590 10 1755 10 2347 10 550 10 946 10 +shop = 101 Void_Knight_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 590 10 1755 10 2347 10 1351 10 7934 10 +shop = 102 Zanaris_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 590 10 1755 10 2347 10 550 10 +shop = 103 Shantay_Store 2 2 1823 30 1831 30 1937 10 1921 10 1929 10 946 10 1833 10 1835 10 1837 10 2349 0 314 1000 2347 10 1925 30 1923 10 1935 10 954 100 1854 100 +shop = 104 Varrock_Sword_Shop 2 2 1277 10 1279 10 1281 10 1283 10 1285 10 1287 10 1291 10 1293 10 1295 10 1297 10 1299 10 1301 10 1205 10 1203 10 1207 10 1209 10 1211 10 +shop = 105 Taverly_Sword_Shop 2 2 1307 10 1309 10 1311 10 1313 10 1315 10 1317 10 +shop = 106 Jukats_Sword_Shop 2 2 1305 10 1215 30 +shop = 107 Oziachs_Armour 2 2 1127 10 1135 10 +shop = 108 Fur_Trader 2 2 948 10 958 10 +shop = 109 Slayer_Shop 2 2 4155 10 4166 10 4161 20 6696 20 7051 10 4551 10 7159 10 6720 10 4168 10 4164 10 4158 10 4172 50000 4170 10 7432 10 7421 1000 4162 10 4156 10 +shop = 110 Sams_Cape_Shop 2 2 4333 10 4353 10 4373 10 4393 10 4413 10 +shop = 111 Range_Guild_Exchange_Store 2 2 47 30 1133 10 1135 1 829 20 1169 1 892 50 +shop = 112 Castle_Wars_Ticket_Exchange 2 2 4071 10 4069 10 4070 10 4072 10 4068 10 4506 10 4504 10 4505 10 4507 10 4503 10 4511 10 4509 10 4510 10 4512 10 4508 10 4513 10 4514 10 4515 10 4516 10 +shop = 113 Karamja_Wines_Spirts_Beers 2 2 1917 10 431 10 1993 10 +shop = 114 Burthrope_Supplies 2 2 1931 30 1935 10 1735 10 1925 30 590 10 1755 10 2347 10 946 10 1980 10 +shop = 115 Dead_Man's_Chest 2 2 1915 10 3164 10 +shop = 116 Shrimp_and_Parrot 2 2 347 10 339 10 361 10 379 10 373 10 3144 10 +shop = 117 Pick_and_Lute 2 2 1905 10 1907 10 1913 10 +shop = 118 Martin_Thwait_Lost_and_Found 2 2 954 10 1523 10 1755 10 946 10 5560 10 864 10 863 10 865 10 3095 10 3096 10 3097 10 +shop = 119 Aarons_Archery_Appendages 2 2 1129 10 1131 10 1133 10 1095 10 1097 10 1169 10 1063 10 +shop = 120 Dargaud's_Bows_and_Arrows 2 2 52 1000 39 300 40 300 41 100 42 100 43 100 44 30 882 1000 884 300 886 300 888 100 890 100 892 100 4773 0 4778 0 4783 0 4788 0 4793 0 4798 0 4803 0 841 10 843 10 849 10 +shop = 121 Authentic_Throwing_Weapons 2 2 825 1000 826 1000 827 1000 828 300 829 100 830 100 800 1000 801 1000 802 300 803 300 804 100 805 100 +shop = 122 Magic_Guild_Store_Mystic_Robes 2 2 4089 10 4091 10 4093 10 4095 10 4097 10 +shop = 123 Magic_Guild_Store_Runes_and_Staves 2 2 556 1000 555 1000 557 1000 554 1000 558 1000 559 1000 562 300 561 300 560 1000 563 100 565 100 566 100 1387 10 1383 10 1381 10 1385 10 +shop = 124 Scavvo's_Rune_Store 2 2 1093 10 1079 10 1432 10 1113 10 1303 10 1289 10 1099 10 1065 10 1169 10 +shop = 125 Valaine's_Shop_of_Champions 2 2 1019 10 1165 10 1077 10 1123 10 +shop = 126 Mage_Arena_Staves 2 2 2415 10 2416 10 2417 10 +shop = 127 Quality_Weapons_Store 2 2 1365 10 1369 10 1285 10 1287 10 1325 10 1297 10 853 10 851 10 888 100 890 100 +shop = 128 Quality_Armour_Shop 2 2 1105 10 1107 10 1109 10 1111 10 1141 10 1143 10 1145 10 1177 10 1195 10 +shop = 129 Vigr's Warhammers 2 2 1337 10 1335 10 1339 10 1341 10 1343 10 1345 10 +shop = 130 Carefree_Crafting_Stall 2 2 1755 10 1592 10 1597 10 1733 10 1734 1000 1759 100 +shop = 131 Keldagrim's_Best_Bread 2 2 2309 10 1891 10 1901 10 +shop = 132 Silver_Cog_Silver_Stall 2 2 1718 10 442 0 2355 0 +shop = 133 Gianne's_Restraunt 2 2 2223 10 2225 10 2221 10 2219 10 2227 10 2233 10 2231 10 2235 10 2229 10 2241 10 2243 10 2239 10 2237 10 +shop = 134 Gulluck_and_Sons 2 2 882 1000 841 10 39 100 40 100 41 100 42 100 1349 10 1353 10 1369 10 1307 10 1309 10 1311 10 1313 10 1315 10 1317 10 +shop = 135 Tony's_Pizza_Bases 2 2 2283 10 +shop = 136 Wilderness_General_Store 1 1 1931 30 1935 10 1735 10 1925 30 1923 10 590 10 1755 10 2347 10 550 10 946 10 +shop = 137 Neil's_Wilderness_Cape_Shop 2 2 4327 10 + 4347 10 4367 10 4387 10 4407 10 +shop = 138 Tzhaar_Hur_Tel's_Equipment_Store 2 2 6522 10 6523 10 6524 10 6525 10 6526 10 6527 10 6528 10 6568 10 +shop = 139 Tzhaar_Hur_Lek's_Ore_and_Gem_Store 2 2 438 5 436 5 453 2 1623 1 1621 1 6571 1 +shop = 140 William's_Wilderness_Cape_Shop 2 2 4315 10 4335 10 4355 10 4375 10 4395 10 +shop = 141 Edward's_Wilderness_Cape_Shop 2 2 4323 10 4343 10 4363 10 4383 10 4403 10 +shop = 142 Blurberry's_Bar 2 2 2028 10 2030 10 2032 10 2034 10 2036 10 2038 10 2040 10 +shop = 143 Shop_of_Distaste 2 2 2518 100 +shop = 144 Nulodion's_Multicannon_Parts 2 2 2 10000000 6 100 8 100 10 100 12 100 +[ENDOFSHOPLIST] \ No newline at end of file diff --git a/2006Redone Server/data/cfg/spawn-config.cfg b/2006Redone Server/data/cfg/spawn-config.cfg new file mode 100644 index 00000000..4c2f5bca --- /dev/null +++ b/2006Redone Server/data/cfg/spawn-config.cfg @@ -0,0 +1,2443 @@ +/// npc spawnX spawnY height walk maxhit attack defence description +spawn = 945 3095 3108 0 1 1 3 3 1 1 +spawn = 943 3104 3095 0 1 1 3 3 Survival Expert +spawn = 942 3076 3085 0 1 1 3 3 Master Chef +spawn = 949 3086 3122 0 1 1 3 3 Quest Guide +spawn = 948 3081 9504 0 1 1 3 3 Mining Instructor +spawn = 944 3104 9506 0 1 1 3 3 Combat Instructor +spawn = 947 3127 3124 0 0 0 0 0 Financial Advisor +spawn = 954 3124 3107 0 1 1 3 3 Brother Brace +spawn = 946 3140 3087 0 0 0 0 0 Magic Instructor +spawn = 87 3105 9514 0 1 1 3 3 1 giant rat +spawn = 87 3105 9517 0 1 1 3 3 1 giant rat +spawn = 87 3106 9514 0 0 1 3 3 1 giant rat +spawn = 87 3104 9514 0 1 1 3 3 1 giant rat +spawn = 87 3105 9519 0 1 1 3 3 1 giant rat +spawn = 87 3109 9516 0 1 1 3 3 1 giant rat +spawn = 87 3108 9520 0 1 1 3 3 1 giant rat +spawn = 87 3102 9517 0 1 1 3 3 1 giant rat +spawn = 1401 3140 3092 0 1 3 10 10 Chicken +spawn = 1401 3138 3092 0 1 3 10 10 Chicken +spawn = 1401 3139 3093 0 1 3 10 10 Chicken +spawn = 1401 3138 3094 0 1 3 10 10 Chicken +spawn = 1401 3140 3094 0 1 3 10 10 Chicken +spawn = 1401 3139 3095 0 1 3 10 10 Chicken +//shops +spawn = 374 2524 3375 0 1 8 40 40 1 +spawn = 374 2527 3375 0 1 8 40 40 1 +spawn = 374 2530 3375 0 1 8 40 40 1 +spawn = 568 2923 3146 0 1 0 0 0 Beer +spawn = 2356 2326 3167 0 1 0 0 0 Archery +spawn = 3796 2664 2660 0 1 0 0 0 Archery +spawn = 1860 2956 3204 0 1 0 0 0 Archery +spawn = 550 3233 3425 0 1 0 0 0 Archery +spawn = 575 2823 3442 0 1 0 0 0 Archery +spawn = 519 3231 3203 0 1 0 0 0 Axes +spawn = 559 3026 3247 0 1 0 0 0 Axes +spawn = 562 2799 3438 0 1 0 0 0 Candles +spawn = 581 2970 3312 0 1 0 0 0 Chains +spawn = 548 3206 3417 0 1 0 0 0 Clothes +spawn = 554 3279 3397 0 1 0 0 0 Clothes +spawn = 1301 2625 3675 0 1 0 0 0 Clothes +spawn = 1039 3500 3504 0 1 0 0 0 Clothes +spawn = 2353 2326 3176 0 1 0 0 0 Clothes +spawn = 3166 3689 2977 0 1 0 0 0 Clothes +spawn = 2161 2866 10208 0 1 0 0 0 Clothes +spawn = 2162 2887 10189 0 1 0 0 0 Clothes +spawn = 600 2449 3509 1 1 0 0 0 Cook +spawn = 603 2485 3488 1 1 0 0 0 Heckel +spawn = 593 2569 3099 0 1 0 0 0 Cook +spawn = 545 3319 3193 0 1 0 0 0 Craft +spawn = 585 2949 3205 0 1 0 0 0 Craft +spawn = 2305 2820 3461 0 1 0 0 0 Farm +spawn = 2307 3630 3525 0 1 0 0 0 Farm +spawn = 2304 3039 3295 0 1 0 0 0 Farm +spawn = 2306 2643 3362 0 1 0 0 0 Farm +spawn = 517 2871 2968 0 1 0 0 0 Fish +spawn = 558 3013 3223 0 1 0 0 0 Fish +spawn = 576 2835 3441 0 1 0 0 0 Fish +spawn = 1369 2639 3679 0 1 0 0 0 Fish +spawn = 557 3015 3206 0 1 0 0 0 Food +spawn = 1038 3507 3493 0 1 0 0 0 Food +spawn = 1433 2769 2789 0 1 0 0 0 Food +spawn = 584 2945 3335 0 1 0 0 0 Herq +spawn = 540 3289 3211 0 1 0 0 0 Gems +spawn = 2157 2886 10211 0 1 0 0 0 Gems +spawn = 538 3076 3428 0 1 0 0 0 Helmet +spawn = 1303 2663 3693 0 1 0 0 0 Helmet +spawn = 578 2812 3344 0 1 0 0 0 Herb +spawn = 587 2896 3428 0 1 0 0 0 Herb +spawn = 1398 2530 3855 0 1 0 0 0 Herb +spawn = 556 3014 3246 0 1 0 0 0 Gold +spawn = 1865 3354 2975 0 1 0 0 0 Kebab +spawn = 543 3275 3180 0 1 0 0 0 Kebab +spawn = 2198 2904 10216 0 1 0 0 0 Kebab +spawn = 580 2950 3386 0 1 0 0 0 Mace +spawn = 1862 3301 3211 0 1 0 0 0 Mage +spawn = 583 3015 3259 0 1 0 0 0 Mage +spawn = 553 3253 3401 0 1 0 0 0 Mage +spawn = 461 2588 3086 0 1 0 0 0 Mage +spawn = 903 2539 4716 0 1 0 0 0 Mage +spawn = 1435 2757 2770 0 1 0 0 0 Mage +spawn = 3800 2658 2655 0 1 0 0 0 Mage +spawn = 2623 2460 5125 0 1 0 0 0 Mage +spawn = 594 2998 9843 0 1 0 0 0 Mine +spawn = 579 3026 9809 0 1 0 0 0 Mine +spawn = 2160 2923 10211 0 1 0 0 0 Mine1 +spawn = 2191 2925 10213 0 1 0 0 0 Mine2 +spawn = 589 2653 3293 0 1 0 0 0 PlateB +spawn = 549 3229 3438 0 1 0 0 0 PlateL +spawn = 542 3315 3175 0 1 0 0 0 PlateBL +spawn = 3038 3407 2921 0 1 0 0 0 PlateL +spawn = 544 3315 3164 0 1 0 0 0 PlateS +spawn = 541 3289 3189 0 1 0 0 0 Scimitar +spawn = 1434 2762 2776 0 1 0 0 0 Scimitar +spawn = 577 2974 3383 0 1 0 0 0 Shield +spawn = 539 3300 3202 0 1 0 0 0 Silk +spawn = 1980 3286 2805 0 1 0 0 0 Spice +spawn = 546 3203 3432 0 1 0 0 0 Staff +spawn = 382 2998 9827 0 1 0 0 0 G Store +spawn = 3541 3514 3214 0 1 0 0 0 G Store +spawn = 520 3313 3183 0 1 0 0 0 G Store +spawn = 1436 2752 2774 0 1 0 0 0 G Store +spawn = 590 2614 3293 0 1 0 0 0 G Store +spawn = 1917 3176 2987 0 1 0 0 0 G Store +spawn = 1040 3479 3494 0 1 0 0 0 G Store +spawn = 563 2806 3433 0 1 0 0 0 G Store +spawn = 522 3080 3508 0 1 0 0 0 G Store +spawn = 524 2958 3387 0 1 0 0 0 G Store +spawn = 526 2905 3148 0 1 0 0 0 G Store +spawn = 2154 2868 10190 0 1 0 0 0 G Store +spawn = 1334 2509 3638 0 1 0 0 0 G Store +spawn = 2352 2335 3181 0 1 0 0 0 G Store +spawn = 528 3212 3246 0 1 0 0 0 G Store +spawn = 1254 3488 3296 0 1 0 0 0 G Store +spawn = 2086 3415 2908 0 1 0 0 0 G Store +spawn = 3824 2330 3689 0 1 0 0 0 G Store +spawn = 1866 3359 2983 0 1 0 0 0 G Store +spawn = 1699 3659 3473 0 1 0 0 0 G Store +spawn = 1282 2643 3673 0 1 0 0 0 G Store +spawn = 530 2949 3214 0 1 0 0 0 G Store +spawn = 516 2824 2960 0 1 0 0 0 G Store +spawn = 560 2767 3122 0 1 0 0 0 G Store +spawn = 471 2526 3163 0 1 0 0 0 G Store +spawn = 1208 2194 3140 0 1 0 0 0 G Store +spawn = 532 3216 3416 0 1 0 0 0 G Store +spawn = 552 3217 3413 0 1 0 0 0 G Store +spawn = 3797 2651 2664 0 1 0 0 0 G Store +spawn = 534 2377 4446 0 1 0 0 0 G Store +spawn = 1083 2925 3547 0 1 0 0 0 G Store +spawn = 1079 2907 3537 0 1 0 0 0 Tostig +spawn = 551 3206 3399 0 1 0 0 0 Sword +spawn = 586 2885 3451 0 1 0 0 0 Sword +spawn = 564 2486 4450 0 1 0 0 0 Sword +//fur +spawn = 573 2654 3311 0 0 0 0 0 Fur +spawn = 1316 2640 3376 0 0 0 0 0 Fur +spawn = 547 3217 3434 0 0 0 0 0 Fur +spawn = 3037 3425 2909 0 0 0 0 0 Herb +//bandit +spawn = 1926 3159 2989 0 1 10 80 80 Bandit +spawn = 1926 3161 2987 0 1 10 80 80 Bandit +spawn = 1926 3163 2986 0 1 10 80 80 Bandit +spawn = 1926 3164 2984 0 1 10 80 80 Bandit +spawn = 1926 3161 2983 0 1 10 80 80 Bandit +spawn = 1926 3162 2981 0 1 10 80 80 Bandit +spawn = 1926 3164 2980 0 1 10 80 80 Bandit +spawn = 1926 3158 2978 0 1 10 80 80 Bandit +spawn = 1926 3163 2977 0 1 10 80 80 Bandit +spawn = 1926 3166 2983 0 1 10 80 80 Bandit +spawn = 1931 3184 2986 0 1 7 75 80 Bandit +spawn = 1931 3186 2984 0 1 7 75 80 Bandit +spawn = 1931 3184 2983 0 1 7 75 80 Bandit +spawn = 1931 3171 2975 0 1 7 75 80 Bandit +spawn = 1931 3175 2973 0 1 7 75 80 Bandit +spawn = 1931 3184 2975 0 1 7 75 80 Bandit +spawn = 1931 3182 2975 0 1 7 75 80 Bandit +spawn = 1931 3173 2972 0 1 7 75 80 Bandit +//boats +spawn = 375 3053 3247 0 1 0 0 0 Port +//ardougne +spawn = 494 2657 3286 0 5 0 0 0 Banker +spawn = 494 2657 3283 0 5 0 0 0 Banker +spawn = 494 2657 3280 0 5 0 0 0 Banker +spawn = 494 2836 10205 0 2 0 0 0 Banker +spawn = 494 2838 10205 0 2 0 0 0 Banker +spawn = 494 2619 3330 0 2 0 0 0 Banker +spawn = 494 2618 3330 0 2 0 0 0 Banker +spawn = 494 2615 3330 0 2 0 0 0 Banker +spawn = 26 2659 3310 0 1 6 50 50 1 Knight Ardy +spawn = 26 2664 3312 0 1 6 50 50 1 Knight Ardy +spawn = 26 2662 3312 0 1 6 50 50 1 Knight Ardy +spawn = 20 2661 3313 0 1 6 70 70 1 Pali Ardy +spawn = 20 2660 3311 0 1 6 70 70 1 Pali Ardy +spawn = 21 2661 3310 0 1 6 80 80 1 Hero Ardy +spawn = 21 2660 3307 0 1 6 80 80 1 Hero Ardy +spawn = 32 2653 3303 0 1 4 5 10 1 +spawn = 32 2659 3301 0 1 4 5 10 1 +spawn = 32 2649 3306 0 1 4 5 10 1 +spawn = 32 2662 3306 0 1 4 5 10 1 +spawn = 32 2659 3308 0 1 4 5 10 1 +spawn = 32 2664 3310 0 1 4 5 10 1 +spawn = 32 2663 3301 0 1 4 5 10 1 +//ardounge zoo +spawn = 1216 2611 3285 0 1 0 0 0 Parroty_Pete +spawn = 1215 2612 3287 0 3 0 0 0 Parrots +spawn = 1215 2613 3287 0 3 0 0 0 Parrots +spawn = 1469 2613 3279 0 1 0 0 0 Monkey Minder +spawn = 28 2604 3286 0 1 0 0 0 Zookeeper +spawn = 95 2617 3284 0 1 0 0 0 Wolf +spawn = 95 2621 3283 0 1 0 0 0 Wolf +spawn = 116 2622 3278 0 1 0 0 0 Cyclops +spawn = 113 2622 3272 0 1 0 0 0 Jogre +spawn = 80 2622 3266 0 1 0 0 0 Camel +spawn = 80 2619 3266 0 1 0 0 0 Camel +spawn = 80 2615 3265 0 1 0 0 0 Camel +spawn = 107 2604 3272 0 1 4 20 20 1 Scorpion +spawn = 107 2607 3268 0 1 4 20 20 1 Scorpion +spawn = 107 2603 3268 0 1 4 20 20 1 Scorpion +spawn = 109 2604 3269 0 1 4 20 20 1 Scorpion +spawn = 109 2602 3271 0 1 4 20 20 1 Scorpion +spawn = 109 2606 3268 0 1 4 20 20 1 Scorpion +spawn = 1780 2595 3266 0 1 0 0 0 1 Larry +spawn = 131 2594 3272 0 1 0 0 0 1 Penguin +spawn = 131 2593 3268 0 1 0 0 0 1 Penguin +spawn = 131 2596 3268 0 1 0 0 0 1 Penguin +spawn = 131 2596 3271 0 1 0 0 0 1 Penguin +spawn = 1469 2596 3276 0 1 0 0 0 1 Monkey Minder +spawn = 1469 2602 3274 0 1 0 0 0 1 Monkey Minder +spawn = 132 2600 3275 0 1 0 0 0 1 Monkey +spawn = 132 2600 3277 0 1 0 0 0 1 Monkey +spawn = 132 2601 3279 0 1 0 0 0 1 Monkey +spawn = 132 2605 3277 0 1 0 0 0 1 Monkey +spawn = 132 2604 3279 0 1 0 0 0 1 Monkey +spawn = 132 2603 3278 0 1 0 0 0 1 Monkey +spawn = 132 2603 3277 0 1 0 0 0 1 Monkey +spawn = 132 2604 3280 0 1 0 0 0 1 Monkey +spawn = 132 2602 3280 0 1 0 0 0 1 Monkey +spawn = 132 2600 3279 0 1 0 0 0 1 Monkey +spawn = 128 2611 3275 0 1 0 0 0 1 Snake +spawn = 128 2616 3276 0 1 0 0 0 1 Snake +spawn = 128 2614 3276 0 1 0 0 0 1 Snake +spawn = 128 2614 3278 0 1 0 0 0 1 Snake +spawn = 128 2611 3276 0 1 0 0 0 1 Snake +/*Tzhaar cave*/ +spawn = 278 3207 3215 0 0 0 0 0 Cook +spawn = 284 2951 3450 0 0 0 0 0 Doric +/*Edgeville dungeon*/ +spawn = 86 3097 9881 0 1 2 10 10 Giant Rat +spawn = 86 3100 9884 0 1 2 10 10 Giant Rat +spawn = 60 3100 9881 0 1 4 25 25 Giant Spider +spawn = 90 3096 9893 0 1 3 20 20 Skeleton +spawn = 90 3095 9897 0 1 3 20 20 Skeleton +spawn = 90 3097 9906 0 1 3 20 20 Skeleton +spawn = 90 3098 9910 0 1 3 20 20 Skeleton +spawn = 90 3109 9910 0 1 3 20 20 Skeleton +spawn = 90 3112 9909 0 1 3 20 20 Skeleton +spawn = 90 3118 9909 0 1 3 20 20 Skeleton +spawn = 90 3133 9911 0 1 3 20 20 Skeleton +spawn = 90 3132 9904 0 1 3 20 20 Skeleton +spawn = 74 3146 9901 0 1 2 10 10 Zombie +spawn = 74 3148 9906 0 1 2 10 10 Zombie +spawn = 74 3140 9907 0 1 2 10 10 Zombie +spawn = 74 3150 9889 0 1 2 10 10 Zombie +spawn = 74 3148 9882 0 1 2 10 10 Zombie +spawn = 74 3145 9890 0 1 2 10 10 Zombie +spawn = 74 3139 9888 0 1 2 10 10 Zombie +spawn = 90 3141 9870 0 1 3 20 20 Skeleton +spawn = 90 3138 9877 0 1 3 20 20 Skeleton +spawn = 122 3135 9874 0 1 4 25 25 Hobgoblin +spawn = 123 3127 9873 0 1 6 40 40 Hobgoblin +spawn = 123 3124 9875 0 1 6 40 40 Hobgoblin +spawn = 123 3123 9880 0 1 6 40 40 Hobgoblin +spawn = 123 3119 9871 0 1 6 40 40 Hobgoblin +spawn = 123 3117 9867 0 1 6 40 40 Hobgoblin +spawn = 123 3119 9863 0 1 6 40 40 Hobgoblin +spawn = 74 3125 9864 0 1 2 10 10 Zombie +spawn = 74 3129 9861 0 1 2 10 10 Zombie +spawn = 74 3127 9864 0 1 2 10 10 Zombie +spawn = 117 3119 9834 0 1 4 20 10 Hill giant +spawn = 117 3114 9833 0 1 4 20 10 Hill giant +spawn = 117 3116 9836 0 1 4 20 10 Hill giant +spawn = 117 3121 9844 0 1 4 20 10 Hill giant +spawn = 117 3116 9843 0 1 4 20 10 Hill giant +spawn = 117 3111 9845 0 1 4 20 10 Hill giant +spawn = 117 3109 9841 0 1 4 20 10 Hill giant +spawn = 117 3108 9835 0 1 4 20 10 Hill giant +spawn = 117 3107 9828 0 1 4 20 10 Hill giant +spawn = 117 3100 9832 0 1 4 20 10 Hill giant +spawn = 117 3101 9835 0 1 4 20 10 Hill giant +spawn = 117 3118 9849 0 1 4 20 10 Hill giant +spawn = 186 3129 9930 0 0 2 20 10 Thug +spawn = 186 3132 9932 0 0 2 20 10 Thug +spawn = 186 3125 9929 0 0 2 20 10 Thug +spawn = 181 3117 9931 0 1 2 20 20 Chaos druid +spawn = 181 3114 9930 0 1 2 20 20 Chaos druid +spawn = 181 3112 9928 0 1 2 20 20 Chaos druid +spawn = 181 3113 9926 0 1 2 20 20 Chaos druid +spawn = 181 3110 9930 0 1 2 20 20 Chaos druid +spawn = 181 3111 9934 0 1 2 20 20 Chaos druid +spawn = 181 3111 9937 0 1 2 20 20 Chaos druid +spawn = 181 3110 9941 0 1 2 20 20 Chaos druid +spawn = 181 3106 9943 0 1 2 20 20 Chaos druid +spawn = 181 3105 9941 0 1 2 20 20 Chaos druid +spawn = 181 3105 9936 0 1 2 20 20 Chaos druid +spawn = 90 3105 9947 0 1 3 20 20 Skeleton +spawn = 90 3107 9952 0 1 3 20 20 Skeleton +spawn = 90 3103 9955 0 1 3 20 20 Skeleton +spawn = 84 3095 9957 0 1 16 70 50 BlackDemon +spawn = 84 3086 9959 0 1 16 70 50 BlackDemon +spawn = 84 3085 9954 0 1 16 70 50 BlackDemon +spawn = 63 3118 9956 0 1 4 10 10 Red spider +spawn = 63 3126 9951 0 1 4 10 10 Red spider +spawn = 124 3120 9971 0 1 6 50 50 Earth warior +spawn = 124 3121 9974 0 0 6 50 50 Earth warior +spawn = 124 3124 9974 0 0 6 50 50 Earth warior +spawn = 124 3120 9979 0 0 6 50 50 Earth warior +spawn = 124 3118 9989 0 0 6 50 50 Earth warior +spawn = 124 3122 9988 0 0 6 50 50 Earth warior +spawn = 124 3121 9992 0 0 6 50 50 Earth warior +spawn = 124 3125 9993 0 0 6 50 50 Earth warior +spawn = 73 3140 9912 0 0 2 10 10 Zombie +spawn = 73 3142 9901 0 0 2 10 10 Zombie +spawn = 73 3148 9903 0 0 2 10 10 Zombie +spawn = 73 3140 9893 0 0 2 10 10 Zombie +spawn = 73 3145 9883 0 0 2 10 10 Zombie +spawn = 122 3132 9874 0 0 4 25 25 Hobgoblin +spawn = 122 3123 9875 0 0 4 25 25 Hobgoblin +spawn = 122 3123 9880 0 0 4 25 25 Hobgoblin +spawn = 122 3117 9870 0 0 4 25 25 Hobgoblin +spawn = 122 3118 9868 0 0 4 25 25 Hobgoblin +spawn = 73 3128 9862 0 0 2 10 10 Zombie +spawn = 73 3125 9864 0 0 2 10 10 Zombie +spawn = 73 3117 9860 0 0 2 10 10 Zombie +spawn = 73 3117 9863 0 0 2 10 10 Zombie +/*Relleka*/ +spawn = 1298 2663 3646 0 1 0 0 0 Town Guard +spawn = 1299 2660 3634 0 1 0 0 0 Town Guard +spawn = 1281 2661 3653 0 1 0 0 0 Sigli The +Huntsman +spawn = 1311 2655 3652 0 1 0 0 0 Lensa +spawn = 1309 2666 3652 0 1 0 0 0 Pontak +spawn = 2439 2658 3661 0 1 0 0 0 Askeladden +spawn = 1298 2657 3663 0 1 0 0 0 Town Guard +spawn = 1299 2660 3663 0 1 0 0 0 Town Guard +spawn = 1277 2659 3678 0 1 0 0 0 Fridgeir +spawn = 1274 2660 3680 0 1 0 0 0 Ospak +spawn = 1275 2657 3680 0 1 0 0 0 Styrmir +spawn = 1276 2658 3679 0 1 0 0 0 Torbrund +spawn = 1285 2657 3674 0 0 0 0 0 Eldgrim +spawn = 1286 2660 3673 0 0 0 0 0 Manni The Reveller +spawn = 1300 2662 3674 0 0 0 0 0 Thora The Barkeeper +spawn = 1294 2659 3669 0 0 0 0 0 Bundt The Chieftain +spawn = 1284 2656 3670 0 0 0 0 0 Bjorn +spawn = 1308 2673 3665 0 0 0 0 0 Lanzig +spawn = 1269 2675 3682 0 0 0 0 0 Olaf The Bard +spawn = 1314 2674 3677 0 0 0 0 0 Inga +spawn = 1306 2674 3675 0 0 0 0 0 Freidir +spawn = 1278 2667 3684 0 0 0 0 0 Longhall Bouncer +spawn = 1283 2645 3660 0 0 0 0 0 Swensen The Navigator +spawn = 1312 2640 3650 0 0 0 0 0 Jennella +spawn = 1313 2628 3654 0 0 0 0 0 Sassilik +spawn = 1305 2642 3676 0 0 0 0 0 Agnar +spawn = 1317 2642 3676 0 1 5 20 30 Market Guard +spawn = 1317 2645 3678 0 1 5 20 30 Market Guard +spawn = 1317 2642 3678 0 1 5 20 30 Market Guard +spawn = 1302 2640 3699 0 0 5 20 30 Fisherman +spawn = 1304 2629 3693 0 0 0 0 0 Sailor +//spawn = 1301 2625 3675 0 0 0 0 0 Yrsa +spawn = 1267 2666 3716 0 1 2 20 10 RockCrab +spawn = 1267 2669 3711 0 1 2 20 10 RockCrab +spawn = 1267 2676 3717 0 1 2 20 10 RockCrab +spawn = 1267 2675 3718 0 1 2 20 10 RockCrab +spawn = 1267 2680 3719 0 1 2 20 10 RockCrab +spawn = 1267 2683 3715 0 1 2 20 10 RockCrab +spawn = 1267 2686 3715 0 1 2 20 10 RockCrab +spawn = 1267 2686 3722 0 1 2 20 10 RockCrab +spawn = 1267 2686 3728 0 1 2 20 10 RockCrab +spawn = 1267 2686 3728 0 1 2 20 10 RockCrab +spawn = 1267 2684 3731 0 1 2 20 10 RockCrab +spawn = 1267 2681 3731 0 1 2 20 10 RockCrab +spawn = 1267 2677 3728 0 1 2 20 10 RockCrab +spawn = 1267 2674 3731 0 1 2 20 10 RockCrab +spawn = 1267 2671 3730 0 1 2 20 10 RockCrab +spawn = 1267 2671 3728 0 1 2 20 10 RockCrab +spawn = 1267 2671 3724 0 1 2 20 10 RockCrab *Zamorak mage edgeville*/ +spawn = 2258 3106 3559 0 0 0 0 0 Zamorak mage +/*Chaos elemetal*/ +spawn = 3200 3266 3925 0 1 32 500 200 Chaos elemental +//giant mole +spawn = 3340 1738 5226 0 1 32 300 200 Giant mole +spawn = 3340 1777 5237 0 1 32 300 200 Giant mole +spawn = 3340 1740 5178 0 1 32 300 200 Giant mole +spawn = 3340 1760 5189 0 1 32 300 200 Giant mole +spawn = 3340 1780 5190 0 1 32 300 200 Giant mole +/*Dagannoth kings area*/ +spawn = 2881 2907 4445 0 2 38 500 200 Supreme +spawn = 2882 2915 4456 0 2 67 500 200 Prime +spawn = 2883 2922 4444 0 2 36 500 100 Rex +spawn = 2892 2906 4463 0 2 9 85 50 +spawn = 2894 2910 4464 0 2 9 85 50 +spawn = 2892 2916 4464 0 2 9 85 50 +spawn = 2894 2923 4462 0 2 9 85 50 +spawn = 2892 2929 4452 0 2 9 85 50 +spawn = 2894 2929 4444 0 2 9 85 50 +spawn = 2892 2927 4438 0 2 9 85 50 +spawn = 2894 2924 4436 0 2 9 85 50 +spawn = 2892 2927 4438 0 2 9 85 50 +spawn = 2894 2920 4435 0 2 9 85 50 +spawn = 2892 2927 4438 0 2 9 85 50 +spawn = 2894 2914 4434 0 2 9 85 50 +spawn = 2892 2907 4435 0 2 9 85 50 +spawn = 2894 2903 4436 0 2 9 85 50 +spawn = 2892 2899 4442 0 2 9 85 50 +spawn = 2894 2898 4451 0 2 9 85 50 +spawn = 2892 2903 4462 0 2 9 85 50 +/*Water Birth*/ +spawn = 1267 2532 3761 0 1 2 20 10 Rock crab +spawn = 1267 2526 3759 0 1 2 20 10 Rock crab +spawn = 1267 2508 3763 0 1 2 20 10 Rock crab +spawn = 1267 2502 3757 0 1 2 20 10 Rock crab +spawn = 122 2528 3739 0 1 2 10 10 Rock crab +/*karamja*/ +spawn = 132 2891 3164 0 1 4 20 20 1 Monkey +spawn = 132 2888 3167 0 1 4 20 20 1 Monkey +spawn = 132 2885 3165 0 1 4 20 20 1 Monkey +spawn = 132 2879 3160 0 1 4 20 20 1 Monkey +spawn = 132 2881 3162 0 1 4 20 20 1 Monkey +spawn = 132 2873 3169 0 1 4 20 20 1 Monkey +spawn = 107 2860 3167 0 1 4 20 20 1 Scorpion +spawn = 107 2856 3165 0 1 4 20 20 1 Scorpion +spawn = 107 2851 3164 0 1 4 20 20 1 Scorpion +/*Karamja dungeon*/ +spawn = 82 2838 9553 0 1 8 85 60 1 Lesser demon +spawn = 82 2844 9557 0 1 8 85 60 1 Lesser demon +spawn = 82 2833 9562 0 1 8 85 60 1 Lesser demon +spawn = 82 2836 9560 0 1 8 85 60 1 Lesser demon +spawn = 82 2837 9566 0 1 8 85 60 1 Lesser demon +spawn = 63 2838 9581 0 1 2 1 1 1 Red spider +spawn = 63 2841 9583 0 1 2 1 1 1 Red spider +spawn = 63 2848 9581 0 1 2 1 1 1 Red spider +spawn = 63 2845 9583 0 1 2 1 1 1 Red spider +spawn = 63 2835 9585 0 1 2 1 1 1 Red spider +spawn = 63 2831 9585 0 1 2 1 1 1 Red spider +spawn = 91 2861 9572 0 1 3 20 20 1 Skeleton +spawn = 91 2858 9576 0 1 3 20 20 1 Skeleton +spawn = 91 2856 9573 0 1 3 20 20 1 Skeleton +spawn = 91 2860 9568 0 1 3 20 20 1 Skeleton +spawn = 91 2863 9565 0 1 3 20 20 1 Skeleton +spawn = 82 2837 9603 0 1 8 85 60 1 Lesser demon +spawn = 82 2845 9611 0 1 8 85 60 1 Lesser demon +spawn = 82 2839 9606 0 1 8 85 60 1 Lesser demon +spawn = 82 2839 9613 0 1 8 85 60 1 Lesser demon +spawn = 82 2837 9623 0 1 8 85 60 1 Lesser demon +spawn = 82 2841 9628 0 1 8 85 60 1 Lesser demon +spawn = 82 2844 9636 0 1 8 85 60 1 Lesser demon +spawn = 82 2842 9642 0 1 8 85 60 1 Lesser demon +spawn = 82 2841 9648 0 1 8 85 60 1 Lesser demon +spawn = 82 2837 9652 0 1 8 85 60 1 Lesser demon +/*Relleka slayer dungeon*/ +spawn = 1600 2793 9993 0 1 3 23 23 Cave crawler +spawn = 1600 2787 9992 0 1 3 23 23 Cave crawler +spawn = 1600 2786 9998 0 1 3 23 23 Cave crawler +spawn = 1600 2791 9998 0 1 3 23 23 Cave crawler +spawn = 1600 2788 9997 0 1 3 23 23 Cave crawler +spawn = 1622 2792 10020 0 1 4 30 30 Rock slug +spawn = 1622 2795 10019 0 1 4 30 30 Rock slug +spawn = 1622 2800 10021 0 1 4 30 30 Rock slug +spawn = 1622 2803 10016 0 1 4 30 30 Rock slug +spawn = 1622 2800 10014 0 1 4 30 30 Rock slug +spawn = 1622 2795 10016 0 1 4 30 30 Rock slug +spawn = 1622 2791 10017 0 1 4 30 30 Rock slug +spawn = 1620 2799 10030 0 1 4 35 35 Cockatrice +spawn = 1620 2795 10031 0 1 4 35 35 Cockatrice +spawn = 1620 2790 10031 0 1 4 35 35 Cockatrice +spawn = 1620 2786 10034 0 1 4 35 35 Cockatrice +spawn = 1620 2784 10039 0 1 4 35 35 Cockatrice +spawn = 1620 2793 10039 0 1 4 35 35 Cockatrice +spawn = 1620 2791 10036 0 1 4 35 35 Cockatrice +spawn = 1633 2758 10011 0 1 5 40 40 Pyrefiend +spawn = 1633 2757 10007 0 1 5 40 40 Pyrefiend +spawn = 1633 2756 10003 0 1 5 40 40 Pyrefiend +spawn = 1633 2760 10001 0 1 5 40 40 Pyrefiend +spawn = 1633 2765 10000 0 1 5 40 40 Pyrefiend +spawn = 1633 2766 10003 0 1 5 40 40 Pyrefiend +spawn = 1633 2764 10006 0 1 5 40 40 Pyrefiend +spawn = 1633 2762 10008 0 1 5 40 40 Pyrefiend +spawn = 1633 2759 9995 0 1 5 40 40 Pyrefiend +spawn = 1616 2742 10002 0 1 6 60 60 Basilisk +spawn = 1616 2738 10005 0 1 6 60 60 Basilisk +spawn = 1616 2741 10010 0 1 6 60 60 Basilisk +spawn = 1616 2739 10008 0 1 6 60 60 Basilisk +spawn = 1616 2740 10014 0 1 6 60 60 Basilisk +spawn = 1616 2744 10013 0 1 6 60 60 Basilisk +spawn = 1616 2747 10007 0 1 6 60 60 Basilisk +spawn = 1616 2746 10013 0 1 6 60 60 Basilisk +spawn = 1637 2705 10030 0 1 5 70 70 Jelly +spawn = 1637 2701 10030 0 1 5 70 70 Jelly +spawn = 1637 2698 10028 0 1 5 70 70 Jelly +spawn = 1637 2698 10025 0 1 5 70 70 Jelly +spawn = 1637 2699 10030 0 1 5 70 70 Jelly +spawn = 1637 2701 10025 0 1 5 70 70 Jelly +spawn = 1637 2702 10029 0 1 5 70 70 Jelly +spawn = 1637 2705 10028 0 1 5 70 70 Jelly +spawn = 1637 2708 10027 0 1 5 70 70 Jelly +spawn = 1637 2710 10025 0 1 5 70 70 Jelly +spawn = 1637 2707 10021 0 1 5 70 70 Jelly +spawn = 1632 2717 10012 0 1 9 85 85 Turoth +spawn = 1632 2715 10008 0 1 9 85 85 Turoth +spawn = 1632 2717 10006 0 1 9 85 85 Turoth +spawn = 1632 2718 10002 0 1 9 85 85 Turoth +spawn = 1632 2722 10002 0 1 9 85 85 Turoth +spawn = 1632 2725 10004 0 1 9 85 85 Turoth +spawn = 1632 2725 10000 0 1 9 85 85 Turoth +spawn = 1632 2723 9995 0 1 9 85 85 Turoth +spawn = 1608 2702 9992 0 1 11 100 100 Kurask +spawn = 1608 2699 9993 0 1 11 100 100 Kurask +spawn = 1608 2702 9996 0 1 11 100 100 Kurask +spawn = 1608 2704 10001 0 1 11 100 100 Kurask +spawn = 1608 2704 10001 0 1 11 100 100 Kurask +spawn = 1608 2700 10002 0 1 11 100 100 Kurask +spawn = 1608 2695 9999 0 1 11 100 100 Kurask +spawn = 1608 2694 9996 0 1 11 100 100 Kurask +spawn = 1608 2694 10004 0 1 11 100 100 Kurask +/*Lumbridge slayer cave*/ +spawn = 1832 3160 9573 0 2 12 100 100 Cave bug +spawn = 1832 3154 9575 0 2 12 100 100 Cave bug +spawn = 1832 3149 9572 0 2 12 100 100 Cave bug +spawn = 1832 3150 9554 0 2 12 100 100 Cave bug +spawn = 1832 3154 9550 0 2 12 100 100 Cave bug +spawn = 1832 3157 9556 0 2 12 100 100 Cave bug +spawn = 1831 3158 9592 0 2 12 100 100 Cave slime +spawn = 1831 3162 9586 0 2 12 100 100 Cave slime +spawn = 1831 3166 9588 0 2 12 100 100 Cave slime +spawn = 1831 3181 9584 0 2 12 100 100 Cave slime +spawn = 1831 3188 9583 0 2 12 100 100 Cave slime +spawn = 1600 3193 9577 0 2 12 100 100 Cave crawler +spawn = 1600 3189 9577 0 2 12 100 100 Cave crawler +spawn = 1600 3193 9572 0 2 12 100 100 Cave crawler +spawn = 1600 3189 9571 0 2 12 100 100 Cave crawler +spawn = 1600 3186 9571 0 2 12 100 100 Cave crawler +spawn = 1600 3189 9565 0 2 12 100 100 Cave crawler +spawn = 1622 3207 9589 0 1 12 100 100 Rock slug +spawn = 1622 3211 9589 0 1 12 100 100 Rock slug +spawn = 1622 3210 9586 0 1 12 100 100 Rock slug +spawn = 1622 3206 9586 0 1 12 100 100 Rock slug +spawn = 1622 3222 9588 0 1 12 100 100 Rock slug +spawn = 1622 3226 9587 0 1 12 100 100 Rock slug +spawn = 1622 3226 9584 0 1 12 100 100 Rock slug +spawn = 1622 3221 9583 0 1 12 100 100 Rock slug +spawn = 1622 3223 9580 0 1 12 100 100 Rock slug +spawn = 1622 3228 9577 0 1 12 100 100 Rock slug +spawn = 1622 3221 9575 0 1 12 100 100 Rock slug +spawn = 1622 3218 9569 0 1 12 100 100 Rock slug +spawn = 1622 3228 9570 0 1 12 100 100 Rock slug +spawn = 1832 3245 9579 0 1 12 100 100 Cave bug +spawn = 1832 3252 9580 0 1 12 100 100 Cave bug +spawn = 1832 3256 9579 0 1 12 100 100 Cave bug +spawn = 1832 3254 9570 0 1 12 100 100 Cave bug +spawn = 1832 3252 9568 0 1 12 100 100 Cave bug +spawn = 1832 3250 9560 0 1 12 100 100 Cave bug +spawn = 1832 3244 9559 0 1 12 100 100 Cave bug +spawn = 1832 3240 9564 0 1 12 100 100 Cave bug +spawn = 1677 3565 9948 0 1 1 10 10 Experiment +spawn = 1676 3565 9951 0 1 1 10 10 Experiment +spawn = 1678 3569 9954 0 1 1 10 10 Experiment +spawn = 1676 3573 9959 0 1 1 10 10 Experiment +spawn = 1676 3566 9960 0 1 1 10 10 Experiment +spawn = 1677 3562 9963 0 1 1 10 10 Experiment +spawn = 1676 3557 9961 0 1 1 10 10 Experiment +spawn = 1678 3551 9959 0 1 1 10 10 Experiment +spawn = 1676 3552 9954 0 1 1 10 10 Experiment +spawn = 1678 3546 9959 0 1 1 10 10 Experiment +spawn = 1676 3529 9969 0 1 1 10 10 Experiment +spawn = 1677 3525 9962 0 1 1 10 10 Experiment +spawn = 1676 3548 9950 0 1 1 10 10 Experiment +spawn = 1678 3552 9937 0 1 1 10 10 Experiment +spawn = 1676 3550 9939 0 1 1 10 10 Experiment +spawn = 1678 3557 9929 0 1 1 10 10 Experiment +spawn = 1677 3554 9924 0 1 1 10 10 Experiment +spawn = 1677 3538 9930 0 1 1 10 10 Experiment +spawn = 1678 3526 9934 0 1 1 10 10 Experiment +spawn = 1676 3506 9925 0 1 1 10 10 Experiment +spawn = 1676 3493 9925 0 1 1 10 10 Experiment +spawn = 1678 3499 9939 0 1 1 10 10 Experiment +spawn = 1676 3492 9946 0 1 1 10 10 Experiment +spawn = 1677 3487 9951 0 1 1 10 10 Experiment +spawn = 1676 3486 9943 0 1 1 10 10 Experiment +spawn = 1676 3479 9943 0 1 1 10 10 Experiment +spawn = 1677 3473 9944 0 1 1 10 10 Experiment +spawn = 1676 3473 9935 0 1 1 10 10 Experiment +spawn = 1678 3486 9928 0 1 1 10 10 Experiment +spawn = 1678 3557 9947 0 1 1 10 10 Experiment +/*King black dragon*/ +spawn = 50 2271 4698 0 1 25 500 350 King Black Dragon +/*Wilderness npcs*/ +spawn = 103 3277 3658 0 1 3 20 20 Ghost Wildly +spawn = 103 3278 3661 0 1 3 20 20 Ghost Wildly +spawn = 103 3273 3660 0 1 3 20 20 Ghost Wildly +spawn = 103 3273 3663 0 1 3 20 20 Ghost Wildly +spawn = 103 3272 3653 0 1 3 20 20 Ghost Wildly +spawn = 103 3275 3654 0 1 3 20 20 Ghost Wildly +spawn = 103 3293 3646 0 1 3 20 20 Ghost Wildly +spawn = 103 3290 3647 0 1 3 20 20 Ghost Wildly +spawn = 117 3302 3652 0 1 4 30 30 HillGiant Wildly +spawn = 117 3302 3648 0 1 4 30 30 HillGiant Wildly +spawn = 117 3298 3650 0 1 4 30 30 HillGiant Wildly +spawn = 117 2912 9733 0 1 4 30 30 HillGiant Tav +spawn = 117 2910 9737 0 1 4 30 30 HillGiant Tav +spawn = 117 2908 9732 0 1 4 30 30 HillGiant Tav +spawn = 117 2903 9736 0 1 4 30 30 HillGiant Tav +spawn = 117 2913 9730 0 1 4 30 30 HillGiant Tav +spawn = 941 3311 9809 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3319 9806 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3150 3704 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3149 3695 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3141 3700 0 1 14 75 75 GreenDragon Wildly +spawn = 54 3312 9844 0 1 14 75 75 GreenDragon Wildly +spawn = 54 3320 9833 0 1 14 75 75 GreenDragon Wildly +spawn = 53 3281 9836 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3281 9800 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3277 9810 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3337 3673 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3341 3678 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3342 3694 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3332 3674 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3333 3686 0 1 14 75 75 GreenDragon Wildly +spawn = 941 3330 3682 0 1 14 75 75 GreenDragon Wildly +spawn = 92 3013 3593 0 1 4 25 25 Skeleton Wildly +spawn = 92 3020 3594 0 1 4 25 25 Skeleton Wildly +spawn = 92 3018 3588 0 1 4 25 25 Skeleton Wildly +spawn = 941 2973 3620 0 1 14 75 75 GreenDragon Wildly +spawn = 941 2983 3620 0 1 14 75 75 GreenDragon Wildly +spawn = 941 2979 3610 0 1 14 75 75 GreenDragon Wildly +spawn = 75 3155 3670 0 1 6 30 30 Zombie Wildly +spawn = 75 3161 3671 0 1 6 30 30 Zombie Wildly +spawn = 75 3171 3670 0 1 6 30 30 Zombie Wildly +spawn = 75 3174 3677 0 1 6 30 30 Zombie Wildly +spawn = 75 3164 3678 0 1 6 30 30 Zombie Wildly +spawn = 92 3103 3561 0 1 4 25 25 Skeleton Wildly +spawn = 92 3106 3557 0 1 4 25 25 Skeleton Wildly +spawn = 92 3099 3552 0 1 4 25 25 Skeleton Wildly +spawn = 92 3106 3539 0 1 4 25 25 Skeleton Wildly +spawn = 92 3113 3537 0 1 4 25 25 Skeleton Wildly +spawn = 92 3108 3530 0 1 4 25 25 Skeleton Wildly +spawn = 92 3105 3549 0 1 4 25 25 Skeleton Wildly +spawn = 86 3242 3531 0 1 1 2 2 Rat Wildly +spawn = 86 3237 3536 0 1 1 2 2 Rat Wildly +spawn = 86 3244 3541 0 1 1 2 2 Rat Wildly +spawn = 86 3252 3536 0 1 1 2 2 Rat Wildly +spawn = 83 3288 3886 0 1 16 90 90 Greater Wildly +spawn = 83 3291 3880 0 1 16 90 90 Greater Demon Wildly +spawn = 82 3013 3852 0 1 15 40 40 Lessers Wildly +spawn = 82 3012 3845 0 1 15 40 40 Lessers Wildly +spawn = 125 2954 3888 0 1 7 35 35 IceWarrior Wildly +spawn = 125 2949 3894 0 1 7 35 35 IceWarrior Wildly +spawn = 125 2955 3897 0 1 7 35 35 IceWarrior Wildly +spawn = 125 2960 3892 0 1 7 35 35 IceWarrior Wildly +spawn = 125 2958 3888 0 1 7 35 35 IceWarrior Wildly +spawn = 125 2954 3889 0 1 7 35 35 IceWarrior Wildly +spawn = 78 3080 3951 0 1 7 35 35 GiantBat Wildly +spawn = 78 3080 3955 0 1 7 35 35 GiantBat Wildly +spawn = 78 3079 3950 0 1 7 35 35 GiantBat Wildly +spawn = 914 3112 3938 0 1 30 150 150 BattleMage3 Wildly +spawn = 912 3114 3935 0 1 30 150 150 BattleMage1 Wildly +spawn = 913 3113 3931 0 1 30 150 150 BattleMage2 Wildly +spawn = 914 3112 3925 0 1 30 150 150 BattleMage3 Wildly +spawn = 914 3098 3926 0 1 30 150 150 BattleMage3 Wildly +spawn = 912 3099 3929 0 1 30 150 150 BattleMage1 Wildly +spawn = 913 3103 3932 0 1 30 150 150 BattleMage2 Wildly +spawn = 912 3108 3936 0 1 30 150 150 BattleMage1 Wildly +spawn = 913 3107 3933 0 1 30 150 150 BattleMage2 Wildly +/*Tzhaar npcs*/ +spawn = 2619 2445 5178 0 1 0 0 0 Banker Tzhaar +//fighters +spawn = 2610 2490 5176 0 1 16 150 180 TzHaar-Ket +spawn = 2615 2488 5172 0 1 16 150 180 TzHaar-Ket +spawn = 2607 2479 5167 0 1 19 165 130 TzHaar-Xil +spawn = 2604 2472 5166 0 1 19 165 130 TzHaar-Xil +spawn = 2610 2490 5158 0 1 16 150 180 TzHaar-Ket +spawn = 2615 2487 5155 0 1 16 150 180 TzHaar-Ket +spawn = 2598 2474 5153 0 1 10 80 75 TzHaar-Hur +spawn = 2598 2482 5158 0 1 10 80 75 TzHaar-Hur +spawn = 2598 2480 5152 0 1 10 80 75 TzHaar-Hur +spawn = 2591 2469 5148 0 1 13 130 130 TzHaar-Mej +spawn = 2591 2472 5144 0 1 13 130 130 TzHaar-Mej +spawn = 2591 2466 5143 0 1 13 130 130 TzHaar-Mej +spawn = 2607 2456 5137 0 1 19 165 130 TzHaar-Xil +spawn = 2604 2457 5131 0 1 19 165 130 TzHaar-Xil +spawn = 2607 2458 5141 0 1 19 165 130 TzHaar-Xil +spawn = 2610 2435 5125 0 1 16 150 180 TzHaar-Ket +spawn = 2615 2439 5129 0 1 16 150 180 TzHaar-Ket +spawn = 2610 2438 5134 0 1 16 150 180 TzHaar-Ket +spawn = 2598 2439 5143 0 1 10 80 75 TzHaar-Hur +spawn = 2598 2442 5146 0 1 10 80 75 TzHaar-Hur +spawn = 2598 2448 5146 0 1 10 80 75 TzHaar-Hur +spawn = 2591 2455 5152 0 1 13 130 130 TzHaar-Mej +spawn = 2591 2460 5159 0 1 13 130 130 TzHaar-Mej +spawn = 2615 2452 5164 0 1 16 150 180 TzHaar-Ket +spawn = 2610 2449 5169 0 1 16 150 180 TzHaar-Ket +spawn = 2615 2444 5169 0 1 16 150 180 TzHaar-Ket +/*Barbarian*/ +spawn = 12 3097 3421 0 1 3 12 15 Barbian +spawn = 12 3089 3422 0 1 3 12 15 Barbian +spawn = 12 3086 3420 0 1 3 12 15 Barbian +spawn = 12 3083 3415 0 1 3 12 15 Barbian +spawn = 12 3078 3419 0 1 3 12 15 Barbian +spawn = 17 3075 3419 0 1 3 10 12 Barbian Woman +spawn = 12 3086 3424 0 1 3 12 15 Barbian +spawn = 17 3078 3420 0 1 3 10 12 Barbian Woman +spawn = 17 3091 3421 0 1 3 10 12 Barbian Woman +//Falador City +spawn = 608 2959 3336 2 1 0 0 0 Sir Amik Varze +spawn = 2290 2997 3373 0 1 0 0 0 Sir Tiffy +spawn = 19 2977 3343 0 1 8 30 30 White Knight +spawn = 1092 2971 3346 0 0 12 30 30 White Knight +spawn = 19 2961 3337 0 1 10 30 30 White Knight +spawn = 19 2976 3331 0 1 9 30 30 White Knight +spawn = 19 2983 3340 0 1 9 30 30 White Knight +spawn = 19 2988 3336 0 1 11 30 30 White Knight +spawn = 1092 2961 3342 0 1 13 30 30 White Knight +spawn = 3348 2965 3342 0 1 8 30 30 White Knight +spawn = 3348 2978 3342 0 1 11 30 30 White Knight +spawn = 3350 2965 3342 0 1 8 30 30 White Knight +spawn = 736 2954 3373 0 1 0 0 0 Emily +spawn = 3217 2957 3373 0 1 0 0 0 Kaylee +spawn = 3218 2957 3370 0 1 0 0 0 Tina +//edgeville +spawn = 175 3076 3504 0 1 2 8 8 Mugger +spawn = 2588 3054 3504 0 1 0 0 0 0 Brother Althric +spawn = 222 3050 3490 0 1 0 0 0 0 Monk +spawn = 222 3054 3490 0 1 0 0 0 0 Monk +spawn = 222 3045 3483 0 1 0 0 0 0 Monk +spawn = 222 3045 3497 0 1 0 0 0 0 Monk +spawn = 222 3044 3491 1 1 0 0 0 0 Monk +spawn = 222 3058 3497 1 1 0 0 0 0 Monk +spawn = 801 3059 3484 0 1 0 0 0 0 Abbot +spawn = 802 3045 3488 1 1 0 0 0 0 Monk +spawn = 385 3058 3490 1 1 0 0 0 0 Scorp +//draynor +spawn = 494 3090 3242 0 4 0 0 0 Banker +spawn = 494 3090 3243 0 4 0 0 0 Banker +spawn = 494 3090 3245 0 4 0 0 0 Banker +spawn = 970 3081 3247 0 2 0 0 0 Diango +spawn = 743 3100 3259 0 1 0 0 0 Ned +spawn = 922 3086 3258 0 4 0 0 0 Aggie +spawn = 919 3126 3245 0 1 0 0 0 Lady Kili +spawn = 2253 3088 3255 0 3 0 0 0 Wise Old Man +spawn = 285 3112 3327 0 1 0 0 0 Veronica +spawn = 174 3083 3240 0 1 3 12 15 Dark Wizzard +spawn = 174 3088 3237 0 1 3 12 15 Dark Wizzard +spawn = 2634 3095 3252 0 3 0 0 0 Miss Schism +spawn = 2574 3087 3248 0 1 0 0 0 Bank Guard +spawn = 2236 3079 3250 0 1 5 20 30 +spawn = 2236 3082 3250 0 1 5 20 30 + Market Guard +spawn = 2572 3078 3253 0 3 0 0 0 Olivia +spawn = 2240 3078 3260 0 1 0 0 0 Pig +spawn = 2242 3076 3261 0 1 0 0 0 Piglet +spawn = 2242 3076 3260 0 1 0 0 0 Piglet +spawn = 2242 3078 3260 0 1 0 0 0 Piglet +spawn = 2234 3078 3257 0 1 0 0 0 Martin the Master Gardener +spawn = 917 3124 3250 0 1 0 0 0 Jail Guard +spawn = 917 3127 3248 0 1 0 0 0 Jail Guard +spawn = 915 3111 3262 0 1 0 0 0 Leela +spawn = 917 3117 3235 0 1 0 0 0 Jail Guard +spawn = 917 3127 3245 0 1 0 0 0 Jail Guard +spawn = 916 3123 3245 0 1 0 0 0 Joe +spawn = 920 3123 3242 0 1 0 0 0 Prince Ali +spawn = 1769 3145 3254 0 1 0 0 0 Goblin +spawn = 1770 3138 3260 0 1 2 10 10 Goblin +spawn = 1771 3141 3256 0 1 2 10 10 Goblin +spawn = 1772 3151 3257 0 1 2 10 10 Goblin +spawn = 1773 3147 3247 0 1 2 10 10 Goblin +spawn = 494 2947 3366 0 2 0 0 0 Banker +spawn = 494 2946 3366 0 2 0 0 0 Banker +spawn = 494 2948 3366 0 2 0 0 0 Banker +spawn = 494 2949 3366 0 2 0 0 0 Banker +spawn = 494 2945 3366 0 2 0 0 0 Banker +spawn = 494 3015 3353 0 2 0 0 0 Banker +spawn = 494 3014 3353 0 2 0 0 0 Banker +spawn = 494 3013 3353 0 2 0 0 0 Banker +spawn = 494 3012 3353 0 2 0 0 0 Banker +spawn = 494 3011 3353 0 2 0 0 0 Banker +spawn = 494 3010 3353 0 2 0 0 0 Banker +//spawn = 584 2945 3335 0 1 0 0 0 Herquin +//spawn = 581 2972 3312 0 1 0 0 0 Wayne +spawn = 36 3027 3382 0 1 0 0 0 Wyson +spawn = 118 3019 3337 0 1 2 15 15 Dwarf +spawn = 118 3011 3341 0 1 2 15 15 Dwarf +spawn = 118 3017 3346 0 1 2 15 15 Dwarf +spawn = 118 3020 3333 0 1 2 15 15 Dwarf +spawn = 118 3018 3333 0 1 2 15 15 Dwarf +spawn = 9 2962 3382 0 1 6 20 20 Guard Centre +spawn = 9 2964 3379 0 1 6 20 20 Guard Centre +spawn = 9 2964 3382 0 1 6 20 20 Guard Centre +spawn = 9 2964 3397 0 1 6 20 20 Guard Wall +spawn = 9 2967 3395 0 1 6 20 20 Guard Wall +spawn = 9 2965 3392 0 1 6 20 20 Guard Wall +spawn = 9 3174 3427 0 1 6 20 20 Guard west +spawn = 9 3172 3428 0 1 6 20 20 Guard west +spawn = 9 3176 3430 0 1 6 20 20 Guard West keeper south +spawn = 172 3223 3369 0 1 4 40 40 Dark wizard south +spawn = 174 3226 3367 0 1 2 20 20 Dark wizard south +spawn = 172 3225 3365 0 1 4 40 40 Dark wizard south +spawn = 172 3229 3367 0 1 4 40 40 Dark wizard south +spawn = 174 3231 3370 0 1 2 20 20 Dark wizard south +spawn = 172 3229 3372 0 1 4 40 40 Dark wizard south +spawn = 172 3224 3371 0 1 4 40 40 Dark wizard south +spawn = 172 3226 3373 0 1 2 20 20 Dark wizard south +spawn = 9 3212 3381 0 1 6 20 20 Guard south +spawn = 9 3211 3379 0 1 6 20 20 Guard south +spawn = 9 3210 3382 0 1 6 20 20 Guard south +spawn = 9 3270 3429 0 1 6 20 20 Guard east +spawn = 9 3272 3427 0 1 6 20 20 Guard east +spawn = 9 3274 3428 0 1 6 20 20 Guard east +spawn = 9 3246 3500 0 1 6 20 20 Guard north +spawn = 9 3244 3498 0 1 6 20 20 Guard north +spawn = 494 3252 3418 0 2 0 0 0 Banker east +spawn = 494 3187 3438 0 5 0 0 0 Banker west +spawn = 494 3187 3440 0 5 0 0 0 Banker west +spawn = 494 3187 3444 0 5 0 0 0 Banker west +spawn = 494 3187 3436 0 5 0 0 0 Banker west +spawn = 494 3254 3418 0 2 0 0 0 Banker east +spawn = 494 3253 3418 0 2 0 0 0 Banker east +spawn = 494 3256 3418 0 2 0 0 0 Banker east +spawn = 494 3187 3442 0 5 0 0 0 Banker west +//Lumbridge +spawn = 1 3223 3208 0 1 2 10 10 Man +spawn = 3 3221 3223 0 1 2 10 10 Man +spawn = 2 3231 3207 0 1 2 10 10 Man +spawn = 3 3231 3207 0 1 2 10 10 Man +spawn = 1770 3226 3261 0 1 2 10 10 Goblin +spawn = 1770 3227 3264 0 1 2 10 10 Goblin +spawn = 1770 3229 3264 0 1 2 10 10 Goblin +spawn = 1771 3242 3265 0 1 2 10 10 Goblin +spawn = 1771 3248 3261 0 1 2 10 10 Goblin +spawn = 1771 3248 3261 0 1 2 10 10 Goblin +spawn = 1772 3255 3252 0 1 2 10 10 Goblin +spawn = 1772 3260 3249 0 1 2 10 10 Goblin +spawn = 1772 3261 3243 0 1 2 10 10 Goblin +spawn = 1773 3262 3230 0 1 2 10 10 Goblin +spawn = 1773 3262 3220 0 1 2 10 10 Goblin +spawn = 1773 3263 3215 0 1 2 10 10 Goblin +spawn = 1774 3255 3223 0 1 2 10 10 Goblin +spawn = 1774 3252 3226 0 1 2 10 10 Goblin +spawn = 1774 3253 3229 0 1 2 10 10 Goblin +spawn = 1775 3251 3235 0 1 2 10 10 Goblin +spawn = 1775 3246 3235 0 1 2 10 10 Goblin +spawn = 1775 3247 3237 0 1 2 10 10 Goblin +spawn = 1776 3247 3241 0 1 2 10 10 Goblin +spawn = 1776 3244 3257 0 1 2 10 10 Goblin +spawn = 1776 3226 3270 0 1 2 10 10 Goblin +spawn = 1767 3254 3256 0 1 2 10 10 Lumbridge Goblin +spawn = 81 3260 3260 0 1 2 10 10 Lumbridge Cow +spawn = 397 3255 3259 0 1 2 10 10 Lumbridge Cow +spawn = 397 3170 3320 0 1 2 10 10 Lumbridge Cow +spawn = 397 3173 3321 0 1 2 10 10 Lumbridge Cow +spawn = 397 3175 3319 0 1 2 10 10 Lumbridge Cow +spawn = 397 3180 3316 0 1 2 10 10 Lumbridge Cow +spawn = 397 3178 3320 0 1 2 10 10 Lumbridge Cow +spawn = 397 3167 3321 0 1 2 10 10 Lumbridge Cow +spawn = 397 3263 3260 0 1 2 10 10 Lumbridge Cow +spawn = 81 3259 3266 0 1 2 10 10 Lumbridge Cow +spawn = 1767 3262 3271 0 1 2 10 10 Lumbridge Cow +spawn = 1766 3257 3273 0 1 2 10 10 Lumbridge Cow +spawn = 397 3255 3279 0 1 2 10 10 Lumbridge Cow +spawn = 1767 3257 3293 0 1 2 10 10 Lumbridge Cow +spawn = 81 3253 3289 0 1 2 10 10 Lumbridge Cow +spawn = 81 3248 3284 0 1 2 10 10 Lumbridge Cow +spawn = 1766 3248 3288 0 1 2 10 10 Lumbridge Cow +spawn = 1767 3243 3296 0 1 2 10 10 Lumbridge Cow +spawn = 397 3244 3289 0 1 2 10 10 Lumbridge Cow +spawn = 397 3263 3293 0 1 2 10 10 Lumbridge Cow +spawn = 1768 3263 3288 0 1 2 10 10 Lumbridge Cow +spawn = 81 3262 3283 0 1 2 10 10 Lumbridge Cow +spawn = 925 3267 3229 0 5 0 0 0 Gate Guard +spawn = 925 3267 3226 0 5 0 0 0 Gate Guard +spawn = 925 3268 3229 0 4 0 0 0 Gate Guard +spawn = 925 3268 3226 0 4 0 0 0 Gate Guard +spawn = 86 3192 3209 0 1 2 10 10 Lumbridge giant rat +spawn = 86 3191 3208 0 1 2 10 10 Lumbridge giant rat +spawn = 86 3192 3206 0 1 2 10 10 Lumbridge giant rat +spawn = 86 3192 3208 0 1 2 10 10 Lumbridge giant rat +spawn = 3021 3179 3234 0 1 0 0 0 Tool Leprechaun +spawn = 7 3251 3326 0 1 2 10 10 Farmer +spawn = 47 3215 3222 0 1 1 2 2 Rat +spawn = 47 3213 3210 0 1 1 2 2 Rat +spawn = 47 3207 3210 0 1 1 2 2 Rat +spawn = 47 3206 3214 0 1 1 2 2 Rat +spawn = 47 3224 3212 0 1 1 2 2 Rat +spawn = 47 2954 3204 0 1 1 2 2 Rat +spawn = 47 3211 3205 0 1 1 2 2 Rat +spawn = 47 3203 3212 0 1 1 2 2 Rat +spawn = 47 3202 3228 0 1 1 2 2 Rat +spawn = 47 3207 3234 0 1 1 2 2 Rat +spawn = 47 3210 3240 0 1 1 2 2 Rat +spawn = 47 3234 3218 0 1 1 2 2 Rat +spawn = 708 3220 3232 0 1 1 2 2 Imp +spawn = 708 3240 3222 0 1 1 2 2 Imp +spawn = 708 2999 3293 0 1 1 2 2 Imp +spawn = 708 3008 3308 0 1 1 2 2 Imp +spawn = 180 3009 3281 0 1 4 10 10 Highwayman +spawn = 180 3007 3274 0 1 4 10 10 Highwayman +spawn = 2693 3027 3234 0 1 0 0 0 Seagull +spawn = 2693 3028 3240 0 1 0 0 0 Seagull +spawn = 2693 3032 3236 0 1 0 0 0 Seagull +spawn = 2693 3028 3231 0 1 0 0 0 Seagull +spawn = 2238 3230 3223 0 1 0 0 0 Donie +spawn = 1757 3227 3305 0 1 2 10 10 Farmer +/*Alkharid*/ +spawn = 18 3285 3172 0 1 3 20 20 Alkharid warrior +spawn = 18 3288 3169 0 1 3 20 20 Alkharid warrior +spawn = 18 3295 3170 0 1 3 20 20 Alkharid warrior +spawn = 18 3297 3175 0 1 3 20 20 Alkharid warrior +spawn = 18 3300 3171 0 1 3 20 20 Alkharid warrior +spawn = 18 3302 3167 0 1 3 20 20 Alkharid warrior +spawn = 18 3301 3164 0 1 3 20 20 Alkharid warrior +spawn = 18 3295 3161 0 1 3 20 20 Alkharid warrior +spawn = 18 3290 3161 0 1 3 20 20 Alkharid warrior +spawn = 18 3286 3164 0 1 3 20 20 Alkharid warrior +spawn = 18 3283 3161 0 1 3 20 20 Alkharid warrior +spawn = 18 3286 3163 1 1 3 20 20 Alkharid warrior +spawn = 18 3287 3168 1 1 3 20 20 Alkharid warrior +spawn = 18 3285 3174 1 1 3 20 20 Alkharid warrior +spawn = 18 3298 3164 1 1 3 20 20 Alkharid warrior +spawn = 18 3294 3162 1 1 3 20 20 Alkharid warrior +spawn = 18 3287 3160 1 1 3 20 20 Alkharid warrior +spawn = 837 3301 3121 0 1 3 20 30 Shantay Guard +spawn = 837 3302 3120 0 1 3 20 30 Shantay Guard +spawn = 837 3307 3121 0 1 3 20 30 Shantay Guard +spawn = 2296 3311 3109 0 0 0 0 0 RUG MERCHANT +spawn = 2294 3350 3001 0 0 0 0 0 RUG MERCHANT +spawn = 2294 3182 3042 0 0 0 0 0 RUG MERCHANT +spawn = 2294 3467 3110 0 0 0 0 0 RUG MERCHANT +spawn = 2294 3400 2918 0 0 0 0 0 RUG MERCHANT +spawn = 107 3298 3280 0 1 4 20 20 Scorpion +spawn = 107 3300 3287 0 1 4 20 20 Scorpion +spawn = 107 3296 3294 0 1 4 20 20 Scorpion +spawn = 107 3299 3299 0 1 4 20 20 Scorpion +spawn = 107 3302 3308 0 1 4 20 20 Scorpion +spawn = 107 3299 3309 0 1 4 20 20 Scorpion +spawn = 496 3267 3169 0 4 0 0 0 Banker +spawn = 497 3267 3168 0 4 0 0 0 Banker +spawn = 496 3267 3167 0 4 0 0 0 Banker +spawn = 497 3267 3166 0 4 0 0 0 Banker +spawn = 496 3267 3164 0 4 0 0 0 Banker +/*Brimhaven*/ +spawn = 83 2629 9507 2 1 16 90 90 Greater demon +spawn = 83 2639 9506 2 1 16 90 90 Greater demon +spawn = 83 2644 9501 2 1 16 90 90 Greater demon +spawn = 83 2633 9493 2 1 16 90 90 Greater demon +spawn = 83 2632 9487 2 1 16 90 90 Greater demon +spawn = 83 2631 9479 2 1 16 90 90 Greater demon +spawn = 83 2638 9477 2 1 16 90 90 Greater demon +spawn = 83 2649 9476 2 1 16 90 90 Greater demon +spawn = 1590 2734 9480 0 1 18 89 92 Bronze +spawn = 1590 2733 9493 0 1 18 89 92 Bronze +spawn = 1590 2744 9487 0 1 18 89 92 Bronze +spawn = 1591 2737 9418 0 1 20 92 92 Iron +spawn = 1591 2732 9420 0 1 20 92 92 Iron +spawn = 1591 2742 9430 0 1 20 92 92 Iron Dragon +spawn = 1591 2739 9454 0 1 20 92 92 Iron Dragon +spawn = 1591 2718 9461 0 1 20 92 92 Iron Dragon +spawn = 1591 2702 9458 0 1 20 92 92 Iron Dragon +spawn = 1591 2710 9450 0 1 20 92 92 Iron Dragon +spawn = 1591 2703 9425 0 1 20 92 92 Iron Dragon +spawn = 1591 2711 9420 0 1 20 92 92 Iron Dragon +spawn = 1592 2714 9433 0 1 22 110 120 Steel Dragon +spawn = 1592 2712 9444 0 1 22 110 120 Steel Dragon +spawn = 1592 2729 9445 0 1 22 110 120 Steel Dragon +spawn = 1592 2729 9458 0 1 22 110 120 Steel Dragon +spawn = 1589 2692 9507 0 1 16 60 60 Baby red Dragon +spawn = 1589 2726 9515 0 1 16 60 60 Baby red Dragon +spawn = 1589 2704 9525 0 1 16 60 60 Baby red Dragon +spawn = 1589 2712 9505 0 1 16 60 60 Baby red Dragon +spawn = 1589 2708 9510 0 1 16 60 60 Baby red Dragon +spawn = 84 2702 9483 0 1 18 90 80 Black Demon +spawn = 84 2701 9489 0 1 18 90 80 Black Demon +spawn = 84 2708 9487 0 1 18 90 80 Black Demon +spawn = 84 2710 9480 0 1 18 90 80 Black Demon +spawn = 84 2719 9484 0 1 18 90 80 Black Demon +spawn = 1593 2626 9523 2 1 6 40 40 Wild Dog +spawn = 1593 2626 9529 2 1 6 40 40 Wild Dog +spawn = 1593 2627 9535 2 1 6 40 40 Wild Dog +spawn = 1593 2629 9543 2 1 6 40 40 Wild Dog +spawn = 1593 2635 9556 2 1 6 40 40 Wild Dog +spawn = 110 2627 9526 2 1 12 80 70 Fire Giant +spawn = 110 2627 9532 2 1 12 80 70 Fire Giant +spawn = 110 2628 9540 2 1 12 80 70 Fire Giant +spawn = 110 2638 9562 2 1 12 80 70 Fire Giant +spawn = 110 2630 9550 2 1 12 80 70 Fire Giant +spawn = 110 2644 9494 0 1 12 80 70 Fire Giant +spawn = 110 2652 9487 0 1 12 80 70 Fire Giant +spawn = 110 2667 9489 0 1 12 80 70 Fire Giant +spawn = 110 2664 9482 0 1 12 80 70 Fire Giant +spawn = 110 2659 9498 0 1 12 80 70 Fire Giant +spawn = 110 2657 9480 0 1 12 80 70 Fire Giant +spawn = 112 2679 9549 0 1 6 40 40 Moss Giant +spawn = 112 2671 9544 0 1 6 40 40 Moss Giant +spawn = 112 2663 9557 0 1 6 40 40 Moss Giant +spawn = 112 2659 9545 0 1 6 40 40 Moss Giant +spawn = 112 2681 9588 0 1 6 40 40 Moss Giant +spawn = 112 2677 9592 0 1 6 40 40 Moss Giant +spawn = 112 2657 9576 0 1 6 40 40 Moss Giant +spawn = 112 2643 9574 0 1 6 40 40 Moss Giant +spawn = 112 2651 9533 0 1 6 40 40 Moss Giant +spawn = 112 2638 9526 0 1 6 40 40 Moss Giant +spawn = 112 2645 9486 0 1 6 40 40 Moss Giant +spawn = 112 2655 9587 0 1 6 40 40 Moss Giant +spawn = 53 2698 9504 0 1 17 90 90 Red Dragon +spawn = 53 2721 9518 0 1 17 90 90 Red Dragon +spawn = 53 2713 9524 0 1 17 90 90 Red Dragon +spawn = 1593 2635 9507 2 1 6 40 40 Wild Dog +spawn = 1593 2637 9499 2 1 6 40 40 Wild Dog +spawn = 1593 2630 9488 2 1 6 40 40 Wild Dog +spawn = 1593 2636 9479 2 1 6 40 40 Wild Dog +spawn = 1593 2645 9477 2 1 6 40 40 Wild Dog +spawn = 1593 2675 9590 0 1 6 40 40 Wild Dog +spawn = 1593 2640 9583 0 1 6 40 40 Wild Dog +spawn = 1593 2647 9549 0 1 6 40 40 Wild Dog +spawn = 1593 2640 9533 0 1 6 40 40 Wild Dog +spawn = 1593 2669 9522 0 1 6 40 40 Wild Dog +spawn = 1593 2658 9491 0 1 6 40 40 Wild Dog +spawn = 1593 2708 9517 0 1 6 40 40 Wild Dog +spawn = 1593 2681 9477 0 1 6 40 40 Wild Dog +spawn = 1593 2713 9485 0 1 6 40 40 Wild Dog +spawn = 1593 2681 9561 0 1 6 40 40 Wild Dog +spawn = 1593 2665 9514 0 1 6 40 40 Wild Dog +spawn = 1593 2660 9551 0 1 6 40 40 Wild Dog +/*Edgeville*/ +spawn = 2 3097 3509 0 1 2 5 5 Man north house +spawn = 3 3093 3512 0 0 2 5 5 Man north house +spawn = 1 3092 3508 0 0 2 5 5 Man north house +spawn = 9 3114 3512 0 1 6 20 20 Guard east +spawn = 9 3114 3515 0 1 8 20 20 Guard east +spawn = 9 3103 3519 0 1 6 20 20 Guard wildy ditch +spawn = 9 3094 3517 0 1 6 20 20 Guard wildy ditch +spawn = 9 3079 3516 0 1 6 20 20 Guard wildy ditch +/*Kbd red spiders*/ +spawn = 134 3067 10255 0 1 4 10 10 Poisen Spiders +spawn = 134 3068 10258 0 1 4 10 10 Poisen Spiders +spawn = 134 3069 10255 0 1 4 10 10 Poisen Spiders +spawn = 134 3085 9940 0 4 4 10 10 Poison +spawn = 134 3088 9938 0 4 4 10 10 Poison +spawn = 134 3086 9935 0 4 4 10 10 Poison +spawn = 134 3089 9937 0 4 4 10 10 Poison +/*Slayer tower*/ +spawn = 1648 3411 3537 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3419 3544 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3420 3550 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3428 3543 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3428 3549 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3425 3556 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3408 3537 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3413 3536 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3410 3540 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3411 3549 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3413 3546 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3415 3572 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3411 3573 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3416 3572 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3413 3571 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3414 3558 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3411 3561 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3411 3556 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3417 3556 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3420 3558 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3434 3572 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3437 3574 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3432 3574 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3432 3570 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1648 3438 3570 0 1 2 10 10 CrawlingHand SlayTower +spawn = 1612 3439 3562 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3434 3551 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3436 3562 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3441 3559 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3442 3546 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3446 3549 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3440 3543 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3436 3562 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3446 3536 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3450 3536 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3447 3539 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3437 3534 0 1 2 20 20 Banshee SlayTower +spawn = 1612 3445 3537 0 1 2 20 20 Banshee SlayTower +spawn = 1643 3438 3561 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3434 3561 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3436 3557 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3441 3560 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3432 3564 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3443 3572 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3446 3573 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3445 3566 1 1 8 20 20 InfernalMage SlayTower +spawn = 1643 3439 3571 1 1 8 20 20 InfernalMage SlayTower +spawn = 1618 3422 3574 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3419 3573 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3424 3573 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3410 3574 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3414 3573 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3410 3570 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3408 3574 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3421 3562 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3418 3566 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3423 3566 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3425 3560 1 1 8 75 50 BloodVeld SlayTower +spawn = 1618 3418 3560 1 1 8 75 50 BloodVeld SlayTower +spawn = 1604 3425 3551 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3422 3553 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3430 3550 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3434 3550 1 1 10 82 50 Spectre SlayTower +spawn = 1604 3439 3549 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3437 3545 1 1 10 82 50 Spectre SlayTower +spawn = 1604 3414 3547 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3412 3550 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3417 3545 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3423 3540 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3423 3544 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3426 3541 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3419 3540 1 1 10 82 50 Spectre +SlayTower +spawn = 1604 3418 3536 1 1 10 82 50 Spectre SlayTower +spawn = 1624 3216 9401 0 1 8 90 80 DustDevil +spawn = 1624 3227 9395 0 1 8 90 80 DustDevil +spawn = 1624 3245 9401 0 1 8 90 80 DustDevil +spawn = 1624 3265 9399 0 1 8 90 80 DustDevil +spawn = 1624 3260 9367 0 1 8 90 80 DustDevil +spawn = 1624 3248 9349 0 1 8 90 80 DustDevil +spawn = 1624 3235 9364 0 1 8 90 80 DustDevil +spawn = 1624 3238 9387 0 1 8 90 80 DustDevil +spawn = 1624 3223 9347 0 1 8 90 80 DustDevil +spawn = 1624 3213 9352 0 1 8 90 80 DustDevil +spawn = 1624 3214 9361 0 1 8 90 80 DustDevil +spawn = 1624 3222 9380 0 1 8 90 80 DustDevil +spawn = 1611 3434 3539 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3440 3539 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3444 3540 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3446 3535 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3448 3539 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3442 3548 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3444 3551 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3445 3547 2 1 12 85 50 GarGoyle SlayTower +spawn = 1611 3439 3547 2 1 12 85 50 GarGoyle SlayTower +spawn = 1613 3438 3563 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3442 3561 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3437 3558 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3446 3562 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3444 3568 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3439 3570 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3436 3568 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3435 3572 2 1 11 88 50 Nechryael SlayTower +spawn = 1613 3446 3572 2 1 11 88 50 Nechryael SlayTower +spawn = 1615 3425 3568 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3428 3565 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3425 3574 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3423 3572 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3427 3570 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3416 3567 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3413 3570 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3410 3574 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 1615 3413 3574 2 1 16 250 150 AbyssalDemon SlayTower +spawn = 2783 2903 9693 0 1 20 250 200 Dark Beast +spawn = 2783 2907 9690 0 1 20 250 200 Dark Beast +spawn = 2783 2903 9693 0 1 20 250 200 Dark Beast +spawn = 2783 2911 9691 0 1 20 250 200 Dark Beast +spawn = 2783 2916 9694 0 1 20 250 200 Dark Beast +spawn = 2783 2918 9681 0 1 20 250 200 Dark Beast +spawn = 2783 2916 9693 0 1 20 250 200 Dark Beast +spawn = 2783 2900 9688 0 1 20 250 200 Dark Beast +/*Traverly Dungeon*/ +spawn = 90 2884 9816 0 1 3 20 20 Skeleton TavDung +spawn = 90 2883 9814 0 1 3 20 20 Skeleton TavDung +spawn = 90 2884 9811 0 1 3 20 20 Skeleton TavDung +spawn = 90 2884 9823 0 1 3 20 20 Skeleton TavDung +spawn = 103 2898 9849 0 1 2 10 10 Ghost TavDung +spawn = 103 2903 9849 0 1 2 10 10 Ghost TavDung +spawn = 103 2908 9849 0 1 2 10 10 Ghost TavDung +spawn = 103 2919 9818 0 1 2 10 10 Ghost TavDung +spawn = 103 2924 9818 0 1 2 10 10 Ghost TavDung +spawn = 181 2931 9850 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2930 9848 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2932 9846 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2934 9846 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2937 9848 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2934 9849 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2931 9844 0 1 3 10 8 ChaosDruid TavDung +spawn = 181 2929 9845 0 1 3 10 8 ChaosDruid TavDung +spawn = 78 2912 9837 0 1 3 20 20 GiantBat TavDung +spawn = 78 2910 9841 0 1 3 20 20 GiantBat TavDung +spawn = 78 2908 9828 0 1 3 20 20 GiantBat TavDung +spawn = 78 2918 9829 0 1 3 20 20 GiantBat TavDung +spawn = 78 2923 9831 0 1 3 20 20 GiantBat TavDung +spawn = 178 3089 3230 0 1 5 20 11 BlackKnight +spawn = 178 2939 9811 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2938 9815 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2941 9805 0 1 5 20 11 BlackKnight TavDung +spawn = 127 2958 9781 0 1 7 30 15 MagicAxes TavDung +spawn = 127 2958 9785 0 1 7 30 15 MagicAxes TavDung +spawn = 127 2961 9779 0 1 7 30 15 MagicAxes TavDung +spawn = 127 2964 9780 0 1 7 30 15 MagicAxes TavDung +spawn = 82 2932 9809 0 1 8 40 40 Lessers TavDung +spawn = 82 2929 9805 0 1 8 40 40 Lessers TavDung +spawn = 82 2932 9779 0 1 8 40 40 Lessers TavDung +spawn = 82 2936 9794 0 1 8 40 40 Lessers TavDung +spawn = 82 2935 9789 0 1 8 40 40 Lessers TavDung +spawn = 119 2918 9758 0 1 6 20 15 ChaosDwarf TavDung +spawn = 119 2921 9758 0 1 6 20 15 ChaosDwarf TavDung +spawn = 119 2925 9761 0 1 6 20 15 ChaosDwarf TavDung +spawn = 119 2895 9769 0 1 6 20 15 ChaosDwarf TavDung +spawn = 119 2893 9771 0 1 6 20 15 ChaosDwarf TavDung +spawn = 119 2897 9767 0 1 6 20 15 ChaosDwarf TavDung +spawn = 52 2919 9802 0 1 6 30 15 BabyBlueDrag TavDung +spawn = 52 2919 9799 0 1 6 30 15 BabyBlueDrag TavDung +spawn = 52 2914 9802 0 1 6 30 15 BabyBlueDrag TavDung +spawn = 55 2900 9801 0 1 10 60 40 BlueDrag TavDung +spawn = 55 2895 9797 0 1 10 60 40 BlueDrag TavDung +spawn = 55 2900 9801 0 1 10 60 40 BlueDrag TavDung +spawn = 84 2862 9769 0 1 16 70 50 BlackDemon TavDung +spawn = 84 2859 9781 0 1 16 70 50 BlackDemon TavDung +spawn = 84 2870 9776 0 1 16 70 50 BlackDemon TavDung +spawn = 84 2870 9772 0 1 16 70 50 BlackDemon TavDung +spawn = 54 2835 9824 0 1 21 80 55 BlackDragon TavDung +spawn = 54 2840 9825 0 1 21 80 55 BlackDragon TavDung +spawn = 49 2857 9836 0 1 11 55 35 HellHound TavDung +spawn = 49 2860 9837 0 1 11 55 35 HellHound TavDung +spawn = 49 2856 9841 0 1 11 55 35 HellHound TavDung +spawn = 49 2856 9848 0 1 11 55 35 HellHound TavDung +spawn = 49 2853 9833 0 1 11 55 35 HellHound TavDung +/*Kalphite liar*/ +spawn = 1158 3478 9498 0 1 31 500 400 Kalphite Queen +spawn = 1157 3513 9493 2 1 16 200 150 Kalphite Guardian +spawn = 1157 3505 9496 2 1 16 200 150 Kalphite Gaurdian +spawn = 1157 3484 9491 0 1 16 200 150 Kalphite Guardian +spawn = 1157 3474 9491 0 1 16 200 150 Kalphite Guardian +spawn = 1157 3480 9510 0 1 16 200 150 Kalphite Guardian +spawn = 1157 3491 9512 0 1 16 200 150 Kalphite Guardian +spawn = 1157 3497 9495 0 1 16 200 150 Kalphite Guardian +spawn = 1154 3486 9501 2 1 8 100 75 Kalphite Soldier +spawn = 1154 3464 9508 2 1 8 100 75 Kalphite Soldier +spawn = 1154 3463 9483 2 1 8 100 75 Kalphite Soldier +spawn = 1154 3468 9479 2 1 8 100 75 Kalphite Soldier +spawn = 1154 3467 9489 2 1 8 100 75 Kalphite Soldier +spawn = 1154 3485 9476 2 1 8 100 75 Kalphite Soldier +spawn = 1156 3507 9519 2 1 3 50 30 Kalphite Worker +spawn = 1156 3508 9525 2 1 3 50 30 Kalphite Worker +spawn = 1156 3498 9521 2 1 3 50 30 Kalphite Worker +spawn = 1156 3470 9487 2 1 3 50 30 Kalphite Worker +spawn = 1156 3474 9524 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3471 9515 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3467 9502 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3489 9491 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3478 9485 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3500 9477 2 1 3 50 30 Kalphite +Worker +spawn = 1156 3508 9484 2 1 3 50 30 Kalphite +Worker +spawn = 456 3242 3210 0 5 0 0 0 1 Quest +spawn = 458 3234 3154 0 2 0 0 0 1 Quest +spawn = 92 3121 9569 0 3 3 20 20 1 Quest +spawn = 755 3098 3269 0 1 0 0 0 1 Quest +spawn = 731 3226 3401 0 5 0 0 0 1 Quest +spawn = 170 2465 3501 3 0 0 0 0 1 Gnome +spawn = 170 2850 3498 0 0 0 0 0 1 Gnome +spawn = 170 3318 3429 0 1 0 0 0 1 Gnome +spawn = 170 3282 3217 0 1 0 0 0 1 Gnome +spawn = 170 2894 2726 0 1 0 0 0 1 Gnome +spawn = 170 2547 2971 0 1 0 0 0 1 Gnome +spawn = 1456 2770 2774 0 0 20 100 100 1 Monk +spawn = 1456 2765 2779 0 0 20 100 100 1 Monk +spawn = 1456 2761 2778 0 0 20 100 100 1 Monk +spawn = 1456 2752 2782 0 0 20 100 100 1 Monk +spawn = 1456 2774 2787 0 0 20 100 100 1 Monk +spawn = 1456 2767 2784 0 0 20 100 100 1 Monk +spawn = 1456 2772 2781 0 0 20 100 100 1 Monk +spawn = 1456 2777 2790 0 0 20 100 100 1 Monk +spawn = 1456 2754 2778 0 0 20 100 100 1 Monk +spawn = 1456 2755 2774 0 0 20 100 100 1 Monk +spawn = 1456 2756 2789 0 0 20 100 100 1 Monk +spawn = 1456 2762 2793 0 0 20 100 100 1 Monk +spawn = 1459 2797 2791 0 1 20 100 100 1 Monk +spawn = 1459 2802 2785 0 1 20 100 100 1 Monk +spawn = 1459 2798 2780 0 1 20 100 100 1 Monk +spawn = 1459 2806 2787 1 1 20 100 100 1 Monk +spawn = 1459 2797 2791 1 1 20 100 100 1 Monk +spawn = 1459 2791 2790 1 1 20 100 100 1 Monk +spawn = 1459 2793 2783 1 1 20 100 100 1 Monk +spawn = 1456 2729 2761 0 0 20 100 100 1 Monk +spawn = 1456 2729 2758 0 0 20 100 100 1 Monk +spawn = 1456 2729 2755 0 0 20 100 100 1 Monk +spawn = 1456 2729 2752 0 0 20 100 100 1 Monk +spawn = 1456 2713 2761 0 0 20 100 100 1 Monk +spawn = 1456 2713 2758 0 0 20 100 100 1 Monk +spawn = 1456 2713 2755 0 0 20 100 100 1 Monk +spawn = 1456 2713 2752 0 0 20 100 100 1 Monk +spawn = 1465 2807 9204 0 1 15 80 80 1 Monk +spawn = 1467 2807 9201 0 1 15 80 80 1 Monk +spawn = 1465 2807 9198 0 1 15 80 80 1 Monk +spawn = 1467 2808 9195 0 1 15 80 80 1 Monk +spawn = 494 2807 3443 0 0 0 0 0 1 Bank +spawn = 494 2809 3443 0 0 0 0 0 1 Bank +spawn = 494 2810 3443 0 0 0 0 0 1 Bank +spawn = 494 2811 3443 0 0 0 0 0 1 Bank +spawn = 494 3096 3491 0 5 0 0 0 1 Bank +spawn = 494 3096 3489 0 5 0 0 0 1 Bank +spawn = 494 3096 3492 0 2 0 0 0 1 Bank +spawn = 494 3098 3492 0 2 0 0 0 1 Bank +spawn = 1473 2767 2793 0 1 2 10 10 1 Spid +spawn = 741 3209 3222 1 1 0 0 0 0 1 +//slayer masters +spawn = 70 2931 3536 0 1 0 0 0 1 1 +spawn = 1596 3509 3507 0 1 0 0 0 1 1 +spawn = 1597 3147 9914 0 1 0 0 0 1 1 +spawn = 1598 2448 4430 0 1 0 0 0 1 1 +spawn = 1599 2869 2982 1 1 0 0 0 1 1 +spawn = 836 3304 3123 0 1 0 0 0 1 Gate +spawn = 1041 3490 3500 0 3 0 0 0 0 Tan +spawn = 804 3273 3191 0 1 0 0 0 1 Tan +spawn = 804 2934 3285 1 1 0 0 0 1 Tan +spawn = 567 2382 4459 0 0 0 0 0 1 Fairy +spawn = 567 2382 4457 0 0 0 0 0 1 Fairy +spawn = 639 3209 3423 0 1 0 0 0 1 Romeo +spawn = 648 3222 3474 0 1 0 0 0 2 King Roald +spawn = 276 3196 3404 0 0 0 0 0 2 Winelda +spawn = 637 3152 3434 1 0 0 0 0 2 juliet +spawn = 2244 3232 3229 0 1 0 0 0 1 Guide +//ice mountain + black knights fortress +spawn = 178 3036 3507 0 1 4 20 20 Black Knight +spawn = 178 3035 3502 0 1 4 20 20 Black Knight +spawn = 178 3023 3499 0 1 4 20 20 Black Knight +spawn = 609 3017 3513 0 1 3 15 15 Fortress Guard +spawn = 609 3014 3512 0 1 3 15 15 Fortress Guard +spawn = 609 3011 3511 0 1 3 15 15 Fortress Guard +spawn = 609 3009 3515 0 1 3 15 15 Fortress Guard +spawn = 609 3014 3516 0 1 3 15 15 Fortress Guard +spawn = 178 3016 3516 0 1 4 20 20 Black Knight +spawn = 609 3019 3516 0 1 3 15 15 Fortress Guard +spawn = 178 3022 3515 0 1 4 20 20 Black Knight +spawn = 178 3025 3517 0 1 4 20 20 Black Knight +spawn = 178 3029 3515 0 1 4 20 20 Black Knight +spawn = 178 3027 3512 0 1 4 20 20 Black Knight +spawn = 612 3031 3506 0 1 0 0 0 0 Greldo +spawn = 611 3029 3509 0 1 0 0 0 0 Witch +spawn = 746 3009 3499 0 1 0 0 0 0 Oracle +spawn = 3406 3006 3505 0 1 2 10 10 Icefiend +spawn = 3406 3005 3495 0 1 2 10 10 Icefiend +spawn = 3406 3010 3490 0 1 2 10 10 Icefiend +spawn = 3406 3006 3486 0 1 2 10 10 Icefiend +spawn = 3406 3003 3488 0 1 2 10 10 Icefiend +spawn = 3406 3003 3484 0 1 2 10 10 Icefiend +spawn = 3406 3010 3489 0 1 2 10 10 Icefiend +spawn = 3406 3006 3480 0 1 2 10 10 Icefiend +spawn = 3406 3006 3475 0 1 2 10 10 Icefiend +spawn = 3406 3003 3470 0 1 2 10 10 Icefiend +spawn = 3406 3003 3475 0 1 2 10 10 Icefiend +spawn = 3406 2999 3469 0 1 2 10 10 Icefiend +spawn = 3406 3006 3467 0 1 2 10 10 Icefiend +spawn = 3406 3006 3470 0 1 2 10 10 Icefiend +spawn = 3406 3012 3474 0 1 2 10 10 Icefiend +spawn = 3268 3031 3466 0 1 0 0 0 0 Dwarf +spawn = 206 3031 3462 0 1 0 0 0 0 Guard +spawn = 3269 3031 3466 0 1 0 0 0 0 Dwarf +spawn = 3270 3022 3461 0 1 0 0 0 0 Dwarf +spawn = 206 3016 3458 0 1 0 0 0 0 Guard +spawn = 206 3019 3457 0 1 0 0 0 0 Guard +spawn = 3274 3011 3459 0 1 0 0 0 0 Dwarf +spawn = 206 3012 3457 0 1 0 0 0 0 Guard +spawn = 209 3010 3452 0 1 0 0 0 0 Nulodion +spawn = 1841 3021 3452 0 1 0 0 0 0 rolad +spawn = 3268 3016 3450 0 1 0 0 0 0 Dwarf +spawn = 3268 3018 3447 0 1 0 0 0 0 Dwarf +spawn = 3280 3018 3451 0 1 0 0 0 0 Engineering assistant +spawn = 3281 3012 3449 0 1 0 0 0 0 Engineering assistant +spawn = 2130 3014 3445 0 1 5 40 40 Black Guard +spawn = 2131 3010 3445 0 1 5 40 40 Black Guard +spawn = 2132 3017 3443 0 1 5 40 40 Black Guard +spawn = 2133 3006 3443 0 1 5 40 40 Black Guard +spawn = 3269 3022 3447 0 1 0 0 0 0 Dwarf +spawn = 3282 3008 3442 0 3 0 0 0 0 Engineer +spawn = 118 3010 3435 0 1 2 15 15 Dwarf +spawn = 118 3021 3436 0 1 2 15 15 Dwarf +spawn = 118 3033 3435 0 1 2 15 15 Dwarf +spawn = 118 3026 3436 0 1 2 10 10 Dwarf +spawn = 3284 3024 3435 0 1 0 0 0 0 Squirrel +spawn = 3285 3029 3437 0 1 0 0 0 0 Squirrel +spawn = 3288 3039 3446 0 1 0 0 0 0 Racoon +spawn = 3287 3043 3439 0 1 0 0 0 0 Racoon +spawn = 3286 3048 3436 0 1 0 0 0 0 Racoon +spawn = 3286 3052 3431 0 1 0 0 0 0 Racoon +spawn = 3287 3053 3423 0 1 0 0 0 0 Racoon +spawn = 3285 3050 3418 0 1 0 0 0 0 Squirrel +spawn = 3286 3050 3415 0 1 0 0 0 0 Squirrel +spawn = 3285 3040 3421 0 1 0 0 0 0 Squirrel +spawn = 3286 3066 3441 0 1 0 0 0 0 Racoon +//goblin village area +spawn = 105 2972 3493 0 1 4 15 15 Bear +spawn = 105 2975 3491 0 1 4 15 15 Bear +spawn = 298 2955 3481 0 1 2 5 5 Goblin +spawn = 298 2954 3486 0 1 2 5 5 Goblin +spawn = 299 2957 3487 0 1 2 5 5 Goblin +spawn = 298 2954 3490 0 1 2 5 5 Goblin +spawn = 299 2957 3492 0 1 2 5 5 Goblin +spawn = 299 2955 3480 0 1 2 5 5 Goblin +spawn = 299 2958 3495 0 1 2 5 5 Goblin +spawn = 299 2955 3495 0 1 2 5 5 Goblin +spawn = 298 2955 3499 0 1 2 5 5 Goblin +spawn = 298 2958 3500 0 1 2 5 5 Goblin +spawn = 299 2953 3501 0 1 2 5 5 Goblin +spawn = 299 2956 3505 0 1 2 5 5 Goblin +spawn = 298 2955 3501 1 0 2 5 5 Goblin +spawn = 298 2952 3509 0 1 2 5 5 Goblin +spawn = 299 2957 3508 0 1 2 5 5 Goblin +spawn = 299 2963 3509 0 1 2 5 5 Goblin +spawn = 298 2954 3505 1 0 2 5 5 Goblin +spawn = 298 2958 3502 0 1 2 5 5 Goblin +spawn = 299 2959 3511 0 1 2 5 5 Goblin +spawn = 298 2956 3501 1 0 2 5 5 Goblin +spawn = 299 2958 3501 0 1 2 5 5 Goblin +spawn = 296 2960 3511 0 1 2 5 5 General Bentnoze +spawn = 297 2954 3511 0 1 2 5 5 General Wartface +spawn = 189 2931 3515 0 1 0 0 0 0 Monk of Zamorak +spawn = 189 2935 3515 0 1 0 0 0 0 Monk of Zamorak +spawn = 189 2939 3515 0 1 0 0 0 0 Monk of Zamorak +spawn = 189 2934 3515 0 1 0 0 0 0 Monk of Zamorak +spawn = 188 2938 3516 0 1 0 0 0 0 Monk of Zamorak +spawn = 188 2940 3515 0 1 0 0 0 0 Monk of Zamorak +spawn = 189 2935 3517 0 1 0 0 0 0 Monk of Zamorak +//falador farm +spawn = 2316 3018 3301 0 1 0 0 0 Pig +spawn = 2317 3017 3307 0 1 0 0 0 Pig +spawn = 2317 3019 3309 0 1 0 0 0 Pig +spawn = 45 3016 3285 0 1 0 0 0 Duck +spawn = 45 3018 3286 0 1 0 0 0 Duck +spawn = 45 3016 3284 0 1 0 0 0 Duck +spawn = 2235 3023 3288 0 1 2 10 10 Farmer +spawn = 2311 3035 3295 0 1 0 0 0 1 SheepDog +spawn = 81 3036 3301 0 1 2 5 2 1 Cow +spawn = 81 3038 3306 0 1 2 5 2 1 Cow +spawn = 81 3041 3310 0 1 2 5 2 1 Cow +spawn = 81 3027 3307 0 1 2 5 2 1 Cow +spawn = 81 3027 3300 0 1 2 5 2 1 Cow +spawn = 81 3031 3301 0 1 2 5 2 1 Cow +//wizard tower +spawn = 13 3112 3160 0 1 3 10 10 0 Wizard +spawn = 13 3110 3156 0 1 3 10 10 0 Wizard +spawn = 13 3109 3158 0 1 3 10 10 0 Wizard +spawn = 13 3106 3161 0 1 3 10 10 0 Wizard +spawn = 1263 3106 3162 1 1 0 0 0 0 Wizard +spawn = 13 3108 3160 1 1 5 10 10 0 Wizard +spawn = 13 3107 3156 1 1 5 10 10 0 Wizard +spawn = 13 3112 3162 1 5 5 10 10 0 Traiborn +spawn = 706 3104 3163 2 1 0 0 0 0 Mizgog +spawn = 707 3111 3161 2 1 0 0 0 0 Grayzag +spawn = 752 3110 3157 2 1 0 0 0 0 Lesser Demon +spawn = 300 3105 9570 0 1 0 0 0 0 Sedridor +//yanille +spawn = 494 2615 3091 0 5 0 0 0 Banker +spawn = 494 2615 3092 0 5 0 0 0 Banker +spawn = 494 2615 3094 0 5 0 0 0 Banker +spawn = 114 2497 3088 0 1 7 50 50 Ogre +spawn = 115 2496 3092 0 1 7 50 50 Ogre +spawn = 114 2500 3094 0 1 7 50 50 Ogre +spawn = 115 2499 3089 0 1 7 50 50 Ogre +spawn = 115 2511 3089 0 1 7 50 50 Ogre +spawn = 854 2511 3089 0 1 4 4 0 Grew +spawn = 114 2512 3086 0 1 7 50 50 Ogre +spawn = 115 2514 3081 0 1 7 50 50 Ogre +spawn = 114 2511 3080 0 1 7 50 50 Ogre +spawn = 878 2535 3095 0 1 4 4 0 Radick +spawn = 877 2537 3091 0 1 4 4 0 Tower Guard +spawn = 877 2548 3114 0 1 4 4 0 Tower Guard +spawn = 877 2559 3115 0 1 4 4 0 Tower Guard +spawn = 877 2544 3115 0 1 4 4 0 Tower Guard +spawn = 87 2549 3121 0 1 4 4 0 Tower Guard +spawn = 35 2541 3096 0 1 4 4 0 Soldier +spawn = 35 2542 3102 0 1 4 4 0 Soldier +spawn = 35 2546 3087 0 1 4 4 0 Soldier +spawn = 35 2543 3087 0 1 4 4 0 Soldier +spawn = 35 2545 3091 0 1 4 4 0 Soldier +spawn = 35 2550 3091 0 1 4 4 0 Soldier +spawn = 3109 2551 3077 0 1 4 4 0 Guard Captain +spawn = 739 2554 3077 0 1 4 4 0 Bartender +spawn = 3108 2551 3099 0 1 4 4 0 Bert +spawn = 708 2566 3103 0 1 1 2 2 Imp +spawn = 3021 2572 3106 0 1 4 20 20 Tool Leprechaun +spawn = 2332 2578 3102 0 1 4 20 20 Salena +spawn = 3 2595 3105 0 1 2 5 5 Man +spawn = 1 2601 3103 0 1 2 5 5 Man +spawn = 2793 2606 3101 0 1 0 0 0 Tramp +spawn = 462 2594 3089 0 1 0 0 0 Wizard Distentor +spawn = 13 2589 3085 0 1 0 0 0 Wizard +spawn = 13 2589 3092 0 1 0 0 0 Wizard +spawn = 13 2590 3086 0 1 0 0 0 Wizard +spawn = 2059 2593 3091 1 1 0 0 0 Wizard +spawn = 13 2593 3084 1 1 0 0 0 Wizard +spawn = 13 2587 3090 1 1 0 0 0 Wizard +spawn = 13 2587 3085 1 1 0 0 0 Wizard +spawn = 13 2590 3092 2 1 0 0 0 Wizard +spawn = 13 2588 3086 2 1 0 0 0 Wizard +spawn = 13 2594 3087 2 1 0 0 0 Wizard +spawn = 708 2541 3126 0 1 1 2 2 Imp +spawn = 708 2539 3133 0 1 1 2 2 Imp +spawn = 34 2546 3116 1 1 0 0 0 Watchman +spawn = 34 2545 3112 1 1 0 0 0 Watchman +spawn = 34 2549 3116 1 1 0 0 0 Watchman +spawn = 34 2547 3112 1 1 0 0 0 Watchman +spawn = 872 2547 3112 2 1 0 0 0 Watchtower Wizard +spawn = 35 2537 3101 1 1 4 4 0 Soldier +spawn = 35 2534 3100 1 1 4 4 0 Soldier +spawn = 35 2534 3095 1 1 4 4 0 Soldier +spawn = 35 2534 3091 1 1 4 4 0 Soldier +spawn = 35 2534 3087 1 1 4 4 0 Soldier +spawn = 35 2535 3083 1 1 4 4 0 Soldier +spawn = 35 2538 3080 1 1 4 4 0 Soldier +spawn = 35 2542 3074 1 1 4 4 0 Soldier +spawn = 35 2554 3073 1 1 4 4 0 Soldier +spawn = 35 2563 3073 1 1 4 4 0 Soldier +spawn = 35 2593 3074 1 1 4 4 0 Soldier +spawn = 35 2606 3074 1 1 4 4 0 Soldier +spawn = 35 2618 3074 1 1 4 4 0 Soldier +spawn = 35 2621 3083 1 1 4 4 0 Soldier +spawn = 35 2620 3093 1 1 4 4 0 Soldier +spawn = 35 2617 3101 1 1 4 4 0 Soldier +spawn = 35 2610 3108 1 1 4 4 0 Soldier +spawn = 35 2592 3109 1 1 4 4 0 Soldier +spawn = 35 2568 3109 1 1 4 4 0 Soldier +spawn = 35 2549 3109 1 1 4 4 0 Soldier +spawn = 81 2583 3119 1 1 4 4 0 Cow +spawn = 81 2588 3120 1 1 4 4 0 Cow +spawn = 81 2585 3126 1 1 4 4 0 Cow +spawn = 81 2580 3124 1 1 4 4 0 Cow +spawn = 81 2602 3117 1 1 4 4 0 Cow +spawn = 708 2528 3135 0 1 1 2 2 Imp +spawn = 708 2523 3144 0 1 1 2 2 Imp +//camelot +spawn = 494 2729 3495 0 0 0 0 0 Banker +spawn = 494 2728 3495 0 0 0 0 0 Banker +spawn = 494 2727 3495 0 0 0 0 0 Banker +spawn = 494 2724 3495 0 0 0 0 0 Banker +spawn = 494 2722 3495 0 0 0 0 0 Banker +spawn = 494 2721 3495 0 0 0 0 0 Banker +spawn = 659 2736 3469 0 1 0 0 0 Party Pete +//white wolf mountain +spawn = 96 2849 3483 0 1 0 0 0 White wolf(Small) +spawn = 96 2847 3481 0 1 0 0 0 White wolf(Small) +spawn = 95 2849 3495 0 1 0 0 0 Wolf +spawn = 95 2849 3503 0 1 0 0 0 Wolf +spawn = 95 2837 3496 0 1 0 0 0 Wolf +spawn = 95 2841 3497 0 1 0 0 0 Wolf +spawn = 141 2846 3497 0 1 8 80 80 1 1 +spawn = 95 2838 3505 0 1 0 0 0 Wolf +spawn = 95 2832 3512 0 1 0 0 0 Wolf +spawn = 95 2831 3500 0 1 0 0 0 Wolf +spawn = 95 2832 3507 0 1 0 0 0 Wolf +spawn = 96 2847 3481 0 1 0 0 0 White wolf(Small) +spawn = 96 2832 3513 0 1 0 0 0 White wolf(Small) +spawn = 95 2842 3507 0 1 0 0 0 Wolf +spawn = 125 2843 3519 0 1 0 0 0 Ice_Warrior +spawn = 125 2847 3517 0 1 0 0 0 Ice_Warrior +spawn = 96 2856 3509 0 1 0 0 0 White wolf(Small) +spawn = 96 2861 3500 0 1 0 0 0 White wolf(Small) +spawn = 96 2861 3492 0 1 0 0 0 White wolf(Small) +spawn = 96 2860 3465 0 1 0 0 0 White wolf(Small) +spawn = 96 2869 3438 0 1 0 0 0 White wolf(Small) +spawn = 96 2873 3445 0 1 0 0 0 White wolf(Small) +spawn = 96 2863 3507 0 1 0 0 0 White wolf(Small) +spawn = 96 2867 3506 0 1 0 0 0 White wolf(Small) +//duel arena +spawn = 957 3314 3241 0 1 0 0 0 Mubaiz +spawn = 964 3330 3245 0 1 0 0 0 Ima +spawn = 967 3330 3220 0 1 0 0 0 Dalal +spawn = 966 3361 3217 0 1 0 0 0 Jadid +spawn = 969 3369 3242 0 1 0 0 0 Jeed +spawn = 965 3360 3237 0 1 0 0 0 Sebeil +spawn = 968 3346 3260 0 1 0 0 0 Afrah +spawn = 959 3363 3275 0 1 0 0 0 A'abla +spawn = 962 3357 3276 0 1 0 0 0 Jaarah +spawn = 960 3369 3276 0 1 0 0 0 Sabreen +spawn = 963 3371 3274 0 1 0 0 0 Zahwa +spawn = 961 3375 3274 0 1 0 0 0 Tafani +spawn = 958 3382 3269 0 1 0 0 0 Fadli +spawn = 1008 3376 3284 0 1 0 0 0 Hamid +//khazard camp +spawn = 253 2612 3187 0 1 10 60 210 Khazard Guard +spawn = 254 2607 3185 0 1 10 60 210 Khazard Guard +spawn = 253 2607 3182 0 1 10 60 210 Khazard Guard +spawn = 255 2607 3181 0 1 10 60 210 Khazard Guard +spawn = 256 2600 3190 0 1 10 60 210 Khazard Guard +spawn = 254 2590 3190 0 1 10 60 210 Khazard Guard +spawn = 254 2595 3186 0 1 10 60 210 Khazard Guard +spawn = 253 2590 3184 0 1 10 60 210 Khazard Guard +spawn = 254 2594 3181 0 1 10 60 210 Khazard Guard +spawn = 254 2597 3181 0 1 10 60 210 Khazard Guard +spawn = 255 2597 3176 0 1 10 60 210 Khazard Guard +spawn = 253 2601 3177 0 1 10 60 210 Khazard Guard +spawn = 254 2597 3175 0 1 10 60 210 Khazard Guard +spawn = 256 2609 3171 0 1 10 60 210 Khazard Guard +spawn = 270 2609 3166 0 1 10 60 210 Khazard orge +spawn = 269 2609 3163 0 1 10 60 210 Bouncer +spawn = 269 2609 3160 0 1 10 60 210 Khazard Scorpion +spawn = 262 2615 3160 0 1 10 60 210 Fight Slave +spawn = 262 2615 3164 0 1 10 60 210 Fight Slave +spawn = 265 2615 3168 0 1 10 60 210 Jeremy Servil +spawn = 254 2619 3168 0 1 10 60 210 Khazard Guard +spawn = 253 2617 3157 0 1 10 60 210 Khazard Guard +spawn = 254 2614 3150 0 1 10 60 210 Khazard Guard +spawn = 253 2617 3150 0 1 10 60 210 Khazard Guard +spawn = 255 2608 3148 0 1 10 60 210 Khazard Guard +spawn = 256 2605 3153 0 1 10 60 210 Khazard Guard +spawn = 262 2594 3143 0 1 10 60 210 Fight Slave +spawn = 260 2587 3143 0 1 10 60 210 Kevin +spawn = 261 2590 3143 0 1 10 60 210 Joe +spawn = 263 2600 3143 0 1 10 60 210 Joe +spawn = 254 2584 3149 0 1 10 60 210 Khazard Guard +spawn = 253 2597 3147 0 1 10 60 210 Khazard Guard +spawn = 253 2580 3163 0 1 10 60 210 Khazard Guard +spawn = 255 2577 3167 0 1 10 60 210 Khazard Guard +spawn = 254 2580 3174 0 1 10 60 210 +//gnome village +spawn = 162 2471 3427 0 1 0 0 0 gnome trainer +spawn = 162 2476 3423 1 1 0 0 0 gnome trainer +spawn = 162 2488 3421 2 1 0 0 0 gnome trainer +spawn = 162 2481 3424 0 1 0 0 0 gnome trainer +spawn = 162 2489 3429 0 1 0 0 0 gnome trainer +spawn = 162 2482 3439 0 1 0 0 0 gnome trainer +spawn = 162 2485 3418 0 1 0 0 0 gnome trainer +spawn = 479 2549 3230 0 1 0 0 0 GNOME TROOP +spawn = 480 2551 3227 0 1 0 0 0 GNOME TROOP +spawn = 479 2547 3226 0 1 0 0 0 GNOME TROOP +spawn = 480 2545 3224 0 1 0 0 0 GNOME TROOP +spawn = 480 2542 3223 0 1 0 0 0 GNOME TROOP +spawn = 479 2541 3222 0 1 0 0 0 GNOME TROOP +spawn = 479 2538 3222 0 1 0 0 0 GNOME TROOP +spawn = 480 2538 3220 0 1 0 0 0 GNOME TROOP +spawn = 479 2540 3217 0 1 0 0 0 GNOME TROOP +spawn = 480 2544 3219 0 1 0 0 0 GNOME TROOP +spawn = 480 2547 3217 0 1 0 0 0 GNOME TROOP +spawn = 479 2549 3216 0 1 0 0 0 GNOME TROOP +spawn = 479 2543 3216 0 1 0 0 0 GNOME TROOP +spawn = 670 2466 3496 0 1 0 0 0 King Narnode Shareen +spawn = 1407 2482 3490 1 1 0 0 0 Daero +spawn = 166 2450 3480 1 2 0 0 0 Gnome Banker +spawn = 166 2449 3480 1 2 0 0 0 Gnome Banker +spawn = 166 2448 3480 1 2 0 0 0 Gnome Banker +spawn = 166 2440 3487 1 4 0 0 0 Gnome Banker +spawn = 166 2440 3488 1 4 0 0 0 Gnome Banker +spawn = 850 2449 3511 1 3 0 0 0 Aluft Gianne Senior +spawn = 851 2441 3502 1 1 0 0 0 Gnome Waiters +spawn = 851 2448 3502 1 1 0 0 0 Gnome Waiters +spawn = 849 2479 3488 1 1 0 0 0 Barman +spawn = 849 2484 3488 1 1 0 0 0 Barman +spawn = 603 2491 3488 1 1 0 0 0 Heckel Funch +spawn = 601 2482 3510 1 1 0 0 0 Rometti +spawn = 163 2464 3494 1 1 0 0 0 Gnome Guard +spawn = 163 2467 3496 1 1 0 0 0 Gnome Guard +spawn = 164 2464 3495 1 1 0 0 0 Gnome Guard +spawn = 66 2457 3488 1 1 0 0 0 Gnome +spawn = 168 2457 3492 1 1 0 0 0 Gnome Woman +spawn = 159 2449 3490 1 1 0 0 0 Gnome Child +spawn = 67 2449 3487 1 1 0 0 0 Gnome +spawn = 68 2450 3488 1 1 0 0 0 Gnome +spawn = 169 2449 3490 1 1 0 0 0 Gnome Woman +spawn = 169 2450 3495 1 1 0 0 0 Gnome Woman +spawn = 160 2442 3502 1 1 0 0 0 Gnome Child +spawn = 68 2448 3509 1 1 0 0 0 Gnome +spawn = 168 2449 3500 1 1 0 0 0 Gnome Woman +spawn = 161 2457 3497 1 1 0 0 0 Gnome Child +spawn = 67 2457 3494 1 1 0 0 0 Gnome +spawn = 68 2470 3495 1 1 0 0 0 Gnome +spawn = 159 2474 3488 1 1 0 0 0 Gnome Child +spawn = 168 2474 3494 1 1 0 0 0 Gnome Woman +spawn = 159 2481 3503 1 1 0 0 0 Gnome Child +spawn = 67 2482 3503 1 1 0 0 0 Gnome +spawn = 66 2483 3500 1 1 0 0 0 Gnome +spawn = 68 2492 3503 1 1 0 0 0 Gnome +spawn = 168 2483 3494 1 1 0 0 0 Gnome Woman +spawn = 169 2481 3479 1 1 0 0 0 Gnome Woman +spawn = 161 2492 3488 1 1 0 0 0 Gnome Child +spawn = 602 2467 3488 2 1 0 0 0 Gulluck +spawn = 169 2465 3488 2 1 0 0 0 Gnome Woman +spawn = 164 2460 3487 2 1 0 0 0 Gnome Guard +spawn = 164 2467 3480 2 1 0 0 0 Gnome Guard +spawn = 163 2463 3480 2 1 0 0 0 Gnome Guard +spawn = 68 2468 3488 2 1 0 0 0 Gnome +spawn = 163 2483 3496 2 1 0 0 0 Gnome Guard +spawn = 164 2483 3498 2 1 0 0 0 Gnome Guard +spawn = 164 2482 3494 2 1 0 0 0 Gnome Guard +spawn = 168 2483 3495 2 1 0 0 0 Gnome Woman +spawn = 164 2464 3497 2 1 0 0 0 Gnome Guard +spawn = 168 2448 3496 2 1 0 0 0 Gnome Woman +spawn = 163 2448 3497 2 1 0 0 0 Gnome Guard +spawn = 164 2449 3497 2 1 0 0 0 Gnome Guard +spawn = 479 2464 3503 2 1 0 0 0 Gnome Troop +spawn = 479 2464 3505 2 1 0 0 0 Gnome Troop +spawn = 169 2469 3503 2 1 0 0 0 Gnome Woman +spawn = 163 2467 3510 2 1 0 0 0 Gnome Guard +spawn = 164 2464 3509 2 1 0 0 0 Gnome Guard +spawn = 163 2459 3382 0 1 0 0 0 Gnome Guard +spawn = 163 2462 3382 0 1 0 0 0 Gnome Guard +spawn = 676 2461 3380 0 1 0 0 0 Femi +spawn = 168 2475 3397 1 1 0 0 0 Gnome Woman +spawn = 168 2484 3400 1 1 0 0 0 Gnome Woman +spawn = 168 2487 3410 1 1 0 0 0 Gnome Woman +spawn = 168 2481 3405 1 1 0 0 0 Gnome Woman +spawn = 671 2479 3463 1 1 0 0 0 Glough +spawn = 166 2448 3424 1 5 0 0 0 Gnome Banker +spawn = 166 2448 3427 1 5 0 0 0 Gnome Banker +spawn = 166 2443 3424 1 4 0 0 0 Gnome Banker +spawn = 166 2443 3425 1 4 0 0 0 Gnome Banker Khazard Guard +spawn = 254 2579 3176 0 1 10 60 210 Khazard Guard +spawn = 268 2585 3175 0 1 10 60 210 Local +spawn = 641 3211 3401 0 1 0 0 0 1 +spawn = 43 3053 3518 0 1 0 0 0 Sheep +spawn = 43 3056 3517 0 1 0 0 0 Sheep +spawn = 43 3053 3514 0 1 0 0 0 Sheep +spawn = 43 3053 3517 0 1 0 0 0 Sheep +spawn = 43 3197 3261 0 1 0 0 0 Sheep +spawn = 43 3202 3261 0 1 0 0 0 Sheep +spawn = 43 3202 3261 0 1 0 0 0 Sheep +spawn = 43 3209 3260 0 1 0 0 0 Sheep +spawn = 43 3208 3270 0 1 0 0 0 Sheep +spawn = 43 3200 3271 0 1 0 0 0 Sheep +spawn = 43 2925 3324 0 1 0 0 0 Sheep +spawn = 43 2924 3322 0 1 0 0 0 Sheep +spawn = 42 2926 3321 0 1 0 0 0 Sheep +spawn = 43 2924 3318 0 1 0 0 0 Sheep +spawn = 780 3150 3411 0 0 0 0 0 1 +spawn = 781 3222 3438 0 1 0 0 0 1 +spawn = 783 3222 3436 0 1 0 0 0 1 +spawn = 759 3306 3512 1 4 0 0 0 1 +spawn = 379 2939 3153 0 1 0 0 0 1 +spawn = 758 3189 3273 0 1 0 0 0 1 +spawn = 494 2852 2955 0 0 0 0 0 1 +spawn = 500 2880 2952 0 1 0 0 0 1 +spawn = 199 3078 3438 0 1 4 20 20 1 +spawn = 2458 2600 4775 0 1 0 0 0 Freaky +spawn = 2459 2604 4771 0 1 0 0 0 Pheasant +spawn = 2459 2604 4777 0 1 0 0 0 Pheasant +spawn = 2459 2597 4778 0 1 0 0 0 Pheasant +spawn = 2459 2597 4775 0 1 0 0 0 Pheasant +spawn = 2459 2599 4772 0 1 0 0 0 Pheasant +spawn = 2460 2603 4774 0 1 0 0 0 Pheasant +spawn = 2460 2606 4774 0 1 0 0 0 Pheasant +spawn = 2460 2600 4777 0 1 0 0 0 Pheasant +spawn = 2460 2601 4772 0 1 0 0 0 Pheasant +spawn = 2460 2603 4776 0 1 0 0 0 Pheasant +spawn = 2461 2604 4775 0 1 0 0 0 Pheasant +spawn = 2461 2603 4773 0 1 0 0 0 Pheasant +spawn = 2461 2597 4777 0 1 0 0 0 Pheasant +spawn = 2461 2597 4773 0 1 0 0 0 Pheasant +spawn = 2461 2596 4775 0 1 0 0 0 Pheasant +spawn = 2462 2607 4773 0 1 0 0 0 Pheasant +spawn = 2462 2605 4770 0 1 0 0 0 Pheasant +spawn = 2462 2603 4777 0 1 0 0 0 Pheasant +spawn = 2462 2609 4777 0 1 0 0 0 Pheasant +spawn = 2462 2608 4775 0 1 0 0 0 PheasantSlave +spawn = 1770 2572 3388 0 1 2 10 10 Goblin +spawn = 1770 2568 3387 0 1 2 10 10 Goblin +spawn = 1770 3148 3222 0 1 2 10 10 Goblin +spawn = 1770 3137 3229 0 1 2 10 10 Goblin +spawn = 1770 3149 3234 0 1 2 10 10 Goblin +spawn = 1771 3153 3227 0 1 2 10 10 Goblin +spawn = 1771 3162 3227 0 1 2 10 10 Goblin +spawn = 1771 3176 3228 0 1 2 10 10 Goblin +spawn = 1771 3178 3223 0 1 2 10 10 Goblin +spawn = 1772 3178 3126 0 1 2 10 10 Goblin +spawn = 1772 3134 3424 0 1 2 10 10 Goblin +spawn = 1772 3177 3241 0 1 2 10 10 Goblin +spawn = 1772 3127 3434 0 1 2 10 10 Goblin +spawn = 1772 3176 3244 0 1 2 10 10 Goblin +spawn = 1773 3172 3240 0 1 2 10 10 Goblin +spawn = 1773 3168 3244 0 1 2 10 10 Goblin +spawn = 1773 3165 3248 0 1 2 10 10 Goblin +spawn = 1773 3176 3244 0 1 2 10 10 Goblin +spawn = 1774 3180 3236 0 1 2 10 10 Goblin +spawn = 1774 3178 3250 0 1 2 10 10 Goblin +spawn = 1774 3182 3253 0 1 2 10 10 Goblin +spawn = 1774 3191 3246 0 1 2 10 10 Goblin +spawn = 1775 3201 3238 0 1 2 10 10 Goblin +spawn = 1775 3197 3230 0 1 2 10 10 Goblin +spawn = 1775 3196 3223 0 1 2 10 10 Goblin +spawn = 1776 3194 3207 0 1 2 10 10 Goblin +spawn = 1776 3184 3212 0 1 2 10 10 Goblin +spawn = 1776 3185 3217 0 1 2 10 10 Goblin +spawn = 1776 3120 3407 0 1 2 10 10 Goblin +spawn = 1776 3177 3227 0 1 2 10 10 Goblin +//dagganoth lair +spawn = 2455 2445 10148 0 1 19 70 45 Dagannoth +spawn = 2455 2457 10134 0 1 19 70 45 Dagannoth +spawn = 2455 2455 10146 0 1 19 70 45 Dagannoth +spawn = 2455 2452 10161 0 1 19 70 45 Dagannoth +spawn = 2455 2465 10160 0 1 19 70 45 Dagannoth +spawn = 2455 2473 10152 0 1 19 70 45 Dagannoth +spawn = 2455 2474 10143 0 1 19 70 45 Dagannoth +spawn = 2455 2469 10136 0 1 19 70 45 Dagannoth +spawn = 2455 2487 10128 0 1 19 70 45 Dagannoth +spawn = 2455 2486 10140 0 1 19 70 45 Dagannoth +spawn = 2455 2484 10151 0 1 19 70 45 Dagannoth +spawn = 2455 1813 4406 2 1 19 70 45 Dagannoth +spawn = 2455 1817 4404 2 1 19 70 45 Dagannoth +spawn = 2455 1824 4388 2 1 19 70 45 Dagannoth +spawn = 2455 1817 4392 2 1 19 70 45 Dagannoth +spawn = 2455 1831 4360 1 1 19 70 45 Dagannoth +spawn = 2455 1843 4359 1 1 19 70 45 Dagannoth +spawn = 2455 1857 4360 1 1 19 70 45 Dagannoth +spawn = 2455 1865 4368 1 1 19 70 45 Dagannoth +spawn = 2455 1864 4378 2 1 19 70 45 Dagannoth +spawn = 2455 1864 4383 2 1 19 70 45 Dagannoth +spawn = 2455 1864 4392 1 1 19 70 45 Dagannoth +spawn = 2455 1865 4403 1 1 19 70 45 Dagannoth +spawn = 2455 1872 4410 1 1 19 70 45 Dagannoth +spawn = 2455 1888 4410 1 1 19 70 45 Dagannoth +spawn = 2455 1889 4393 0 1 19 70 45 Dagannoth +spawn = 2455 1885 4377 0 1 19 70 45 Dagannoth +spawn = 2455 1887 4363 0 1 19 70 45 Dagannoth +spawn = 2455 1897 4368 0 1 19 70 45 Dagannoth +spawn = 2456 2494 10131 0 1 19 70 45 Dagannoth +spawn = 2456 2499 10125 0 1 19 70 45 Dagannoth +spawn = 2456 2503 10127 0 1 19 70 45 Dagannoth +spawn = 2456 2510 10125 0 1 19 70 45 Dagannoth +spawn = 2456 2517 10128 0 1 19 70 45 Dagannoth +spawn = 2456 2530 10123 0 1 19 70 45 Dagannoth +spawn = 2456 2535 10128 0 1 19 70 45 Dagannoth +spawn = 2456 2524 10124 0 1 19 70 45 Dagannoth +spawn = 2456 2495 10147 0 1 19 70 45 Dagannoth +spawn = 2456 1812 4402 2 1 19 70 45 Dagannoth +spawn = 2456 1828 4386 2 1 19 70 45 Dagannoth +spawn = 2456 1824 4392 2 1 19 70 45 Dagannoth +spawn = 2456 1837 4359 1 1 19 70 45 Dagannoth +spawn = 2456 1850 4360 1 1 19 70 45 Dagannoth +spawn = 2456 1862 4362 1 1 19 70 45 Dagannoth +spawn = 2456 1864 4398 1 1 19 70 45 Dagannoth +spawn = 2456 1867 4409 1 1 19 70 45 Dagannoth +spawn = 2456 1880 4411 1 1 19 70 45 Dagannoth +spawn = 2456 1882 4382 0 1 19 70 45 Dagannoth +spawn = 2456 1890 4368 0 1 19 70 45 Dagannoth +spawn = 2456 1904 4364 0 1 19 70 45 Dagannoth +spawn = 2889 2495 10164 0 1 19 70 45 Rock Lobster +spawn = 2889 2500 10165 0 1 19 70 45 Rock Lobster +spawn = 2889 2503 10161 0 1 19 70 45 Rock Lobster +spawn = 2889 2506 10165 0 1 19 70 45 Rock Lobster +spawn = 2889 2511 10161 0 1 19 70 45 Rock Lobster +spawn = 2889 2515 10163 0 1 19 70 45 Rock Lobster +spawn = 2889 2522 10165 0 1 19 70 45 Rock Lobster +spawn = 2889 2527 10162 0 1 19 70 45 Rock Lobster +spawn = 2889 2531 10165 0 1 19 70 45 Rock Lobster +spawn = 2889 2536 10160 0 1 19 70 45 Rock Lobster +spawn = 2889 2542 10164 0 1 19 70 45 Rock Lobster +spawn = 2889 1829 4404 3 1 19 70 45 Rock Lobster +spawn = 2889 1831 4407 3 1 19 70 45 Rock Lobster +spawn = 2889 1836 4404 3 1 19 70 45 Rock Lobster +spawn = 2889 1837 4397 3 1 19 70 45 Rock Lobster +spawn = 2889 1844 4404 3 1 19 70 45 Rock Lobster +spawn = 2889 1805 4365 2 1 19 70 45 Rock Lobster +spawn = 2889 1808 4368 2 1 19 70 45 Rock Lobster +spawn = 2889 1812 4364 2 1 19 70 45 Rock Lobster +spawn = 2889 1817 4367 2 1 19 70 45 Rock Lobster +spawn = 2889 1820 4362 2 1 19 70 45 Rock Lobster +spawn = 2889 1887 4408 0 1 19 70 45 Rock Lobster +spawn = 2889 1893 4410 0 1 19 70 45 Rock Lobster +spawn = 2889 1899 4409 0 1 19 70 45 Rock Lobster +spawn = 2889 1904 4408 0 1 19 70 45 Rock Lobster +spawn = 2889 1907 4404 0 1 19 70 45 Rock Lobster +spawn = 2889 1902 4402 0 1 19 70 45 Rock Lobster +spawn = 2889 1898 4399 0 1 19 70 45 Rock Lobster +spawn = 2889 1901 4372 0 1 19 70 45 Rock Lobster +spawn = 2889 1948 4358 0 1 19 70 45 Rock Lobster +spawn = 2457 2518 10141 0 1 19 70 45 Wallasalki +spawn = 2457 2512 10141 0 1 19 70 45 Wallasalki +spawn = 2457 2506 10142 0 1 19 70 45 Wallasalki +spawn = 2457 2501 10144 0 1 19 70 45 Wallasalki +spawn = 2457 2499 10149 0 1 19 70 45 Wallasalki +spawn = 2457 2505 10150 0 1 19 70 45 Wallasalki +spawn = 2457 2505 10150 0 1 19 70 45 Wallasalki +spawn = 2457 2516 10150 0 1 19 70 45 Wallasalki +spawn = 2457 2521 10150 0 1 19 70 45 Wallasalki +spawn = 2457 2526 10149 0 1 19 70 45 Wallasalki +spawn = 2457 2532 10145 0 1 19 70 45 Wallasalki +spawn = 2457 2530 10140 0 1 19 70 45 Wallasalki +spawn = 2457 2525 10141 0 1 19 70 45 Wallasalki +spawn = 2457 1802 4408 3 1 19 70 45 Wallasalki +spawn = 2457 1800 4403 3 1 19 70 45 Wallasalki +spawn = 2457 1812 4392 1 1 19 70 45 Wallasalki +spawn = 2457 1807 4394 1 1 19 70 45 Wallasalki +spawn = 2457 1801 4391 1 1 19 70 45 Wallasalki +spawn = 2457 1802 4384 2 1 19 70 45 Wallasalki +spawn = 2457 1799 4381 2 1 19 70 45 Wallasalki +spawn = 2457 1796 4378 1 1 19 70 45 Wallasalki +spawn = 2457 1801 4375 1 1 19 70 45 Wallasalki +spawn = 2457 1798 4370 1 1 19 70 45 Wallasalki +spawn = 2457 1889 4388 0 1 19 70 45 Wallasalki +spawn = 2457 1883 4371 0 1 19 70 45 Wallasalki +spawn = 2457 1895 4363 0 1 19 70 45 Wallasalki +spawn = 2454 2443 10159 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2449 10164 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2485 10166 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2490 10155 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2489 10140 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2485 10126 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2473 10127 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2456 10129 0 1 19 70 45 Dagannoth spawn +spawn = 2454 2446 10138 0 1 19 70 45 Dagannoth spawn +spawn = 2892 2898 4453 0 1 7 75 50 Spinolyp +spawn = 2892 2904 4435 0 1 7 75 50 Spinolyp +spawn = 2892 2928 4438 0 1 7 75 50 Spinolyp +spawn = 2892 2925 4460 0 1 7 75 50 Spinolyp +//spawn = 2892 2930 4446 0 1 0 0 0 Spinolyp +spawn = 2895 2915 4463 0 1 3 30 30 water +spawn = 2895 2902 4461 0 1 3 30 30 water +spawn = 2895 2988 4442 0 1 3 30 30 water +spawn = 2895 2918 4434 0 1 3 30 30 water +//spawn = 2895 2927 4453 0 1 0 0 0 water +//spawn = 2895 2923 4435 0 1 0 0 0 water +//spawn = 2895 2912 4434 0 1 0 0 0 water +//spawn = 2895 2900 4438 0 1 0 0 0 water +//Dwarven Mine +spawn = 118 2997 9836 0 1 2 15 15 Dwarf +spawn = 118 2999 9832 0 1 2 15 15 Dwarf +spawn = 118 3001 9828 0 1 2 15 15 Dwarf +spawn = 118 2996 9827 0 1 2 15 15 Dwarf +spawn = 118 2998 9818 0 1 2 15 15 Dwarf +spawn = 118 2998 9808 0 1 2 15 15 Dwarf +spawn = 118 2986 9810 0 1 2 15 15 Dwarf +spawn = 118 3012 9813 0 1 2 15 15 Dwarf +spawn = 118 3018 9812 0 1 2 15 15 Dwarf +spawn = 118 3024 9804 0 1 2 15 15 Dwarf +spawn = 118 3028 9815 0 1 2 15 15 Dwarf +spawn = 118 3020 9828 0 1 2 15 15 Dwarf +spawn = 118 3025 9833 0 1 2 15 15 Dwarf +spawn = 118 3044 9835 0 1 2 15 15 Dwarf +spawn = 118 3045 9826 0 1 2 15 15 Dwarf +spawn = 118 3040 9820 0 1 2 15 15 Dwarf +spawn = 118 3048 9815 0 1 2 15 15 Dwarf +spawn = 118 3041 9804 0 1 2 15 15 Dwarf +spawn = 118 3031 9847 0 1 2 15 15 Dwarf +spawn = 118 3022 9847 0 1 2 15 15 Dwarf +spawn = 118 3017 9841 0 1 2 15 15 Dwarf +spawn = 118 3039 9846 0 1 2 15 15 Dwarf +spawn = 107 3042 9796 0 1 4 20 20 Scorpion +spawn = 107 3043 9788 0 1 4 20 20 Scorpion +spawn = 107 3048 9784 0 1 4 20 20 Scorpion +spawn = 107 3042 9779 0 1 4 20 20 Scorpion +spawn = 144 3039 9772 0 1 6 25 25 Scorpion +spawn = 144 3049 9770 0 1 6 25 25 Scorpion +spawn = 107 3046 9764 0 1 4 20 20 Scorpion +spawn = 107 3043 9761 0 1 4 20 20 Scorpion +spawn = 107 3037 9765 0 1 4 20 20 Scorpion +spawn = 107 3054 9777 0 1 4 20 20 Scorpion +spawn = 9 3222 3465 0 1 6 20 20 Guard Palace +spawn = 9 3219 3461 0 1 6 20 20 Guard Palace +spawn = 9 3215 3463 0 1 6 20 20 Guard Palace +spawn = 9 3211 3463 0 1 6 20 20 Guard Palace +spawn = 9 3208 3461 0 1 6 20 20 Guard Palace +spawn = 9 3204 3463 0 1 6 20 20 Guard Palace +spawn = 1770 3244 3247 0 1 2 10 10 Goblin +spawn = 1771 3244 3245 0 1 2 10 10 Goblin +spawn = 1772 3247 3245 0 1 2 10 10 Goblin +spawn = 1773 3247 3247 0 1 2 10 10 Goblin +spawn = 618 3363 3339 0 1 0 0 0 Examiner +spawn = 619 3361 3335 0 1 0 0 0 Expert +spawn = 494 3514 3482 0 5 0 0 0 Banker +spawn = 494 3514 3481 0 5 0 0 0 Banker +spawn = 494 3514 3480 0 5 0 0 0 Banker +spawn = 494 3514 3479 0 5 0 0 0 Banker +spawn = 735 2797 3155 0 1 0 0 0 Bartender +spawn = 182 2798 3166 0 1 7 25 25 Pirate +spawn = 183 2794 3168 0 1 7 25 25 Pirate +spawn = 184 2794 3163 0 1 7 25 25 Pirate +spawn = 185 2793 3160 0 1 7 25 25 Pirate +spawn = 183 2796 3158 0 1 7 25 25 Pirate +spawn = 588 2803 3155 0 1 0 0 0 Davon +spawn = 793 2794 3182 0 1 0 0 0 Waiter +spawn = 794 2793 3187 0 1 0 0 0 Cook +spawn = 112 2693 3204 0 1 6 40 40 Moss Giant +spawn = 112 2697 3206 0 1 6 40 40 Moss Giant +spawn = 112 2702 3206 0 1 6 40 40 Moss Giant +spawn = 112 2699 3211 0 1 6 40 40 Moss Giant +spawn = 112 2692 3214 0 1 6 40 40 Moss Giant +spawn = 1042 3494 3477 0 1 0 0 0 Roavar +spawn = 1113 2892 10086 0 1 0 0 0 Eadgar +spawn = 494 2534 4713 0 1 0 0 0 Banker +spawn = 452 3228 3289 0 1 0 0 0 Seth +spawn = 1714 3154 9646 0 1 0 0 0 Male +spawn = 1714 3160 9643 0 1 0 0 0 Male +spawn = 1714 3158 9633 0 1 0 0 0 Male +spawn = 1714 3170 9632 0 1 0 0 0 Male +spawn = 1715 3153 9643 0 1 0 0 0 Female +spawn = 1715 3165 9636 0 1 0 0 0 Female +spawn = 1715 3165 9636 0 1 0 0 0 Female +spawn = 1715 3170 9636 0 1 0 0 0 Female +spawn = 1714 3173 9632 0 1 0 0 0 Female +spawn = 731 3045 3258 0 1 0 0 0 Bartender +spawn = 412 3393 3489 0 1 4 20 20 Bat +spawn = 412 3388 3483 0 1 4 20 20 Bat +spawn = 412 3382 3488 0 1 4 20 20 Bat +spawn = 412 3381 3481 0 1 4 20 20 Bat +spawn = 412 3377 3489 0 1 4 20 20 Bat +spawn = 307 2967 3206 0 1 0 0 0 Hetty +//daggs +spawn = 1338 2516 10011 0 1 7 70 60 Dagannoth +spawn = 1338 2516 10013 0 1 7 70 60 Dagannoth +spawn = 1338 2519 10014 0 1 7 70 60 Dagannoth +spawn = 1338 2519 10016 0 1 7 70 60 Dagannoth +spawn = 1338 2522 10016 0 1 7 70 60 Dagannoth +spawn = 1338 2515 10026 0 1 7 70 60 Dagannoth +spawn = 1338 2520 10026 0 1 7 70 60 Dagannoth +spawn = 1338 2525 10027 0 1 7 70 60 Dagannoth +spawn = 1338 2521 10021 0 1 7 70 60 Dagannoth +spawn = 1338 2529 10027 0 1 7 70 60 Dagannoth +spawn = 1338 2533 10028 0 1 7 70 60 Dagannoth +spawn = 1342 2518 10012 0 1 7 90 80 Dagannoth +spawn = 1342 2517 10015 0 1 7 90 45 Dagannoth +spawn = 1342 2521 10015 0 1 7 90 80 Dagannoth +spawn = 1342 2516 10017 0 1 7 90 80 Dagannoth +spawn = 1342 2512 10010 0 1 7 90 80 Dagannoth +spawn = 1342 2518 10018 0 1 7 90 80 Dagannoth +spawn = 1342 2522 10029 0 1 7 90 80 Dagannoth +spawn = 1342 2525 10023 0 1 7 90 80 Dagannoth +spawn = 1342 2516 10022 0 1 7 90 80 Dagannoth +spawn = 1342 2532 10022 0 1 7 90 80 Dagannoth +spawn = 510 2780 3212 0 0 0 0 0 Hajedy +spawn = 510 2834 2953 0 0 0 0 0 Hajedy +spawn = 666 2819 3452 0 1 0 0 0 Caleb +spawn = 15 3206 3488 0 1 6 30 30 1 Warrior +spawn = 15 3208 3474 0 1 6 30 30 1 Warrior +spawn = 84 2860 9747 0 1 18 90 80 Black Demon +spawn = 84 2861 9752 0 1 18 90 80 Black Demon +spawn = 75 2842 9767 0 1 3 30 30 Zomb +spawn = 75 2842 9763 0 1 3 30 30 Zomb +spawn = 75 2845 9761 0 1 3 30 30 Zomb +spawn = 75 2843 9758 0 1 3 30 30 Zomb +spawn = 75 2845 9756 0 1 3 30 30 Zomb +spawn = 75 2844 9753 0 1 3 30 30 Zomb +spawn = 75 2845 9749 0 1 3 30 30 Zomb +spawn = 75 2846 9761 0 1 3 30 30 Zomb +spawn = 756 3224 3395 0 1 0 0 0 DrHarlow +//Red dragon isle +spawn = 53 3184 3854 0 1 17 90 90 Red Dragon +spawn = 53 3189 3832 0 1 17 90 90 Red Dragon +spawn = 53 3215 3824 0 1 17 90 90 Red Dragon +spawn = 53 3224 3828 0 1 17 90 90 Red Dragon +//ice caves +spawn = 175 2997 9548 0 1 2 8 8 Mugger +spawn = 175 2997 9547 0 1 2 8 8 Mugger +spawn = 175 2998 9545 0 1 2 8 8 Mugger +spawn = 175 2994 9546 0 1 2 8 8 Mugger +spawn = 175 2995 9550 0 1 2 8 8 Mugger +spawn = 182 2994 9570 0 1 7 25 25 Pirate +spawn = 182 2992 9573 0 1 7 25 25 Pirate +spawn = 182 2995 9576 0 1 7 25 25 Pirate +spawn = 182 2998 9579 0 1 7 25 25 Pirate +spawn = 182 2994 9583 0 1 7 25 25 Pirate +spawn = 182 2990 9582 0 1 7 25 25 Pirate +spawn = 182 2989 9578 0 1 7 25 25 Pirate +spawn = 3068 3064 9544 0 1 20 90 90 Wyvern +spawn = 3068 3065 9549 0 1 20 90 90 Wyvern +spawn = 3068 3051 9548 0 1 20 90 90 Wyvern +spawn = 3068 3051 9544 0 1 20 90 90 Wyvern +spawn = 3068 3032 9554 0 1 20 90 90 Wyvern +spawn = 3068 3032 9547 0 1 20 90 90 Wyvern +spawn = 125 3041 9583 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3041 9588 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3048 9580 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3052 9587 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3045 9580 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3048 9571 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3051 9576 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3053 9580 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3043 9575 0 1 7 35 35 IceWarrior Wildly +spawn = 125 3049 9589 0 1 7 35 35 IceWarrior Wildly +spawn = 111 3062 9578 0 1 7 50 50 IceGiant +spawn = 111 3062 9574 0 1 7 50 50 IceGiant +spawn = 111 3057 9569 0 1 7 50 50 IceGiant +spawn = 122 3023 9593 0 1 4 25 25 Hobgoblin +spawn = 122 3025 9586 0 1 4 25 25 Hobgoblin +spawn = 122 3023 9579 0 1 4 25 25 Hobgoblin +spawn = 123 3023 9590 0 1 6 40 40 Hobgoblin +spawn = 123 3222 9582 0 1 6 40 40 Hobgoblin +spawn = 123 3020 9579 0 1 6 40 40 Hobgoblin +//unicorns +spawn = 89 2775 3467 0 1 3 15 15 Unicorn +spawn = 89 2752 3466 0 1 3 15 15 Unicorn +spawn = 89 2560 3065 0 1 3 15 15 Unicorn +spawn = 89 2579 3065 0 1 3 15 15 Unicorn +spawn = 89 3135 3218 0 1 3 15 15 Unicorn +spawn = 89 3293 3343 0 1 3 15 15 Unicorn +spawn = 89 3279 3346 0 1 3 15 15 Unicorn +spawn = 89 3092 3444 0 1 3 15 15 Unicorn +spawn = 89 3095 3455 0 1 3 15 15 Unicorn +spawn = 89 2853 3379 0 1 3 15 15 Unicorn +spawn = 89 2841 3380 0 1 3 15 15 Unicorn +spawn = 89 2831 3370 0 1 3 15 15 Unicorn +spawn = 89 2809 3377 0 1 3 15 15 Unicorn +spawn = 594 3034 9845 0 1 0 0 0 Nurmof +spawn = 682 2666 3437 0 1 0 0 0 Aaron +spawn = 683 2671 3432 0 1 0 0 0 Darguad +spawn = 692 2663 3420 0 1 0 0 0 WeaponSale +spawn = 1658 2586 3087 1 1 0 0 0 RobeShop +spawn = 461 2586 3088 1 1 0 0 0 RuneStore +spawn = 537 3192 3358 1 1 0 0 0 Sccavo +spawn = 536 3193 3353 1 1 0 0 0 Valanine +spawn = 904 2509 4691 0 1 0 0 0 MageBank +spawn = 2152 2829 10228 0 1 0 0 0 Weapons +spawn = 2153 2826 10198 0 1 0 0 0 Armour +spawn = 2151 2872 10209 0 1 0 0 0 Warhammers +spawn = 2158 2888 10207 0 1 0 0 0 Crafting +spawn = 2156 2892 10212 0 1 0 0 0 Bread +spawn = 2159 2885 10195 0 1 0 0 0 Silver +spawn = 2205 2839 10128 0 1 0 0 0 Boatman +//nardah +spawn = 494 3425 2889 0 4 0 0 0 Banker +spawn = 494 3425 2891 0 4 0 0 0 Banker +spawn = 494 3425 2893 0 4 0 0 0 Banker +spawn = 494 3425 2894 0 4 0 0 0 Banker +spawn = 663 3293 3282 0 1 0 0 0 GoldSmith +spawn = 381 2684 3274 0 1 0 0 0 Captain +spawn = 381 2772 3234 0 1 0 0 0 Captain +spawn = 602 2465 3482 2 1 0 0 0 Gulluck +spawn = 494 3208 3222 2 3 0 0 0 Banker +spawn = 494 3209 3222 2 3 0 0 0 Banker +spawn = 494 3210 3222 2 3 0 0 0 Banker +spawn = 596 3037 3706 0 1 0 0 0 FatTony +spawn = 597 3026 3701 0 1 0 0 0 Noterazzo +spawn = 1784 3025 3707 0 1 0 0 0 Neil +spawn = 195 3037 3679 0 1 5 20 20 Bandit +spawn = 195 3035 3677 0 1 5 20 20 Bandit +spawn = 204 3035 3686 0 1 6 25 25 Bandit +spawn = 202 3042 3692 0 1 6 25 25 Bandit +spawn = 203 3025 3694 0 1 6 25 25 Bandit +spawn = 316 3050 3704 0 0 0 0 0 1 +spawn = 112 2554 3411 0 1 6 40 40 Moss Giant +spawn = 112 2555 3408 0 1 6 40 40 Moss Giant +spawn = 112 2557 3406 0 1 6 40 40 Moss Giant +spawn = 112 2551 3407 0 1 6 40 40 Moss Giant +spawn = 2620 2477 5146 0 1 0 0 0 SwordShop +spawn = 2622 2464 5149 0 1 0 0 0 GemStore +spawn = 110 3251 9358 0 1 12 80 70 Fire Giant +spawn = 110 3246 9364 0 1 12 80 70 Fire Giant +spawn = 110 3251 9371 0 1 12 80 70 Fire Giant +spawn = 110 3296 9377 0 1 12 80 70 Fire Giant +spawn = 110 3302 9401 0 1 12 80 70 Fire Giant +spawn = 599 2918 3323 0 1 0 0 0 Makeover +spawn = 731 3275 3488 0 1 0 0 0 Bartender +spawn = 668 3278 3488 1 1 0 0 0 Johnathon +spawn = 1 3280 3500 0 1 2 5 5 Man +spawn = 4 3280 3496 0 1 2 5 5 Man +spawn = 1 3280 3492 0 1 2 5 5 Man +spawn = 2674 3281 3503 0 1 4 10 10 Thief +spawn = 179 3285 3499 0 1 5 20 11 BlackKnight +spawn = 431 2545 3115 1 1 4 10 10 Watchman +spawn = 4 3231 3238 0 1 2 5 5 Woman +spawn = 1 3230 3239 0 1 2 5 5 Man +spawn = 47 3230 3237 0 1 1 3 3 Rat +spawn = 552 3211 3249 0 1 0 0 0 Assistant +spawn = 2238 3211 3244 0 1 0 0 0 Donie +spawn = 1 3215 3241 0 1 2 5 5 Man +spawn = 4 3243 3213 0 1 2 5 5 Woman +spawn = 1778 3181 3867 0 1 0 0 0 CapeSeller +spawn = 1782 3358 3892 0 1 0 0 0 CapeSeller +spawn = 44 3241 3229 0 1 0 0 0 duck +spawn = 45 3243 3229 0 1 0 0 0 duck +spawn = 44 3241 3231 0 1 0 0 0 duck +spawn = 45 3420 3233 0 1 0 0 0 duck +spawn = 45 3244 3223 0 1 0 0 0 duck +spawn = 44 3244 3221 0 1 0 0 0 duck +spawn = 45 3246 3221 0 1 0 0 0 duck +spawn = 3222 2956 3370 1 1 2 10 10 + drunkman +spawn = 178 2907 9715 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2907 9712 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2907 9707 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2899 9700 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2907 9703 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2907 9703 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2899 9706 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2899 9710 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2915 9710 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2915 9705 0 1 5 20 11 BlackKnight TavDung +spawn = 178 2915 9701 0 1 5 20 11 BlackKnight TavDung +spawn = 201 2931 9697 0 1 7 25 15 Jailer +spawn = 798 2932 9688 0 1 0 0 0 Velrak +spawn = 844 2681 3325 0 1 0 0 0 Cromp +spawn = 4 2691 3495 0 1 2 5 5 Woman +spawn = 4 2691 3495 0 1 2 5 5 Woman +spawn = 4 2697 3496 0 1 2 5 5 Woman +spawn = 1 2694 3495 0 1 2 5 5 Man +spawn = 1 2695 3489 0 1 2 5 5 Man +spawn = 1 2695 3492 0 1 2 5 5 Man +spawn = 732 2691 3491 0 1 0 0 0 Bartender +spawn = 820 2697 3498 0 1 0 0 0 Poison +spawn = 3385 3203 3424 0 1 0 0 0 Gypsy +spawn = 731 2573 3318 0 1 0 0 0 Bartender +spawn = 4 2573 3320 0 1 2 10 10 Woman +spawn = 1071 2821 3555 0 1 0 0 0 Tenzing +spawn = 111 2822 3508 0 1 7 50 50 IceGiant +spawn = 111 2820 3512 0 1 7 50 50 IceGiant +spawn = 111 2825 3511 0 1 7 50 50 IceGiant +spawn = 111 2826 3508 0 1 7 50 50 IceGiant +spawn = 2271 3041 4969 1 0 0 0 0 Emerald +spawn = 2270 3049 4971 1 1 0 0 0 Martin +spawn = 3830 2357 3641 0 1 0 0 0 Kathy +spawn = 3830 2368 3487 0 1 0 0 0 Kathy +spawn = 574 2661 3314 0 1 0 0 0 SilkMerchant +spawn = 397 2674 3348 0 1 2 10 10 Ardogune +Cow +spawn = 397 2672 3349 0 1 2 10 10 Ardogune Cow +spawn = 397 2671 3352 0 1 2 10 10 Ardogune +Cow +spawn = 397 2672 3343 0 1 2 10 10 Ardogune Cow +spawn = 397 2930 3270 0 1 2 10 10 Crafting Cow +spawn = 397 2927 3272 0 1 2 10 10 Crafting Cow +spawn = 397 2924 3283 0 1 2 10 10 Crafting Cow +spawn = 397 2921 3288 0 1 2 10 10 Crafting Cow +spawn = 397 2925 3288 0 1 2 10 10 Crafting Cow +//varrock sewer system +spawn = 47 3241 9866 0 1 1 2 2 Rat +spawn = 47 3244 9867 0 1 1 2 2 Rat +spawn = 47 3238 9870 0 1 1 2 2 Rat +spawn = 47 3232 9866 0 1 1 2 2 Rat +spawn = 47 3227 9872 0 1 1 2 2 Rat +spawn = 87 3237 9867 0 1 1 2 2 Rat +spawn = 87 3241 9865 0 1 1 2 2 Rat +spawn = 87 3248 9867 0 1 1 2 2 Rat +spawn = 73 3243 9893 0 0 2 10 10 Zombie +spawn = 107 3257 9908 0 1 4 20 20 Scorpion +spawn = 107 3251 9906 0 1 4 20 20 Scorpion +spawn = 73 3259 9891 0 0 2 10 10 Zombie +spawn = 87 3278 9895 0 1 1 3 3 giant rat +spawn = 87 3282 9896 0 1 1 3 3 giant rat +spawn = 90 3277 9911 0 1 3 20 20 Skele +spawn = 90 3275 9909 0 1 3 20 20 Skele +spawn = 90 3271 9914 0 1 3 20 20 Skele +spawn = 90 3255 9917 0 1 3 20 20 Skele +spawn = 90 3250 9915 0 1 3 20 20 Skele +spawn = 103 3241 9915 0 1 3 20 20 Ghost +spawn = 103 3241 9907 0 1 3 20 20 Ghost +spawn = 73 3236 9907 0 0 2 10 10 Zombie +spawn = 73 3231 9905 0 0 2 10 10 Zombie +spawn = 73 3226 9907 0 0 2 10 10 Zombie +spawn = 73 3223 9908 0 0 2 10 10 Zombie +spawn = 73 3223 9905 0 0 2 10 10 Zombie +spawn = 103 3210 9906 0 1 3 20 20 Ghost +spawn = 60 3210 9894 0 1 4 25 25 Varrock Spider +spawn = 60 3213 9890 0 1 4 25 25 Varrock Spider +spawn = 60 3210 9897 0 1 4 25 25 Varrock Spider +spawn = 63 3187 9890 0 1 4 25 25 Varrock Spider +spawn = 63 3183 9893 0 1 4 25 25 Varrock Spider +spawn = 63 3174 9897 0 1 4 25 25 Varrock Spider +spawn = 63 3177 9880 0 1 4 25 25 Varrock Spider +spawn = 63 3181 9884 0 1 4 25 25 Varrock Spider +spawn = 63 3176 9882 0 1 4 25 25 Varrock Spider +spawn = 63 3167 9893 0 1 5 30 30 Varrock Spider +spawn = 112 3164 9880 0 1 6 40 40 Varrock Mossy +spawn = 112 3164 9877 0 1 6 40 40 Varrock Mossy +spawn = 112 3156 9907 0 1 6 40 40 Varrock Mossy +spawn = 112 3160 9903 0 1 6 40 40 Varrock Mossy +spawn = 112 3158 9900 0 1 6 40 40 Varrock Mossy +spawn = 1526 2442 3092 0 1 0 0 0 Castlewars +spawn = 103 2966 3764 0 1 3 20 20 Ghost +spawn = 103 2965 3757 0 1 3 20 20 Ghost +spawn = 103 2973 3754 0 1 3 20 20 Ghost +spawn = 103 2973 3747 0 1 3 20 20 Ghost +spawn = 103 2987 3757 0 1 3 20 20 Ghost +spawn = 90 2966 3748 0 1 3 20 20 Skele +spawn = 90 2963 3752 0 1 3 20 20 Skele +spawn = 90 2980 3756 0 1 3 20 20 Skele +spawn = 90 2982 3747 0 1 3 20 20 Skele +spawn = 103 2987 3746 0 1 3 20 20 Zomb +spawn = 75 2980 3748 0 1 3 30 30 Zomb +spawn = 103 2979 3760 0 1 3 20 20 Zomb +spawn = 75 2975 3745 0 1 3 30 30 Zomb +spawn = 657 3045 3235 0 1 0 0 0 Monk +spawn = 657 3048 3237 0 1 0 0 0 Monk +spawn = 657 3049 3235 0 1 0 0 0 Monk +spawn = 658 2833 3335 0 1 0 0 0 Monk +spawn = 658 2835 3335 0 1 0 0 0 Monk +spawn = 376 3026 3217 0 1 0 0 0 Tobias +spawn = 377 3029 3220 0 1 0 0 0 Loris +spawn = 378 3027 3212 0 1 0 0 0 Thresnor +spawn = 380 2956 3147 0 1 0 0 0 Thresnor +spawn = 1 3492 3492 0 1 2 5 5 Werewolf +spawn = 1 3487 3486 0 1 2 5 5 Werewolf +spawn = 4 3498 3491 0 1 2 5 5 Werewolf +spawn = 1595 2745 3151 0 0 0 0 0 Saniboch +spawn = 598 2944 3380 0 1 0 0 0 Hairdresser +spawn = 805 2932 3287 0 1 0 0 0 Master Crafter +//fish tutorial island +spawn = 316 3101 3092 0 0 0 0 0 fishing spot' +//monkfish +spawn = 1191 2339 3702 0 0 0 0 0 Monkfish +spawn = 1191 2341 3702 0 0 0 0 0 Monkfish +spawn = 1191 2310 3704 0 0 0 0 0 Monkfish +//fish karamaja +spawn = 316 2924 3181 0 0 0 0 0 Fish +spawn = 316 2923 3179 0 0 0 0 0 Fish +spawn = 312 2926 3179 0 0 0 0 0 Fish +spawn = 312 2925 3181 0 0 0 0 0 Fish +//fish shilo +spawn = 314 2837 2974 0 0 0 0 0 Fish +spawn = 314 2860 2976 0 0 0 0 0 Fish +spawn = 314 2845 2971 0 0 0 0 0 Fish +spawn = 314 2825 2969 0 0 0 0 0 Fish +/*Catherby Fishing*/ +spawn = 312 2836 3431 0 0 0 0 0 FISHING SPOT +spawn = 312 2837 3431 0 0 0 0 0 FISHING SPOT +spawn = 313 2838 3431 0 0 0 0 0 FISHING SPOT +spawn = 312 2844 3429 0 0 0 0 0 FISHING SPOT +spawn = 312 2845 3429 0 0 0 0 0 FISHING SPOT +spawn = 316 2853 3423 0 0 0 0 0 FISHING SPOT +spawn = 316 2854 3423 0 0 0 0 0 FISHING SPOT +spawn = 316 2855 3423 0 0 0 0 0 FISHING SPOT +spawn = 312 2859 3426 0 0 0 0 0 FISHING SPOT +spawn = 316 2860 3426 0 0 0 0 0 FISHING SPOT +/*barbarian village fishing*/ +spawn = 309 3104 3424 0 0 0 0 0 FISHING SPOT +spawn = 309 3104 3425 0 0 0 0 0 FISHING SPOT +spawn = 309 3110 3432 0 0 0 0 0 FISHING SPOT +spawn = 309 3110 3433 0 0 0 0 0 FISHING SPOT +spawn = 309 3110 3434 0 0 0 0 0 FISHING SPOT +/*draynor fishing*/ +spawn = 316 3085 3231 0 0 0 0 0 FISHING SPOT +spawn = 316 3085 3230 0 0 0 0 0 FISHING SPOT +spawn = 316 3267 3148 0 0 0 0 0 FISHING SPOT +spawn = 316 3268 3147 0 0 0 0 0 FISHING SPOT +spawn = 316 3275 3140 0 0 0 0 0 FISHING SPOT +/*fishing guild*/ +spawn = 219 2603 3402 0 1 0 0 0 FISHERMAN +spawn = 233 2598 3423 0 0 0 0 0 FISHING SPOT +spawn = 234 2602 3422 0 0 0 0 0 FISHING SPOT +spawn = 235 2605 3420 0 0 0 0 0 FISHING SPOT +spawn = 236 2607 3410 0 0 0 0 0 FISHING SPOT +spawn = 309 2612 3411 0 0 0 0 0 FISHING SPOT +spawn = 310 2604 3417 0 0 0 0 0 FISHING SPOT +spawn = 311 2612 3415 0 0 0 0 0 FISHING SPOT +spawn = 312 2602 3414 0 0 0 0 0 FISHING SPOT +spawn = 313 2602 3419 0 0 0 0 0 FISHING SPOT +/*karamja fishing*/ +spawn = 316 2921 3178 0 0 0 0 0 FISHING SPOT +spawn = 316 2924 3181 0 0 0 0 0 FISHING SPOT +spawn = 316 2923 3180 0 0 0 0 0 FISHING SPOT +spawn = 312 2925 3181 0 0 0 0 0 FISHING SPOT +spawn = 312 2926 3180 0 0 0 0 0 FISHING SPOT +spawn = 312 2926 3179 0 0 0 0 0 FISHING SPOT +spawn = 312 2923 3179 0 0 0 0 0 FISHING SPOT +spawn = 328 3239 3241 0 0 0 0 0 lumby FISHING SPOT +spawn = 328 3238 3252 0 0 0 0 0 lumby FISHING SPOT +spawn = 316 2860 3426 0 0 0 0 0 Static CATHERBY FISHING SPOT +spawn = 309 3104 3424 0 0 0 0 0 Barbarian Village Fishing Lure & Bait +spawn = 309 3104 3425 0 0 0 0 0 Barbarian Village Fishing Lure & Bait +spawn = 309 3110 3432 0 0 0 0 0 Barbarian Village Fishing Lure & BaiT +spawn = 309 3110 3433 0 0 0 0 0 Barbarian Village Fishing Lure & Bait +spawn = 309 3110 3434 0 0 0 0 0 Barbarian Village Fishing Lure & Bait +spawn = 316 3267 3148 0 0 0 0 0 Al-Kharid Fishing Net & BaiT +spawn = 316 3268 3147 0 0 0 0 0 Al-Kharid Fishing Net & Bait +spawn = 316 3275 3140 0 0 0 0 0 Al-Kharid Fishing Net & Bait +/*Wilderness Fishing*/ +spawn = 312 3364 3800 0 0 0 0 0 Wilderness +spawn = 312 3347 3814 0 0 0 0 0 Wilderness +//end of fishing spots +spawn = 494 2665 2651 0 2 0 0 0 Banker +spawn = 494 2666 2651 0 2 0 0 0 Banker +spawn = 494 2667 2651 0 2 0 0 0 Banker +spawn = 494 2668 2651 0 2 0 0 0 Banker +spawn = 49 2735 9691 0 1 11 55 35 HellHound +spawn = 49 2736 9686 0 1 11 55 35 HellHound +spawn = 114 2718 9715 0 1 7 50 50 Ogre +spawn = 114 2722 9715 0 1 7 50 50 Ogre +spawn = 122 2700 9695 0 1 4 25 25 Hobgoblin +spawn = 122 2703 9698 0 1 4 25 25 Hobgoblin +spawn = 2437 2620 3685 0 0 0 0 0 Sailor +spawn = 2438 2550 3759 0 0 0 0 0 Sailor +spawn = 924 3289 3181 0 1 0 0 0 Osman +spawn = 923 3301 3165 0 1 0 0 0 Hassan +spawn = 693 2670 3418 0 1 0 0 0 Range G +spawn = 694 2661 3430 0 1 0 0 0 Range G +spawn = 55 2910 9906 0 1 10 60 40 BlueDrag +//chicken +spawn = 41 3230 3299 0 1 3 10 10 Chicken +spawn = 41 3231 3298 0 1 3 10 10 Chicken +spawn = 41 3229 3298 0 1 3 10 10 Chicken +spawn = 41 3226 3296 0 1 3 10 10 Chicken +spawn = 41 3233 3294 0 1 3 10 10 Chicken +spawn = 41 3233 3300 0 1 3 10 10 Chicken +spawn = 41 3227 3300 0 1 3 10 10 Chicken +spawn = 41 3230 3296 0 1 3 10 10 Chicken +spawn = 1017 3015 3295 0 1 3 10 10 Chicken +spawn = 1017 3018 3293 0 1 3 10 10 Chicken +spawn = 1017 3019 3295 0 1 3 10 10 Chicken +spawn = 1017 3015 3298 0 1 3 10 10 Chicken +spawn = 1017 3018 3286 0 1 3 10 10 Chicken +spawn = 1017 3017 3286 0 1 3 10 10 Chicken +spawn = 41 3107 9568 0 1 3 10 10 Chicken +spawn = 41 3189 3277 0 1 3 10 10 Chicken +spawn = 41 3190 3278 0 1 3 10 10 Chicken +spawn = 41 3191 3277 0 1 3 10 10 Chicken +spawn = 41 3187 3278 0 1 3 10 10 Chicken +spawn = 41 3185 3277 0 1 3 10 10 Chicken +spawn = 41 3185 3277 0 1 3 10 10 Chicken +spawn = 951 2965 3348 0 1 3 10 10 Chicken +spawn = 951 2963 3346 0 1 3 10 10 Chicken +spawn = 1018 2681 3664 0 1 3 10 10 Rooster +spawn = 1401 2680 3665 0 1 3 10 10 Chicken +spawn = 1401 2683 3664 0 1 3 10 10 Chicken +spawn = 1402 2681 3662 0 1 3 10 10 Chicken +spawn = 1402 2679 3663 0 1 3 10 10 Chicken +//crandor +spawn = 90 2829 3236 0 1 3 20 20 Skeleton +spawn = 90 2829 3234 0 1 3 20 20 Skeleton +spawn = 90 2831 3236 0 1 3 20 20 Skeleton +spawn = 90 2832 3234 0 1 3 20 20 Skeleton +spawn = 90 2834 3236 0 1 3 20 20 Skeleton +spawn = 90 2835 3234 0 1 3 20 20 Skeleton +spawn = 90 2837 3237 0 1 3 20 20 Skeleton +spawn = 90 2837 3235 0 1 3 20 20 Skeleton +spawn = 90 2840 3235 0 1 3 20 20 Skeleton +spawn = 144 2849 3306 0 1 6 25 25 Scorpion +spawn = 144 2852 3308 0 1 6 25 25 Scorpion +spawn = 144 2853 3305 0 1 6 25 25 Scorpion +spawn = 144 2856 3302 0 1 6 25 25 Scorpion +spawn = 144 2852 3302 0 1 6 25 25 Scorpion +spawn = 144 2857 3299 0 1 6 25 25 Scorpion +spawn = 122 2843 3307 0 0 4 25 25 Hobgoblin +spawn = 122 2842 3305 0 0 4 25 25 Hobgoblin +spawn = 122 2840 3306 0 0 4 25 25 Hobgoblin +spawn = 122 2839 3304 0 0 4 25 25 Hobgoblin +spawn = 122 2837 3305 0 0 4 25 25 Hobgoblin +spawn = 82 2846 3298 0 1 8 85 60 1 Lesser demon +spawn = 82 2843 3296 0 1 8 85 60 1 Lesser demon +spawn = 112 2834 3244 0 1 6 40 40 Moss Giant +spawn = 112 2834 3243 0 1 6 40 40 Moss Giant +spawn = 112 2840 3246 0 1 6 40 40 Moss Giant +//DRAGON SLAYER QUEST +spawn = 198 3192 3361 0 1 0 0 0 Guildmaster - Dragon Slayer Quest Start +spawn = 747 3069 3517 0 1 0 0 0 Dragon Slayer +spawn = 78 3023 3630 0 1 3 20 20 Flying Bat +spawn = 78 3023 3632 0 1 3 20 20 Flying Bat +spawn = 86 3023 3630 0 1 2 10 10 Giant Rat +spawn = 86 3023 3626 0 1 2 10 10 Giant Rat +spawn = 103 3027 3626 0 1 3 20 20 Ghost +spawn = 103 3029 3626 0 1 3 20 20 Ghost +spawn = 90 3035 3625 0 1 3 20 20 Skeleton +spawn = 90 3035 3624 0 1 3 20 20 Skeleton +spawn = 73 3035 3630 0 1 2 15 15 Zombie +spawn = 73 3035 3632 0 1 2 15 15 Zombie +spawn = 742 2854 9338 0 1 8 80 80 Elvarg +spawn = 604 3000 3144 0 1 0 0 0 Thurgo +spawn = 647 3209 3496 0 1 0 0 0 Reldo +spawn = 9 3204 3496 0 1 0 0 0 Guard +spawn = 606 2977 3343 0 1 0 0 0 Squire +[ENDOFSPAWNLIST] diff --git a/2006Redone Server/data/data/equipment.dat b/2006Redone Server/data/data/equipment.dat new file mode 100644 index 00000000..e8c01c46 Binary files /dev/null and b/2006Redone Server/data/data/equipment.dat differ diff --git a/2006Redone Server/data/data/itemdef.gsu b/2006Redone Server/data/data/itemdef.gsu new file mode 100644 index 00000000..966755d9 Binary files /dev/null and b/2006Redone Server/data/data/itemdef.gsu differ diff --git a/2006Redone Server/data/data/notes.dat b/2006Redone Server/data/data/notes.dat new file mode 100644 index 00000000..052be2df Binary files /dev/null and b/2006Redone Server/data/data/notes.dat differ diff --git a/2006Redone Server/data/data/stackable.dat b/2006Redone Server/data/data/stackable.dat new file mode 100644 index 00000000..0f4b65f9 Binary files /dev/null and b/2006Redone Server/data/data/stackable.dat differ diff --git a/2006Redone Server/data/doors.txt b/2006Redone Server/data/doors.txt new file mode 100644 index 00000000..ab8e05d8 --- /dev/null +++ b/2006Redone Server/data/doors.txt @@ -0,0 +1,1021 @@ + 6106 1943 4702 1 0 0 + 6109 1933 4691 0 0 0 + 6114 1986 4494 2 0 0 + 6114 1986 4529 2 0 0 + 6114 2003 4494 0 0 0 + 6114 2003 4529 0 0 0 + 6114 2028 4494 2 0 0 + 2337 3016 3514 1 0 0 + 6114 2028 4529 2 0 0 + 14749 3035 3707 0 0 0 + 14749 3038 3705 3 0 0 + 14749 3027 3702 2 0 0 + 14749 3026 3699 3 0 0 + 1530 2895 3508 3 0 0 + 1512 3209 3490 3 0 0 + 6114 2045 4494 0 0 0 + 6114 2045 4529 0 0 0 + 6114 1986 4494 2 1 0 + 6114 1986 4529 2 1 0 + 1506 3287 3172 0 0 0 + 1508 3287 3171 0 0 0 + 1506 3298 3171 2 0 0 + 1508 3298 3172 2 0 0 + 6114 2003 4494 0 1 0 + 14923 2337 3675 2 0 0 + 14923 2351 3679 2 0 0 + 14923 2326 3672 3 0 0 + 14923 2322 3667 0 0 0 + 14923 2319 3690 3 0 0 + 14923 2319 3677 1 0 0 + 6114 2003 4529 0 1 0 + 6114 2028 4494 2 1 0 + 6114 2028 4529 2 1 0 + 6114 2045 4494 0 1 0 + 6114 2045 4529 0 1 0 + 6114 1986 4494 2 2 0 + 6114 1986 4529 2 2 0 + 6114 2003 4494 0 2 0 + 6114 2003 4529 0 2 0 + 6114 2028 4494 2 2 0 + 6114 2028 4529 2 2 0 + 6114 2045 4494 0 2 0 + 6114 2045 4529 0 2 0 + 6114 1986 4494 2 3 0 + 6114 1986 4529 2 3 0 + 6114 2003 4494 0 3 0 + 6114 2003 4529 0 3 0 + 6114 2028 4494 2 3 0 + 6114 2028 4529 2 3 0 + 6114 2045 4494 0 3 0 + 6114 2045 4529 0 3 0 + 1530 2035 4646 1 0 0 + 1530 2038 4646 1 0 0 + 1530 2042 4644 2 0 0 + 13001 3189 3275 1 0 0 + 8786 2041 4646 1 0 0 + 8787 2042 4633 1 0 0 + 8788 2037 4633 1 0 0 + 8789 2034 4636 0 0 0 + 3270 2158 4566 0 1 0 + 1530 2128 4915 3 0 0 + 1530 2128 4922 2 0 0 + 1530 2132 4919 1 0 0 + 1530 2141 4922 2 0 0 + 4636 2198 4943 1 1 0 + 4637 2217 4943 1 1 0 + 4638 2191 4950 2 0 0 + 4638 2191 4961 2 0 0 + 4638 2191 4969 2 0 0 + 4638 2198 4943 1 0 0 + 4638 2198 4976 3 0 0 + 4638 2206 4976 3 0 0 + 4638 2209 4976 3 0 0 + 4638 2217 4943 1 0 0 + 4638 2217 4976 3 0 0 + 4638 2224 4950 0 0 0 + 4638 2224 4961 0 0 0 + 4638 2224 4969 0 0 0 + 4640 2191 4958 2 0 0 + 4640 2224 4958 0 0 0 + 4640 2191 4958 2 1 0 + 4640 2224 4958 0 1 0 + 11196 2224 4950 0 1 0 + 11197 2191 4950 2 1 0 + 1530 2313 9803 3 0 0 + 1530 2325 9801 3 0 0 + 4465 2415 3073 0 0 0 + 4467 2384 3134 2 0 0 + 1530 2463 3176 0 0 0 + 1530 2467 3178 0 0 0 + 1533 2443 3183 1 0 0 + 1530 2467 3301 0 0 0 + 1530 2470 3285 0 0 0 + 1530 2470 3322 1 0 0 + 1530 2471 3307 2 0 0 + 1530 2476 3317 1 0 0 + 1530 2482 3287 3 0 0 + 1530 2483 3295 0 0 0 + 1530 2483 3307 0 0 0 + 1530 2487 3295 2 0 0 + 1530 2487 3301 2 0 0 + 1530 2488 3322 1 0 0 + 2997 2467 3295 0 0 0 + 2997 2467 3307 0 0 0 + 2997 2470 3317 1 0 0 + 2997 2471 3295 2 0 0 + 2997 2471 3301 2 0 0 + 2997 2477 3287 3 0 0 + 2997 2482 3317 1 0 0 + 2997 2482 3322 1 0 0 + 2997 2488 3317 1 0 0 + 10260 2436 3345 1 0 0 + 10261 2435 3345 0 1 0 + 10261 2438 3347 3 1 0 + 10262 2433 3348 2 0 0 + 10264 2433 3347 2 0 0 + 7274 2472 4972 0 0 0 + 7302 2447 4979 0 0 0 + 7317 2463 4963 2 0 0 + 7320 2480 4956 2 0 0 + 7323 2446 4956 2 0 0 + 7326 2478 4940 2 0 0 + 7354 2452 4943 1 0 0 + 1530 2551 3098 3 0 0 + 1533 2551 3082 1 0 0 + 1533 3164 3433 2 0 0 + 1533 3155 3429 2 0 0 + 1533 3151 3434 1 0 0 + 1533 3151 3435 0 1 0 + 1533 3158 3431 2 1 9 + 1533 3158 3427 3 1 0 + 1533 3164 3433 2 1 0 + 1530 2505 3256 3 0 9 + 1530 2524 3254 1 0 0 + 2184 2502 3250 1 0 0 + 1530 2502 3309 2 0 0 + 1530 2502 3319 2 0 0 + 1530 2508 3323 1 0 0 + 1530 2511 3309 0 0 0 + 1530 2519 3275 0 0 0 + 1530 2521 3314 2 0 0 + 1530 2531 3276 1 0 0 + 1530 2541 3280 3 0 0 + 1530 2546 3325 2 0 0 + 1530 2551 3308 2 0 0 + 1530 2552 3314 2 0 0 + 1531 2527 3293 3 1 0 + 2034 2547 3325 0 1 0 + 2036 2551 3320 1 0 0 + 2528 2530 3314 0 0 0 + 2535 2533 3272 3 0 0 + 2535 2540 3273 3 0 0 + 2997 2502 3314 2 0 0 + 2997 2502 3323 1 0 0 + 2997 2510 3304 2 0 0 + 2997 2511 3314 0 0 0 + 2997 2511 3319 0 0 0 + 2997 2514 3323 1 0 0 + 2997 2523 3274 1 0 0 + 2997 2525 3272 3 0 0 + 2997 2536 3280 3 0 0 + 2997 2547 3280 3 0 0 + 2997 2549 3274 3 0 0 + 1530 2500 3328 1 0 0 + 1530 2506 3328 1 0 0 + 1530 2510 3380 1 0 0 + 1530 2512 3328 1 0 0 + 1530 2520 3332 0 0 0 + 1530 2521 3381 1 0 0 + 1530 2522 3375 2 0 0 + 2036 2551 3328 3 0 0 + 2537 2531 3328 1 0 0 + 1530 2524 3434 1 0 0 + 1536 2521 3432 0 0 0 + 1533 2525 3495 0 0 0 + 1533 2522 3495 3 1 0 + 1542 2551 3570 0 0 0 + 1544 2551 3569 0 0 0 + 4247 2534 3898 3 0 0 + 4247 2537 3894 0 0 0 + 4247 2539 3899 2 0 0 + 4247 2542 3895 1 0 0 + 4247 2547 3895 2 0 0 + 4247 2551 3893 1 0 0 + 4696 2512 3850 3 0 0 + 4696 2513 3868 1 0 0 + 4696 2517 3858 3 0 0 + 1991 2515 9575 1 0 0 + 2526 2539 9672 2 0 0 + 2002 2540 9900 1 0 0 + 2002 2542 9892 1 0 0 + 1530 2594 3102 1 0 0 + 1530 2591 3105 1 1 0 + 1530 2597 3105 1 1 0 + 1531 2611 3084 1 0 9 + 1533 2563 3082 2 0 0 + 1533 2603 3082 3 0 0 + 77 2606 3160 2 0 0 + 77 2606 3163 2 0 0 + 77 2606 3166 2 0 0 + 78 2606 3159 2 0 0 + 78 2606 3162 2 0 0 + 78 2606 3165 2 0 0 + 81 2585 3141 0 0 0 + 81 2617 3171 1 0 0 + 82 2606 3152 0 0 9 + 1530 2565 3188 2 0 0 + 1530 2567 3162 2 0 0 + 1530 2569 3150 1 0 0 + 1530 2570 3168 3 0 0 + 1530 2578 3195 3 0 0 + 1530 2590 3192 3 0 0 + 1530 2599 3192 3 0 0 + 1530 2605 3182 0 0 0 + 1530 2608 3181 3 0 0 + 1530 2609 3143 0 0 0 + 1530 2609 3191 3 0 0 + 1530 2612 3182 2 0 0 + 1530 2613 3150 0 0 0 + 1530 2616 3145 1 1 0 + 1531 2584 3193 1 0 0 + 1533 2595 3188 1 0 0 + 1533 2616 3147 3 0 0 + 131 2566 3237 2 0 0 + 1530 2567 3245 1 0 0 + 1530 2569 3239 3 0 0 + 1530 2574 3250 0 0 0 + 1530 2602 3209 0 0 0 + 1530 2606 3219 3 0 0 + 1530 2610 3209 2 0 0 + 1530 2564 3310 0 0 0 + 1530 2573 3302 3 0 0 + 1530 2574 3285 0 0 0 + 1530 2574 3293 2 0 0 + 1530 2574 3308 0 0 0 + 1530 2577 3287 3 0 0 + 1530 2577 3306 1 0 0 + 1530 2579 3285 2 0 0 + 1530 2579 3308 2 0 0 + 1530 2610 3307 1 0 0 + 1530 2610 3324 2 0 0 + 1530 2574 3285 0 1 0 + 1530 2574 3308 0 1 0 + 1530 2579 3285 2 1 0 + 1530 2579 3308 2 1 0 + 1533 2564 3321 2 0 0 + 1533 2565 3272 3 0 0 + 1533 2565 3317 1 0 0 + 1533 2567 3271 2 0 0 + 1533 2569 3273 1 0 0 + 1533 2569 3322 0 0 0 + 1533 2570 3271 0 0 0 + 1533 2571 3322 2 0 0 + 1533 2573 3271 3 0 0 + 1533 2576 3320 0 0 0 + 1533 2612 3309 2 0 0 + 1533 2621 3295 3 0 0 + 1533 2566 3268 2 1 0 + 1533 2567 3321 1 1 0 + 1533 2569 3323 0 1 0 + 1533 2571 3323 2 1 0 + 1533 2572 3268 0 1 0 + 1533 2573 3321 1 1 0 + 1533 2612 3325 3 1 0 + 1533 2615 3292 1 1 0 + 1533 2615 3315 0 1 0 + 1533 2616 3317 3 1 0 + 1533 2616 3325 3 1 0 + 1533 2617 3294 0 1 0 + 1533 2622 3293 1 1 0 + 1534 2614 3295 2 0 0 + 1536 2572 3288 3 0 0 + 1536 2572 3305 1 0 0 + 1536 2573 3295 3 0 0 + 1536 2574 3303 2 0 0 + 1536 2573 3302 3 1 0 + 1536 2575 3293 0 1 0 + 2546 2576 3298 0 0 0 + 2548 2576 3299 0 0 0 + 2555 2572 3288 3 1 0 + 2555 2572 3305 1 1 0 + 2556 2610 3316 2 0 0 + 1530 2570 3333 2 0 0 + 1530 2574 3333 0 0 0 + 1530 2578 3333 0 0 0 + 1530 2584 3339 3 0 0 + 1530 2616 3345 2 0 0 + 1533 2576 3336 3 1 0 + 1533 2586 3336 0 1 0 + 1533 2587 3335 2 1 0 + 2054 2592 3339 3 0 0 + 2554 2565 3356 0 0 0 + 1530 2611 3398 1 0 0 + 1531 2598 3404 2 0 9 + 4 2576 3461 0 0 0 + 1530 2609 3474 0 0 0 + 4248 2621 3666 1 0 0 + 4247 2615 3897 1 0 0 + 4696 2603 3874 3 0 0 + 4696 2604 3878 1 0 0 + 4701 2618 3895 3 0 0 + 1991 2579 4455 1 0 0 + 2559 2601 9482 3 0 0 + 1530 2565 9612 1 0 0 + 1530 2575 9648 2 0 0 + 1530 2575 9651 2 0 0 + 1530 2582 9648 0 0 0 + 1530 2582 9651 0 0 0 + 1530 2595 9644 2 0 0 + 1530 2598 9648 3 0 0 + 1530 2602 9638 0 0 0 + 2000 2575 9861 3 0 0 + 2002 2566 9901 1 0 0 + 2002 2568 9893 1 0 0 + 2002 2604 9900 1 0 0 + 2002 2606 9892 1 0 0 + 1536 2677 3088 1 0 0 + 1530 2633 3169 1 0 0 + 1530 2634 3164 1 0 0 + 1530 2656 3161 1 0 0 + 1533 2656 3152 1 1 0 + 1534 2640 3172 3 0 0 + 1534 2656 3154 0 0 0 + 1530 2644 3273 3 0 0 + 1530 2645 3314 2 0 0 + 1530 2648 3299 2 0 0 + 1530 2650 3297 0 0 9 + 1530 2650 3305 3 0 0 + 1530 2656 3292 2 0 0 + 1530 2659 3320 1 0 0 + 1530 2663 3279 1 0 0 + 1530 2666 3294 3 0 0 + 1530 2668 3276 0 0 0 + 1530 2669 3316 1 0 9 + 1530 2670 3320 3 0 0 + 1530 2675 3285 3 0 0 + 1530 2676 3280 1 0 0 + 1530 2666 3291 1 1 0 + 1531 2661 3291 1 1 0 + 1533 2628 3323 2 0 0 + 1533 2636 3323 2 0 0 + 1533 2639 3323 2 0 0 + 1533 2632 3319 1 1 0 + 1533 2638 3319 1 1 0 + 1534 2653 3296 0 0 9 + 2705 2634 3323 0 0 0 + 1530 2632 3381 1 0 0 + 1530 2641 3387 1 0 0 + 1530 2643 3360 3 0 0 + 1530 2644 3333 1 0 0 + 1530 2639 3415 2 0 9 + 1533 2641 3424 2 0 0 + 1533 2641 3452 0 0 0 + 1533 2642 3432 2 0 0 + 1533 2649 3449 3 0 0 + 1591 2654 3427 2 0 9 + 1591 2667 3414 0 0 9 + 1591 2669 3442 2 0 9 + 1591 2682 3429 0 0 9 + 99 2657 3496 1 0 0 + 4148 2667 3683 0 0 0 + 4165 2631 3667 3 0 0 + 4166 2636 3667 3 0 0 + 4247 2645 3663 3 0 0 + 4248 2662 3692 3 0 0 + 4250 2627 3656 3 0 0 + 4250 2627 3675 0 0 0 + 4250 2638 3652 2 0 0 + 4250 2655 3654 3 0 0 + 4250 2664 3652 2 0 0 + 4250 2665 3702 2 0 0 + 4250 2671 3652 0 0 0 + 4250 2671 3665 2 0 0 + 4250 2672 3675 2 0 0 + 4250 2677 3690 2 0 0 + 4250 2678 3665 0 0 0 + 4250 2682 3685 3 0 0 + 4250 2683 3679 3 0 0 + 4250 2683 3680 1 0 0 + 4250 2684 3673 1 0 0 + 1530 2629 4726 1 0 0 + 1530 2630 4681 2 0 0 + 1530 2633 4684 3 0 0 + 1530 2633 4728 0 0 0 + 1530 2638 4688 2 0 9 + 1530 2640 4682 1 0 0 + 1530 2645 4684 2 0 0 + 1530 2638 4688 0 1 9 + 10325 2665 9663 1 0 0 + 92 2648 9857 1 0 0 + 93 2646 9870 1 0 0 + 1533 2726 3368 2 0 0 + 1530 2702 3401 3 0 0 + 1530 2701 3477 3 0 0 + 1530 2713 3483 3 0 0 + 1530 2706 3472 0 1 0 + 1530 2709 3472 2 1 0 + 1533 2698 3494 1 0 0 + 1533 2750 3495 1 0 0 + 1533 2750 3504 3 0 0 + 1591 2749 3495 1 2 0 + 1530 2731 3580 3 0 0 + 1530 2736 3577 3 1 0 + 1530 2744 3577 3 1 0 + 1533 2735 3575 2 0 0 + 1533 2735 3578 2 0 0 + 1533 2735 3581 2 0 0 + 1533 2738 3578 0 0 0 + 1533 2741 3576 3 0 0 + 1533 2745 3575 0 0 0 + 1533 2746 3577 3 0 0 + 1533 2735 3578 2 1 0 + 1533 2735 3581 2 1 0 + 1533 2739 3578 3 1 0 + 1533 2741 3578 3 1 0 + 1533 2745 3578 0 1 0 + 1533 2745 3581 0 1 0 + 2427 2719 9671 1 0 0 + 2429 2722 9671 1 0 0 + 2430 2727 9690 2 0 0 + 2431 2723 9711 3 0 0 + 1530 2770 3197 0 0 0 + 1530 2782 3194 2 0 0 + 1530 2789 3197 0 0 0 + 1531 2777 3195 0 0 0 + 1531 2799 3167 1 0 0 + 1533 2767 3194 0 0 0 + 1533 2771 3189 0 0 0 + 1533 2778 3190 0 0 0 + 1533 2807 3163 0 0 0 + 1534 2790 3177 2 0 0 + 1534 2794 3180 0 0 0 + 2621 2764 3197 0 0 0 + 2622 2781 3197 3 0 0 + 2626 2811 3170 0 0 0 + 2627 2774 3187 1 0 0 + 2628 2788 3189 1 0 0 + 1530 2764 3285 2 2 0 + 1533 2765 3277 2 1 0 + 1533 2765 3287 2 1 0 + 1530 2815 3448 1 0 0 + 1531 2797 3437 0 0 9 + 1533 2806 3452 0 0 0 + 1533 2766 3495 1 0 0 + 1533 2766 3504 3 0 0 + 1533 2752 3494 0 1 0 + 1533 2764 3494 2 1 0 + 4962 2799 4453 0 0 0 + 1530 2757 4726 1 0 0 + 1530 2758 4681 2 0 0 + 1530 2761 4684 3 0 0 + 1530 2761 4728 0 0 0 + 1530 2763 4676 0 0 0 + 1530 2766 4684 0 1 0 + 1530 2766 4688 0 1 9 + 1530 2848 3370 2 0 0 + 1533 2820 3356 1 0 0 + 1533 2822 3354 2 0 0 + 1533 2851 3341 1 0 0 + 1530 2816 3438 1 0 0 + 1530 2828 3450 0 0 0 + 1531 2822 3440 0 0 0 + 3745 2822 3555 2 0 0 + 3746 2820 3557 1 0 0 + 10325 2835 5093 1 0 0 + 10325 2838 5100 2 0 0 + 10325 2840 5091 0 0 0 + 10325 2843 5097 3 0 0 + 10325 2852 5097 3 0 0 + 10325 2855 5091 2 0 0 + 10325 2857 5100 0 0 0 + 10325 2860 5093 1 0 0 + 10325 2838 5099 2 1 0 + 10325 2857 5099 0 1 0 + 10326 2847 5088 3 0 0 + 10326 2848 5088 3 0 0 + 3776 2861 10092 2 0 0 + 3776 2828 10091 3 1 0 + 3776 2833 10070 2 1 0 + 3776 2837 10063 1 1 0 + 3776 2838 10057 2 2 0 + 6108 2872 10172 1 0 0 + 6100 2872 10195 2 1 0 + 6100 2872 10203 2 1 0 + 6101 2866 10199 3 0 0 + 6101 2867 10189 3 0 0 + 6101 2872 10206 2 0 0 + 6104 2837 10197 0 0 0 + 6104 2838 10193 0 1 0 + 6104 2841 10197 2 1 0 + 6104 2837 10223 2 2 0 + 6106 2827 10218 3 0 0 + 6106 2833 10197 2 0 0 + 6106 2848 10187 3 0 0 + 6106 2854 10224 0 0 0 + 6106 2856 10224 2 0 0 + 6106 2863 10229 3 0 0 + 6107 2826 10201 0 0 0 + 6107 2827 10223 2 0 0 + 6107 2829 10197 1 0 0 + 6107 2830 10224 1 0 0 + 6107 2841 10191 2 0 0 + 6110 2837 10219 1 0 0 + 6110 2861 10227 3 1 0 + 6110 2834 10223 2 2 0 + 6114 2862 10199 2 0 0 + 6114 2870 10199 2 2 0 + 1530 2928 3242 1 0 0 + 1530 2924 3242 3 1 0 + 1530 2925 3243 1 1 0 + 1530 2926 3258 3 1 0 + 1530 2928 3246 1 1 0 + 1530 2935 3256 1 1 0 + 1530 2938 3244 1 1 0 + 1530 2926 3258 3 2 0 + 1530 2934 3252 1 2 0 + 1533 2928 3209 2 0 0 + 1533 2932 3213 1 0 0 + 2595 2941 3248 0 0 0 + 1530 2922 3323 0 0 0 + 1530 2884 3423 0 0 0 + 1530 2884 3438 3 0 0 + 1530 2884 3440 1 0 0 + 1530 2884 3444 3 0 0 + 1530 2886 3420 3 0 0 + 1530 2893 3421 3 0 0 + 1530 2896 3450 2 0 0 + 1530 2899 3441 2 0 0 + 1530 2914 3435 3 0 0 + 1530 2898 3424 1 1 0 + 1530 2898 3432 3 1 0 + 1530 2902 3428 0 1 0 + 1531 2885 3452 0 0 0 + 1531 2895 3428 3 0 0 + 1531 2901 3428 1 0 0 + 1530 2902 3468 3 0 0 + 1530 2902 3474 1 0 0 + 1530 2941 3517 0 0 0 + 1530 2895 3508 3 1 0 + 1530 2901 3471 3 1 0 + 2861 2901 3473 0 0 0 + 2862 2901 3465 1 0 0 + 2863 2934 3463 0 0 0 + 1530 2911 3531 0 0 0 + 1530 2920 3561 1 0 0 + 1530 2920 3576 2 0 0 + 1530 2921 3571 1 0 0 + 1530 2932 3564 1 0 0 + 1533 2916 3537 0 0 0 + 1533 2922 3558 2 0 0 + 1533 2909 3543 3 1 0 + 1533 2912 3543 3 1 0 + 1534 2907 3544 2 0 0 + 1534 2923 3545 1 0 0 + 3747 2906 3543 3 1 0 + 1530 2935 4698 3 0 0 + 1533 2935 4682 1 0 0 + 1530 2896 9702 2 0 0 + 1530 2896 9709 2 0 0 + 1530 2918 9702 0 0 0 + 1530 2918 9709 0 0 0 + 1542 2892 9826 3 0 0 + 1544 2893 9826 3 0 0 + 6108 2913 10167 3 0 0 + 6108 2927 10166 2 0 0 + 6108 2914 10164 0 1 0 + 6100 2887 10195 0 1 0 + 6100 2887 10202 0 1 0 + 6100 2893 10193 3 1 0 + 6100 2893 10207 1 1 0 + 6102 2915 10223 3 0 0 + 6102 2927 10227 0 0 0 + 6102 2929 10189 1 0 0 + 6104 2917 10190 1 1 0 + 6106 2901 10231 3 0 0 + 6106 2913 10180 2 0 0 + 6106 2924 10180 0 0 0 + 6106 2927 10180 2 0 0 + 6106 2930 10183 3 0 0 + 6106 2912 10193 2 1 0 + 6107 2922 10211 3 0 0 + 6108 2909 10185 1 0 0 + 6108 2913 10219 1 0 0 + 6108 2918 10199 1 0 0 + 6108 2919 10191 0 0 0 + 6108 2921 10229 0 0 0 + 6108 2926 10222 1 0 0 + 6109 2903 10216 3 0 0 + 6109 2914 10196 0 0 0 + 6110 2906 10200 1 0 0 + 6110 2906 10203 1 1 0 + 6114 2896 10199 0 0 0 + 6114 2888 10199 0 2 0 + 6975 2930 10195 3 0 0 + 6977 2930 10185 1 0 0 + 1530 2964 3206 2 0 0 + 1531 2956 3205 0 0 0 + 1534 2950 3207 0 0 9 + 1534 2950 3214 1 0 0 + 1534 2963 3213 3 0 0 + 1534 2969 3216 0 0 0 + 11994 2972 3314 0 0 0 + 11994 2980 3316 0 0 0 + 11707 2949 3379 0 0 0 + 11707 2982 3371 3 0 0 + 11707 2989 3368 3 0 0 + 11708 2945 3337 0 0 0 + 11708 2956 3378 0 0 0 + 11708 2961 3372 1 0 0 + 11708 2966 3328 1 0 0 + 11708 2971 3376 0 0 0 + 11708 2972 3383 3 0 0 + 11708 2977 3373 1 0 0 + 11712 2950 3385 2 0 0 + 11712 2958 3385 2 0 0 + 11714 2973 3348 1 0 0 + 11714 2978 3346 1 0 0 + 11714 2983 3348 1 0 0 + 11714 2985 3341 2 0 0 + 11714 2991 3341 0 0 0 + 11714 2959 3333 1 1 0 + 11714 2960 3349 1 1 0 + 11714 2966 3338 2 1 0 + 11714 2976 3329 0 1 0 + 11714 2983 3348 1 1 0 + 11714 2990 3337 3 1 0 + 11714 2991 3341 0 1 0 + 11714 2982 3337 3 2 0 + 11714 2983 3348 1 2 0 + 11715 2959 3334 2 0 0 + 11715 2960 3343 0 0 0 + 11715 2978 3330 1 0 0 + 11715 2966 3328 1 1 0 + 1530 2949 3450 2 0 0 + 1530 2952 3452 1 0 0 + 1530 2952 3501 0 0 0 + 1530 2954 3505 0 0 0 + 1530 2958 3506 2 0 0 + 1530 2955 3497 0 2 0 + 1530 2956 3497 2 2 0 + 2309 2998 3917 3 0 0 + 7222 2968 5007 3 1 0 + 7222 2985 5035 0 1 0 + 7222 2955 5061 2 1 0 + 7222 2960 5091 3 1 0 + 7222 2980 5077 0 1 0 + 7246 2967 5061 2 1 0 + 7246 2967 5066 2 1 0 + 1530 3011 3197 3 0 0 + 1530 3019 3187 1 1 0 + 1531 3013 3188 2 1 0 + 9565 3014 3182 3 0 0 + 9565 3018 3182 3 0 0 + 9565 3018 3187 1 0 0 + 59 3016 3246 0 0 0 + 1530 3012 3239 3 0 0 + 1530 3014 3237 2 0 0 + 1530 3028 3258 1 0 0 + 1530 3031 3248 0 0 0 + 1531 3014 3220 2 0 0 + 1531 3017 3206 3 0 0 + 1531 3026 3245 2 0 0 + 1531 3053 3255 2 0 0 + 1531 3053 3259 0 0 0 + 1534 3016 3259 1 0 0 + 2069 3012 3204 0 0 0 + 8695 3020 3293 2 0 0 + 8695 3022 3296 1 0 0 + 8695 3024 3291 3 0 0 + 8695 3026 3287 0 0 0 + 8695 3026 3292 0 0 0 + 8695 3029 3292 2 0 0 + 8695 3039 3289 1 0 0 + 8695 3039 3297 3 0 0 + 8696 3034 3290 0 0 0 + 11707 3028 3356 3 0 0 + 11707 3037 3347 3 0 0 + 11707 3038 3361 1 0 0 + 11707 3046 3348 2 0 9 + 11707 3046 3353 2 0 0 + 11707 3046 3360 1 0 0 + 11707 3047 3357 2 0 0 + 11707 3061 3374 1 0 0 + 11707 3050 3380 0 1 0 + 11708 3027 3379 3 0 0 + 11714 3010 3344 2 0 0 + 11714 3013 3335 3 0 0 + 11714 3014 3340 0 0 0 + 11714 3015 3333 2 0 0 + 11714 3015 3346 2 0 0 + 11714 3023 3346 0 0 0 + 11714 3027 3344 3 0 0 + 11714 3040 3380 2 0 0 + 11714 3044 3377 1 0 0 + 11714 3047 3380 2 0 0 + 11715 3049 3378 2 0 0 + 3 3015 3453 0 0 0 + 1530 3016 3453 2 0 0 + 1530 3070 3515 3 0 0 + 1530 3019 3515 2 1 0 + 1530 3021 3515 2 1 0 + 1530 3044 3492 1 1 0 + 1530 3045 3485 1 1 0 + 1530 3049 3497 2 1 0 + 1530 3055 3497 0 1 0 + 1530 3058 3485 1 1 0 + 1530 3059 3493 3 1 0 + 2338 3020 3515 0 0 0 + 1530 3023 3627 1 0 0 + 1530 3024 3626 2 0 0 + 1530 3024 3637 2 0 0 + 1530 3033 3632 2 0 0 + 1530 3034 3626 0 0 0 + 1530 3034 3637 0 0 0 + 1530 3035 3627 1 0 0 + 1530 3035 3636 3 0 0 + 1533 3023 3627 1 1 0 + 1533 3023 3636 3 1 0 + 1533 3024 3626 2 1 0 + 1533 3024 3637 2 1 0 + 1533 3034 3626 0 1 0 + 1533 3034 3637 0 1 0 + 1533 3035 3627 1 1 0 + 1533 3035 3636 3 1 0 + 1530 3025 3704 1 0 0 + 1531 3026 3698 0 0 0 + 1531 3028 3702 3 0 0 + 1531 3034 3707 1 0 0 + 1531 3038 3704 0 0 0 + 2558 3038 3956 0 0 0 + 2558 3041 3959 1 0 0 + 2558 3044 3956 2 0 0 + 7259 3061 4984 3 1 0 + 7222 3015 5039 1 1 0 + 7222 3021 5055 1 1 0 + 7222 3029 5042 1 1 0 + 7222 3034 5005 3 1 0 + 7222 3057 5003 3 1 0 + 7232 3046 5014 0 1 0 + 7246 3024 4997 0 1 0 + 7222 3027 5087 1 1 0 + 7222 3044 5088 1 1 0 + 7234 3023 5082 2 1 0 + 2586 3051 9840 0 0 0 + 1530 3118 3124 0 0 0 + 1530 3124 3126 3 0 0 + 1536 3107 3162 3 0 9 + 1536 3109 3166 1 0 0 + 1536 3111 3163 3 0 0 + 1536 3108 3158 1 1 0 + 1536 3109 3159 2 1 0 + 1536 3109 3162 2 1 0 + 1536 3108 3162 0 2 0 + 1530 3088 3251 3 0 0 + 1530 3088 3258 2 0 0 + 1530 3101 3258 2 0 0 + 1536 3128 3246 1 0 0 + 1530 3092 3268 1 0 0 + 1530 3092 3274 2 0 9 + 1530 3098 3270 1 0 0 + 1530 3100 3276 1 0 0 + 22 3106 3361 1 2 0 + 131 3107 3367 2 0 0 + 136 3123 3361 3 0 0 + 11470 3099 3366 1 0 0 + 11470 3101 3371 2 0 0 + 11470 3103 3364 3 0 0 + 11470 3106 3368 1 0 0 + 11470 3109 3358 3 0 0 + 11470 3120 3356 0 0 0 + 11470 3116 3361 1 1 0 + 11470 3119 3356 0 1 0 + 11470 3108 3364 0 2 0 + 11471 3110 3358 1 1 0 + 11471 3113 3367 1 1 0 + 1530 3096 3429 1 2 0 + 11616 3082 3426 1 0 0 + 11616 3098 3426 1 0 0 + 11617 3076 3427 2 0 0 + 1531 3080 3507 2 0 0 + 1537 3092 3470 3 0 0 + 11051 3104 9305 1 0 0 + 11053 3097 9312 2 0 0 + 11055 3104 9319 3 0 0 + 11057 3111 9312 0 0 0 + 11064 3082 9287 0 0 0 + 11066 3126 9337 2 0 0 + 11068 3079 9334 1 0 0 + 11070 3129 9290 3 0 0 + 11151 3082 9287 0 3 0 + 11151 3129 9334 1 3 0 + 11152 3079 9334 1 3 0 + 11152 3129 9290 3 3 0 + 1530 3188 3272 0 0 0 + 1530 3189 3275 1 0 0 + 1530 3190 3384 0 0 0 + 1530 3196 3384 0 0 0 + 1533 3192 3354 1 0 0 + 1533 3194 3357 2 0 0 + 2399 3185 3388 3 0 0 + 1530 3150 3412 3 0 0 + 1530 3151 3405 2 0 0 + 1530 3152 3407 1 0 0 + 1530 3154 3405 0 0 0 + 1530 3154 3409 0 0 0 + 1530 3155 3428 2 0 0 + 1530 3185 3412 0 0 0 + 1530 3187 3404 1 0 0 + 1530 3195 3399 3 0 0 + 1530 3156 3431 3 1 0 + 1531 3175 3425 2 0 0 + 1531 3182 3401 3 0 0 + 1531 3184 3424 1 0 0 + 1531 3187 3428 2 0 0 + 1531 3192 3403 3 0 0 + 1533 3155 3433 2 0 0 + 1533 3155 3438 2 0 0 + 1533 3160 3432 3 0 0 + 1533 3160 3440 1 0 9 + 1533 3183 3434 2 0 0 + 1533 3159 3427 3 1 0 + 2557 3190 3957 1 0 0 + 2557 3191 3963 3 0 0 + 1530 3183 4847 2 0 0 + 1530 3158 9640 0 0 9 + 1530 3159 9620 1 0 0 + 1530 3171 9621 1 0 0 + 1530 3174 9641 3 0 0 + 5501 3183 9611 0 0 0 + 1530 3234 3156 1 0 0 + 1530 3235 3198 1 0 0 + 1530 3247 3193 0 0 0 + 1530 3208 3211 1 0 0 + 1530 3226 3214 2 0 0 + 1530 3226 3223 2 0 0 + 1530 3228 3240 2 0 0 + 1530 3230 3235 1 0 0 + 1530 3234 3207 0 0 0 + 1530 3246 3244 3 0 0 + 1530 3207 3210 2 1 0 + 1530 3207 3227 2 1 0 + 1531 3233 3203 1 0 0 + 1533 3238 3210 0 0 0 + 1534 3214 3245 1 0 0 + 1536 3207 3217 1 0 0 + 1536 3215 3211 1 0 0 + 1536 3215 3225 1 0 0 + 1536 3207 3214 2 1 0 + 1536 3207 3222 2 1 0 + 1530 3225 3293 0 0 0 + 1530 3230 3291 2 0 0 + 1530 3205 3378 3 0 0 + 1530 3206 3385 2 0 9 + 1530 3218 3386 0 0 0 + 1530 3224 3386 2 0 0 + 1530 3231 3386 1 0 0 + 1530 3235 3386 1 0 0 + 1530 3241 3382 2 0 0 + 1530 3246 3385 1 0 0 + 1530 3256 3388 0 0 0 + 1591 3216 3381 1 0 0 + 2398 3251 3385 1 0 0 + 1530 3229 3396 1 0 0 + 1530 3234 3396 0 0 0 + 1530 3234 3426 2 0 0 + 1530 3235 3406 2 0 0 + 1530 3239 3392 3 0 0 + 1530 3240 3449 0 0 0 + 1530 3241 3406 0 0 0 + 1530 3242 3412 0 0 0 + 1530 3243 3450 0 0 0 + 1530 3244 3396 3 0 0 + 1530 3248 3396 0 0 0 + 1530 3248 3411 3 0 0 + 1530 3260 3400 0 0 0 + 1530 3205 3399 1 1 0 + 1530 3216 3413 3 1 0 + 1531 3231 3433 2 0 0 + 1531 3233 3427 0 0 0 + 1531 3233 3438 3 0 0 + 1531 3249 3435 3 0 0 + 1531 3253 3399 2 0 0 + 1531 3253 3431 2 0 0 + 1533 3222 3395 2 1 0 + 1533 3224 3401 0 1 0 + 1533 3226 3397 3 1 0 + 1533 3227 3401 3 1 0 + 1531 3227 3223 0 0 0 + 1530 3226 3214 0 0 0 + 1533 3230 3397 3 1 0 + 1534 3205 3432 3 0 0 + 1534 3208 3399 1 0 0 + 1534 3209 3419 2 0 9 + 1534 3214 3415 3 0 0 + 1534 3216 3395 3 0 0 + 1534 3217 3419 0 0 0 + 1534 3217 3399 1 1 0 + 1530 3217 3492 2 0 0 + 1530 3243 3473 0 0 0 + 1530 3243 3500 0 0 0 + 1530 3202 3475 3 1 0 + 1530 3204 3488 0 1 0 + 1530 3207 3473 0 1 0 + 1530 3211 3468 0 1 0 + 1530 3216 3489 1 1 0 + 1530 3221 3492 0 1 0 + 1530 3221 3496 0 1 0 + 1533 3203 3494 3 0 0 + 1533 3242 3485 0 0 0 + 1533 3255 3462 1 0 0 + 1533 3235 3486 0 1 0 + 1536 3204 3478 2 0 0 + 1536 3204 3485 2 0 0 + 1536 3206 3472 2 0 0 + 1536 3214 3486 1 0 0 + 1536 3215 3477 3 0 0 + 1536 3217 3488 2 0 0 + 1536 3219 3472 0 0 0 + 1534 3223 3295 2 0 0 + 1536 3223 3479 3 0 0 + 1536 3258 3484 1 0 0 + 1536 3219 3472 0 1 0 + 1591 3209 3458 1 0 0 + 1591 3216 3458 1 0 0 + 1530 3238 9767 1 0 0 + 1530 3249 9774 3 0 0 + 1530 3251 9770 3 0 0 + 2397 3247 9779 1 0 0 + 1530 3241 9910 1 0 0 + 1530 3245 9916 2 0 0 + 6624 3308 2799 0 0 0 + 6625 3308 2800 0 0 0 + 1531 3276 3180 3 0 0 + 1531 3278 3191 3 0 0 + 1531 3279 3185 1 0 0 + 1531 3311 3183 1 0 0 + 1534 3321 3142 2 0 0 + 1531 3316 3241 1 0 0 + 1530 3268 3382 0 0 0 + 1530 3273 3380 3 0 0 + 1530 3274 3382 2 0 0 + 1531 3268 3387 0 0 0 + 1531 3275 3389 3 0 0 + 1533 3278 3382 2 0 0 + 1533 3281 3385 3 0 0 + 1533 3283 3389 3 0 0 + 2032 3282 3382 2 0 0 + 1530 3284 3396 0 0 0 + 1531 3276 3421 1 0 0 + 1531 3278 3397 3 0 0 + 1531 3278 3404 3 0 0 + 1591 3268 3435 1 0 0 + 1591 3273 3417 0 0 0 + 1530 3302 3503 2 0 0 + 1534 3277 3501 0 1 0 + 1534 3280 3488 3 1 0 + 1534 3280 3495 3 1 0 + 1534 3284 3501 0 1 0 + 1530 3276 3929 3 0 0 + 1530 3276 3933 1 0 0 + 1530 3279 3939 2 0 9 + 1530 3282 3934 0 0 9 + 1530 3283 3931 2 0 0 + 1530 3288 3930 2 0 0 + 1530 3292 3931 2 0 0 + 1530 3294 3932 3 0 0 + 1530 3290 3931 2 1 0 + 1530 3293 3934 0 1 0 + 1539 3285 3938 3 0 0 + 1539 3286 3935 1 0 0 + 6238 3370 2971 2 0 0 + 6240 3370 2970 2 0 0 + 1533 3352 3337 1 0 0 + 1533 3357 3344 0 0 0 + 10431 3371 9312 1 0 0 + 10419 3372 9556 0 0 0 + 10420 3365 9542 1 0 0 + 10421 3374 9547 0 0 0 + 10423 3354 9558 1 0 0 + 10425 3355 9558 1 0 0 + 10427 3353 9544 1 0 0 + 10429 3354 9544 1 0 0 + 5126 3445 3554 1 2 0 + 10527 3426 3555 1 1 0 + 10529 3427 3555 1 1 0 + 1530 3484 3290 3 0 9 + 1530 3488 3294 1 0 0 + 1530 3494 3289 2 0 0 + 5244 3461 3555 1 0 0 + 5245 3574 3311 3 0 0 + 6824 3534 3306 1 0 0 + 6824 3534 3314 2 0 0 + 6824 3537 3319 3 0 0 + 6824 3545 3320 3 0 0 + 1530 3540 3555 0 0 0 + 1530 3545 3555 0 0 0 + 1530 3552 3555 2 0 0 + 1530 3557 3555 2 0 0 + 1530 3539 3554 2 1 0 + 1530 3558 3554 0 1 0 + 5172 3548 3551 1 1 0 + 5174 3548 3565 0 0 0 + 5183 3548 3535 1 0 0 + 5183 3548 3543 1 0 0 + 5183 3548 3551 1 0 0 + 5183 3549 3558 3 0 0 + 5183 3549 3543 3 1 0 + 5186 3548 3558 3 0 0 + 5186 3549 3535 1 0 0 + 5186 3549 3543 1 0 0 + 5186 3549 3551 1 0 0 + 5186 3548 3543 3 1 0 + 5244 3615 3543 2 1 0 + 5244 3659 3471 1 0 0 + 5244 3670 3497 2 0 0 + 5244 3674 3472 3 0 0 + 5244 3676 3476 1 0 0 + 5244 3684 3476 1 0 0 + 5244 3656 3514 0 1 0 + 1530 3079 3497 3 0 0 + 12348 3207 3217 1 0 0 \ No newline at end of file diff --git a/2006Redone Server/data/doorsbackup.txt b/2006Redone Server/data/doorsbackup.txt new file mode 100644 index 00000000..7785dcea --- /dev/null +++ b/2006Redone Server/data/doorsbackup.txt @@ -0,0 +1,1024 @@ + 6106 1943 4702 1 0 0 + 6109 1933 4691 0 0 0 + 6114 1986 4494 2 0 0 + 6114 1986 4529 2 0 0 + 6114 2003 4494 0 0 0 + 6114 2003 4529 0 0 0 + 6114 2028 4494 2 0 0 + 6114 2028 4529 2 0 0 + 6114 2045 4494 0 0 0 + 6114 2045 4529 0 0 0 + 6114 1986 4494 2 1 0 + 6114 1986 4529 2 1 0 + 6114 2003 4494 0 1 0 + 6114 2003 4529 0 1 0 + 6114 2028 4494 2 1 0 + 6114 2028 4529 2 1 0 + 6114 2045 4494 0 1 0 + 6114 2045 4529 0 1 0 + 6114 1986 4494 2 2 0 + 6114 1986 4529 2 2 0 + 6114 2003 4494 0 2 0 + 6114 2003 4529 0 2 0 + 6114 2028 4494 2 2 0 + 6114 2028 4529 2 2 0 + 6114 2045 4494 0 2 0 + 6114 2045 4529 0 2 0 + 6114 1986 4494 2 3 0 + 6114 1986 4529 2 3 0 + 6114 2003 4494 0 3 0 + 6114 2003 4529 0 3 0 + 6114 2028 4494 2 3 0 + 6114 2028 4529 2 3 0 + 6114 2045 4494 0 3 0 + 6114 2045 4529 0 3 0 + 1530 2035 4646 1 0 0 + 1530 2038 4646 1 0 0 + 1530 2042 4644 2 0 0 + 8786 2041 4646 1 0 0 + 8787 2042 4633 1 0 0 + 8788 2037 4633 1 0 0 + 8789 2034 4636 0 0 0 + 3270 2158 4566 0 1 0 + 1530 2128 4915 3 0 0 + 1530 2128 4922 2 0 0 + 1530 2132 4919 1 0 0 + 1530 2141 4922 2 0 0 + 4636 2198 4943 1 1 0 + 4637 2217 4943 1 1 0 + 4638 2191 4950 2 0 0 + 4638 2191 4961 2 0 0 + 4638 2191 4969 2 0 0 + 4638 2198 4943 1 0 0 + 4638 2198 4976 3 0 0 + 4638 2206 4976 3 0 0 + 4638 2209 4976 3 0 0 + 4638 2217 4943 1 0 0 + 4638 2217 4976 3 0 0 + 4638 2224 4950 0 0 0 + 4638 2224 4961 0 0 0 + 4638 2224 4969 0 0 0 + 4640 2191 4958 2 0 0 + 4640 2224 4958 0 0 0 + 4640 2191 4958 2 1 0 + 4640 2224 4958 0 1 0 + 11196 2224 4950 0 1 0 + 11197 2191 4950 2 1 0 + 1530 2313 9803 3 0 0 + 1530 2325 9801 3 0 0 + 4465 2415 3073 0 0 0 + 4467 2384 3134 2 0 0 + 1530 2463 3176 0 0 0 + 1530 2467 3178 0 0 0 + 1533 2443 3183 1 0 0 + 1530 2467 3301 0 0 0 + 1530 2470 3285 0 0 0 + 1530 2470 3322 1 0 0 + 1530 2471 3307 2 0 0 + 1530 2476 3317 1 0 0 + 1530 2482 3287 3 0 0 + 1530 2483 3295 0 0 0 + 1530 2483 3307 0 0 0 + 1530 2487 3295 2 0 0 + 1530 2487 3301 2 0 0 + 1530 2488 3322 1 0 0 + 2997 2467 3295 0 0 0 + 2997 2467 3307 0 0 0 + 2997 2470 3317 1 0 0 + 2997 2471 3295 2 0 0 + 2997 2471 3301 2 0 0 + 2997 2477 3287 3 0 0 + 2997 2482 3317 1 0 0 + 2997 2482 3322 1 0 0 + 2997 2488 3317 1 0 0 + 10260 2436 3345 1 0 0 + 10261 2435 3345 0 1 0 + 10261 2438 3347 3 1 0 + 10262 2433 3348 2 0 0 + 10264 2433 3347 2 0 0 + 7274 2472 4972 0 0 0 + 7302 2447 4979 0 0 0 + 7317 2463 4963 2 0 0 + 7320 2480 4956 2 0 0 + 7323 2446 4956 2 0 0 + 7326 2478 4940 2 0 0 + 7354 2452 4943 1 0 0 + 1530 2551 3098 3 0 0 + 1533 2551 3082 1 0 0 + 1530 2505 3256 3 0 9 + 1530 2524 3254 1 0 0 + 2184 2502 3250 1 0 0 + 1530 2502 3309 2 0 0 + 1530 2502 3319 2 0 0 + 1530 2508 3323 1 0 0 + 1530 2511 3309 0 0 0 + 1530 2519 3275 0 0 0 + 1530 2521 3314 2 0 0 + 1530 2531 3276 1 0 0 + 1530 2541 3280 3 0 0 + 1530 2546 3325 2 0 0 + 1530 2551 3308 2 0 0 + 1530 2552 3314 2 0 0 + 1531 2527 3293 3 1 0 + 2034 2547 3325 0 1 0 + 2036 2551 3320 1 0 0 + 2528 2530 3314 0 0 0 + 2535 2533 3272 3 0 0 + 2535 2540 3273 3 0 0 + 2546 2525 3311 1 0 0 + 2548 2526 3311 1 0 0 + 2997 2502 3314 2 0 0 + 2997 2502 3323 1 0 0 + 2997 2510 3304 2 0 0 + 2997 2511 3314 0 0 0 + 2997 2511 3319 0 0 0 + 2997 2514 3323 1 0 0 + 2997 2523 3274 1 0 0 + 2997 2525 3272 3 0 0 + 2997 2536 3280 3 0 0 + 2997 2547 3280 3 0 0 + 2997 2549 3274 3 0 0 + 1530 2500 3328 1 0 0 + 1530 2506 3328 1 0 0 + 1530 2510 3380 1 0 0 + 1530 2512 3328 1 0 0 + 1530 2520 3332 0 0 0 + 1530 2521 3381 1 0 0 + 1530 2522 3375 2 0 0 + 2036 2551 3328 3 0 0 + 2537 2531 3328 1 0 0 + 1530 2524 3434 1 0 0 + 1536 2521 3432 0 0 0 + 1533 2525 3495 0 0 0 + 1533 2522 3495 3 1 0 + 1542 2551 3570 0 0 0 + 1544 2551 3569 0 0 0 + 4247 2534 3898 3 0 0 + 4247 2537 3894 0 0 0 + 4247 2539 3899 2 0 0 + 4247 2542 3895 1 0 0 + 4247 2547 3895 2 0 0 + 4247 2551 3893 1 0 0 + 4696 2512 3850 3 0 0 + 4696 2513 3868 1 0 0 + 4696 2517 3858 3 0 0 + 1991 2515 9575 1 0 0 + 2526 2539 9672 2 0 0 + 2002 2540 9900 1 0 0 + 2002 2542 9892 1 0 0 + 1530 2594 3102 1 0 0 + 1530 2591 3105 1 1 0 + 1530 2597 3105 1 1 0 + 1531 2611 3084 1 0 9 + 1533 2563 3082 2 0 0 + 1533 2603 3082 3 0 0 + 77 2606 3160 2 0 0 + 77 2606 3163 2 0 0 + 77 2606 3166 2 0 0 + 78 2606 3159 2 0 0 + 78 2606 3162 2 0 0 + 78 2606 3165 2 0 0 + 81 2585 3141 0 0 0 + 81 2617 3171 1 0 0 + 82 2606 3152 0 0 9 + 1530 2565 3188 2 0 0 + 1530 2567 3162 2 0 0 + 1530 2569 3150 1 0 0 + 1530 2570 3168 3 0 0 + 1530 2578 3195 3 0 0 + 1530 2590 3192 3 0 0 + 1530 2599 3192 3 0 0 + 1530 2605 3182 0 0 0 + 1530 2608 3181 3 0 0 + 1530 2609 3143 0 0 0 + 1530 2609 3191 3 0 0 + 1530 2612 3182 2 0 0 + 1530 2613 3150 0 0 0 + 1530 2616 3145 1 1 0 + 1531 2584 3193 1 0 0 + 1533 2595 3188 1 0 0 + 1533 2616 3147 3 0 0 + 131 2566 3237 2 0 0 + 1530 2567 3245 1 0 0 + 1530 2569 3239 3 0 0 + 1530 2574 3250 0 0 0 + 1530 2602 3209 0 0 0 + 1530 2606 3219 3 0 0 + 1530 2610 3209 2 0 0 + 1530 2564 3310 0 0 0 + 1530 2573 3302 3 0 0 + 1530 2574 3285 0 0 0 + 1530 2574 3293 2 0 0 + 1530 2574 3308 0 0 0 + 1530 2577 3287 3 0 0 + 1530 2577 3306 1 0 0 + 1530 2579 3285 2 0 0 + 1530 2579 3308 2 0 0 + 1530 2610 3307 1 0 0 + 1530 2610 3324 2 0 0 + 1530 2574 3285 0 1 0 + 1530 2574 3308 0 1 0 + 1530 2579 3285 2 1 0 + 1530 2579 3308 2 1 0 + 1533 2564 3321 2 0 0 + 1533 2565 3272 3 0 0 + 1533 2565 3317 1 0 0 + 1533 2567 3271 2 0 0 + 1533 2569 3273 1 0 0 + 1533 2569 3322 0 0 0 + 1533 2570 3271 0 0 0 + 1533 2571 3322 2 0 0 + 1533 2573 3271 3 0 0 + 1533 2576 3320 0 0 0 + 1533 2612 3309 2 0 0 + 1533 2621 3295 3 0 0 + 1533 2566 3268 2 1 0 + 1533 2567 3321 1 1 0 + 1533 2569 3323 0 1 0 + 1533 2571 3323 2 1 0 + 1533 2572 3268 0 1 0 + 1533 2573 3321 1 1 0 + 1533 2612 3325 3 1 0 + 1533 2615 3292 1 1 0 + 1533 2615 3315 0 1 0 + 1533 2616 3317 3 1 0 + 1533 2616 3325 3 1 0 + 1533 2617 3294 0 1 0 + 1533 2622 3293 1 1 0 + 1534 2614 3295 2 0 0 + 1536 2572 3288 3 0 0 + 1536 2572 3305 1 0 0 + 1536 2573 3295 3 0 0 + 1536 2574 3303 2 0 0 + 1536 2573 3302 3 1 0 + 1536 2575 3293 0 1 0 + 2546 2576 3298 0 0 0 + 2548 2576 3299 0 0 0 + 2555 2572 3288 3 1 0 + 2555 2572 3305 1 1 0 + 2556 2610 3316 2 0 0 + 1530 2570 3333 2 0 0 + 1530 2574 3333 0 0 0 + 1530 2578 3333 0 0 0 + 1530 2584 3339 3 0 0 + 1530 2616 3345 2 0 0 + 1533 2576 3336 3 1 0 + 1533 2586 3336 0 1 0 + 1533 2587 3335 2 1 0 + 2054 2592 3339 3 0 0 + 2554 2565 3356 0 0 0 + 1530 2611 3398 1 0 0 + 1531 2598 3404 2 0 9 + 2025 2611 3394 3 0 0 + 4 2576 3461 0 0 0 + 1530 2609 3474 0 0 0 + 4248 2621 3666 1 0 0 + 4247 2615 3897 1 0 0 + 4696 2603 3874 3 0 0 + 4696 2604 3878 1 0 0 + 4701 2618 3895 3 0 0 + 1991 2579 4455 1 0 0 + 2559 2601 9482 3 0 0 + 1530 2565 9612 1 0 0 + 1530 2575 9648 2 0 0 + 1530 2575 9651 2 0 0 + 1530 2582 9648 0 0 0 + 1530 2582 9651 0 0 0 + 1530 2595 9644 2 0 0 + 1530 2598 9648 3 0 0 + 1530 2602 9638 0 0 0 + 2000 2575 9861 3 0 0 + 2002 2566 9901 1 0 0 + 2002 2568 9893 1 0 0 + 2002 2604 9900 1 0 0 + 2002 2606 9892 1 0 0 + 1536 2677 3088 1 0 0 + 1530 2633 3169 1 0 0 + 1530 2634 3164 1 0 0 + 1530 2656 3161 1 0 0 + 1533 2656 3152 1 1 0 + 1534 2640 3172 3 0 0 + 1534 2656 3154 0 0 0 + 1530 2644 3273 3 0 0 + 1530 2645 3314 2 0 0 + 1530 2648 3299 2 0 0 + 1530 2650 3297 0 0 9 + 1530 2650 3305 3 0 0 + 1530 2656 3292 2 0 0 + 1530 2659 3320 1 0 0 + 1530 2663 3279 1 0 0 + 1530 2666 3294 3 0 0 + 1530 2668 3276 0 0 0 + 1530 2669 3316 1 0 9 + 1530 2670 3320 3 0 0 + 1530 2675 3285 3 0 0 + 1530 2676 3280 1 0 0 + 1530 2666 3291 1 1 0 + 1531 2661 3291 1 1 0 + 1533 2628 3323 2 0 0 + 1533 2636 3323 2 0 0 + 1533 2639 3323 2 0 0 + 1533 2632 3319 1 1 0 + 1533 2638 3319 1 1 0 + 1534 2653 3296 0 0 9 + 2550 2674 3305 1 0 0 + 2551 2674 3304 3 0 0 + 2705 2634 3323 0 0 0 + 2706 2635 3321 1 0 0 + 1530 2632 3381 1 0 0 + 1530 2641 3387 1 0 0 + 1530 2643 3360 3 0 0 + 1530 2644 3333 1 0 0 + 1530 2639 3415 2 0 9 + 1533 2641 3424 2 0 0 + 1533 2641 3452 0 0 0 + 1533 2642 3432 2 0 0 + 1533 2649 3449 3 0 0 + 1591 2654 3427 2 0 9 + 1591 2667 3414 0 0 9 + 1591 2669 3442 2 0 9 + 1591 2682 3429 0 0 9 + 99 2657 3496 1 0 0 + 4148 2667 3683 0 0 0 + 4165 2631 3667 3 0 0 + 4166 2636 3667 3 0 0 + 4247 2645 3663 3 0 0 + 4248 2662 3692 3 0 0 + 4250 2627 3656 3 0 0 + 4250 2627 3675 0 0 0 + 4250 2638 3652 2 0 0 + 4250 2655 3654 3 0 0 + 4250 2664 3652 2 0 0 + 4250 2665 3702 2 0 0 + 4250 2671 3652 0 0 0 + 4250 2671 3665 2 0 0 + 4250 2672 3675 2 0 0 + 4250 2677 3690 2 0 0 + 4250 2678 3665 0 0 0 + 4250 2682 3685 3 0 0 + 4250 2683 3679 3 0 0 + 4250 2683 3680 1 0 0 + 4250 2684 3673 1 0 0 + 1530 2629 4726 1 0 0 + 1530 2630 4681 2 0 0 + 1530 2633 4684 3 0 0 + 1530 2633 4728 0 0 0 + 1530 2638 4688 2 0 9 + 1530 2640 4682 1 0 0 + 1530 2645 4684 2 0 0 + 1530 2638 4688 0 1 9 + 10325 2665 9663 1 0 0 + 92 2648 9857 1 0 0 + 93 2646 9870 1 0 0 + 1533 2726 3368 2 0 0 + 1530 2702 3401 3 0 0 + 1530 2701 3477 3 0 0 + 1530 2713 3483 3 0 0 + 1530 2716 3472 0 0 0 + 1530 2706 3472 0 1 0 + 1530 2709 3472 2 1 0 + 1533 2698 3494 1 0 0 + 1533 2750 3495 1 0 0 + 1533 2750 3504 3 0 0 + 1591 2749 3495 1 2 0 + 1530 2731 3580 3 0 0 + 1530 2736 3577 3 1 0 + 1530 2744 3577 3 1 0 + 1533 2735 3575 2 0 0 + 1533 2735 3578 2 0 0 + 1533 2735 3581 2 0 0 + 1533 2738 3578 0 0 0 + 1533 2741 3576 3 0 0 + 1533 2745 3575 0 0 0 + 1533 2746 3577 3 0 0 + 1533 2735 3578 2 1 0 + 1533 2735 3581 2 1 0 + 1533 2739 3578 3 1 0 + 1533 2741 3578 3 1 0 + 1533 2745 3578 0 1 0 + 1533 2745 3581 0 1 0 + 2427 2719 9671 1 0 0 + 2429 2722 9671 1 0 0 + 2430 2727 9690 2 0 0 + 2431 2723 9711 3 0 0 + 1530 2770 3197 0 0 0 + 1530 2782 3194 2 0 0 + 1530 2789 3197 0 0 0 + 1531 2777 3195 0 0 0 + 1531 2799 3167 1 0 0 + 1533 2767 3194 0 0 0 + 1533 2771 3189 0 0 0 + 1533 2778 3190 0 0 0 + 1533 2807 3163 0 0 0 + 1534 2790 3177 2 0 0 + 1534 2794 3180 0 0 0 + 2621 2764 3197 0 0 0 + 2622 2781 3197 3 0 0 + 2626 2811 3170 0 0 0 + 2627 2774 3187 1 0 0 + 2628 2788 3189 1 0 0 + 1530 2764 3285 2 2 0 + 1533 2765 3277 2 1 0 + 1533 2765 3287 2 1 0 + 1530 2815 3448 1 0 0 + 1531 2797 3437 0 0 9 + 1533 2806 3452 0 0 0 + 24 2764 3503 2 1 0 + 1533 2766 3495 1 0 0 + 1533 2766 3504 3 0 0 + 1533 2752 3494 0 1 0 + 1533 2764 3494 2 1 0 + 4962 2799 4453 0 0 0 + 1530 2757 4726 1 0 0 + 1530 2758 4681 2 0 0 + 1530 2761 4684 3 0 0 + 1530 2761 4728 0 0 0 + 1530 2763 4676 0 0 0 + 1530 2766 4684 0 1 0 + 1530 2766 4688 0 1 9 + 1530 2848 3370 2 0 0 + 1533 2820 3356 1 0 0 + 1533 2822 3354 2 0 0 + 1533 2851 3341 1 0 0 + 1530 2816 3438 1 0 0 + 1530 2828 3450 0 0 0 + 1531 2822 3440 0 0 0 + 3745 2822 3555 2 0 0 + 3746 2820 3557 1 0 0 + 10325 2835 5093 1 0 0 + 10325 2838 5100 2 0 0 + 10325 2840 5091 0 0 0 + 10325 2843 5097 3 0 0 + 10325 2852 5097 3 0 0 + 10325 2855 5091 2 0 0 + 10325 2857 5100 0 0 0 + 10325 2860 5093 1 0 0 + 10325 2838 5099 2 1 0 + 10325 2857 5099 0 1 0 + 10326 2847 5088 3 0 0 + 10326 2848 5088 3 0 0 + 3776 2861 10092 2 0 0 + 3776 2828 10091 3 1 0 + 3776 2833 10070 2 1 0 + 3776 2837 10063 1 1 0 + 3776 2838 10057 2 2 0 + 6108 2872 10172 1 0 0 + 6100 2872 10195 2 1 0 + 6100 2872 10203 2 1 0 + 6101 2866 10199 3 0 0 + 6101 2867 10189 3 0 0 + 6101 2872 10206 2 0 0 + 6104 2837 10197 0 0 0 + 6104 2838 10193 0 1 0 + 6104 2841 10197 2 1 0 + 6104 2837 10223 2 2 0 + 6106 2827 10218 3 0 0 + 6106 2833 10197 2 0 0 + 6106 2848 10187 3 0 0 + 6106 2854 10224 0 0 0 + 6106 2856 10224 2 0 0 + 6106 2863 10229 3 0 0 + 6107 2826 10201 0 0 0 + 6107 2827 10223 2 0 0 + 6107 2829 10197 1 0 0 + 6107 2830 10224 1 0 0 + 6107 2841 10191 2 0 0 + 6110 2837 10219 1 0 0 + 6110 2861 10227 3 1 0 + 6110 2834 10223 2 2 0 + 6114 2862 10199 2 0 0 + 6114 2870 10199 2 2 0 + 1530 2928 3242 1 0 0 + 1530 2924 3242 3 1 0 + 1530 2925 3243 1 1 0 + 1530 2926 3258 3 1 0 + 1530 2928 3246 1 1 0 + 1530 2935 3256 1 1 0 + 1530 2938 3244 1 1 0 + 1530 2926 3258 3 2 0 + 1530 2934 3252 1 2 0 + 1533 2928 3209 2 0 0 + 1533 2932 3213 1 0 0 + 2595 2941 3248 0 0 0 + 1530 2922 3323 0 0 0 + 1530 2884 3423 0 0 0 + 1530 2884 3438 3 0 0 + 1530 2884 3440 1 0 0 + 1530 2884 3444 3 0 0 + 1530 2886 3420 3 0 0 + 1530 2893 3421 3 0 0 + 1530 2896 3450 2 0 0 + 1530 2899 3441 2 0 0 + 1530 2914 3435 3 0 0 + 1530 2898 3424 1 1 0 + 1530 2898 3432 3 1 0 + 1530 2902 3428 0 1 0 + 1531 2885 3452 0 0 0 + 1531 2895 3428 3 0 0 + 1531 2901 3428 1 0 0 + 1530 2902 3468 3 0 0 + 1530 2902 3474 1 0 0 + 1530 2941 3517 0 0 0 + 1530 2895 3508 3 1 0 + 1530 2901 3471 3 1 0 + 2624 2902 3510 0 0 0 + 2625 2902 3511 0 0 0 + 2861 2901 3473 0 0 0 + 2862 2901 3465 1 0 0 + 2863 2934 3463 0 0 0 + 1530 2911 3531 0 0 0 + 1530 2920 3561 1 0 0 + 1530 2920 3576 2 0 0 + 1530 2921 3571 1 0 0 + 1530 2932 3564 1 0 0 + 1533 2916 3537 0 0 0 + 1533 2922 3558 2 0 0 + 1533 2909 3543 3 1 0 + 1533 2912 3543 3 1 0 + 1534 2907 3544 2 0 0 + 1534 2923 3545 1 0 0 + 3747 2906 3543 3 1 0 + 1530 2935 4698 3 0 0 + 1533 2935 4682 1 0 0 + 1530 2896 9702 2 0 0 + 1530 2896 9709 2 0 0 + 1530 2918 9702 0 0 0 + 1530 2918 9709 0 0 0 + 2631 2931 9690 3 0 0 + 2631 2931 9694 1 0 0 + 1542 2892 9826 3 0 0 + 1544 2893 9826 3 0 0 + 6108 2913 10167 3 0 0 + 6108 2927 10166 2 0 0 + 6108 2914 10164 0 1 0 + 6100 2887 10195 0 1 0 + 6100 2887 10202 0 1 0 + 6100 2893 10193 3 1 0 + 6100 2893 10207 1 1 0 + 6102 2915 10223 3 0 0 + 6102 2927 10227 0 0 0 + 6102 2929 10189 1 0 0 + 6104 2917 10190 1 1 0 + 6106 2901 10231 3 0 0 + 6106 2913 10180 2 0 0 + 6106 2924 10180 0 0 0 + 6106 2927 10180 2 0 0 + 6106 2930 10183 3 0 0 + 6106 2912 10193 2 1 0 + 6107 2922 10211 3 0 0 + 6108 2909 10185 1 0 0 + 6108 2913 10219 1 0 0 + 6108 2918 10199 1 0 0 + 6108 2919 10191 0 0 0 + 6108 2921 10229 0 0 0 + 6108 2926 10222 1 0 0 + 6109 2903 10216 3 0 0 + 6109 2914 10196 0 0 0 + 6110 2906 10200 1 0 0 + 6110 2906 10203 1 1 0 + 6114 2896 10199 0 0 0 + 6114 2888 10199 0 2 0 + 6975 2930 10195 3 0 0 + 6977 2930 10185 1 0 0 + 1530 2964 3206 2 0 0 + 1531 2956 3205 0 0 0 + 1534 2950 3207 0 0 9 + 1534 2950 3214 1 0 0 + 1534 2963 3213 3 0 0 + 1534 2969 3216 0 0 0 + 11994 2972 3314 0 0 0 + 11994 2980 3316 0 0 0 + 11707 2949 3379 0 0 0 + 11707 2982 3371 3 0 0 + 11707 2989 3368 3 0 0 + 11708 2945 3337 0 0 0 + 11708 2956 3378 0 0 0 + 11708 2961 3372 1 0 0 + 11708 2966 3328 1 0 0 + 11708 2971 3376 0 0 0 + 11708 2972 3383 3 0 0 + 11708 2977 3373 1 0 0 + 11712 2950 3385 2 0 0 + 11712 2958 3385 2 0 0 + 11714 2973 3348 1 0 0 + 11714 2978 3346 1 0 0 + 11714 2983 3348 1 0 0 + 11714 2985 3341 2 0 0 + 11714 2991 3341 0 0 0 + 11714 2959 3333 1 1 0 + 11714 2960 3349 1 1 0 + 11714 2966 3338 2 1 0 + 11714 2976 3329 0 1 0 + 11714 2983 3348 1 1 0 + 11714 2990 3337 3 1 0 + 11714 2991 3341 0 1 0 + 11714 2982 3337 3 2 0 + 11714 2983 3348 1 2 0 + 11715 2959 3334 2 0 0 + 11715 2960 3343 0 0 0 + 11715 2978 3330 1 0 0 + 11715 2966 3328 1 1 0 + 1530 2949 3450 2 0 0 + 1530 2952 3452 1 0 0 + 1530 2952 3501 0 0 0 + 1530 2954 3505 0 0 0 + 1530 2958 3506 2 0 0 + 1530 2955 3497 0 2 0 + 1530 2956 3497 2 2 0 + 2309 2998 3917 3 0 0 + 7222 2968 5007 3 1 0 + 7222 2985 5035 0 1 0 + 7222 2955 5061 2 1 0 + 7222 2960 5091 3 1 0 + 7222 2980 5077 0 1 0 + 7246 2967 5061 2 1 0 + 7246 2967 5066 2 1 0 + 1530 3011 3197 3 0 0 + 1530 3019 3187 1 1 0 + 1531 3013 3188 2 1 0 + 9565 3014 3182 3 0 0 + 9565 3018 3182 3 0 0 + 9565 3018 3187 1 0 0 + 59 3016 3246 0 0 0 + 1530 3012 3239 3 0 0 + 1530 3014 3237 2 0 0 + 1530 3028 3258 1 0 0 + 1530 3031 3248 0 0 0 + 1531 3014 3220 2 0 0 + 1531 3017 3206 3 0 0 + 1531 3026 3245 2 0 0 + 1531 3053 3255 2 0 0 + 1531 3053 3259 0 0 0 + 1534 3016 3259 1 0 0 + 2069 3012 3204 0 0 0 + 8695 3020 3293 2 0 0 + 8695 3022 3296 1 0 0 + 8695 3024 3291 3 0 0 + 8695 3026 3287 0 0 0 + 8695 3026 3292 0 0 0 + 8695 3029 3292 2 0 0 + 8695 3039 3289 1 0 0 + 8695 3039 3297 3 0 0 + 8696 3034 3290 0 0 0 + 11707 3028 3356 3 0 0 + 11707 3037 3347 3 0 0 + 11707 3038 3361 1 0 0 + 11707 3046 3348 2 0 9 + 11707 3046 3353 2 0 0 + 11707 3046 3360 1 0 0 + 11707 3047 3357 2 0 0 + 11707 3061 3374 1 0 0 + 11707 3050 3380 0 1 0 + 11708 3027 3379 3 0 0 + 11714 3010 3344 2 0 0 + 11714 3013 3335 3 0 0 + 11714 3014 3340 0 0 0 + 11714 3015 3333 2 0 0 + 11714 3015 3346 2 0 0 + 11714 3023 3346 0 0 0 + 11714 3027 3344 3 0 0 + 11714 3040 3380 2 0 0 + 11714 3044 3377 1 0 0 + 11714 3047 3380 2 0 0 + 11715 3049 3378 2 0 0 + 3 3015 3453 0 0 0 + 1530 3016 3453 2 0 0 + 1530 3070 3515 3 0 0 + 1530 3019 3515 2 1 0 + 1530 3021 3515 2 1 0 + 1530 3044 3492 1 1 0 + 1530 3045 3485 1 1 0 + 1530 3049 3497 2 1 0 + 1530 3055 3497 0 1 0 + 1530 3058 3485 1 1 0 + 1530 3059 3493 3 1 0 + 2338 3020 3515 0 0 0 + 1530 3023 3627 1 0 0 + 1530 3024 3626 2 0 0 + 1530 3024 3637 2 0 0 + 1530 3033 3632 2 0 0 + 1530 3034 3626 0 0 0 + 1530 3034 3637 0 0 0 + 1530 3035 3627 1 0 0 + 1530 3035 3636 3 0 0 + 1533 3023 3627 1 1 0 + 1533 3023 3636 3 1 0 + 1533 3024 3626 2 1 0 + 1533 3024 3637 2 1 0 + 1533 3034 3626 0 1 0 + 1533 3034 3637 0 1 0 + 1533 3035 3627 1 1 0 + 1533 3035 3636 3 1 0 + 1530 3025 3704 1 0 0 + 1531 3026 3698 0 0 0 + 1531 3028 3702 3 0 0 + 1531 3034 3707 1 0 0 + 1531 3038 3704 0 0 0 + 2558 3038 3956 0 0 0 + 2558 3041 3959 1 0 0 + 2558 3044 3956 2 0 0 + 7259 3061 4984 3 1 0 + 7222 3015 5039 1 1 0 + 7222 3021 5055 1 1 0 + 7222 3029 5042 1 1 0 + 7222 3034 5005 3 1 0 + 7222 3057 5003 3 1 0 + 7232 3046 5014 0 1 0 + 7246 3024 4997 0 1 0 + 7222 3027 5087 1 1 0 + 7222 3044 5088 1 1 0 + 7234 3023 5082 2 1 0 + 2112 3046 9756 1 0 0 + 2586 3051 9840 0 0 0 + 1530 3118 3124 0 0 0 + 1530 3124 3126 3 0 0 + 3014 3098 3107 0 0 0 + 3017 3079 3084 0 0 0 + 3018 3072 3090 2 0 0 + 3019 3086 3126 3 0 0 + 3024 3125 3124 0 0 0 + 3025 3130 3124 0 0 0 + 3026 3122 3102 1 0 0 + 1536 3107 3162 3 0 9 + 1536 3109 3166 1 0 0 + 1536 3111 3163 3 0 0 + 1536 3108 3158 1 1 0 + 1536 3109 3159 2 1 0 + 1536 3109 3162 2 1 0 + 1536 3108 3162 0 2 0 + 1530 3088 3251 3 0 0 + 1530 3088 3258 2 0 0 + 1530 3101 3258 2 0 0 + 1536 3128 3246 1 0 0 + 1530 3092 3268 1 0 0 + 1530 3092 3274 2 0 9 + 1530 3098 3270 1 0 0 + 1530 3100 3276 1 0 0 + 22 3106 3361 1 2 0 + 131 3107 3367 2 0 0 + 136 3123 3361 3 0 0 + 11470 3099 3366 1 0 0 + 11470 3101 3371 2 0 0 + 11470 3103 3364 3 0 0 + 11470 3106 3368 1 0 0 + 11470 3109 3358 3 0 0 + 11470 3120 3356 0 0 0 + 11470 3116 3361 1 1 0 + 11470 3119 3356 0 1 0 + 11470 3108 3364 0 2 0 + 11471 3110 3358 1 1 0 + 11471 3113 3367 1 1 0 + 1530 3096 3429 1 2 0 + 1804 3115 3450 3 0 0 + 11616 3082 3426 1 0 0 + 11616 3098 3426 1 0 0 + 11617 3076 3427 2 0 0 + 1530 3079 3496 1 0 0 + 1531 3080 3507 2 0 0 + 1537 3092 3470 3 0 0 + 11051 3104 9305 1 0 0 + 11053 3097 9312 2 0 0 + 11055 3104 9319 3 0 0 + 11057 3111 9312 0 0 0 + 11064 3082 9287 0 0 0 + 11066 3126 9337 2 0 0 + 11068 3079 9334 1 0 0 + 11070 3129 9290 3 0 0 + 11151 3082 9287 0 3 0 + 11151 3129 9334 1 3 0 + 11152 3079 9334 1 3 0 + 11152 3129 9290 3 3 0 + 1530 3108 9570 0 0 0 + 1530 3111 9559 0 0 0 + 1530 3139 3082 3 0 0 + 1530 3188 3272 0 0 0 + 1530 3189 3275 1 0 0 + 1530 3190 3384 0 0 0 + 1530 3196 3384 0 0 0 + 1533 3192 3354 1 0 0 + 1533 3194 3357 2 0 0 + 1805 3191 3363 3 0 0 + 2399 3185 3388 3 0 0 + 1530 3150 3412 3 0 0 + 1530 3151 3405 2 0 0 + 1530 3152 3407 1 0 0 + 1530 3154 3405 0 0 0 + 1530 3154 3409 0 0 0 + 1530 3155 3428 2 0 0 + 1530 3185 3412 0 0 0 + 1530 3187 3404 1 0 0 + 1530 3195 3399 3 0 0 + 1530 3156 3431 3 1 0 + 1531 3175 3425 2 0 0 + 1531 3182 3401 3 0 0 + 1531 3184 3424 1 0 0 + 1531 3187 3428 2 0 0 + 1531 3192 3403 3 0 0 + 1533 3155 3433 2 0 0 + 1533 3155 3438 2 0 0 + 1533 3160 3432 3 0 0 + 1533 3160 3440 1 0 9 + 1533 3183 3434 2 0 0 + 1533 3159 3427 3 1 0 + 2712 3143 3444 3 0 0 + 102 3176 3481 3 0 0 + 2557 3190 3957 1 0 0 + 2557 3191 3963 3 0 0 + 1530 3183 4847 2 0 0 + 1530 3158 9640 0 0 9 + 1530 3159 9620 1 0 0 + 1530 3171 9621 1 0 0 + 1530 3174 9641 3 0 0 + 5501 3183 9611 0 0 0 + 1530 3234 3156 1 0 0 + 1530 3235 3198 1 0 0 + 1530 3247 3193 0 0 0 + 2406 3202 3169 0 0 0 + 1530 3208 3211 1 0 0 + 1530 3226 3214 2 0 0 + 1530 3226 3223 2 0 0 + 1530 3228 3240 2 0 0 + 1530 3230 3235 1 0 0 + 1530 3234 3207 0 0 0 + 1530 3246 3244 3 0 0 + 1530 3207 3210 2 1 0 + 1530 3207 3227 2 1 0 + 1531 3233 3203 1 0 0 + 1533 3238 3210 0 0 0 + 1534 3214 3245 1 0 0 + 1536 3207 3217 1 0 0 + 1536 3215 3211 1 0 0 + 1536 3215 3225 1 0 0 + 1536 3207 3214 2 1 0 + 1536 3207 3222 2 1 0 + 1530 3225 3293 0 0 0 + 1530 3230 3291 2 0 0 + 1530 3205 3378 3 0 0 + 1530 3206 3385 2 0 9 + 1530 3218 3386 0 0 0 + 1530 3224 3386 2 0 0 + 1530 3231 3386 1 0 0 + 1530 3235 3386 1 0 0 + 1530 3241 3382 2 0 0 + 1530 3246 3385 1 0 0 + 1530 3256 3388 0 0 0 + 1591 3216 3381 1 0 0 + 2398 3251 3385 1 0 0 + 1530 3229 3396 1 0 0 + 1530 3234 3396 0 0 0 + 1530 3234 3426 2 0 0 + 1530 3235 3406 2 0 0 + 1530 3239 3392 3 0 0 + 1530 3240 3449 0 0 0 + 1530 3241 3406 0 0 0 + 1530 3242 3412 0 0 0 + 1530 3243 3450 0 0 0 + 1530 3244 3396 3 0 0 + 1530 3248 3396 0 0 0 + 1530 3248 3411 3 0 0 + 1530 3260 3400 0 0 0 + 1530 3205 3399 1 1 0 + 1530 3216 3413 3 1 0 + 1531 3231 3433 2 0 0 + 1531 3233 3427 0 0 0 + 1531 3233 3438 3 0 0 + 1531 3249 3435 3 0 0 + 1531 3253 3399 2 0 0 + 1531 3253 3431 2 0 0 + 1533 3222 3395 2 1 0 + 1533 3224 3401 0 1 0 + 1533 3226 3397 3 1 0 + 1533 3227 3401 3 1 0 + 1533 3230 3397 3 1 0 + 1534 3205 3432 3 0 0 + 1534 3208 3399 1 0 0 + 1534 3209 3419 2 0 9 + 1534 3214 3415 3 0 0 + 1534 3216 3395 3 0 0 + 1534 3217 3419 0 0 0 + 1534 3217 3399 1 1 0 + 1530 3217 3492 2 0 0 + 1530 3243 3473 0 0 0 + 1530 3243 3500 0 0 0 + 1530 3202 3475 3 1 0 + 1530 3204 3488 0 1 0 + 1530 3207 3473 0 1 0 + 1530 3211 3468 0 1 0 + 1530 3216 3489 1 1 0 + 1530 3221 3492 0 1 0 + 1530 3221 3496 0 1 0 + 1533 3203 3494 3 0 0 + 1533 3242 3485 0 0 0 + 1533 3255 3462 1 0 0 + 1533 3235 3486 0 1 0 + 1536 3204 3478 2 0 0 + 1536 3204 3485 2 0 0 + 1536 3206 3472 2 0 0 + 1536 3214 3486 1 0 0 + 1536 3215 3477 3 0 0 + 1536 3217 3488 2 0 0 + 1536 3219 3472 0 0 0 + 1536 3223 3479 3 0 0 + 1536 3258 3484 1 0 0 + 1536 3219 3472 0 1 0 + 1591 3209 3458 1 0 0 + 1591 3216 3458 1 0 0 + 1530 3238 9767 1 0 0 + 1530 3249 9774 3 0 0 + 1530 3251 9770 3 0 0 + 2397 3247 9779 1 0 0 + 1530 3241 9910 1 0 0 + 1530 3245 9916 2 0 0 + 1530 3247 9892 0 0 0 + 6624 3308 2799 0 0 0 + 6625 3308 2800 0 0 0 + 1531 3276 3180 3 0 0 + 1531 3278 3191 3 0 0 + 1531 3279 3185 1 0 0 + 1531 3311 3183 1 0 0 + 1534 3321 3142 2 0 0 + 1531 3316 3241 1 0 0 + 1530 3268 3382 0 0 0 + 1530 3273 3380 3 0 0 + 1530 3274 3382 2 0 0 + 1531 3268 3387 0 0 0 + 1531 3275 3389 3 0 0 + 1533 3278 3382 2 0 0 + 1533 3281 3385 3 0 0 + 1533 3283 3389 3 0 0 + 2032 3282 3382 2 0 0 + 1530 3284 3396 0 0 0 + 1531 3276 3421 1 0 0 + 1531 3278 3397 3 0 0 + 1531 3278 3404 3 0 0 + 1591 3268 3435 1 0 0 + 1591 3273 3417 0 0 0 + 1530 3302 3503 2 0 0 + 1534 3277 3501 0 1 0 + 1534 3280 3488 3 1 0 + 1534 3280 3495 3 1 0 + 1534 3284 3501 0 1 0 + 1530 3276 3929 3 0 0 + 1530 3276 3933 1 0 0 + 1530 3279 3939 2 0 9 + 1530 3282 3934 0 0 9 + 1530 3283 3931 2 0 0 + 1530 3288 3930 2 0 0 + 1530 3292 3931 2 0 0 + 1530 3294 3932 3 0 0 + 1530 3290 3931 2 1 0 + 1530 3293 3934 0 1 0 + 1539 3285 3938 3 0 0 + 1539 3286 3935 1 0 0 + 6238 3370 2971 2 0 0 + 6240 3370 2970 2 0 0 + 1533 3352 3337 1 0 0 + 1533 3357 3344 0 0 0 + 10431 3371 9312 1 0 0 + 10419 3372 9556 0 0 0 + 10420 3365 9542 1 0 0 + 10421 3374 9547 0 0 0 + 10423 3354 9558 1 0 0 + 10425 3355 9558 1 0 0 + 10427 3353 9544 1 0 0 + 10429 3354 9544 1 0 0 + 4487 3428 3535 1 0 0 + 4490 3429 3535 1 0 0 + 5126 3445 3554 1 2 0 + 10527 3426 3555 1 1 0 + 10529 3427 3555 1 1 0 + 1530 3484 3290 3 0 9 + 1530 3488 3294 1 0 0 + 1530 3494 3289 2 0 0 + 5244 3461 3555 1 0 0 + 5245 3574 3311 3 0 0 + 6824 3534 3306 1 0 0 + 6824 3534 3314 2 0 0 + 6824 3537 3319 3 0 0 + 6824 3545 3320 3 0 0 + 1530 3540 3555 0 0 0 + 1530 3545 3555 0 0 0 + 1530 3552 3555 2 0 0 + 1530 3557 3555 2 0 0 + 1530 3539 3554 2 1 0 + 1530 3558 3554 0 1 0 + 5172 3548 3551 1 1 0 + 5174 3548 3565 0 0 0 + 5183 3548 3535 1 0 0 + 5183 3548 3543 1 0 0 + 5183 3548 3551 1 0 0 + 5183 3549 3558 3 0 0 + 5183 3549 3543 3 1 0 + 5186 3548 3558 3 0 0 + 5186 3549 3535 1 0 0 + 5186 3549 3543 1 0 0 + 5186 3549 3551 1 0 0 + 5186 3548 3543 3 1 0 + 5244 3615 3543 2 1 0 + 5244 3659 3471 1 0 0 + 5244 3670 3497 2 0 0 + 5244 3674 3472 3 0 0 + 5244 3676 3476 1 0 0 + 5244 3684 3476 1 0 0 + 5244 3656 3514 0 1 0 + 1512 2444 3099 3 0 0 \ No newline at end of file diff --git a/2006Redone Server/data/doubledoors.txt b/2006Redone Server/data/doubledoors.txt new file mode 100644 index 00000000..78193711 --- /dev/null +++ b/2006Redone Server/data/doubledoors.txt @@ -0,0 +1,260 @@ + 1516 2009 4747 1 0 + 2548 2576 3298 2 0 + 2546 2576 3298 2 0 + 1519 2010 4747 1 0 + 1516 2069 4447 0 0 + 1516 2085 4447 0 0 + 1519 2070 4447 2 0 + 1519 2086 4447 2 0 + 1557 2383 4445 0 0 + 1558 2383 4446 0 0 + 1512 2444 3099 3 0 + 1516 2445 3089 0 0 + 1519 2445 3090 0 0 + 1516 2456 3308 2 0 + 1519 2456 3307 2 0 + 1512 2536 3083 2 0 + 1512 2536 3100 2 0 + 1512 2537 3089 1 0 + 1512 2537 3094 3 0 + 1516 2532 3092 2 0 + 1516 2539 3091 0 0 + 1519 2532 3091 2 0 + 1519 2539 3092 0 0 + 1551 2513 3494 0 0 + 1551 2528 3495 0 0 + 1553 2513 3495 0 0 + 1553 2528 3496 0 0 + 1557 2555 3466 0 0 + 1558 2555 3467 0 0 + 1512 2500 3849 3 0 + 1512 2500 3871 1 0 + 1512 2504 3853 2 0 + 1512 2504 3867 2 0 + 1512 2505 3860 0 0 + 1512 2506 3851 1 0 + 1512 2506 3869 3 0 + 1512 2510 3860 2 0 + 1512 2500 3849 3 1 + 1512 2500 3871 1 1 + 1512 2504 3853 2 1 + 1512 2504 3867 2 1 + 1512 2506 3851 1 1 + 1512 2506 3869 3 1 + 1517 2561 3099 1 0 + 1517 2572 3098 3 0 + 1520 2561 3098 3 0 + 1520 2572 3099 1 0 + 1516 2594 3180 1 0 + 1519 2595 3180 1 0 + 1516 2613 3481 3 0 + 1519 2612 3481 3 0 + 1557 2568 3458 3 0 + 1558 2567 3458 3 0 + 1512 2608 3875 0 0 + 1512 2609 3875 2 0 + 1512 2611 3866 2 0 + 1512 2611 3883 2 0 + 1512 2613 3864 1 0 + 1512 2613 3886 3 0 + 1512 2615 3870 1 0 + 1512 2615 3880 3 0 + 1512 2609 3875 2 1 + 1512 2611 3866 2 1 + 1512 2611 3883 2 1 + 1512 2613 3865 3 1 + 1512 2613 3885 1 1 + 1512 2615 3870 1 1 + 1512 2615 3880 3 1 + 1516 2564 9881 1 0 + 1516 2576 9882 1 0 + 1516 2576 9884 1 0 + 1516 2582 9875 0 0 + 1519 2565 9881 1 0 + 1519 2577 9882 1 0 + 1519 2577 9884 1 0 + 1519 2582 9876 0 0 + 1512 2665 3241 2 0 + 1516 2678 3325 2 0 + 1519 2678 3324 2 0 + 1557 2635 3307 1 0 + 1558 2636 3307 1 0 + 1551 2634 3361 2 0 + 1551 2675 3350 2 0 + 1553 2634 3360 2 0 + 1553 2675 3349 2 0 + 1513 2635 4676 0 0 + 1513 2638 4684 0 1 + 1516 2635 4693 3 0 + 1519 2634 4693 3 0 + 1589 2643 4682 0 2 + 1590 2643 4683 0 2 + 1516 2645 9828 0 0 + 1519 2645 9829 0 0 + 1506 2704 3463 0 0 + 1507 2695 3488 2 0 + 1507 2710 3487 2 0 + 1508 2704 3462 0 0 + 1511 2694 3488 0 0 + 1511 2709 3487 0 0 + 1516 2737 3477 3 0 + 1519 2736 3477 3 0 + 1589 2726 3494 1 1 + 1590 2727 3494 1 1 + 1516 2740 3572 1 0 + 1519 2741 3572 1 0 + 1557 2741 3555 1 0 + 1558 2742 3555 1 0 + 1516 2776 3400 0 0 + 1519 2776 3401 0 0 + 1551 2766 3444 2 0 + 1553 2766 3443 2 0 + 1512 2752 3508 0 2 + 1512 2755 3508 2 2 + 1512 2760 3505 1 2 + 1512 2764 3508 2 2 + 1516 2757 3503 1 0 + 1516 2761 3505 1 1 + 1519 2758 3503 1 0 + 1519 2762 3505 1 1 + 1557 2757 3482 1 0 + 1558 2758 3482 1 0 + 1590 2755 3512 2 2 + 1596 2816 3182 0 0 + 1597 2816 3183 0 0 + 1551 2854 3371 2 0 + 1553 2854 3370 2 0 + 1551 2924 3292 3 0 + 1553 2923 3292 3 0 + 1596 2934 3320 3 0 + 1597 2933 3320 3 0 + 1516 2891 3511 2 0 + 1519 2891 3510 2 0 + 1512 2896 3559 0 0 + 1512 2901 3559 2 0 + 1512 2901 3568 2 0 + 1516 2898 3558 1 0 + 1519 2899 3558 1 0 + 1512 2920 4683 2 0 + 1512 2920 4700 2 0 + 1512 2922 4689 1 0 + 1512 2922 4694 3 0 + 1516 2916 4692 2 0 + 1516 2923 4691 0 0 + 1519 2916 4691 2 0 + 1519 2923 4692 0 0 + 1516 2908 9698 3 0 + 1519 2907 9698 3 0 + 1557 2898 9831 0 0 + 1558 2898 9832 0 0 + 1516 3001 3177 0 0 + 1519 3001 3178 0 0 + 1516 2957 3509 1 0 + 1519 2958 3509 1 0 + 1516 2958 3820 0 0 + 1519 2958 3821 0 0 + 1596 2948 3904 3 0 + 1597 2947 3904 3 0 + 1513 3013 3515 0 2 + 1513 3029 3508 1 2 + 1516 3021 3632 2 0 + 1519 3021 3631 2 0 + 1596 3008 3849 0 0 + 1596 3071 3857 2 0 + 1597 3008 3850 0 0 + 1597 3071 3856 2 0 + 1557 3022 10312 2 0 + 1557 3040 10308 2 0 + 1557 3044 10342 2 0 + 1558 3022 10311 2 0 + 1558 3040 10307 2 0 + 1558 3044 10341 2 0 + 1507 3122 3119 2 0 + 1511 3121 3119 0 0 + 1516 3129 3106 0 0 + 1551 3107 3273 0 0 + 1553 3107 3274 0 0 + 1516 3101 3509 0 0 + 1519 3101 3510 0 0 + 1551 3079 3500 1 0 + 1553 3080 3500 1 0 + 1557 3112 3514 0 0 + 1558 3112 3515 0 0 + 1557 3075 3867 1 0 + 1558 3076 3867 1 0 + 1557 3103 9910 2 0 + 1558 3103 9909 2 0 + 1596 3131 9917 1 0 + 1597 3132 9917 1 0 + 1516 3166 3302 1 0 + 1519 3167 3302 1 0 + 1551 3145 3291 1 0 + 1551 3163 3290 3 0 + 1551 3175 3316 3 0 + 1551 3181 3289 3 0 + 1551 3186 3268 0 0 + 1551 3188 3279 1 0 + 1551 3198 3282 3 0 + 1553 3146 3291 1 0 + 1553 3162 3290 3 0 + 1553 3174 3316 3 0 + 1553 3180 3289 3 0 + 1553 3186 3269 0 0 + 1553 3189 3279 1 0 + 1553 3197 3282 3 0 + 1589 3192 9825 3 0 + 1590 3191 9825 3 0 + 1557 3145 9871 2 0 + 1558 3145 9870 2 0 + 1516 3213 3221 0 0 + 1516 3217 3218 0 0 + 1516 3244 3216 3 0 + 1519 3213 3222 0 0 + 1519 3217 3219 0 0 + 1519 3243 3216 3 0 + 1551 3213 3261 0 0 + 1553 3213 3262 0 0 + 1551 3236 3285 2 0 + 1551 3236 3296 2 0 + 1551 3241 3301 0 0 + 1551 3253 3266 0 0 + 1551 3261 3321 1 0 + 1553 3236 3284 2 0 + 1553 3236 3295 2 0 + 1553 3241 3302 0 0 + 1553 3253 3267 0 0 + 1553 3262 3321 1 0 + 1551 3213 3353 1 0 + 1551 3255 3348 3 0 + 1553 3214 3353 1 0 + 1553 3254 3348 3 0 + 1517 3253 3449 1 0 + 1520 3253 3448 3 0 + 1589 3254 3419 3 1 + 1590 3253 3419 3 1 + 1512 3209 3490 3 0 + 1512 3223 3491 3 0 + 1512 3219 3472 0 2 + 1514 3224 3493 1 0 + 1516 3212 3470 1 0 + 1516 3215 3494 0 1 + 1517 3249 3480 1 0 + 1517 3252 3480 1 0 + 1517 3255 3471 0 0 + 1519 3213 3470 1 0 + 1519 3215 3495 0 1 + 1520 3249 3479 3 0 + 1520 3252 3479 3 0 + 1520 3256 3471 2 0 + 1596 3202 3856 3 0 + 1597 3201 3856 3 0 + 1596 3225 3904 3 0 + 1597 3224 3904 3 0 + 1596 3312 3331 0 0 + 1597 3312 3332 0 0 + 1517 3281 3506 2 0 + 1520 3280 3506 0 0 + 4423 2426 3088 0 0 + 4424 2427 3088 0 0 + 14751 3021 3631 2 0 + 14752 3021 3632 2 0 \ No newline at end of file diff --git a/2006Redone Server/data/logs/alchlogs/andrewadsfa1.txt b/2006Redone Server/data/logs/alchlogs/andrewadsfa1.txt new file mode 100644 index 00000000..0a6b321e --- /dev/null +++ b/2006Redone Server/data/logs/alchlogs/andrewadsfa1.txt @@ -0,0 +1,11 @@ +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on bread for 14 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on empty pot for 0 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on bucket for 0 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on bronze pickaxe for 0 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on shrimps for 3 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on small fishing net for 3 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on tinderbox for 0 coins +[2014/02/01] 13:44 andrewadsfa1 cast High Alchemy on bronze hatchet for 9 coins +[2014/02/01] 13:46 andrewadsfa1 cast High Alchemy on nature rune for 74 coins +[2014/02/01] 13:46 andrewadsfa1 cast High Alchemy on nature rune for 74 coins +[2014/02/01] 13:46 andrewadsfa1 cast High Alchemy on nature rune for 74 coins diff --git a/2006Redone Server/data/logs/commands/andrew.txt b/2006Redone Server/data/logs/commands/andrew.txt new file mode 100644 index 00000000..01be5e78 --- /dev/null +++ b/2006Redone Server/data/logs/commands/andrew.txt @@ -0,0 +1,110 @@ +[2014/01/12] 10:51 andrew used command: ipban andrew +[2014/01/12] 10:59 andrew used command: ipbot andrew10 +[2014/01/12] 11:00 andrew used command: ipbot andrew10 +[2014/01/12] 11:01 andrew used command: ipbot andrew10 +[2014/01/12] 11:07 andrew used command: ipbot andrew10 +[2014/01/12] 11:07 andrew used command: ipbot andrew10 +[2014/01/12] 11:08 andrew used command: ipbot andrew10 +[2014/01/12] 11:09 andrew used command: ipbot andrew10 +[2014/01/12] 11:09 andrew used command: ipbot andrew10 +[2014/01/12] 11:10 andrew used command: ipbot andrew10 +[2014/01/12] 11:11 andrew used command: ipbot andrew10 +[2014/01/12] 11:11 andrew used command: ipbot andrew10 +[2014/01/12] 11:12 andrew used command: ipbot andrew10 +[2014/01/12] 11:12 andrew used command: ipbot andrew10 +[2014/01/12] 11:12 andrew used command: ipbot andrew10 +[2014/01/12] 11:12 andrew used command: ipbot andrew10 +[2014/01/12] 11:13 andrew used command: ipbot andrew10 +[2014/01/12] 12:27 andrew used command: ipban andrew11 +[2014/01/12] 13:52 andrew used command: ipban andrew25 +[2014/01/12] 13:53 andrew used command: ipban andrew25 +[2014/01/12] 13:54 andrew used command: ipban andrew25 hi +[2014/01/12] 13:55 andrew used command: ipban andrew25 +[2014/01/12] 13:56 andrew used command: ipban andrew25 botting +[2014/01/12] 13:57 andrew used command: ipban andrew25 +[2014/01/12] 13:57 andrew used command: ipban andrew25 botting bitch +[2014/01/12] 13:58 andrew used command: ipban andrew25 botting +[2014/01/12] 16:07 andrew used command: ipban andrew22 fucker +[2014/01/12] 16:09 andrew used command: ipban andrew22 botting +[2014/01/12] 16:10 andrew used command: ipban andrew22 +[2014/01/12] 16:10 andrew used command: ipban andrew22 botting +[2014/01/12] 16:11 andrew used command: ipbanned andrew22 BOTTING +[2014/01/12] 16:24 andrew used command: ipmute andrew22 fuckoff +[2014/01/12] 16:26 andrew used command: ipmute andrew22 hi +[2014/01/12] 16:28 andrew used command: ipban andrew22 +[2014/01/12] 16:28 andrew used command: ipban andrew22 fuckoff +[2014/01/12] 16:32 andrew used command: ipban andrew22 fucker +[2014/01/12] 16:35 andrew used command: ipmute andrew22 +[2014/01/12] 16:35 andrew used command: ipmute andrew22 spam +[2014/01/12] 16:37 andrew used command: ipmute andrew22 +[2014/01/12] 16:37 andrew used command: ipmute andrew22 fucker +[2014/01/12] 16:37 andrew used command: unipmute andrew22 +[2014/01/12] 16:39 andrew used command: unipmute andrew22 +[2014/01/12] 16:39 andrew used command: ipmute andrew 22 botting +[2014/01/12] 16:39 andrew used command: ipmute andrew 22 botting +[2014/01/12] 16:39 andrew used command: ipmute andrew 22 botting +[2014/01/12] 16:42 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:42 andrew used command: ipmute andrew 22 hi.. +[2014/01/12] 16:44 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:44 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:45 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:45 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:48 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:49 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:56 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:57 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:57 andrew used command: ipmute andrew 22 hi +[2014/01/12] 16:59 andrew used command: ipmute andrew 22 hi +[2014/01/12] 17:00 andrew used command: ipmute andrew 22 hi +[2014/01/12] 17:01 andrew used command: ipmute adsfasdf adsfasdf asdf +[2014/01/13] 19:31 andrew used command: ipmute andrew 30 hi +[2014/01/13] 19:33 andrew used command: ipmute andrew 35 hi +[2014/01/13] 19:37 andrew used command: ipmute andrew_35 hi +[2014/01/13] 19:42 andrew used command: ipmute_andrew 35_botting +[2014/01/13] 19:42 andrew used command: ipban_andrew 35_botting +[2014/01/13] 19:47 andrew used command: ipmute +[2014/01/13] 19:48 andrew used command: ipmute +[2014/01/14] 18:39 andrew used command: mute andrew45 cuz +[2014/01/14] 18:39 andrew used command: mute-andrew45-cuz +[2014/01/14] 18:39 andrew used command: mute-Andrew45-cuz +[2014/01/14] 18:40 andrew used command: mute-Andrew45-jj +[2014/01/14] 18:40 andrew used command: ipmute-andrew45-cuz +[2014/01/14] 18:40 andrew used command: unipmute-andrew-cuz +[2014/01/14] 18:40 andrew used command: unipmute andrew +[2014/01/14] 18:44 andrew used command: mute-andrew45-cuz +[2014/01/14] 18:44 andrew used command: mute +[2014/01/14] 18:44 andrew used command: mute-andrew45-da +[2014/01/14] 18:45 andrew used command: unmute andrew45 +[2014/03/08] 13:37 andrew used command: bank +[2014/03/08] 13:39 andrew used command: bank +[2014/03/08] 13:41 andrew used command: bank +[2014/03/08] 13:43 andrew used command: bank +[2014/03/08] 13:45 andrew used command: bank +[2014/03/08] 13:46 andrew used command: bank +[2014/03/08] 13:47 andrew used command: bank +[2014/03/08] 13:47 andrew used command: bank +[2014/03/08] 13:53 andrew used command: bank +[2014/03/08] 13:54 andrew used command: bank +[2014/03/08] 13:54 andrew used command: bank +[2014/03/08] 13:54 andrew used command: bank: +[2014/03/08] 13:55 andrew used command: bank +[2014/03/08] 13:56 andrew used command: bank +[2014/03/08] 14:06 andrew used command: bank +[2014/03/08] 14:08 andrew used command: bank +[2014/03/08] 14:11 andrew used command: bank +[2014/03/08] 14:12 andrew used command: bank +[2014/03/08] 14:14 andrew used command: bank +[2014/03/08] 14:15 andrew used command: bank +[2014/03/08] 14:21 andrew used command: bank +[2014/03/08] 14:21 andrew used command: bank +[2014/03/08] 14:22 andrew used command: bank +[2014/03/08] 14:24 andrew used command: bank +[2014/03/08] 14:27 andrew used command: bank +[2014/03/08] 14:28 andrew used command: bank +[2014/03/08] 14:30 andrew used command: bank +[2014/03/08] 14:32 andrew used command: bank +[2014/03/08] 14:36 andrew used command: bank +[2014/03/08] 14:41 andrew used command: bank +[2014/03/08] 14:51 andrew used command: bank +[2014/03/08] 14:57 andrew used command: bank +[2014/03/08] 15:01 andrew used command: bank diff --git a/2006Redone Server/data/logs/commands/andrew1.txt b/2006Redone Server/data/logs/commands/andrew1.txt new file mode 100644 index 00000000..793c662e --- /dev/null +++ b/2006Redone Server/data/logs/commands/andrew1.txt @@ -0,0 +1,11 @@ +[2014/03/08] 14:22 andrew1 used command: bank +[2014/03/08] 14:26 andrew1 used command: bank +[2014/03/08] 14:31 andrew1 used command: bank +[2014/03/08] 14:33 andrew1 used command: bank +[2014/03/08] 14:40 andrew1 used command: bank +[2014/03/08] 14:44 andrew1 used command: bank +[2014/03/08] 14:44 andrew1 used command: bank +[2014/03/08] 14:49 andrew1 used command: bank +[2014/03/08] 14:54 andrew1 used command: bank +[2014/03/08] 14:55 andrew1 used command: bank +[2014/03/08] 14:57 andrew1 used command: bank diff --git a/2006Redone Server/data/logs/commands/mod den.txt b/2006Redone Server/data/logs/commands/mod den.txt new file mode 100644 index 00000000..9033fe42 --- /dev/null +++ b/2006Redone Server/data/logs/commands/mod den.txt @@ -0,0 +1 @@ +[2014/01/18] 22:22 mod den used command: bank diff --git a/2006Redone Server/data/logs/dropitem/andrewadsfa1.txt b/2006Redone Server/data/logs/dropitem/andrewadsfa1.txt new file mode 100644 index 00000000..5708ee29 --- /dev/null +++ b/2006Redone Server/data/logs/dropitem/andrewadsfa1.txt @@ -0,0 +1,10737 @@ +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:42 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 +[2014/02/01] 13:43 andrewadsfa1 dropped 100000 muddy skull absX: 3219 absY: 3222 diff --git a/2006Redone Server/data/logs/dropitem/andrewf.txt b/2006Redone Server/data/logs/dropitem/andrewf.txt new file mode 100644 index 00000000..577734af --- /dev/null +++ b/2006Redone Server/data/logs/dropitem/andrewf.txt @@ -0,0 +1 @@ +[2014/02/11] 20:05 andrewf dropped 1 empty pot absX: 3222 absY: 3218 diff --git a/2006Redone Server/data/logs/dropitem/andrewsdf.txt b/2006Redone Server/data/logs/dropitem/andrewsdf.txt new file mode 100644 index 00000000..93072914 --- /dev/null +++ b/2006Redone Server/data/logs/dropitem/andrewsdf.txt @@ -0,0 +1,3 @@ +[2014/02/11] 20:24 andrewsdf dropped 1 bronze hatchet absX: 3222 absY: 3218 +[2014/02/11] 20:24 andrewsdf dropped 1 tinderbox absX: 3223 absY: 3219 +[2014/02/11] 20:24 andrewsdf dropped 1 shrimps absX: 3226 absY: 3219 diff --git a/2006Redone Server/data/logs/dueling/killer/andrew1.txt b/2006Redone Server/data/logs/dueling/killer/andrew1.txt new file mode 100644 index 00000000..e481cdde --- /dev/null +++ b/2006Redone Server/data/logs/dueling/killer/andrew1.txt @@ -0,0 +1 @@ +[2014/01/08] 16:07 andrew1 killed andrew in the duel arena. diff --git a/2006Redone Server/data/logs/pking/killed/andrew.txt b/2006Redone Server/data/logs/pking/killed/andrew.txt new file mode 100644 index 00000000..fbc443e6 --- /dev/null +++ b/2006Redone Server/data/logs/pking/killed/andrew.txt @@ -0,0 +1 @@ +[2014/01/07] 18:47 andrew was killed by andrew1 absX: 3087 absY: 3900 diff --git a/2006Redone Server/data/logs/pking/killer/andrew1.txt b/2006Redone Server/data/logs/pking/killer/andrew1.txt new file mode 100644 index 00000000..496eeb48 --- /dev/null +++ b/2006Redone Server/data/logs/pking/killer/andrew1.txt @@ -0,0 +1 @@ +[2014/01/07] 18:47 andrew1 killed andrew absX: 3088 absY: 3900 diff --git a/2006Redone Server/data/logs/privatemessages/pmsent/andrew45.txt b/2006Redone Server/data/logs/privatemessages/pmsent/andrew45.txt new file mode 100644 index 00000000..3cb8cc59 --- /dev/null +++ b/2006Redone Server/data/logs/privatemessages/pmsent/andrew45.txt @@ -0,0 +1,2 @@ +[2014/01/14] 18:40 andrew45 said hi +[2014/01/14] 18:48 andrew45 said hi diff --git a/2006Redone Server/data/logs/reports/Offensive language.txt b/2006Redone Server/data/logs/reports/Offensive language.txt new file mode 100644 index 00000000..2bafce40 --- /dev/null +++ b/2006Redone Server/data/logs/reports/Offensive language.txt @@ -0,0 +1,10 @@ +andrew1 was reported by andrew2, Offensive language, January, 06 +. + +andrew2 was reported by andrew, Offensive language, January, 06 + -[01:09:58: andrew2]: asdfasdfa + -[01:09:59: andrew2]: aa + -[01:09:59: andrew2]: sdfa + -[01:10:00: andrew]: adsfasdfadsfa +. + diff --git a/2006Redone Server/data/world/map/0.gz b/2006Redone Server/data/world/map/0.gz new file mode 100644 index 00000000..8ea2679f Binary files /dev/null and b/2006Redone Server/data/world/map/0.gz differ diff --git a/2006Redone Server/data/world/map/1.gz b/2006Redone Server/data/world/map/1.gz new file mode 100644 index 00000000..d72380d3 Binary files /dev/null and b/2006Redone Server/data/world/map/1.gz differ diff --git a/2006Redone Server/data/world/map/10.gz b/2006Redone Server/data/world/map/10.gz new file mode 100644 index 00000000..7975f8ce Binary files /dev/null and b/2006Redone Server/data/world/map/10.gz differ diff --git a/2006Redone Server/data/world/map/100.gz b/2006Redone Server/data/world/map/100.gz new file mode 100644 index 00000000..a5c49e53 Binary files /dev/null and b/2006Redone Server/data/world/map/100.gz differ diff --git a/2006Redone Server/data/world/map/1000.gz b/2006Redone Server/data/world/map/1000.gz new file mode 100644 index 00000000..3f8081fb Binary files /dev/null and b/2006Redone Server/data/world/map/1000.gz differ diff --git a/2006Redone Server/data/world/map/1001.gz b/2006Redone Server/data/world/map/1001.gz new file mode 100644 index 00000000..1e6c7211 Binary files /dev/null and b/2006Redone Server/data/world/map/1001.gz differ diff --git a/2006Redone Server/data/world/map/1002.gz b/2006Redone Server/data/world/map/1002.gz new file mode 100644 index 00000000..22ed7004 Binary files /dev/null and b/2006Redone Server/data/world/map/1002.gz differ diff --git a/2006Redone Server/data/world/map/1003.gz b/2006Redone Server/data/world/map/1003.gz new file mode 100644 index 00000000..5dd35f51 Binary files /dev/null and b/2006Redone Server/data/world/map/1003.gz differ diff --git a/2006Redone Server/data/world/map/1004.gz b/2006Redone Server/data/world/map/1004.gz new file mode 100644 index 00000000..4543250e Binary files /dev/null and b/2006Redone Server/data/world/map/1004.gz differ diff --git a/2006Redone Server/data/world/map/1005.gz b/2006Redone Server/data/world/map/1005.gz new file mode 100644 index 00000000..5e4fb2bf Binary files /dev/null and b/2006Redone Server/data/world/map/1005.gz differ diff --git a/2006Redone Server/data/world/map/1006.gz b/2006Redone Server/data/world/map/1006.gz new file mode 100644 index 00000000..f2615abb Binary files /dev/null and b/2006Redone Server/data/world/map/1006.gz differ diff --git a/2006Redone Server/data/world/map/1007.gz b/2006Redone Server/data/world/map/1007.gz new file mode 100644 index 00000000..4e9ce738 Binary files /dev/null and b/2006Redone Server/data/world/map/1007.gz differ diff --git a/2006Redone Server/data/world/map/1008.gz b/2006Redone Server/data/world/map/1008.gz new file mode 100644 index 00000000..1edfd25d Binary files /dev/null and b/2006Redone Server/data/world/map/1008.gz differ diff --git a/2006Redone Server/data/world/map/1009.gz b/2006Redone Server/data/world/map/1009.gz new file mode 100644 index 00000000..f584647b Binary files /dev/null and b/2006Redone Server/data/world/map/1009.gz differ diff --git a/2006Redone Server/data/world/map/101.gz b/2006Redone Server/data/world/map/101.gz new file mode 100644 index 00000000..49896383 Binary files /dev/null and b/2006Redone Server/data/world/map/101.gz differ diff --git a/2006Redone Server/data/world/map/1010.gz b/2006Redone Server/data/world/map/1010.gz new file mode 100644 index 00000000..169b46ef Binary files /dev/null and b/2006Redone Server/data/world/map/1010.gz differ diff --git a/2006Redone Server/data/world/map/1011.gz b/2006Redone Server/data/world/map/1011.gz new file mode 100644 index 00000000..d1d7fb83 Binary files /dev/null and b/2006Redone Server/data/world/map/1011.gz differ diff --git a/2006Redone Server/data/world/map/1012.gz b/2006Redone Server/data/world/map/1012.gz new file mode 100644 index 00000000..2f970df2 Binary files /dev/null and b/2006Redone Server/data/world/map/1012.gz differ diff --git a/2006Redone Server/data/world/map/1013.gz b/2006Redone Server/data/world/map/1013.gz new file mode 100644 index 00000000..d25824c3 Binary files /dev/null and b/2006Redone Server/data/world/map/1013.gz differ diff --git a/2006Redone Server/data/world/map/1014.gz b/2006Redone Server/data/world/map/1014.gz new file mode 100644 index 00000000..e846ea9f Binary files /dev/null and b/2006Redone Server/data/world/map/1014.gz differ diff --git a/2006Redone Server/data/world/map/1015.gz b/2006Redone Server/data/world/map/1015.gz new file mode 100644 index 00000000..03a79820 Binary files /dev/null and b/2006Redone Server/data/world/map/1015.gz differ diff --git a/2006Redone Server/data/world/map/1016.gz b/2006Redone Server/data/world/map/1016.gz new file mode 100644 index 00000000..f342c96b Binary files /dev/null and b/2006Redone Server/data/world/map/1016.gz differ diff --git a/2006Redone Server/data/world/map/1017.gz b/2006Redone Server/data/world/map/1017.gz new file mode 100644 index 00000000..d62fedd8 Binary files /dev/null and b/2006Redone Server/data/world/map/1017.gz differ diff --git a/2006Redone Server/data/world/map/1018.gz b/2006Redone Server/data/world/map/1018.gz new file mode 100644 index 00000000..685f577b Binary files /dev/null and b/2006Redone Server/data/world/map/1018.gz differ diff --git a/2006Redone Server/data/world/map/1019.gz b/2006Redone Server/data/world/map/1019.gz new file mode 100644 index 00000000..d82f299a Binary files /dev/null and b/2006Redone Server/data/world/map/1019.gz differ diff --git a/2006Redone Server/data/world/map/102.gz b/2006Redone Server/data/world/map/102.gz new file mode 100644 index 00000000..2fe5d793 Binary files /dev/null and b/2006Redone Server/data/world/map/102.gz differ diff --git a/2006Redone Server/data/world/map/1020.gz b/2006Redone Server/data/world/map/1020.gz new file mode 100644 index 00000000..7b7940ff Binary files /dev/null and b/2006Redone Server/data/world/map/1020.gz differ diff --git a/2006Redone Server/data/world/map/1021.gz b/2006Redone Server/data/world/map/1021.gz new file mode 100644 index 00000000..d968e054 Binary files /dev/null and b/2006Redone Server/data/world/map/1021.gz differ diff --git a/2006Redone Server/data/world/map/1022.gz b/2006Redone Server/data/world/map/1022.gz new file mode 100644 index 00000000..15177ee1 Binary files /dev/null and b/2006Redone Server/data/world/map/1022.gz differ diff --git a/2006Redone Server/data/world/map/1023.gz b/2006Redone Server/data/world/map/1023.gz new file mode 100644 index 00000000..6c15189e Binary files /dev/null and b/2006Redone Server/data/world/map/1023.gz differ diff --git a/2006Redone Server/data/world/map/1024.gz b/2006Redone Server/data/world/map/1024.gz new file mode 100644 index 00000000..fad1c485 Binary files /dev/null and b/2006Redone Server/data/world/map/1024.gz differ diff --git a/2006Redone Server/data/world/map/1025.gz b/2006Redone Server/data/world/map/1025.gz new file mode 100644 index 00000000..7d6af538 Binary files /dev/null and b/2006Redone Server/data/world/map/1025.gz differ diff --git a/2006Redone Server/data/world/map/1026.gz b/2006Redone Server/data/world/map/1026.gz new file mode 100644 index 00000000..9110548c Binary files /dev/null and b/2006Redone Server/data/world/map/1026.gz differ diff --git a/2006Redone Server/data/world/map/1027.gz b/2006Redone Server/data/world/map/1027.gz new file mode 100644 index 00000000..84c70264 Binary files /dev/null and b/2006Redone Server/data/world/map/1027.gz differ diff --git a/2006Redone Server/data/world/map/1028.gz b/2006Redone Server/data/world/map/1028.gz new file mode 100644 index 00000000..14502022 Binary files /dev/null and b/2006Redone Server/data/world/map/1028.gz differ diff --git a/2006Redone Server/data/world/map/1029.gz b/2006Redone Server/data/world/map/1029.gz new file mode 100644 index 00000000..a0874bef Binary files /dev/null and b/2006Redone Server/data/world/map/1029.gz differ diff --git a/2006Redone Server/data/world/map/103.gz b/2006Redone Server/data/world/map/103.gz new file mode 100644 index 00000000..b452f6ae Binary files /dev/null and b/2006Redone Server/data/world/map/103.gz differ diff --git a/2006Redone Server/data/world/map/1030.gz b/2006Redone Server/data/world/map/1030.gz new file mode 100644 index 00000000..0aa26dfc Binary files /dev/null and b/2006Redone Server/data/world/map/1030.gz differ diff --git a/2006Redone Server/data/world/map/1031.gz b/2006Redone Server/data/world/map/1031.gz new file mode 100644 index 00000000..955ed9f9 Binary files /dev/null and b/2006Redone Server/data/world/map/1031.gz differ diff --git a/2006Redone Server/data/world/map/1032.gz b/2006Redone Server/data/world/map/1032.gz new file mode 100644 index 00000000..953bd32c Binary files /dev/null and b/2006Redone Server/data/world/map/1032.gz differ diff --git a/2006Redone Server/data/world/map/1033.gz b/2006Redone Server/data/world/map/1033.gz new file mode 100644 index 00000000..06c6fe30 Binary files /dev/null and b/2006Redone Server/data/world/map/1033.gz differ diff --git a/2006Redone Server/data/world/map/1034.gz b/2006Redone Server/data/world/map/1034.gz new file mode 100644 index 00000000..66b415e3 Binary files /dev/null and b/2006Redone Server/data/world/map/1034.gz differ diff --git a/2006Redone Server/data/world/map/1035.gz b/2006Redone Server/data/world/map/1035.gz new file mode 100644 index 00000000..e53a248c Binary files /dev/null and b/2006Redone Server/data/world/map/1035.gz differ diff --git a/2006Redone Server/data/world/map/1036.gz b/2006Redone Server/data/world/map/1036.gz new file mode 100644 index 00000000..b40907da Binary files /dev/null and b/2006Redone Server/data/world/map/1036.gz differ diff --git a/2006Redone Server/data/world/map/1037.gz b/2006Redone Server/data/world/map/1037.gz new file mode 100644 index 00000000..b908f729 Binary files /dev/null and b/2006Redone Server/data/world/map/1037.gz differ diff --git a/2006Redone Server/data/world/map/1038.gz b/2006Redone Server/data/world/map/1038.gz new file mode 100644 index 00000000..c6892897 Binary files /dev/null and b/2006Redone Server/data/world/map/1038.gz differ diff --git a/2006Redone Server/data/world/map/1039.gz b/2006Redone Server/data/world/map/1039.gz new file mode 100644 index 00000000..6880259f Binary files /dev/null and b/2006Redone Server/data/world/map/1039.gz differ diff --git a/2006Redone Server/data/world/map/104.gz b/2006Redone Server/data/world/map/104.gz new file mode 100644 index 00000000..55ba8e34 Binary files /dev/null and b/2006Redone Server/data/world/map/104.gz differ diff --git a/2006Redone Server/data/world/map/1040.gz b/2006Redone Server/data/world/map/1040.gz new file mode 100644 index 00000000..a1fac660 Binary files /dev/null and b/2006Redone Server/data/world/map/1040.gz differ diff --git a/2006Redone Server/data/world/map/1041.gz b/2006Redone Server/data/world/map/1041.gz new file mode 100644 index 00000000..5bdb8ce8 Binary files /dev/null and b/2006Redone Server/data/world/map/1041.gz differ diff --git a/2006Redone Server/data/world/map/1042.gz b/2006Redone Server/data/world/map/1042.gz new file mode 100644 index 00000000..37f3ac19 Binary files /dev/null and b/2006Redone Server/data/world/map/1042.gz differ diff --git a/2006Redone Server/data/world/map/1043.gz b/2006Redone Server/data/world/map/1043.gz new file mode 100644 index 00000000..3df71e2f Binary files /dev/null and b/2006Redone Server/data/world/map/1043.gz differ diff --git a/2006Redone Server/data/world/map/1044.gz b/2006Redone Server/data/world/map/1044.gz new file mode 100644 index 00000000..45dc7ef9 Binary files /dev/null and b/2006Redone Server/data/world/map/1044.gz differ diff --git a/2006Redone Server/data/world/map/1045.gz b/2006Redone Server/data/world/map/1045.gz new file mode 100644 index 00000000..29fb148f Binary files /dev/null and b/2006Redone Server/data/world/map/1045.gz differ diff --git a/2006Redone Server/data/world/map/1046.gz b/2006Redone Server/data/world/map/1046.gz new file mode 100644 index 00000000..e7db8212 Binary files /dev/null and b/2006Redone Server/data/world/map/1046.gz differ diff --git a/2006Redone Server/data/world/map/1047.gz b/2006Redone Server/data/world/map/1047.gz new file mode 100644 index 00000000..3c6fbcc0 Binary files /dev/null and b/2006Redone Server/data/world/map/1047.gz differ diff --git a/2006Redone Server/data/world/map/1048.gz b/2006Redone Server/data/world/map/1048.gz new file mode 100644 index 00000000..2605f0a9 Binary files /dev/null and b/2006Redone Server/data/world/map/1048.gz differ diff --git a/2006Redone Server/data/world/map/1049.gz b/2006Redone Server/data/world/map/1049.gz new file mode 100644 index 00000000..d4d7d7aa Binary files /dev/null and b/2006Redone Server/data/world/map/1049.gz differ diff --git a/2006Redone Server/data/world/map/105.gz b/2006Redone Server/data/world/map/105.gz new file mode 100644 index 00000000..33dd3028 Binary files /dev/null and b/2006Redone Server/data/world/map/105.gz differ diff --git a/2006Redone Server/data/world/map/1050.gz b/2006Redone Server/data/world/map/1050.gz new file mode 100644 index 00000000..f5341110 Binary files /dev/null and b/2006Redone Server/data/world/map/1050.gz differ diff --git a/2006Redone Server/data/world/map/1051.gz b/2006Redone Server/data/world/map/1051.gz new file mode 100644 index 00000000..c741b27a Binary files /dev/null and b/2006Redone Server/data/world/map/1051.gz differ diff --git a/2006Redone Server/data/world/map/1052.gz b/2006Redone Server/data/world/map/1052.gz new file mode 100644 index 00000000..8d8be922 Binary files /dev/null and b/2006Redone Server/data/world/map/1052.gz differ diff --git a/2006Redone Server/data/world/map/1053.gz b/2006Redone Server/data/world/map/1053.gz new file mode 100644 index 00000000..aa90cfa5 Binary files /dev/null and b/2006Redone Server/data/world/map/1053.gz differ diff --git a/2006Redone Server/data/world/map/1054.gz b/2006Redone Server/data/world/map/1054.gz new file mode 100644 index 00000000..550fe942 Binary files /dev/null and b/2006Redone Server/data/world/map/1054.gz differ diff --git a/2006Redone Server/data/world/map/1055.gz b/2006Redone Server/data/world/map/1055.gz new file mode 100644 index 00000000..c68adbf4 Binary files /dev/null and b/2006Redone Server/data/world/map/1055.gz differ diff --git a/2006Redone Server/data/world/map/1056.gz b/2006Redone Server/data/world/map/1056.gz new file mode 100644 index 00000000..762ad68d Binary files /dev/null and b/2006Redone Server/data/world/map/1056.gz differ diff --git a/2006Redone Server/data/world/map/1057.gz b/2006Redone Server/data/world/map/1057.gz new file mode 100644 index 00000000..e466a071 Binary files /dev/null and b/2006Redone Server/data/world/map/1057.gz differ diff --git a/2006Redone Server/data/world/map/1058.gz b/2006Redone Server/data/world/map/1058.gz new file mode 100644 index 00000000..21babbaa Binary files /dev/null and b/2006Redone Server/data/world/map/1058.gz differ diff --git a/2006Redone Server/data/world/map/1059.gz b/2006Redone Server/data/world/map/1059.gz new file mode 100644 index 00000000..3f7f6d3a Binary files /dev/null and b/2006Redone Server/data/world/map/1059.gz differ diff --git a/2006Redone Server/data/world/map/106.gz b/2006Redone Server/data/world/map/106.gz new file mode 100644 index 00000000..879fe931 Binary files /dev/null and b/2006Redone Server/data/world/map/106.gz differ diff --git a/2006Redone Server/data/world/map/1060.gz b/2006Redone Server/data/world/map/1060.gz new file mode 100644 index 00000000..b4552bf7 Binary files /dev/null and b/2006Redone Server/data/world/map/1060.gz differ diff --git a/2006Redone Server/data/world/map/1061.gz b/2006Redone Server/data/world/map/1061.gz new file mode 100644 index 00000000..b8177743 Binary files /dev/null and b/2006Redone Server/data/world/map/1061.gz differ diff --git a/2006Redone Server/data/world/map/1062.gz b/2006Redone Server/data/world/map/1062.gz new file mode 100644 index 00000000..ceb5390e Binary files /dev/null and b/2006Redone Server/data/world/map/1062.gz differ diff --git a/2006Redone Server/data/world/map/1063.gz b/2006Redone Server/data/world/map/1063.gz new file mode 100644 index 00000000..0cd73ca1 Binary files /dev/null and b/2006Redone Server/data/world/map/1063.gz differ diff --git a/2006Redone Server/data/world/map/1064.gz b/2006Redone Server/data/world/map/1064.gz new file mode 100644 index 00000000..48d4340c Binary files /dev/null and b/2006Redone Server/data/world/map/1064.gz differ diff --git a/2006Redone Server/data/world/map/1065.gz b/2006Redone Server/data/world/map/1065.gz new file mode 100644 index 00000000..29ed775a Binary files /dev/null and b/2006Redone Server/data/world/map/1065.gz differ diff --git a/2006Redone Server/data/world/map/1066.gz b/2006Redone Server/data/world/map/1066.gz new file mode 100644 index 00000000..dca83467 Binary files /dev/null and b/2006Redone Server/data/world/map/1066.gz differ diff --git a/2006Redone Server/data/world/map/1067.gz b/2006Redone Server/data/world/map/1067.gz new file mode 100644 index 00000000..d7a6daa4 Binary files /dev/null and b/2006Redone Server/data/world/map/1067.gz differ diff --git a/2006Redone Server/data/world/map/1068.gz b/2006Redone Server/data/world/map/1068.gz new file mode 100644 index 00000000..a92fd867 Binary files /dev/null and b/2006Redone Server/data/world/map/1068.gz differ diff --git a/2006Redone Server/data/world/map/1069.gz b/2006Redone Server/data/world/map/1069.gz new file mode 100644 index 00000000..fd335dec Binary files /dev/null and b/2006Redone Server/data/world/map/1069.gz differ diff --git a/2006Redone Server/data/world/map/107.gz b/2006Redone Server/data/world/map/107.gz new file mode 100644 index 00000000..f5608752 Binary files /dev/null and b/2006Redone Server/data/world/map/107.gz differ diff --git a/2006Redone Server/data/world/map/1070.gz b/2006Redone Server/data/world/map/1070.gz new file mode 100644 index 00000000..ede62309 Binary files /dev/null and b/2006Redone Server/data/world/map/1070.gz differ diff --git a/2006Redone Server/data/world/map/1071.gz b/2006Redone Server/data/world/map/1071.gz new file mode 100644 index 00000000..b9f61ccd Binary files /dev/null and b/2006Redone Server/data/world/map/1071.gz differ diff --git a/2006Redone Server/data/world/map/1072.gz b/2006Redone Server/data/world/map/1072.gz new file mode 100644 index 00000000..f87ee25c Binary files /dev/null and b/2006Redone Server/data/world/map/1072.gz differ diff --git a/2006Redone Server/data/world/map/1073.gz b/2006Redone Server/data/world/map/1073.gz new file mode 100644 index 00000000..1decd89a Binary files /dev/null and b/2006Redone Server/data/world/map/1073.gz differ diff --git a/2006Redone Server/data/world/map/1074.gz b/2006Redone Server/data/world/map/1074.gz new file mode 100644 index 00000000..7d53d91c Binary files /dev/null and b/2006Redone Server/data/world/map/1074.gz differ diff --git a/2006Redone Server/data/world/map/1075.gz b/2006Redone Server/data/world/map/1075.gz new file mode 100644 index 00000000..b0d6487c Binary files /dev/null and b/2006Redone Server/data/world/map/1075.gz differ diff --git a/2006Redone Server/data/world/map/1076.gz b/2006Redone Server/data/world/map/1076.gz new file mode 100644 index 00000000..d6d85043 Binary files /dev/null and b/2006Redone Server/data/world/map/1076.gz differ diff --git a/2006Redone Server/data/world/map/1077.gz b/2006Redone Server/data/world/map/1077.gz new file mode 100644 index 00000000..17790b93 Binary files /dev/null and b/2006Redone Server/data/world/map/1077.gz differ diff --git a/2006Redone Server/data/world/map/1078.gz b/2006Redone Server/data/world/map/1078.gz new file mode 100644 index 00000000..fac54a27 Binary files /dev/null and b/2006Redone Server/data/world/map/1078.gz differ diff --git a/2006Redone Server/data/world/map/1079.gz b/2006Redone Server/data/world/map/1079.gz new file mode 100644 index 00000000..e0e7f7c9 Binary files /dev/null and b/2006Redone Server/data/world/map/1079.gz differ diff --git a/2006Redone Server/data/world/map/108.gz b/2006Redone Server/data/world/map/108.gz new file mode 100644 index 00000000..fe272188 Binary files /dev/null and b/2006Redone Server/data/world/map/108.gz differ diff --git a/2006Redone Server/data/world/map/1080.gz b/2006Redone Server/data/world/map/1080.gz new file mode 100644 index 00000000..b220f9dc Binary files /dev/null and b/2006Redone Server/data/world/map/1080.gz differ diff --git a/2006Redone Server/data/world/map/1081.gz b/2006Redone Server/data/world/map/1081.gz new file mode 100644 index 00000000..42bd5ef8 Binary files /dev/null and b/2006Redone Server/data/world/map/1081.gz differ diff --git a/2006Redone Server/data/world/map/1082.gz b/2006Redone Server/data/world/map/1082.gz new file mode 100644 index 00000000..3c01a6bf Binary files /dev/null and b/2006Redone Server/data/world/map/1082.gz differ diff --git a/2006Redone Server/data/world/map/1083.gz b/2006Redone Server/data/world/map/1083.gz new file mode 100644 index 00000000..550709f9 Binary files /dev/null and b/2006Redone Server/data/world/map/1083.gz differ diff --git a/2006Redone Server/data/world/map/1084.gz b/2006Redone Server/data/world/map/1084.gz new file mode 100644 index 00000000..e8c32fe4 Binary files /dev/null and b/2006Redone Server/data/world/map/1084.gz differ diff --git a/2006Redone Server/data/world/map/1085.gz b/2006Redone Server/data/world/map/1085.gz new file mode 100644 index 00000000..afa38dea Binary files /dev/null and b/2006Redone Server/data/world/map/1085.gz differ diff --git a/2006Redone Server/data/world/map/1086.gz b/2006Redone Server/data/world/map/1086.gz new file mode 100644 index 00000000..968c3f7b Binary files /dev/null and b/2006Redone Server/data/world/map/1086.gz differ diff --git a/2006Redone Server/data/world/map/1087.gz b/2006Redone Server/data/world/map/1087.gz new file mode 100644 index 00000000..67aa7375 Binary files /dev/null and b/2006Redone Server/data/world/map/1087.gz differ diff --git a/2006Redone Server/data/world/map/1088.gz b/2006Redone Server/data/world/map/1088.gz new file mode 100644 index 00000000..fc3209a9 Binary files /dev/null and b/2006Redone Server/data/world/map/1088.gz differ diff --git a/2006Redone Server/data/world/map/1089.gz b/2006Redone Server/data/world/map/1089.gz new file mode 100644 index 00000000..ed417baf Binary files /dev/null and b/2006Redone Server/data/world/map/1089.gz differ diff --git a/2006Redone Server/data/world/map/109.gz b/2006Redone Server/data/world/map/109.gz new file mode 100644 index 00000000..922657af Binary files /dev/null and b/2006Redone Server/data/world/map/109.gz differ diff --git a/2006Redone Server/data/world/map/1090.gz b/2006Redone Server/data/world/map/1090.gz new file mode 100644 index 00000000..cfa6c5f5 Binary files /dev/null and b/2006Redone Server/data/world/map/1090.gz differ diff --git a/2006Redone Server/data/world/map/1091.gz b/2006Redone Server/data/world/map/1091.gz new file mode 100644 index 00000000..2be6ee52 Binary files /dev/null and b/2006Redone Server/data/world/map/1091.gz differ diff --git a/2006Redone Server/data/world/map/1092.gz b/2006Redone Server/data/world/map/1092.gz new file mode 100644 index 00000000..f27d5196 Binary files /dev/null and b/2006Redone Server/data/world/map/1092.gz differ diff --git a/2006Redone Server/data/world/map/1093.gz b/2006Redone Server/data/world/map/1093.gz new file mode 100644 index 00000000..81b4d605 Binary files /dev/null and b/2006Redone Server/data/world/map/1093.gz differ diff --git a/2006Redone Server/data/world/map/1094.gz b/2006Redone Server/data/world/map/1094.gz new file mode 100644 index 00000000..554ad714 Binary files /dev/null and b/2006Redone Server/data/world/map/1094.gz differ diff --git a/2006Redone Server/data/world/map/1095.gz b/2006Redone Server/data/world/map/1095.gz new file mode 100644 index 00000000..6e6da83b Binary files /dev/null and b/2006Redone Server/data/world/map/1095.gz differ diff --git a/2006Redone Server/data/world/map/1096.gz b/2006Redone Server/data/world/map/1096.gz new file mode 100644 index 00000000..8df5a914 Binary files /dev/null and b/2006Redone Server/data/world/map/1096.gz differ diff --git a/2006Redone Server/data/world/map/1097.gz b/2006Redone Server/data/world/map/1097.gz new file mode 100644 index 00000000..f9494869 Binary files /dev/null and b/2006Redone Server/data/world/map/1097.gz differ diff --git a/2006Redone Server/data/world/map/1098.gz b/2006Redone Server/data/world/map/1098.gz new file mode 100644 index 00000000..a0663c1d Binary files /dev/null and b/2006Redone Server/data/world/map/1098.gz differ diff --git a/2006Redone Server/data/world/map/1099.gz b/2006Redone Server/data/world/map/1099.gz new file mode 100644 index 00000000..63b42cf0 Binary files /dev/null and b/2006Redone Server/data/world/map/1099.gz differ diff --git a/2006Redone Server/data/world/map/11.gz b/2006Redone Server/data/world/map/11.gz new file mode 100644 index 00000000..da198859 Binary files /dev/null and b/2006Redone Server/data/world/map/11.gz differ diff --git a/2006Redone Server/data/world/map/110.gz b/2006Redone Server/data/world/map/110.gz new file mode 100644 index 00000000..3d7aff6c Binary files /dev/null and b/2006Redone Server/data/world/map/110.gz differ diff --git a/2006Redone Server/data/world/map/1100.gz b/2006Redone Server/data/world/map/1100.gz new file mode 100644 index 00000000..d54beca2 Binary files /dev/null and b/2006Redone Server/data/world/map/1100.gz differ diff --git a/2006Redone Server/data/world/map/1101.gz b/2006Redone Server/data/world/map/1101.gz new file mode 100644 index 00000000..87094753 Binary files /dev/null and b/2006Redone Server/data/world/map/1101.gz differ diff --git a/2006Redone Server/data/world/map/1102.gz b/2006Redone Server/data/world/map/1102.gz new file mode 100644 index 00000000..f9ad2b5c Binary files /dev/null and b/2006Redone Server/data/world/map/1102.gz differ diff --git a/2006Redone Server/data/world/map/1103.gz b/2006Redone Server/data/world/map/1103.gz new file mode 100644 index 00000000..56ab44c7 Binary files /dev/null and b/2006Redone Server/data/world/map/1103.gz differ diff --git a/2006Redone Server/data/world/map/1104.gz b/2006Redone Server/data/world/map/1104.gz new file mode 100644 index 00000000..6dbe74d4 Binary files /dev/null and b/2006Redone Server/data/world/map/1104.gz differ diff --git a/2006Redone Server/data/world/map/1105.gz b/2006Redone Server/data/world/map/1105.gz new file mode 100644 index 00000000..6380915c Binary files /dev/null and b/2006Redone Server/data/world/map/1105.gz differ diff --git a/2006Redone Server/data/world/map/1106.gz b/2006Redone Server/data/world/map/1106.gz new file mode 100644 index 00000000..d8f80f19 Binary files /dev/null and b/2006Redone Server/data/world/map/1106.gz differ diff --git a/2006Redone Server/data/world/map/1107.gz b/2006Redone Server/data/world/map/1107.gz new file mode 100644 index 00000000..4d9beee1 Binary files /dev/null and b/2006Redone Server/data/world/map/1107.gz differ diff --git a/2006Redone Server/data/world/map/1108.gz b/2006Redone Server/data/world/map/1108.gz new file mode 100644 index 00000000..2128bbc4 Binary files /dev/null and b/2006Redone Server/data/world/map/1108.gz differ diff --git a/2006Redone Server/data/world/map/1109.gz b/2006Redone Server/data/world/map/1109.gz new file mode 100644 index 00000000..c670e3c0 Binary files /dev/null and b/2006Redone Server/data/world/map/1109.gz differ diff --git a/2006Redone Server/data/world/map/111.gz b/2006Redone Server/data/world/map/111.gz new file mode 100644 index 00000000..a670bb9f Binary files /dev/null and b/2006Redone Server/data/world/map/111.gz differ diff --git a/2006Redone Server/data/world/map/1110.gz b/2006Redone Server/data/world/map/1110.gz new file mode 100644 index 00000000..e4ac9bdf Binary files /dev/null and b/2006Redone Server/data/world/map/1110.gz differ diff --git a/2006Redone Server/data/world/map/1111.gz b/2006Redone Server/data/world/map/1111.gz new file mode 100644 index 00000000..0fd85359 Binary files /dev/null and b/2006Redone Server/data/world/map/1111.gz differ diff --git a/2006Redone Server/data/world/map/1112.gz b/2006Redone Server/data/world/map/1112.gz new file mode 100644 index 00000000..a60090b0 Binary files /dev/null and b/2006Redone Server/data/world/map/1112.gz differ diff --git a/2006Redone Server/data/world/map/1113.gz b/2006Redone Server/data/world/map/1113.gz new file mode 100644 index 00000000..a350760e Binary files /dev/null and b/2006Redone Server/data/world/map/1113.gz differ diff --git a/2006Redone Server/data/world/map/1114.gz b/2006Redone Server/data/world/map/1114.gz new file mode 100644 index 00000000..2bec03dd Binary files /dev/null and b/2006Redone Server/data/world/map/1114.gz differ diff --git a/2006Redone Server/data/world/map/1115.gz b/2006Redone Server/data/world/map/1115.gz new file mode 100644 index 00000000..3a7a2079 Binary files /dev/null and b/2006Redone Server/data/world/map/1115.gz differ diff --git a/2006Redone Server/data/world/map/1116.gz b/2006Redone Server/data/world/map/1116.gz new file mode 100644 index 00000000..1fc6ee7a Binary files /dev/null and b/2006Redone Server/data/world/map/1116.gz differ diff --git a/2006Redone Server/data/world/map/1117.gz b/2006Redone Server/data/world/map/1117.gz new file mode 100644 index 00000000..a2204cf8 Binary files /dev/null and b/2006Redone Server/data/world/map/1117.gz differ diff --git a/2006Redone Server/data/world/map/1118.gz b/2006Redone Server/data/world/map/1118.gz new file mode 100644 index 00000000..2c953c4c Binary files /dev/null and b/2006Redone Server/data/world/map/1118.gz differ diff --git a/2006Redone Server/data/world/map/1119.gz b/2006Redone Server/data/world/map/1119.gz new file mode 100644 index 00000000..7cbe3857 Binary files /dev/null and b/2006Redone Server/data/world/map/1119.gz differ diff --git a/2006Redone Server/data/world/map/112.gz b/2006Redone Server/data/world/map/112.gz new file mode 100644 index 00000000..697a3da2 Binary files /dev/null and b/2006Redone Server/data/world/map/112.gz differ diff --git a/2006Redone Server/data/world/map/1120.gz b/2006Redone Server/data/world/map/1120.gz new file mode 100644 index 00000000..bfaec88e Binary files /dev/null and b/2006Redone Server/data/world/map/1120.gz differ diff --git a/2006Redone Server/data/world/map/1121.gz b/2006Redone Server/data/world/map/1121.gz new file mode 100644 index 00000000..4b931a2b Binary files /dev/null and b/2006Redone Server/data/world/map/1121.gz differ diff --git a/2006Redone Server/data/world/map/1122.gz b/2006Redone Server/data/world/map/1122.gz new file mode 100644 index 00000000..36a1c224 Binary files /dev/null and b/2006Redone Server/data/world/map/1122.gz differ diff --git a/2006Redone Server/data/world/map/1123.gz b/2006Redone Server/data/world/map/1123.gz new file mode 100644 index 00000000..6d3a78d4 Binary files /dev/null and b/2006Redone Server/data/world/map/1123.gz differ diff --git a/2006Redone Server/data/world/map/1124.gz b/2006Redone Server/data/world/map/1124.gz new file mode 100644 index 00000000..f94d3038 Binary files /dev/null and b/2006Redone Server/data/world/map/1124.gz differ diff --git a/2006Redone Server/data/world/map/1125.gz b/2006Redone Server/data/world/map/1125.gz new file mode 100644 index 00000000..e6431053 Binary files /dev/null and b/2006Redone Server/data/world/map/1125.gz differ diff --git a/2006Redone Server/data/world/map/1126.gz b/2006Redone Server/data/world/map/1126.gz new file mode 100644 index 00000000..f2dc62ca Binary files /dev/null and b/2006Redone Server/data/world/map/1126.gz differ diff --git a/2006Redone Server/data/world/map/1127.gz b/2006Redone Server/data/world/map/1127.gz new file mode 100644 index 00000000..8447e693 Binary files /dev/null and b/2006Redone Server/data/world/map/1127.gz differ diff --git a/2006Redone Server/data/world/map/1128.gz b/2006Redone Server/data/world/map/1128.gz new file mode 100644 index 00000000..841a6ae1 Binary files /dev/null and b/2006Redone Server/data/world/map/1128.gz differ diff --git a/2006Redone Server/data/world/map/1129.gz b/2006Redone Server/data/world/map/1129.gz new file mode 100644 index 00000000..4c7c270c Binary files /dev/null and b/2006Redone Server/data/world/map/1129.gz differ diff --git a/2006Redone Server/data/world/map/113.gz b/2006Redone Server/data/world/map/113.gz new file mode 100644 index 00000000..02ec4ba4 Binary files /dev/null and b/2006Redone Server/data/world/map/113.gz differ diff --git a/2006Redone Server/data/world/map/1130.gz b/2006Redone Server/data/world/map/1130.gz new file mode 100644 index 00000000..3cde0031 Binary files /dev/null and b/2006Redone Server/data/world/map/1130.gz differ diff --git a/2006Redone Server/data/world/map/1131.gz b/2006Redone Server/data/world/map/1131.gz new file mode 100644 index 00000000..b86a4b0f Binary files /dev/null and b/2006Redone Server/data/world/map/1131.gz differ diff --git a/2006Redone Server/data/world/map/1132.gz b/2006Redone Server/data/world/map/1132.gz new file mode 100644 index 00000000..e9bcae7d Binary files /dev/null and b/2006Redone Server/data/world/map/1132.gz differ diff --git a/2006Redone Server/data/world/map/1133.gz b/2006Redone Server/data/world/map/1133.gz new file mode 100644 index 00000000..3cf83776 Binary files /dev/null and b/2006Redone Server/data/world/map/1133.gz differ diff --git a/2006Redone Server/data/world/map/1134.gz b/2006Redone Server/data/world/map/1134.gz new file mode 100644 index 00000000..d7416f23 Binary files /dev/null and b/2006Redone Server/data/world/map/1134.gz differ diff --git a/2006Redone Server/data/world/map/1135.gz b/2006Redone Server/data/world/map/1135.gz new file mode 100644 index 00000000..fdcb264c Binary files /dev/null and b/2006Redone Server/data/world/map/1135.gz differ diff --git a/2006Redone Server/data/world/map/1136.gz b/2006Redone Server/data/world/map/1136.gz new file mode 100644 index 00000000..5b831bbd Binary files /dev/null and b/2006Redone Server/data/world/map/1136.gz differ diff --git a/2006Redone Server/data/world/map/1137.gz b/2006Redone Server/data/world/map/1137.gz new file mode 100644 index 00000000..20d061f0 Binary files /dev/null and b/2006Redone Server/data/world/map/1137.gz differ diff --git a/2006Redone Server/data/world/map/1138.gz b/2006Redone Server/data/world/map/1138.gz new file mode 100644 index 00000000..daaa357c Binary files /dev/null and b/2006Redone Server/data/world/map/1138.gz differ diff --git a/2006Redone Server/data/world/map/1139.gz b/2006Redone Server/data/world/map/1139.gz new file mode 100644 index 00000000..24f688bf Binary files /dev/null and b/2006Redone Server/data/world/map/1139.gz differ diff --git a/2006Redone Server/data/world/map/114.gz b/2006Redone Server/data/world/map/114.gz new file mode 100644 index 00000000..279e6eae Binary files /dev/null and b/2006Redone Server/data/world/map/114.gz differ diff --git a/2006Redone Server/data/world/map/1140.gz b/2006Redone Server/data/world/map/1140.gz new file mode 100644 index 00000000..7becf9c8 Binary files /dev/null and b/2006Redone Server/data/world/map/1140.gz differ diff --git a/2006Redone Server/data/world/map/1141.gz b/2006Redone Server/data/world/map/1141.gz new file mode 100644 index 00000000..463814d2 Binary files /dev/null and b/2006Redone Server/data/world/map/1141.gz differ diff --git a/2006Redone Server/data/world/map/1142.gz b/2006Redone Server/data/world/map/1142.gz new file mode 100644 index 00000000..f10d32d2 Binary files /dev/null and b/2006Redone Server/data/world/map/1142.gz differ diff --git a/2006Redone Server/data/world/map/1143.gz b/2006Redone Server/data/world/map/1143.gz new file mode 100644 index 00000000..f636a16a Binary files /dev/null and b/2006Redone Server/data/world/map/1143.gz differ diff --git a/2006Redone Server/data/world/map/1144.gz b/2006Redone Server/data/world/map/1144.gz new file mode 100644 index 00000000..6c3ba76b Binary files /dev/null and b/2006Redone Server/data/world/map/1144.gz differ diff --git a/2006Redone Server/data/world/map/1145.gz b/2006Redone Server/data/world/map/1145.gz new file mode 100644 index 00000000..773cf358 Binary files /dev/null and b/2006Redone Server/data/world/map/1145.gz differ diff --git a/2006Redone Server/data/world/map/1146.gz b/2006Redone Server/data/world/map/1146.gz new file mode 100644 index 00000000..12774bf0 Binary files /dev/null and b/2006Redone Server/data/world/map/1146.gz differ diff --git a/2006Redone Server/data/world/map/1147.gz b/2006Redone Server/data/world/map/1147.gz new file mode 100644 index 00000000..19fbbce9 Binary files /dev/null and b/2006Redone Server/data/world/map/1147.gz differ diff --git a/2006Redone Server/data/world/map/1148.gz b/2006Redone Server/data/world/map/1148.gz new file mode 100644 index 00000000..9c6a64e8 Binary files /dev/null and b/2006Redone Server/data/world/map/1148.gz differ diff --git a/2006Redone Server/data/world/map/1149.gz b/2006Redone Server/data/world/map/1149.gz new file mode 100644 index 00000000..1bf0913f Binary files /dev/null and b/2006Redone Server/data/world/map/1149.gz differ diff --git a/2006Redone Server/data/world/map/115.gz b/2006Redone Server/data/world/map/115.gz new file mode 100644 index 00000000..f8522521 Binary files /dev/null and b/2006Redone Server/data/world/map/115.gz differ diff --git a/2006Redone Server/data/world/map/1150.gz b/2006Redone Server/data/world/map/1150.gz new file mode 100644 index 00000000..380280f7 Binary files /dev/null and b/2006Redone Server/data/world/map/1150.gz differ diff --git a/2006Redone Server/data/world/map/1151.gz b/2006Redone Server/data/world/map/1151.gz new file mode 100644 index 00000000..4fd8baae Binary files /dev/null and b/2006Redone Server/data/world/map/1151.gz differ diff --git a/2006Redone Server/data/world/map/1152.gz b/2006Redone Server/data/world/map/1152.gz new file mode 100644 index 00000000..b99a8e95 Binary files /dev/null and b/2006Redone Server/data/world/map/1152.gz differ diff --git a/2006Redone Server/data/world/map/1153.gz b/2006Redone Server/data/world/map/1153.gz new file mode 100644 index 00000000..c6775444 Binary files /dev/null and b/2006Redone Server/data/world/map/1153.gz differ diff --git a/2006Redone Server/data/world/map/1154.gz b/2006Redone Server/data/world/map/1154.gz new file mode 100644 index 00000000..bda83208 Binary files /dev/null and b/2006Redone Server/data/world/map/1154.gz differ diff --git a/2006Redone Server/data/world/map/1155.gz b/2006Redone Server/data/world/map/1155.gz new file mode 100644 index 00000000..19ab01ed Binary files /dev/null and b/2006Redone Server/data/world/map/1155.gz differ diff --git a/2006Redone Server/data/world/map/1156.gz b/2006Redone Server/data/world/map/1156.gz new file mode 100644 index 00000000..0e3515f8 Binary files /dev/null and b/2006Redone Server/data/world/map/1156.gz differ diff --git a/2006Redone Server/data/world/map/1157.gz b/2006Redone Server/data/world/map/1157.gz new file mode 100644 index 00000000..fd1d58a8 Binary files /dev/null and b/2006Redone Server/data/world/map/1157.gz differ diff --git a/2006Redone Server/data/world/map/1158.gz b/2006Redone Server/data/world/map/1158.gz new file mode 100644 index 00000000..45bf9155 Binary files /dev/null and b/2006Redone Server/data/world/map/1158.gz differ diff --git a/2006Redone Server/data/world/map/1159.gz b/2006Redone Server/data/world/map/1159.gz new file mode 100644 index 00000000..7ef151b5 Binary files /dev/null and b/2006Redone Server/data/world/map/1159.gz differ diff --git a/2006Redone Server/data/world/map/116.gz b/2006Redone Server/data/world/map/116.gz new file mode 100644 index 00000000..fd097d4e Binary files /dev/null and b/2006Redone Server/data/world/map/116.gz differ diff --git a/2006Redone Server/data/world/map/1160.gz b/2006Redone Server/data/world/map/1160.gz new file mode 100644 index 00000000..19f5a92b Binary files /dev/null and b/2006Redone Server/data/world/map/1160.gz differ diff --git a/2006Redone Server/data/world/map/1161.gz b/2006Redone Server/data/world/map/1161.gz new file mode 100644 index 00000000..ecd097a4 Binary files /dev/null and b/2006Redone Server/data/world/map/1161.gz differ diff --git a/2006Redone Server/data/world/map/1162.gz b/2006Redone Server/data/world/map/1162.gz new file mode 100644 index 00000000..949ea320 Binary files /dev/null and b/2006Redone Server/data/world/map/1162.gz differ diff --git a/2006Redone Server/data/world/map/1163.gz b/2006Redone Server/data/world/map/1163.gz new file mode 100644 index 00000000..cd14d166 Binary files /dev/null and b/2006Redone Server/data/world/map/1163.gz differ diff --git a/2006Redone Server/data/world/map/1164.gz b/2006Redone Server/data/world/map/1164.gz new file mode 100644 index 00000000..9897ad63 Binary files /dev/null and b/2006Redone Server/data/world/map/1164.gz differ diff --git a/2006Redone Server/data/world/map/1165.gz b/2006Redone Server/data/world/map/1165.gz new file mode 100644 index 00000000..5d0583ac Binary files /dev/null and b/2006Redone Server/data/world/map/1165.gz differ diff --git a/2006Redone Server/data/world/map/1166.gz b/2006Redone Server/data/world/map/1166.gz new file mode 100644 index 00000000..b4136ac7 Binary files /dev/null and b/2006Redone Server/data/world/map/1166.gz differ diff --git a/2006Redone Server/data/world/map/1167.gz b/2006Redone Server/data/world/map/1167.gz new file mode 100644 index 00000000..cf64a654 Binary files /dev/null and b/2006Redone Server/data/world/map/1167.gz differ diff --git a/2006Redone Server/data/world/map/1168.gz b/2006Redone Server/data/world/map/1168.gz new file mode 100644 index 00000000..10035438 Binary files /dev/null and b/2006Redone Server/data/world/map/1168.gz differ diff --git a/2006Redone Server/data/world/map/1169.gz b/2006Redone Server/data/world/map/1169.gz new file mode 100644 index 00000000..d71c3d09 Binary files /dev/null and b/2006Redone Server/data/world/map/1169.gz differ diff --git a/2006Redone Server/data/world/map/117.gz b/2006Redone Server/data/world/map/117.gz new file mode 100644 index 00000000..80727ddb Binary files /dev/null and b/2006Redone Server/data/world/map/117.gz differ diff --git a/2006Redone Server/data/world/map/1170.gz b/2006Redone Server/data/world/map/1170.gz new file mode 100644 index 00000000..cce16fce Binary files /dev/null and b/2006Redone Server/data/world/map/1170.gz differ diff --git a/2006Redone Server/data/world/map/1171.gz b/2006Redone Server/data/world/map/1171.gz new file mode 100644 index 00000000..60b9ca48 Binary files /dev/null and b/2006Redone Server/data/world/map/1171.gz differ diff --git a/2006Redone Server/data/world/map/1172.gz b/2006Redone Server/data/world/map/1172.gz new file mode 100644 index 00000000..e2174396 Binary files /dev/null and b/2006Redone Server/data/world/map/1172.gz differ diff --git a/2006Redone Server/data/world/map/1173.gz b/2006Redone Server/data/world/map/1173.gz new file mode 100644 index 00000000..d08693fc Binary files /dev/null and b/2006Redone Server/data/world/map/1173.gz differ diff --git a/2006Redone Server/data/world/map/1174.gz b/2006Redone Server/data/world/map/1174.gz new file mode 100644 index 00000000..ff6218ba Binary files /dev/null and b/2006Redone Server/data/world/map/1174.gz differ diff --git a/2006Redone Server/data/world/map/1175.gz b/2006Redone Server/data/world/map/1175.gz new file mode 100644 index 00000000..c4b09ef4 Binary files /dev/null and b/2006Redone Server/data/world/map/1175.gz differ diff --git a/2006Redone Server/data/world/map/1176.gz b/2006Redone Server/data/world/map/1176.gz new file mode 100644 index 00000000..f036d47d Binary files /dev/null and b/2006Redone Server/data/world/map/1176.gz differ diff --git a/2006Redone Server/data/world/map/1177.gz b/2006Redone Server/data/world/map/1177.gz new file mode 100644 index 00000000..8779c129 Binary files /dev/null and b/2006Redone Server/data/world/map/1177.gz differ diff --git a/2006Redone Server/data/world/map/1178.gz b/2006Redone Server/data/world/map/1178.gz new file mode 100644 index 00000000..6e53a49d Binary files /dev/null and b/2006Redone Server/data/world/map/1178.gz differ diff --git a/2006Redone Server/data/world/map/1179.gz b/2006Redone Server/data/world/map/1179.gz new file mode 100644 index 00000000..165857e6 Binary files /dev/null and b/2006Redone Server/data/world/map/1179.gz differ diff --git a/2006Redone Server/data/world/map/118.gz b/2006Redone Server/data/world/map/118.gz new file mode 100644 index 00000000..0c68daee Binary files /dev/null and b/2006Redone Server/data/world/map/118.gz differ diff --git a/2006Redone Server/data/world/map/1180.gz b/2006Redone Server/data/world/map/1180.gz new file mode 100644 index 00000000..7abbd7a5 Binary files /dev/null and b/2006Redone Server/data/world/map/1180.gz differ diff --git a/2006Redone Server/data/world/map/1181.gz b/2006Redone Server/data/world/map/1181.gz new file mode 100644 index 00000000..d1a373c5 Binary files /dev/null and b/2006Redone Server/data/world/map/1181.gz differ diff --git a/2006Redone Server/data/world/map/1182.gz b/2006Redone Server/data/world/map/1182.gz new file mode 100644 index 00000000..7706831e Binary files /dev/null and b/2006Redone Server/data/world/map/1182.gz differ diff --git a/2006Redone Server/data/world/map/1183.gz b/2006Redone Server/data/world/map/1183.gz new file mode 100644 index 00000000..c21eb07b Binary files /dev/null and b/2006Redone Server/data/world/map/1183.gz differ diff --git a/2006Redone Server/data/world/map/1184.gz b/2006Redone Server/data/world/map/1184.gz new file mode 100644 index 00000000..7a658ac4 Binary files /dev/null and b/2006Redone Server/data/world/map/1184.gz differ diff --git a/2006Redone Server/data/world/map/1185.gz b/2006Redone Server/data/world/map/1185.gz new file mode 100644 index 00000000..241ec0f8 Binary files /dev/null and b/2006Redone Server/data/world/map/1185.gz differ diff --git a/2006Redone Server/data/world/map/1186.gz b/2006Redone Server/data/world/map/1186.gz new file mode 100644 index 00000000..642db3ae Binary files /dev/null and b/2006Redone Server/data/world/map/1186.gz differ diff --git a/2006Redone Server/data/world/map/1187.gz b/2006Redone Server/data/world/map/1187.gz new file mode 100644 index 00000000..01a4e46f Binary files /dev/null and b/2006Redone Server/data/world/map/1187.gz differ diff --git a/2006Redone Server/data/world/map/1188.gz b/2006Redone Server/data/world/map/1188.gz new file mode 100644 index 00000000..032371df Binary files /dev/null and b/2006Redone Server/data/world/map/1188.gz differ diff --git a/2006Redone Server/data/world/map/1189.gz b/2006Redone Server/data/world/map/1189.gz new file mode 100644 index 00000000..f51309f1 Binary files /dev/null and b/2006Redone Server/data/world/map/1189.gz differ diff --git a/2006Redone Server/data/world/map/119.gz b/2006Redone Server/data/world/map/119.gz new file mode 100644 index 00000000..a7e64fc4 Binary files /dev/null and b/2006Redone Server/data/world/map/119.gz differ diff --git a/2006Redone Server/data/world/map/1190.gz b/2006Redone Server/data/world/map/1190.gz new file mode 100644 index 00000000..1c159655 Binary files /dev/null and b/2006Redone Server/data/world/map/1190.gz differ diff --git a/2006Redone Server/data/world/map/1191.gz b/2006Redone Server/data/world/map/1191.gz new file mode 100644 index 00000000..752377f0 Binary files /dev/null and b/2006Redone Server/data/world/map/1191.gz differ diff --git a/2006Redone Server/data/world/map/1192.gz b/2006Redone Server/data/world/map/1192.gz new file mode 100644 index 00000000..43a74244 Binary files /dev/null and b/2006Redone Server/data/world/map/1192.gz differ diff --git a/2006Redone Server/data/world/map/1193.gz b/2006Redone Server/data/world/map/1193.gz new file mode 100644 index 00000000..16a3effa Binary files /dev/null and b/2006Redone Server/data/world/map/1193.gz differ diff --git a/2006Redone Server/data/world/map/1194.gz b/2006Redone Server/data/world/map/1194.gz new file mode 100644 index 00000000..d3640211 Binary files /dev/null and b/2006Redone Server/data/world/map/1194.gz differ diff --git a/2006Redone Server/data/world/map/1195.gz b/2006Redone Server/data/world/map/1195.gz new file mode 100644 index 00000000..12fbe8fd Binary files /dev/null and b/2006Redone Server/data/world/map/1195.gz differ diff --git a/2006Redone Server/data/world/map/1196.gz b/2006Redone Server/data/world/map/1196.gz new file mode 100644 index 00000000..a86aba08 Binary files /dev/null and b/2006Redone Server/data/world/map/1196.gz differ diff --git a/2006Redone Server/data/world/map/1197.gz b/2006Redone Server/data/world/map/1197.gz new file mode 100644 index 00000000..d7e28732 Binary files /dev/null and b/2006Redone Server/data/world/map/1197.gz differ diff --git a/2006Redone Server/data/world/map/1198.gz b/2006Redone Server/data/world/map/1198.gz new file mode 100644 index 00000000..c8789ba8 Binary files /dev/null and b/2006Redone Server/data/world/map/1198.gz differ diff --git a/2006Redone Server/data/world/map/1199.gz b/2006Redone Server/data/world/map/1199.gz new file mode 100644 index 00000000..e92fd4cf Binary files /dev/null and b/2006Redone Server/data/world/map/1199.gz differ diff --git a/2006Redone Server/data/world/map/120.gz b/2006Redone Server/data/world/map/120.gz new file mode 100644 index 00000000..2693c11b Binary files /dev/null and b/2006Redone Server/data/world/map/120.gz differ diff --git a/2006Redone Server/data/world/map/1200.gz b/2006Redone Server/data/world/map/1200.gz new file mode 100644 index 00000000..ea169ead Binary files /dev/null and b/2006Redone Server/data/world/map/1200.gz differ diff --git a/2006Redone Server/data/world/map/1201.gz b/2006Redone Server/data/world/map/1201.gz new file mode 100644 index 00000000..46fa52cb Binary files /dev/null and b/2006Redone Server/data/world/map/1201.gz differ diff --git a/2006Redone Server/data/world/map/1202.gz b/2006Redone Server/data/world/map/1202.gz new file mode 100644 index 00000000..308b3154 Binary files /dev/null and b/2006Redone Server/data/world/map/1202.gz differ diff --git a/2006Redone Server/data/world/map/1203.gz b/2006Redone Server/data/world/map/1203.gz new file mode 100644 index 00000000..07c19d56 Binary files /dev/null and b/2006Redone Server/data/world/map/1203.gz differ diff --git a/2006Redone Server/data/world/map/1204.gz b/2006Redone Server/data/world/map/1204.gz new file mode 100644 index 00000000..840bd2ba Binary files /dev/null and b/2006Redone Server/data/world/map/1204.gz differ diff --git a/2006Redone Server/data/world/map/1205.gz b/2006Redone Server/data/world/map/1205.gz new file mode 100644 index 00000000..898a31e6 Binary files /dev/null and b/2006Redone Server/data/world/map/1205.gz differ diff --git a/2006Redone Server/data/world/map/1206.gz b/2006Redone Server/data/world/map/1206.gz new file mode 100644 index 00000000..898b4c9c Binary files /dev/null and b/2006Redone Server/data/world/map/1206.gz differ diff --git a/2006Redone Server/data/world/map/1207.gz b/2006Redone Server/data/world/map/1207.gz new file mode 100644 index 00000000..a40bfcff Binary files /dev/null and b/2006Redone Server/data/world/map/1207.gz differ diff --git a/2006Redone Server/data/world/map/1208.gz b/2006Redone Server/data/world/map/1208.gz new file mode 100644 index 00000000..3a79796d Binary files /dev/null and b/2006Redone Server/data/world/map/1208.gz differ diff --git a/2006Redone Server/data/world/map/1209.gz b/2006Redone Server/data/world/map/1209.gz new file mode 100644 index 00000000..b682b0a3 Binary files /dev/null and b/2006Redone Server/data/world/map/1209.gz differ diff --git a/2006Redone Server/data/world/map/121.gz b/2006Redone Server/data/world/map/121.gz new file mode 100644 index 00000000..7e08b39a Binary files /dev/null and b/2006Redone Server/data/world/map/121.gz differ diff --git a/2006Redone Server/data/world/map/1210.gz b/2006Redone Server/data/world/map/1210.gz new file mode 100644 index 00000000..2d90f493 Binary files /dev/null and b/2006Redone Server/data/world/map/1210.gz differ diff --git a/2006Redone Server/data/world/map/1211.gz b/2006Redone Server/data/world/map/1211.gz new file mode 100644 index 00000000..a63696fb Binary files /dev/null and b/2006Redone Server/data/world/map/1211.gz differ diff --git a/2006Redone Server/data/world/map/1212.gz b/2006Redone Server/data/world/map/1212.gz new file mode 100644 index 00000000..b1e84379 Binary files /dev/null and b/2006Redone Server/data/world/map/1212.gz differ diff --git a/2006Redone Server/data/world/map/1213.gz b/2006Redone Server/data/world/map/1213.gz new file mode 100644 index 00000000..52760858 Binary files /dev/null and b/2006Redone Server/data/world/map/1213.gz differ diff --git a/2006Redone Server/data/world/map/1214.gz b/2006Redone Server/data/world/map/1214.gz new file mode 100644 index 00000000..6e34e5a2 Binary files /dev/null and b/2006Redone Server/data/world/map/1214.gz differ diff --git a/2006Redone Server/data/world/map/1215.gz b/2006Redone Server/data/world/map/1215.gz new file mode 100644 index 00000000..0ff9302c Binary files /dev/null and b/2006Redone Server/data/world/map/1215.gz differ diff --git a/2006Redone Server/data/world/map/1216.gz b/2006Redone Server/data/world/map/1216.gz new file mode 100644 index 00000000..7dd57db6 Binary files /dev/null and b/2006Redone Server/data/world/map/1216.gz differ diff --git a/2006Redone Server/data/world/map/1217.gz b/2006Redone Server/data/world/map/1217.gz new file mode 100644 index 00000000..06f1d7e4 Binary files /dev/null and b/2006Redone Server/data/world/map/1217.gz differ diff --git a/2006Redone Server/data/world/map/1218.gz b/2006Redone Server/data/world/map/1218.gz new file mode 100644 index 00000000..f9cfe338 Binary files /dev/null and b/2006Redone Server/data/world/map/1218.gz differ diff --git a/2006Redone Server/data/world/map/1219.gz b/2006Redone Server/data/world/map/1219.gz new file mode 100644 index 00000000..247eeba5 Binary files /dev/null and b/2006Redone Server/data/world/map/1219.gz differ diff --git a/2006Redone Server/data/world/map/122.gz b/2006Redone Server/data/world/map/122.gz new file mode 100644 index 00000000..f71f0bfd Binary files /dev/null and b/2006Redone Server/data/world/map/122.gz differ diff --git a/2006Redone Server/data/world/map/1220.gz b/2006Redone Server/data/world/map/1220.gz new file mode 100644 index 00000000..18d43cad Binary files /dev/null and b/2006Redone Server/data/world/map/1220.gz differ diff --git a/2006Redone Server/data/world/map/1221.gz b/2006Redone Server/data/world/map/1221.gz new file mode 100644 index 00000000..9626b0e0 Binary files /dev/null and b/2006Redone Server/data/world/map/1221.gz differ diff --git a/2006Redone Server/data/world/map/1222.gz b/2006Redone Server/data/world/map/1222.gz new file mode 100644 index 00000000..2c8a384f Binary files /dev/null and b/2006Redone Server/data/world/map/1222.gz differ diff --git a/2006Redone Server/data/world/map/1223.gz b/2006Redone Server/data/world/map/1223.gz new file mode 100644 index 00000000..b61bf5b0 Binary files /dev/null and b/2006Redone Server/data/world/map/1223.gz differ diff --git a/2006Redone Server/data/world/map/1224.gz b/2006Redone Server/data/world/map/1224.gz new file mode 100644 index 00000000..bf4afdc4 Binary files /dev/null and b/2006Redone Server/data/world/map/1224.gz differ diff --git a/2006Redone Server/data/world/map/1225.gz b/2006Redone Server/data/world/map/1225.gz new file mode 100644 index 00000000..104d9059 Binary files /dev/null and b/2006Redone Server/data/world/map/1225.gz differ diff --git a/2006Redone Server/data/world/map/1226.gz b/2006Redone Server/data/world/map/1226.gz new file mode 100644 index 00000000..2ca70a2a Binary files /dev/null and b/2006Redone Server/data/world/map/1226.gz differ diff --git a/2006Redone Server/data/world/map/1227.gz b/2006Redone Server/data/world/map/1227.gz new file mode 100644 index 00000000..a6847476 Binary files /dev/null and b/2006Redone Server/data/world/map/1227.gz differ diff --git a/2006Redone Server/data/world/map/1228.gz b/2006Redone Server/data/world/map/1228.gz new file mode 100644 index 00000000..0570ebcd Binary files /dev/null and b/2006Redone Server/data/world/map/1228.gz differ diff --git a/2006Redone Server/data/world/map/1229.gz b/2006Redone Server/data/world/map/1229.gz new file mode 100644 index 00000000..7d131c76 Binary files /dev/null and b/2006Redone Server/data/world/map/1229.gz differ diff --git a/2006Redone Server/data/world/map/123.gz b/2006Redone Server/data/world/map/123.gz new file mode 100644 index 00000000..1bb93259 Binary files /dev/null and b/2006Redone Server/data/world/map/123.gz differ diff --git a/2006Redone Server/data/world/map/1230.gz b/2006Redone Server/data/world/map/1230.gz new file mode 100644 index 00000000..2087ccc1 Binary files /dev/null and b/2006Redone Server/data/world/map/1230.gz differ diff --git a/2006Redone Server/data/world/map/1231.gz b/2006Redone Server/data/world/map/1231.gz new file mode 100644 index 00000000..268ac19b Binary files /dev/null and b/2006Redone Server/data/world/map/1231.gz differ diff --git a/2006Redone Server/data/world/map/1232.gz b/2006Redone Server/data/world/map/1232.gz new file mode 100644 index 00000000..5b8682a5 Binary files /dev/null and b/2006Redone Server/data/world/map/1232.gz differ diff --git a/2006Redone Server/data/world/map/1233.gz b/2006Redone Server/data/world/map/1233.gz new file mode 100644 index 00000000..0098c4ba Binary files /dev/null and b/2006Redone Server/data/world/map/1233.gz differ diff --git a/2006Redone Server/data/world/map/1234.gz b/2006Redone Server/data/world/map/1234.gz new file mode 100644 index 00000000..da7d61e1 Binary files /dev/null and b/2006Redone Server/data/world/map/1234.gz differ diff --git a/2006Redone Server/data/world/map/1235.gz b/2006Redone Server/data/world/map/1235.gz new file mode 100644 index 00000000..c6fd0323 Binary files /dev/null and b/2006Redone Server/data/world/map/1235.gz differ diff --git a/2006Redone Server/data/world/map/1236.gz b/2006Redone Server/data/world/map/1236.gz new file mode 100644 index 00000000..72e32004 Binary files /dev/null and b/2006Redone Server/data/world/map/1236.gz differ diff --git a/2006Redone Server/data/world/map/1237.gz b/2006Redone Server/data/world/map/1237.gz new file mode 100644 index 00000000..03cf35bd Binary files /dev/null and b/2006Redone Server/data/world/map/1237.gz differ diff --git a/2006Redone Server/data/world/map/1238.gz b/2006Redone Server/data/world/map/1238.gz new file mode 100644 index 00000000..65b3075b Binary files /dev/null and b/2006Redone Server/data/world/map/1238.gz differ diff --git a/2006Redone Server/data/world/map/1239.gz b/2006Redone Server/data/world/map/1239.gz new file mode 100644 index 00000000..571b0ea4 Binary files /dev/null and b/2006Redone Server/data/world/map/1239.gz differ diff --git a/2006Redone Server/data/world/map/124.gz b/2006Redone Server/data/world/map/124.gz new file mode 100644 index 00000000..3a6d716d Binary files /dev/null and b/2006Redone Server/data/world/map/124.gz differ diff --git a/2006Redone Server/data/world/map/1240.gz b/2006Redone Server/data/world/map/1240.gz new file mode 100644 index 00000000..6edcf5a4 Binary files /dev/null and b/2006Redone Server/data/world/map/1240.gz differ diff --git a/2006Redone Server/data/world/map/1241.gz b/2006Redone Server/data/world/map/1241.gz new file mode 100644 index 00000000..b3997f01 Binary files /dev/null and b/2006Redone Server/data/world/map/1241.gz differ diff --git a/2006Redone Server/data/world/map/1242.gz b/2006Redone Server/data/world/map/1242.gz new file mode 100644 index 00000000..5bf955a1 Binary files /dev/null and b/2006Redone Server/data/world/map/1242.gz differ diff --git a/2006Redone Server/data/world/map/1243.gz b/2006Redone Server/data/world/map/1243.gz new file mode 100644 index 00000000..bb909db7 Binary files /dev/null and b/2006Redone Server/data/world/map/1243.gz differ diff --git a/2006Redone Server/data/world/map/1244.gz b/2006Redone Server/data/world/map/1244.gz new file mode 100644 index 00000000..20823c8c Binary files /dev/null and b/2006Redone Server/data/world/map/1244.gz differ diff --git a/2006Redone Server/data/world/map/1245.gz b/2006Redone Server/data/world/map/1245.gz new file mode 100644 index 00000000..59aa1ee1 Binary files /dev/null and b/2006Redone Server/data/world/map/1245.gz differ diff --git a/2006Redone Server/data/world/map/1246.gz b/2006Redone Server/data/world/map/1246.gz new file mode 100644 index 00000000..02183b25 Binary files /dev/null and b/2006Redone Server/data/world/map/1246.gz differ diff --git a/2006Redone Server/data/world/map/1247.gz b/2006Redone Server/data/world/map/1247.gz new file mode 100644 index 00000000..7f7c4eea Binary files /dev/null and b/2006Redone Server/data/world/map/1247.gz differ diff --git a/2006Redone Server/data/world/map/1248.gz b/2006Redone Server/data/world/map/1248.gz new file mode 100644 index 00000000..a025466c Binary files /dev/null and b/2006Redone Server/data/world/map/1248.gz differ diff --git a/2006Redone Server/data/world/map/1249.gz b/2006Redone Server/data/world/map/1249.gz new file mode 100644 index 00000000..8b585b07 Binary files /dev/null and b/2006Redone Server/data/world/map/1249.gz differ diff --git a/2006Redone Server/data/world/map/125.gz b/2006Redone Server/data/world/map/125.gz new file mode 100644 index 00000000..c20f04dc Binary files /dev/null and b/2006Redone Server/data/world/map/125.gz differ diff --git a/2006Redone Server/data/world/map/1250.gz b/2006Redone Server/data/world/map/1250.gz new file mode 100644 index 00000000..cfcfefaa Binary files /dev/null and b/2006Redone Server/data/world/map/1250.gz differ diff --git a/2006Redone Server/data/world/map/1251.gz b/2006Redone Server/data/world/map/1251.gz new file mode 100644 index 00000000..fecdc6e1 Binary files /dev/null and b/2006Redone Server/data/world/map/1251.gz differ diff --git a/2006Redone Server/data/world/map/1252.gz b/2006Redone Server/data/world/map/1252.gz new file mode 100644 index 00000000..b03b8456 Binary files /dev/null and b/2006Redone Server/data/world/map/1252.gz differ diff --git a/2006Redone Server/data/world/map/1253.gz b/2006Redone Server/data/world/map/1253.gz new file mode 100644 index 00000000..043f6c24 Binary files /dev/null and b/2006Redone Server/data/world/map/1253.gz differ diff --git a/2006Redone Server/data/world/map/1254.gz b/2006Redone Server/data/world/map/1254.gz new file mode 100644 index 00000000..2844f74e Binary files /dev/null and b/2006Redone Server/data/world/map/1254.gz differ diff --git a/2006Redone Server/data/world/map/1255.gz b/2006Redone Server/data/world/map/1255.gz new file mode 100644 index 00000000..bd8f63b0 Binary files /dev/null and b/2006Redone Server/data/world/map/1255.gz differ diff --git a/2006Redone Server/data/world/map/1256.gz b/2006Redone Server/data/world/map/1256.gz new file mode 100644 index 00000000..a9b6d819 Binary files /dev/null and b/2006Redone Server/data/world/map/1256.gz differ diff --git a/2006Redone Server/data/world/map/1257.gz b/2006Redone Server/data/world/map/1257.gz new file mode 100644 index 00000000..a897881c Binary files /dev/null and b/2006Redone Server/data/world/map/1257.gz differ diff --git a/2006Redone Server/data/world/map/1258.gz b/2006Redone Server/data/world/map/1258.gz new file mode 100644 index 00000000..8dd8aafb Binary files /dev/null and b/2006Redone Server/data/world/map/1258.gz differ diff --git a/2006Redone Server/data/world/map/1259.gz b/2006Redone Server/data/world/map/1259.gz new file mode 100644 index 00000000..6db3aea5 Binary files /dev/null and b/2006Redone Server/data/world/map/1259.gz differ diff --git a/2006Redone Server/data/world/map/126.gz b/2006Redone Server/data/world/map/126.gz new file mode 100644 index 00000000..1e87150f Binary files /dev/null and b/2006Redone Server/data/world/map/126.gz differ diff --git a/2006Redone Server/data/world/map/1260.gz b/2006Redone Server/data/world/map/1260.gz new file mode 100644 index 00000000..043062d9 Binary files /dev/null and b/2006Redone Server/data/world/map/1260.gz differ diff --git a/2006Redone Server/data/world/map/1261.gz b/2006Redone Server/data/world/map/1261.gz new file mode 100644 index 00000000..f8cd5e05 Binary files /dev/null and b/2006Redone Server/data/world/map/1261.gz differ diff --git a/2006Redone Server/data/world/map/1262.gz b/2006Redone Server/data/world/map/1262.gz new file mode 100644 index 00000000..7cb468d2 Binary files /dev/null and b/2006Redone Server/data/world/map/1262.gz differ diff --git a/2006Redone Server/data/world/map/1263.gz b/2006Redone Server/data/world/map/1263.gz new file mode 100644 index 00000000..d5f8ba70 Binary files /dev/null and b/2006Redone Server/data/world/map/1263.gz differ diff --git a/2006Redone Server/data/world/map/1264.gz b/2006Redone Server/data/world/map/1264.gz new file mode 100644 index 00000000..c00ddfbe Binary files /dev/null and b/2006Redone Server/data/world/map/1264.gz differ diff --git a/2006Redone Server/data/world/map/1265.gz b/2006Redone Server/data/world/map/1265.gz new file mode 100644 index 00000000..ef02c6b9 Binary files /dev/null and b/2006Redone Server/data/world/map/1265.gz differ diff --git a/2006Redone Server/data/world/map/1266.gz b/2006Redone Server/data/world/map/1266.gz new file mode 100644 index 00000000..5121396f Binary files /dev/null and b/2006Redone Server/data/world/map/1266.gz differ diff --git a/2006Redone Server/data/world/map/1267.gz b/2006Redone Server/data/world/map/1267.gz new file mode 100644 index 00000000..de1dc6b3 Binary files /dev/null and b/2006Redone Server/data/world/map/1267.gz differ diff --git a/2006Redone Server/data/world/map/1268.gz b/2006Redone Server/data/world/map/1268.gz new file mode 100644 index 00000000..c8f39bcc Binary files /dev/null and b/2006Redone Server/data/world/map/1268.gz differ diff --git a/2006Redone Server/data/world/map/1269.gz b/2006Redone Server/data/world/map/1269.gz new file mode 100644 index 00000000..76fc90d3 Binary files /dev/null and b/2006Redone Server/data/world/map/1269.gz differ diff --git a/2006Redone Server/data/world/map/127.gz b/2006Redone Server/data/world/map/127.gz new file mode 100644 index 00000000..d4c16aa1 Binary files /dev/null and b/2006Redone Server/data/world/map/127.gz differ diff --git a/2006Redone Server/data/world/map/1270.gz b/2006Redone Server/data/world/map/1270.gz new file mode 100644 index 00000000..a4a2751c Binary files /dev/null and b/2006Redone Server/data/world/map/1270.gz differ diff --git a/2006Redone Server/data/world/map/1271.gz b/2006Redone Server/data/world/map/1271.gz new file mode 100644 index 00000000..a60ab481 Binary files /dev/null and b/2006Redone Server/data/world/map/1271.gz differ diff --git a/2006Redone Server/data/world/map/1272.gz b/2006Redone Server/data/world/map/1272.gz new file mode 100644 index 00000000..0c614f49 Binary files /dev/null and b/2006Redone Server/data/world/map/1272.gz differ diff --git a/2006Redone Server/data/world/map/1273.gz b/2006Redone Server/data/world/map/1273.gz new file mode 100644 index 00000000..06d5e65a Binary files /dev/null and b/2006Redone Server/data/world/map/1273.gz differ diff --git a/2006Redone Server/data/world/map/1274.gz b/2006Redone Server/data/world/map/1274.gz new file mode 100644 index 00000000..e1342205 Binary files /dev/null and b/2006Redone Server/data/world/map/1274.gz differ diff --git a/2006Redone Server/data/world/map/1275.gz b/2006Redone Server/data/world/map/1275.gz new file mode 100644 index 00000000..833d8913 Binary files /dev/null and b/2006Redone Server/data/world/map/1275.gz differ diff --git a/2006Redone Server/data/world/map/1276.gz b/2006Redone Server/data/world/map/1276.gz new file mode 100644 index 00000000..643645fc Binary files /dev/null and b/2006Redone Server/data/world/map/1276.gz differ diff --git a/2006Redone Server/data/world/map/1277.gz b/2006Redone Server/data/world/map/1277.gz new file mode 100644 index 00000000..a877565f Binary files /dev/null and b/2006Redone Server/data/world/map/1277.gz differ diff --git a/2006Redone Server/data/world/map/1278.gz b/2006Redone Server/data/world/map/1278.gz new file mode 100644 index 00000000..e97593df Binary files /dev/null and b/2006Redone Server/data/world/map/1278.gz differ diff --git a/2006Redone Server/data/world/map/1279.gz b/2006Redone Server/data/world/map/1279.gz new file mode 100644 index 00000000..7e1dda61 Binary files /dev/null and b/2006Redone Server/data/world/map/1279.gz differ diff --git a/2006Redone Server/data/world/map/128.gz b/2006Redone Server/data/world/map/128.gz new file mode 100644 index 00000000..e1e67cde Binary files /dev/null and b/2006Redone Server/data/world/map/128.gz differ diff --git a/2006Redone Server/data/world/map/1280.gz b/2006Redone Server/data/world/map/1280.gz new file mode 100644 index 00000000..04906ffa Binary files /dev/null and b/2006Redone Server/data/world/map/1280.gz differ diff --git a/2006Redone Server/data/world/map/1281.gz b/2006Redone Server/data/world/map/1281.gz new file mode 100644 index 00000000..df166071 Binary files /dev/null and b/2006Redone Server/data/world/map/1281.gz differ diff --git a/2006Redone Server/data/world/map/1282.gz b/2006Redone Server/data/world/map/1282.gz new file mode 100644 index 00000000..eb45e425 Binary files /dev/null and b/2006Redone Server/data/world/map/1282.gz differ diff --git a/2006Redone Server/data/world/map/1283.gz b/2006Redone Server/data/world/map/1283.gz new file mode 100644 index 00000000..ec722066 Binary files /dev/null and b/2006Redone Server/data/world/map/1283.gz differ diff --git a/2006Redone Server/data/world/map/1284.gz b/2006Redone Server/data/world/map/1284.gz new file mode 100644 index 00000000..879dfe1f Binary files /dev/null and b/2006Redone Server/data/world/map/1284.gz differ diff --git a/2006Redone Server/data/world/map/1285.gz b/2006Redone Server/data/world/map/1285.gz new file mode 100644 index 00000000..b4d4469f Binary files /dev/null and b/2006Redone Server/data/world/map/1285.gz differ diff --git a/2006Redone Server/data/world/map/1286.gz b/2006Redone Server/data/world/map/1286.gz new file mode 100644 index 00000000..564489cd Binary files /dev/null and b/2006Redone Server/data/world/map/1286.gz differ diff --git a/2006Redone Server/data/world/map/1287.gz b/2006Redone Server/data/world/map/1287.gz new file mode 100644 index 00000000..7032b57e Binary files /dev/null and b/2006Redone Server/data/world/map/1287.gz differ diff --git a/2006Redone Server/data/world/map/1288.gz b/2006Redone Server/data/world/map/1288.gz new file mode 100644 index 00000000..2214f801 Binary files /dev/null and b/2006Redone Server/data/world/map/1288.gz differ diff --git a/2006Redone Server/data/world/map/1289.gz b/2006Redone Server/data/world/map/1289.gz new file mode 100644 index 00000000..da9e33d5 Binary files /dev/null and b/2006Redone Server/data/world/map/1289.gz differ diff --git a/2006Redone Server/data/world/map/129.gz b/2006Redone Server/data/world/map/129.gz new file mode 100644 index 00000000..130c397a Binary files /dev/null and b/2006Redone Server/data/world/map/129.gz differ diff --git a/2006Redone Server/data/world/map/1290.gz b/2006Redone Server/data/world/map/1290.gz new file mode 100644 index 00000000..002fdfb5 Binary files /dev/null and b/2006Redone Server/data/world/map/1290.gz differ diff --git a/2006Redone Server/data/world/map/1291.gz b/2006Redone Server/data/world/map/1291.gz new file mode 100644 index 00000000..0e03cbee Binary files /dev/null and b/2006Redone Server/data/world/map/1291.gz differ diff --git a/2006Redone Server/data/world/map/1292.gz b/2006Redone Server/data/world/map/1292.gz new file mode 100644 index 00000000..b7edfa5d Binary files /dev/null and b/2006Redone Server/data/world/map/1292.gz differ diff --git a/2006Redone Server/data/world/map/1293.gz b/2006Redone Server/data/world/map/1293.gz new file mode 100644 index 00000000..ace57fb7 Binary files /dev/null and b/2006Redone Server/data/world/map/1293.gz differ diff --git a/2006Redone Server/data/world/map/1294.gz b/2006Redone Server/data/world/map/1294.gz new file mode 100644 index 00000000..5d0856f9 Binary files /dev/null and b/2006Redone Server/data/world/map/1294.gz differ diff --git a/2006Redone Server/data/world/map/1295.gz b/2006Redone Server/data/world/map/1295.gz new file mode 100644 index 00000000..eef1a075 Binary files /dev/null and b/2006Redone Server/data/world/map/1295.gz differ diff --git a/2006Redone Server/data/world/map/1296.gz b/2006Redone Server/data/world/map/1296.gz new file mode 100644 index 00000000..30ff4c23 Binary files /dev/null and b/2006Redone Server/data/world/map/1296.gz differ diff --git a/2006Redone Server/data/world/map/1297.gz b/2006Redone Server/data/world/map/1297.gz new file mode 100644 index 00000000..cf19702f Binary files /dev/null and b/2006Redone Server/data/world/map/1297.gz differ diff --git a/2006Redone Server/data/world/map/1298.gz b/2006Redone Server/data/world/map/1298.gz new file mode 100644 index 00000000..4c6cb573 Binary files /dev/null and b/2006Redone Server/data/world/map/1298.gz differ diff --git a/2006Redone Server/data/world/map/1299.gz b/2006Redone Server/data/world/map/1299.gz new file mode 100644 index 00000000..875d5e0b Binary files /dev/null and b/2006Redone Server/data/world/map/1299.gz differ diff --git a/2006Redone Server/data/world/map/130.gz b/2006Redone Server/data/world/map/130.gz new file mode 100644 index 00000000..8a4655b9 Binary files /dev/null and b/2006Redone Server/data/world/map/130.gz differ diff --git a/2006Redone Server/data/world/map/1300.gz b/2006Redone Server/data/world/map/1300.gz new file mode 100644 index 00000000..239edd9a Binary files /dev/null and b/2006Redone Server/data/world/map/1300.gz differ diff --git a/2006Redone Server/data/world/map/1301.gz b/2006Redone Server/data/world/map/1301.gz new file mode 100644 index 00000000..7806be33 Binary files /dev/null and b/2006Redone Server/data/world/map/1301.gz differ diff --git a/2006Redone Server/data/world/map/1302.gz b/2006Redone Server/data/world/map/1302.gz new file mode 100644 index 00000000..0baa8a46 Binary files /dev/null and b/2006Redone Server/data/world/map/1302.gz differ diff --git a/2006Redone Server/data/world/map/1303.gz b/2006Redone Server/data/world/map/1303.gz new file mode 100644 index 00000000..d47e9208 Binary files /dev/null and b/2006Redone Server/data/world/map/1303.gz differ diff --git a/2006Redone Server/data/world/map/1304.gz b/2006Redone Server/data/world/map/1304.gz new file mode 100644 index 00000000..7c7b298c Binary files /dev/null and b/2006Redone Server/data/world/map/1304.gz differ diff --git a/2006Redone Server/data/world/map/1305.gz b/2006Redone Server/data/world/map/1305.gz new file mode 100644 index 00000000..0be00447 Binary files /dev/null and b/2006Redone Server/data/world/map/1305.gz differ diff --git a/2006Redone Server/data/world/map/1306.gz b/2006Redone Server/data/world/map/1306.gz new file mode 100644 index 00000000..2d9274ca Binary files /dev/null and b/2006Redone Server/data/world/map/1306.gz differ diff --git a/2006Redone Server/data/world/map/1307.gz b/2006Redone Server/data/world/map/1307.gz new file mode 100644 index 00000000..a2554f39 Binary files /dev/null and b/2006Redone Server/data/world/map/1307.gz differ diff --git a/2006Redone Server/data/world/map/1308.gz b/2006Redone Server/data/world/map/1308.gz new file mode 100644 index 00000000..5b2bb3df Binary files /dev/null and b/2006Redone Server/data/world/map/1308.gz differ diff --git a/2006Redone Server/data/world/map/1309.gz b/2006Redone Server/data/world/map/1309.gz new file mode 100644 index 00000000..a626a224 Binary files /dev/null and b/2006Redone Server/data/world/map/1309.gz differ diff --git a/2006Redone Server/data/world/map/131.gz b/2006Redone Server/data/world/map/131.gz new file mode 100644 index 00000000..57698f75 Binary files /dev/null and b/2006Redone Server/data/world/map/131.gz differ diff --git a/2006Redone Server/data/world/map/1310.gz b/2006Redone Server/data/world/map/1310.gz new file mode 100644 index 00000000..89eabf28 Binary files /dev/null and b/2006Redone Server/data/world/map/1310.gz differ diff --git a/2006Redone Server/data/world/map/1311.gz b/2006Redone Server/data/world/map/1311.gz new file mode 100644 index 00000000..dc7700a5 Binary files /dev/null and b/2006Redone Server/data/world/map/1311.gz differ diff --git a/2006Redone Server/data/world/map/1312.gz b/2006Redone Server/data/world/map/1312.gz new file mode 100644 index 00000000..f1002cc5 Binary files /dev/null and b/2006Redone Server/data/world/map/1312.gz differ diff --git a/2006Redone Server/data/world/map/1313.gz b/2006Redone Server/data/world/map/1313.gz new file mode 100644 index 00000000..0e94fa12 Binary files /dev/null and b/2006Redone Server/data/world/map/1313.gz differ diff --git a/2006Redone Server/data/world/map/1314.gz b/2006Redone Server/data/world/map/1314.gz new file mode 100644 index 00000000..55611f08 Binary files /dev/null and b/2006Redone Server/data/world/map/1314.gz differ diff --git a/2006Redone Server/data/world/map/1315.gz b/2006Redone Server/data/world/map/1315.gz new file mode 100644 index 00000000..7561633a Binary files /dev/null and b/2006Redone Server/data/world/map/1315.gz differ diff --git a/2006Redone Server/data/world/map/1316.gz b/2006Redone Server/data/world/map/1316.gz new file mode 100644 index 00000000..7f024141 Binary files /dev/null and b/2006Redone Server/data/world/map/1316.gz differ diff --git a/2006Redone Server/data/world/map/1317.gz b/2006Redone Server/data/world/map/1317.gz new file mode 100644 index 00000000..bba743cb Binary files /dev/null and b/2006Redone Server/data/world/map/1317.gz differ diff --git a/2006Redone Server/data/world/map/132.gz b/2006Redone Server/data/world/map/132.gz new file mode 100644 index 00000000..9d09392d Binary files /dev/null and b/2006Redone Server/data/world/map/132.gz differ diff --git a/2006Redone Server/data/world/map/1320.gz b/2006Redone Server/data/world/map/1320.gz new file mode 100644 index 00000000..99480cad Binary files /dev/null and b/2006Redone Server/data/world/map/1320.gz differ diff --git a/2006Redone Server/data/world/map/1321.gz b/2006Redone Server/data/world/map/1321.gz new file mode 100644 index 00000000..040e867f Binary files /dev/null and b/2006Redone Server/data/world/map/1321.gz differ diff --git a/2006Redone Server/data/world/map/1322.gz b/2006Redone Server/data/world/map/1322.gz new file mode 100644 index 00000000..108ccf98 Binary files /dev/null and b/2006Redone Server/data/world/map/1322.gz differ diff --git a/2006Redone Server/data/world/map/1323.gz b/2006Redone Server/data/world/map/1323.gz new file mode 100644 index 00000000..c077383a Binary files /dev/null and b/2006Redone Server/data/world/map/1323.gz differ diff --git a/2006Redone Server/data/world/map/1324.gz b/2006Redone Server/data/world/map/1324.gz new file mode 100644 index 00000000..fe7db85f Binary files /dev/null and b/2006Redone Server/data/world/map/1324.gz differ diff --git a/2006Redone Server/data/world/map/1325.gz b/2006Redone Server/data/world/map/1325.gz new file mode 100644 index 00000000..93433284 Binary files /dev/null and b/2006Redone Server/data/world/map/1325.gz differ diff --git a/2006Redone Server/data/world/map/1326.gz b/2006Redone Server/data/world/map/1326.gz new file mode 100644 index 00000000..c7ba68c3 Binary files /dev/null and b/2006Redone Server/data/world/map/1326.gz differ diff --git a/2006Redone Server/data/world/map/1327.gz b/2006Redone Server/data/world/map/1327.gz new file mode 100644 index 00000000..0817bb9f Binary files /dev/null and b/2006Redone Server/data/world/map/1327.gz differ diff --git a/2006Redone Server/data/world/map/1328.gz b/2006Redone Server/data/world/map/1328.gz new file mode 100644 index 00000000..42e74768 Binary files /dev/null and b/2006Redone Server/data/world/map/1328.gz differ diff --git a/2006Redone Server/data/world/map/1329.gz b/2006Redone Server/data/world/map/1329.gz new file mode 100644 index 00000000..f989e4cc Binary files /dev/null and b/2006Redone Server/data/world/map/1329.gz differ diff --git a/2006Redone Server/data/world/map/133.gz b/2006Redone Server/data/world/map/133.gz new file mode 100644 index 00000000..627121e0 Binary files /dev/null and b/2006Redone Server/data/world/map/133.gz differ diff --git a/2006Redone Server/data/world/map/1330.gz b/2006Redone Server/data/world/map/1330.gz new file mode 100644 index 00000000..01b1e758 Binary files /dev/null and b/2006Redone Server/data/world/map/1330.gz differ diff --git a/2006Redone Server/data/world/map/1331.gz b/2006Redone Server/data/world/map/1331.gz new file mode 100644 index 00000000..7576ca7f Binary files /dev/null and b/2006Redone Server/data/world/map/1331.gz differ diff --git a/2006Redone Server/data/world/map/1332.gz b/2006Redone Server/data/world/map/1332.gz new file mode 100644 index 00000000..1d1548cb Binary files /dev/null and b/2006Redone Server/data/world/map/1332.gz differ diff --git a/2006Redone Server/data/world/map/1333.gz b/2006Redone Server/data/world/map/1333.gz new file mode 100644 index 00000000..6d4cbfd7 Binary files /dev/null and b/2006Redone Server/data/world/map/1333.gz differ diff --git a/2006Redone Server/data/world/map/1334.gz b/2006Redone Server/data/world/map/1334.gz new file mode 100644 index 00000000..9310830c Binary files /dev/null and b/2006Redone Server/data/world/map/1334.gz differ diff --git a/2006Redone Server/data/world/map/1335.gz b/2006Redone Server/data/world/map/1335.gz new file mode 100644 index 00000000..e4a8aa70 Binary files /dev/null and b/2006Redone Server/data/world/map/1335.gz differ diff --git a/2006Redone Server/data/world/map/1336.gz b/2006Redone Server/data/world/map/1336.gz new file mode 100644 index 00000000..2c690cba Binary files /dev/null and b/2006Redone Server/data/world/map/1336.gz differ diff --git a/2006Redone Server/data/world/map/1337.gz b/2006Redone Server/data/world/map/1337.gz new file mode 100644 index 00000000..895443a3 Binary files /dev/null and b/2006Redone Server/data/world/map/1337.gz differ diff --git a/2006Redone Server/data/world/map/1338.gz b/2006Redone Server/data/world/map/1338.gz new file mode 100644 index 00000000..7f05c133 Binary files /dev/null and b/2006Redone Server/data/world/map/1338.gz differ diff --git a/2006Redone Server/data/world/map/1339.gz b/2006Redone Server/data/world/map/1339.gz new file mode 100644 index 00000000..0ff4984b Binary files /dev/null and b/2006Redone Server/data/world/map/1339.gz differ diff --git a/2006Redone Server/data/world/map/134.gz b/2006Redone Server/data/world/map/134.gz new file mode 100644 index 00000000..cd0de42d Binary files /dev/null and b/2006Redone Server/data/world/map/134.gz differ diff --git a/2006Redone Server/data/world/map/1340.gz b/2006Redone Server/data/world/map/1340.gz new file mode 100644 index 00000000..1a961a8f Binary files /dev/null and b/2006Redone Server/data/world/map/1340.gz differ diff --git a/2006Redone Server/data/world/map/1341.gz b/2006Redone Server/data/world/map/1341.gz new file mode 100644 index 00000000..673641a1 Binary files /dev/null and b/2006Redone Server/data/world/map/1341.gz differ diff --git a/2006Redone Server/data/world/map/1342.gz b/2006Redone Server/data/world/map/1342.gz new file mode 100644 index 00000000..2c4ee915 Binary files /dev/null and b/2006Redone Server/data/world/map/1342.gz differ diff --git a/2006Redone Server/data/world/map/1343.gz b/2006Redone Server/data/world/map/1343.gz new file mode 100644 index 00000000..8846b3f0 Binary files /dev/null and b/2006Redone Server/data/world/map/1343.gz differ diff --git a/2006Redone Server/data/world/map/1344.gz b/2006Redone Server/data/world/map/1344.gz new file mode 100644 index 00000000..407e58e4 Binary files /dev/null and b/2006Redone Server/data/world/map/1344.gz differ diff --git a/2006Redone Server/data/world/map/1345.gz b/2006Redone Server/data/world/map/1345.gz new file mode 100644 index 00000000..b1d4373a Binary files /dev/null and b/2006Redone Server/data/world/map/1345.gz differ diff --git a/2006Redone Server/data/world/map/1346.gz b/2006Redone Server/data/world/map/1346.gz new file mode 100644 index 00000000..fa05423f Binary files /dev/null and b/2006Redone Server/data/world/map/1346.gz differ diff --git a/2006Redone Server/data/world/map/1347.gz b/2006Redone Server/data/world/map/1347.gz new file mode 100644 index 00000000..96115aea Binary files /dev/null and b/2006Redone Server/data/world/map/1347.gz differ diff --git a/2006Redone Server/data/world/map/1348.gz b/2006Redone Server/data/world/map/1348.gz new file mode 100644 index 00000000..cd887af0 Binary files /dev/null and b/2006Redone Server/data/world/map/1348.gz differ diff --git a/2006Redone Server/data/world/map/1349.gz b/2006Redone Server/data/world/map/1349.gz new file mode 100644 index 00000000..274c4d60 Binary files /dev/null and b/2006Redone Server/data/world/map/1349.gz differ diff --git a/2006Redone Server/data/world/map/135.gz b/2006Redone Server/data/world/map/135.gz new file mode 100644 index 00000000..7ec4a763 Binary files /dev/null and b/2006Redone Server/data/world/map/135.gz differ diff --git a/2006Redone Server/data/world/map/1350.gz b/2006Redone Server/data/world/map/1350.gz new file mode 100644 index 00000000..9d1747ac Binary files /dev/null and b/2006Redone Server/data/world/map/1350.gz differ diff --git a/2006Redone Server/data/world/map/1351.gz b/2006Redone Server/data/world/map/1351.gz new file mode 100644 index 00000000..5875f305 Binary files /dev/null and b/2006Redone Server/data/world/map/1351.gz differ diff --git a/2006Redone Server/data/world/map/1352.gz b/2006Redone Server/data/world/map/1352.gz new file mode 100644 index 00000000..f2eef374 Binary files /dev/null and b/2006Redone Server/data/world/map/1352.gz differ diff --git a/2006Redone Server/data/world/map/1353.gz b/2006Redone Server/data/world/map/1353.gz new file mode 100644 index 00000000..7c201614 Binary files /dev/null and b/2006Redone Server/data/world/map/1353.gz differ diff --git a/2006Redone Server/data/world/map/1354.gz b/2006Redone Server/data/world/map/1354.gz new file mode 100644 index 00000000..ff0fe086 Binary files /dev/null and b/2006Redone Server/data/world/map/1354.gz differ diff --git a/2006Redone Server/data/world/map/1355.gz b/2006Redone Server/data/world/map/1355.gz new file mode 100644 index 00000000..90a51b2a Binary files /dev/null and b/2006Redone Server/data/world/map/1355.gz differ diff --git a/2006Redone Server/data/world/map/1356.gz b/2006Redone Server/data/world/map/1356.gz new file mode 100644 index 00000000..1cd02768 Binary files /dev/null and b/2006Redone Server/data/world/map/1356.gz differ diff --git a/2006Redone Server/data/world/map/1357.gz b/2006Redone Server/data/world/map/1357.gz new file mode 100644 index 00000000..c04daf7a Binary files /dev/null and b/2006Redone Server/data/world/map/1357.gz differ diff --git a/2006Redone Server/data/world/map/1358.gz b/2006Redone Server/data/world/map/1358.gz new file mode 100644 index 00000000..33ca204d Binary files /dev/null and b/2006Redone Server/data/world/map/1358.gz differ diff --git a/2006Redone Server/data/world/map/1359.gz b/2006Redone Server/data/world/map/1359.gz new file mode 100644 index 00000000..af5b5692 Binary files /dev/null and b/2006Redone Server/data/world/map/1359.gz differ diff --git a/2006Redone Server/data/world/map/136.gz b/2006Redone Server/data/world/map/136.gz new file mode 100644 index 00000000..66739ff4 Binary files /dev/null and b/2006Redone Server/data/world/map/136.gz differ diff --git a/2006Redone Server/data/world/map/1360.gz b/2006Redone Server/data/world/map/1360.gz new file mode 100644 index 00000000..bbc14148 Binary files /dev/null and b/2006Redone Server/data/world/map/1360.gz differ diff --git a/2006Redone Server/data/world/map/1361.gz b/2006Redone Server/data/world/map/1361.gz new file mode 100644 index 00000000..c56b20e6 Binary files /dev/null and b/2006Redone Server/data/world/map/1361.gz differ diff --git a/2006Redone Server/data/world/map/1362.gz b/2006Redone Server/data/world/map/1362.gz new file mode 100644 index 00000000..e9500a74 Binary files /dev/null and b/2006Redone Server/data/world/map/1362.gz differ diff --git a/2006Redone Server/data/world/map/1363.gz b/2006Redone Server/data/world/map/1363.gz new file mode 100644 index 00000000..9c262fd9 Binary files /dev/null and b/2006Redone Server/data/world/map/1363.gz differ diff --git a/2006Redone Server/data/world/map/1364.gz b/2006Redone Server/data/world/map/1364.gz new file mode 100644 index 00000000..617b0bd6 Binary files /dev/null and b/2006Redone Server/data/world/map/1364.gz differ diff --git a/2006Redone Server/data/world/map/1365.gz b/2006Redone Server/data/world/map/1365.gz new file mode 100644 index 00000000..d8a5e30d Binary files /dev/null and b/2006Redone Server/data/world/map/1365.gz differ diff --git a/2006Redone Server/data/world/map/1366.gz b/2006Redone Server/data/world/map/1366.gz new file mode 100644 index 00000000..46ee2ba8 Binary files /dev/null and b/2006Redone Server/data/world/map/1366.gz differ diff --git a/2006Redone Server/data/world/map/1367.gz b/2006Redone Server/data/world/map/1367.gz new file mode 100644 index 00000000..a03acaa5 Binary files /dev/null and b/2006Redone Server/data/world/map/1367.gz differ diff --git a/2006Redone Server/data/world/map/1368.gz b/2006Redone Server/data/world/map/1368.gz new file mode 100644 index 00000000..aefd192d Binary files /dev/null and b/2006Redone Server/data/world/map/1368.gz differ diff --git a/2006Redone Server/data/world/map/1369.gz b/2006Redone Server/data/world/map/1369.gz new file mode 100644 index 00000000..8270013e Binary files /dev/null and b/2006Redone Server/data/world/map/1369.gz differ diff --git a/2006Redone Server/data/world/map/137.gz b/2006Redone Server/data/world/map/137.gz new file mode 100644 index 00000000..95fd17e2 Binary files /dev/null and b/2006Redone Server/data/world/map/137.gz differ diff --git a/2006Redone Server/data/world/map/1370.gz b/2006Redone Server/data/world/map/1370.gz new file mode 100644 index 00000000..c36bf508 Binary files /dev/null and b/2006Redone Server/data/world/map/1370.gz differ diff --git a/2006Redone Server/data/world/map/1371.gz b/2006Redone Server/data/world/map/1371.gz new file mode 100644 index 00000000..0d966a82 Binary files /dev/null and b/2006Redone Server/data/world/map/1371.gz differ diff --git a/2006Redone Server/data/world/map/1372.gz b/2006Redone Server/data/world/map/1372.gz new file mode 100644 index 00000000..a6dd931d Binary files /dev/null and b/2006Redone Server/data/world/map/1372.gz differ diff --git a/2006Redone Server/data/world/map/1373.gz b/2006Redone Server/data/world/map/1373.gz new file mode 100644 index 00000000..2d06cbbe Binary files /dev/null and b/2006Redone Server/data/world/map/1373.gz differ diff --git a/2006Redone Server/data/world/map/1374.gz b/2006Redone Server/data/world/map/1374.gz new file mode 100644 index 00000000..1f5bbc66 Binary files /dev/null and b/2006Redone Server/data/world/map/1374.gz differ diff --git a/2006Redone Server/data/world/map/1375.gz b/2006Redone Server/data/world/map/1375.gz new file mode 100644 index 00000000..d7d8eea1 Binary files /dev/null and b/2006Redone Server/data/world/map/1375.gz differ diff --git a/2006Redone Server/data/world/map/1376.gz b/2006Redone Server/data/world/map/1376.gz new file mode 100644 index 00000000..3589dbc6 Binary files /dev/null and b/2006Redone Server/data/world/map/1376.gz differ diff --git a/2006Redone Server/data/world/map/1377.gz b/2006Redone Server/data/world/map/1377.gz new file mode 100644 index 00000000..c0950e79 Binary files /dev/null and b/2006Redone Server/data/world/map/1377.gz differ diff --git a/2006Redone Server/data/world/map/1378.gz b/2006Redone Server/data/world/map/1378.gz new file mode 100644 index 00000000..ad062726 Binary files /dev/null and b/2006Redone Server/data/world/map/1378.gz differ diff --git a/2006Redone Server/data/world/map/1379.gz b/2006Redone Server/data/world/map/1379.gz new file mode 100644 index 00000000..2e9836bd Binary files /dev/null and b/2006Redone Server/data/world/map/1379.gz differ diff --git a/2006Redone Server/data/world/map/138.gz b/2006Redone Server/data/world/map/138.gz new file mode 100644 index 00000000..7899940f Binary files /dev/null and b/2006Redone Server/data/world/map/138.gz differ diff --git a/2006Redone Server/data/world/map/1380.gz b/2006Redone Server/data/world/map/1380.gz new file mode 100644 index 00000000..32068035 Binary files /dev/null and b/2006Redone Server/data/world/map/1380.gz differ diff --git a/2006Redone Server/data/world/map/1381.gz b/2006Redone Server/data/world/map/1381.gz new file mode 100644 index 00000000..a94131e8 Binary files /dev/null and b/2006Redone Server/data/world/map/1381.gz differ diff --git a/2006Redone Server/data/world/map/1382.gz b/2006Redone Server/data/world/map/1382.gz new file mode 100644 index 00000000..84736933 Binary files /dev/null and b/2006Redone Server/data/world/map/1382.gz differ diff --git a/2006Redone Server/data/world/map/1383.gz b/2006Redone Server/data/world/map/1383.gz new file mode 100644 index 00000000..e6f528bf Binary files /dev/null and b/2006Redone Server/data/world/map/1383.gz differ diff --git a/2006Redone Server/data/world/map/1384.gz b/2006Redone Server/data/world/map/1384.gz new file mode 100644 index 00000000..e230659d Binary files /dev/null and b/2006Redone Server/data/world/map/1384.gz differ diff --git a/2006Redone Server/data/world/map/1385.gz b/2006Redone Server/data/world/map/1385.gz new file mode 100644 index 00000000..fab5bc71 Binary files /dev/null and b/2006Redone Server/data/world/map/1385.gz differ diff --git a/2006Redone Server/data/world/map/1386.gz b/2006Redone Server/data/world/map/1386.gz new file mode 100644 index 00000000..4068b783 Binary files /dev/null and b/2006Redone Server/data/world/map/1386.gz differ diff --git a/2006Redone Server/data/world/map/1387.gz b/2006Redone Server/data/world/map/1387.gz new file mode 100644 index 00000000..76d4aed8 Binary files /dev/null and b/2006Redone Server/data/world/map/1387.gz differ diff --git a/2006Redone Server/data/world/map/1388.gz b/2006Redone Server/data/world/map/1388.gz new file mode 100644 index 00000000..6d514426 Binary files /dev/null and b/2006Redone Server/data/world/map/1388.gz differ diff --git a/2006Redone Server/data/world/map/1389.gz b/2006Redone Server/data/world/map/1389.gz new file mode 100644 index 00000000..d10caaa0 Binary files /dev/null and b/2006Redone Server/data/world/map/1389.gz differ diff --git a/2006Redone Server/data/world/map/139.gz b/2006Redone Server/data/world/map/139.gz new file mode 100644 index 00000000..265fdaf4 Binary files /dev/null and b/2006Redone Server/data/world/map/139.gz differ diff --git a/2006Redone Server/data/world/map/14.gz b/2006Redone Server/data/world/map/14.gz new file mode 100644 index 00000000..39fe3520 Binary files /dev/null and b/2006Redone Server/data/world/map/14.gz differ diff --git a/2006Redone Server/data/world/map/140.gz b/2006Redone Server/data/world/map/140.gz new file mode 100644 index 00000000..fd213e8a Binary files /dev/null and b/2006Redone Server/data/world/map/140.gz differ diff --git a/2006Redone Server/data/world/map/141.gz b/2006Redone Server/data/world/map/141.gz new file mode 100644 index 00000000..aada324a Binary files /dev/null and b/2006Redone Server/data/world/map/141.gz differ diff --git a/2006Redone Server/data/world/map/142.gz b/2006Redone Server/data/world/map/142.gz new file mode 100644 index 00000000..e1d30245 Binary files /dev/null and b/2006Redone Server/data/world/map/142.gz differ diff --git a/2006Redone Server/data/world/map/143.gz b/2006Redone Server/data/world/map/143.gz new file mode 100644 index 00000000..975fe669 Binary files /dev/null and b/2006Redone Server/data/world/map/143.gz differ diff --git a/2006Redone Server/data/world/map/146.gz b/2006Redone Server/data/world/map/146.gz new file mode 100644 index 00000000..3179b596 Binary files /dev/null and b/2006Redone Server/data/world/map/146.gz differ diff --git a/2006Redone Server/data/world/map/147.gz b/2006Redone Server/data/world/map/147.gz new file mode 100644 index 00000000..b799675f Binary files /dev/null and b/2006Redone Server/data/world/map/147.gz differ diff --git a/2006Redone Server/data/world/map/148.gz b/2006Redone Server/data/world/map/148.gz new file mode 100644 index 00000000..51e74942 Binary files /dev/null and b/2006Redone Server/data/world/map/148.gz differ diff --git a/2006Redone Server/data/world/map/149.gz b/2006Redone Server/data/world/map/149.gz new file mode 100644 index 00000000..6a7d4115 Binary files /dev/null and b/2006Redone Server/data/world/map/149.gz differ diff --git a/2006Redone Server/data/world/map/15.gz b/2006Redone Server/data/world/map/15.gz new file mode 100644 index 00000000..0101cf5d Binary files /dev/null and b/2006Redone Server/data/world/map/15.gz differ diff --git a/2006Redone Server/data/world/map/150.gz b/2006Redone Server/data/world/map/150.gz new file mode 100644 index 00000000..492239c1 Binary files /dev/null and b/2006Redone Server/data/world/map/150.gz differ diff --git a/2006Redone Server/data/world/map/151.gz b/2006Redone Server/data/world/map/151.gz new file mode 100644 index 00000000..bddc9c0c Binary files /dev/null and b/2006Redone Server/data/world/map/151.gz differ diff --git a/2006Redone Server/data/world/map/152.gz b/2006Redone Server/data/world/map/152.gz new file mode 100644 index 00000000..f9736cb8 Binary files /dev/null and b/2006Redone Server/data/world/map/152.gz differ diff --git a/2006Redone Server/data/world/map/153.gz b/2006Redone Server/data/world/map/153.gz new file mode 100644 index 00000000..3026c00d Binary files /dev/null and b/2006Redone Server/data/world/map/153.gz differ diff --git a/2006Redone Server/data/world/map/154.gz b/2006Redone Server/data/world/map/154.gz new file mode 100644 index 00000000..fc58e1cb Binary files /dev/null and b/2006Redone Server/data/world/map/154.gz differ diff --git a/2006Redone Server/data/world/map/155.gz b/2006Redone Server/data/world/map/155.gz new file mode 100644 index 00000000..2febbf1b Binary files /dev/null and b/2006Redone Server/data/world/map/155.gz differ diff --git a/2006Redone Server/data/world/map/156.gz b/2006Redone Server/data/world/map/156.gz new file mode 100644 index 00000000..7f499065 Binary files /dev/null and b/2006Redone Server/data/world/map/156.gz differ diff --git a/2006Redone Server/data/world/map/157.gz b/2006Redone Server/data/world/map/157.gz new file mode 100644 index 00000000..7be1dcba Binary files /dev/null and b/2006Redone Server/data/world/map/157.gz differ diff --git a/2006Redone Server/data/world/map/158.gz b/2006Redone Server/data/world/map/158.gz new file mode 100644 index 00000000..4c0ab160 Binary files /dev/null and b/2006Redone Server/data/world/map/158.gz differ diff --git a/2006Redone Server/data/world/map/159.gz b/2006Redone Server/data/world/map/159.gz new file mode 100644 index 00000000..516ac315 Binary files /dev/null and b/2006Redone Server/data/world/map/159.gz differ diff --git a/2006Redone Server/data/world/map/16.gz b/2006Redone Server/data/world/map/16.gz new file mode 100644 index 00000000..4adfea59 Binary files /dev/null and b/2006Redone Server/data/world/map/16.gz differ diff --git a/2006Redone Server/data/world/map/160.gz b/2006Redone Server/data/world/map/160.gz new file mode 100644 index 00000000..3dd1e75d Binary files /dev/null and b/2006Redone Server/data/world/map/160.gz differ diff --git a/2006Redone Server/data/world/map/161.gz b/2006Redone Server/data/world/map/161.gz new file mode 100644 index 00000000..84819feb Binary files /dev/null and b/2006Redone Server/data/world/map/161.gz differ diff --git a/2006Redone Server/data/world/map/162.gz b/2006Redone Server/data/world/map/162.gz new file mode 100644 index 00000000..2a51d774 Binary files /dev/null and b/2006Redone Server/data/world/map/162.gz differ diff --git a/2006Redone Server/data/world/map/163.gz b/2006Redone Server/data/world/map/163.gz new file mode 100644 index 00000000..b5085d4e Binary files /dev/null and b/2006Redone Server/data/world/map/163.gz differ diff --git a/2006Redone Server/data/world/map/164.gz b/2006Redone Server/data/world/map/164.gz new file mode 100644 index 00000000..d91b2fdd Binary files /dev/null and b/2006Redone Server/data/world/map/164.gz differ diff --git a/2006Redone Server/data/world/map/165.gz b/2006Redone Server/data/world/map/165.gz new file mode 100644 index 00000000..72c7702a Binary files /dev/null and b/2006Redone Server/data/world/map/165.gz differ diff --git a/2006Redone Server/data/world/map/166.gz b/2006Redone Server/data/world/map/166.gz new file mode 100644 index 00000000..86d46781 Binary files /dev/null and b/2006Redone Server/data/world/map/166.gz differ diff --git a/2006Redone Server/data/world/map/167.gz b/2006Redone Server/data/world/map/167.gz new file mode 100644 index 00000000..566d3877 Binary files /dev/null and b/2006Redone Server/data/world/map/167.gz differ diff --git a/2006Redone Server/data/world/map/168.gz b/2006Redone Server/data/world/map/168.gz new file mode 100644 index 00000000..125636d9 Binary files /dev/null and b/2006Redone Server/data/world/map/168.gz differ diff --git a/2006Redone Server/data/world/map/169.gz b/2006Redone Server/data/world/map/169.gz new file mode 100644 index 00000000..8cf3a89a Binary files /dev/null and b/2006Redone Server/data/world/map/169.gz differ diff --git a/2006Redone Server/data/world/map/17.gz b/2006Redone Server/data/world/map/17.gz new file mode 100644 index 00000000..baa14fdf Binary files /dev/null and b/2006Redone Server/data/world/map/17.gz differ diff --git a/2006Redone Server/data/world/map/170.gz b/2006Redone Server/data/world/map/170.gz new file mode 100644 index 00000000..ba0532d4 Binary files /dev/null and b/2006Redone Server/data/world/map/170.gz differ diff --git a/2006Redone Server/data/world/map/171.gz b/2006Redone Server/data/world/map/171.gz new file mode 100644 index 00000000..9b9be408 Binary files /dev/null and b/2006Redone Server/data/world/map/171.gz differ diff --git a/2006Redone Server/data/world/map/172.gz b/2006Redone Server/data/world/map/172.gz new file mode 100644 index 00000000..f49b770c Binary files /dev/null and b/2006Redone Server/data/world/map/172.gz differ diff --git a/2006Redone Server/data/world/map/173.gz b/2006Redone Server/data/world/map/173.gz new file mode 100644 index 00000000..d3d81bcd Binary files /dev/null and b/2006Redone Server/data/world/map/173.gz differ diff --git a/2006Redone Server/data/world/map/174.gz b/2006Redone Server/data/world/map/174.gz new file mode 100644 index 00000000..1111a415 Binary files /dev/null and b/2006Redone Server/data/world/map/174.gz differ diff --git a/2006Redone Server/data/world/map/175.gz b/2006Redone Server/data/world/map/175.gz new file mode 100644 index 00000000..dda421a0 Binary files /dev/null and b/2006Redone Server/data/world/map/175.gz differ diff --git a/2006Redone Server/data/world/map/176.gz b/2006Redone Server/data/world/map/176.gz new file mode 100644 index 00000000..13e8b4ca Binary files /dev/null and b/2006Redone Server/data/world/map/176.gz differ diff --git a/2006Redone Server/data/world/map/177.gz b/2006Redone Server/data/world/map/177.gz new file mode 100644 index 00000000..adb9154b Binary files /dev/null and b/2006Redone Server/data/world/map/177.gz differ diff --git a/2006Redone Server/data/world/map/18.gz b/2006Redone Server/data/world/map/18.gz new file mode 100644 index 00000000..b5c22006 Binary files /dev/null and b/2006Redone Server/data/world/map/18.gz differ diff --git a/2006Redone Server/data/world/map/180.gz b/2006Redone Server/data/world/map/180.gz new file mode 100644 index 00000000..906f121c Binary files /dev/null and b/2006Redone Server/data/world/map/180.gz differ diff --git a/2006Redone Server/data/world/map/181.gz b/2006Redone Server/data/world/map/181.gz new file mode 100644 index 00000000..37484642 Binary files /dev/null and b/2006Redone Server/data/world/map/181.gz differ diff --git a/2006Redone Server/data/world/map/182.gz b/2006Redone Server/data/world/map/182.gz new file mode 100644 index 00000000..40114bb5 Binary files /dev/null and b/2006Redone Server/data/world/map/182.gz differ diff --git a/2006Redone Server/data/world/map/183.gz b/2006Redone Server/data/world/map/183.gz new file mode 100644 index 00000000..a5d8e9dd Binary files /dev/null and b/2006Redone Server/data/world/map/183.gz differ diff --git a/2006Redone Server/data/world/map/184.gz b/2006Redone Server/data/world/map/184.gz new file mode 100644 index 00000000..3585a612 Binary files /dev/null and b/2006Redone Server/data/world/map/184.gz differ diff --git a/2006Redone Server/data/world/map/185.gz b/2006Redone Server/data/world/map/185.gz new file mode 100644 index 00000000..3b7885a0 Binary files /dev/null and b/2006Redone Server/data/world/map/185.gz differ diff --git a/2006Redone Server/data/world/map/186.gz b/2006Redone Server/data/world/map/186.gz new file mode 100644 index 00000000..1ade3fbe Binary files /dev/null and b/2006Redone Server/data/world/map/186.gz differ diff --git a/2006Redone Server/data/world/map/187.gz b/2006Redone Server/data/world/map/187.gz new file mode 100644 index 00000000..b6b7a4ac Binary files /dev/null and b/2006Redone Server/data/world/map/187.gz differ diff --git a/2006Redone Server/data/world/map/188.gz b/2006Redone Server/data/world/map/188.gz new file mode 100644 index 00000000..bb1c00ee Binary files /dev/null and b/2006Redone Server/data/world/map/188.gz differ diff --git a/2006Redone Server/data/world/map/189.gz b/2006Redone Server/data/world/map/189.gz new file mode 100644 index 00000000..8b32ee10 Binary files /dev/null and b/2006Redone Server/data/world/map/189.gz differ diff --git a/2006Redone Server/data/world/map/19.gz b/2006Redone Server/data/world/map/19.gz new file mode 100644 index 00000000..6b7e61b5 Binary files /dev/null and b/2006Redone Server/data/world/map/19.gz differ diff --git a/2006Redone Server/data/world/map/190.gz b/2006Redone Server/data/world/map/190.gz new file mode 100644 index 00000000..5eb6d5bd Binary files /dev/null and b/2006Redone Server/data/world/map/190.gz differ diff --git a/2006Redone Server/data/world/map/191.gz b/2006Redone Server/data/world/map/191.gz new file mode 100644 index 00000000..b8433977 Binary files /dev/null and b/2006Redone Server/data/world/map/191.gz differ diff --git a/2006Redone Server/data/world/map/192.gz b/2006Redone Server/data/world/map/192.gz new file mode 100644 index 00000000..c198422d Binary files /dev/null and b/2006Redone Server/data/world/map/192.gz differ diff --git a/2006Redone Server/data/world/map/193.gz b/2006Redone Server/data/world/map/193.gz new file mode 100644 index 00000000..792223ec Binary files /dev/null and b/2006Redone Server/data/world/map/193.gz differ diff --git a/2006Redone Server/data/world/map/194.gz b/2006Redone Server/data/world/map/194.gz new file mode 100644 index 00000000..180ae0fb Binary files /dev/null and b/2006Redone Server/data/world/map/194.gz differ diff --git a/2006Redone Server/data/world/map/195.gz b/2006Redone Server/data/world/map/195.gz new file mode 100644 index 00000000..71fc3519 Binary files /dev/null and b/2006Redone Server/data/world/map/195.gz differ diff --git a/2006Redone Server/data/world/map/196.gz b/2006Redone Server/data/world/map/196.gz new file mode 100644 index 00000000..e48be735 Binary files /dev/null and b/2006Redone Server/data/world/map/196.gz differ diff --git a/2006Redone Server/data/world/map/197.gz b/2006Redone Server/data/world/map/197.gz new file mode 100644 index 00000000..b2799007 Binary files /dev/null and b/2006Redone Server/data/world/map/197.gz differ diff --git a/2006Redone Server/data/world/map/198.gz b/2006Redone Server/data/world/map/198.gz new file mode 100644 index 00000000..dd7c5932 Binary files /dev/null and b/2006Redone Server/data/world/map/198.gz differ diff --git a/2006Redone Server/data/world/map/199.gz b/2006Redone Server/data/world/map/199.gz new file mode 100644 index 00000000..87e7dd1a Binary files /dev/null and b/2006Redone Server/data/world/map/199.gz differ diff --git a/2006Redone Server/data/world/map/2.gz b/2006Redone Server/data/world/map/2.gz new file mode 100644 index 00000000..2e2eec2f Binary files /dev/null and b/2006Redone Server/data/world/map/2.gz differ diff --git a/2006Redone Server/data/world/map/20.gz b/2006Redone Server/data/world/map/20.gz new file mode 100644 index 00000000..1725eab8 Binary files /dev/null and b/2006Redone Server/data/world/map/20.gz differ diff --git a/2006Redone Server/data/world/map/200.gz b/2006Redone Server/data/world/map/200.gz new file mode 100644 index 00000000..9e9586d3 Binary files /dev/null and b/2006Redone Server/data/world/map/200.gz differ diff --git a/2006Redone Server/data/world/map/201.gz b/2006Redone Server/data/world/map/201.gz new file mode 100644 index 00000000..2962c030 Binary files /dev/null and b/2006Redone Server/data/world/map/201.gz differ diff --git a/2006Redone Server/data/world/map/202.gz b/2006Redone Server/data/world/map/202.gz new file mode 100644 index 00000000..45d788bc Binary files /dev/null and b/2006Redone Server/data/world/map/202.gz differ diff --git a/2006Redone Server/data/world/map/203.gz b/2006Redone Server/data/world/map/203.gz new file mode 100644 index 00000000..ca3ee32c Binary files /dev/null and b/2006Redone Server/data/world/map/203.gz differ diff --git a/2006Redone Server/data/world/map/204.gz b/2006Redone Server/data/world/map/204.gz new file mode 100644 index 00000000..05197ac0 Binary files /dev/null and b/2006Redone Server/data/world/map/204.gz differ diff --git a/2006Redone Server/data/world/map/205.gz b/2006Redone Server/data/world/map/205.gz new file mode 100644 index 00000000..6bcbaaba Binary files /dev/null and b/2006Redone Server/data/world/map/205.gz differ diff --git a/2006Redone Server/data/world/map/206.gz b/2006Redone Server/data/world/map/206.gz new file mode 100644 index 00000000..27766bfa Binary files /dev/null and b/2006Redone Server/data/world/map/206.gz differ diff --git a/2006Redone Server/data/world/map/207.gz b/2006Redone Server/data/world/map/207.gz new file mode 100644 index 00000000..cb15afd6 Binary files /dev/null and b/2006Redone Server/data/world/map/207.gz differ diff --git a/2006Redone Server/data/world/map/208.gz b/2006Redone Server/data/world/map/208.gz new file mode 100644 index 00000000..fed6366b Binary files /dev/null and b/2006Redone Server/data/world/map/208.gz differ diff --git a/2006Redone Server/data/world/map/209.gz b/2006Redone Server/data/world/map/209.gz new file mode 100644 index 00000000..772e47f4 Binary files /dev/null and b/2006Redone Server/data/world/map/209.gz differ diff --git a/2006Redone Server/data/world/map/21.gz b/2006Redone Server/data/world/map/21.gz new file mode 100644 index 00000000..173b76eb Binary files /dev/null and b/2006Redone Server/data/world/map/21.gz differ diff --git a/2006Redone Server/data/world/map/210.gz b/2006Redone Server/data/world/map/210.gz new file mode 100644 index 00000000..3c6fd6bf Binary files /dev/null and b/2006Redone Server/data/world/map/210.gz differ diff --git a/2006Redone Server/data/world/map/211.gz b/2006Redone Server/data/world/map/211.gz new file mode 100644 index 00000000..8a42f622 Binary files /dev/null and b/2006Redone Server/data/world/map/211.gz differ diff --git a/2006Redone Server/data/world/map/212.gz b/2006Redone Server/data/world/map/212.gz new file mode 100644 index 00000000..783436e5 Binary files /dev/null and b/2006Redone Server/data/world/map/212.gz differ diff --git a/2006Redone Server/data/world/map/213.gz b/2006Redone Server/data/world/map/213.gz new file mode 100644 index 00000000..aac92aac Binary files /dev/null and b/2006Redone Server/data/world/map/213.gz differ diff --git a/2006Redone Server/data/world/map/214.gz b/2006Redone Server/data/world/map/214.gz new file mode 100644 index 00000000..632ea70a Binary files /dev/null and b/2006Redone Server/data/world/map/214.gz differ diff --git a/2006Redone Server/data/world/map/215.gz b/2006Redone Server/data/world/map/215.gz new file mode 100644 index 00000000..6bcb9400 Binary files /dev/null and b/2006Redone Server/data/world/map/215.gz differ diff --git a/2006Redone Server/data/world/map/216.gz b/2006Redone Server/data/world/map/216.gz new file mode 100644 index 00000000..5ba6b7ea Binary files /dev/null and b/2006Redone Server/data/world/map/216.gz differ diff --git a/2006Redone Server/data/world/map/217.gz b/2006Redone Server/data/world/map/217.gz new file mode 100644 index 00000000..5b43d249 Binary files /dev/null and b/2006Redone Server/data/world/map/217.gz differ diff --git a/2006Redone Server/data/world/map/218.gz b/2006Redone Server/data/world/map/218.gz new file mode 100644 index 00000000..2b1b76ee Binary files /dev/null and b/2006Redone Server/data/world/map/218.gz differ diff --git a/2006Redone Server/data/world/map/219.gz b/2006Redone Server/data/world/map/219.gz new file mode 100644 index 00000000..4afc1407 Binary files /dev/null and b/2006Redone Server/data/world/map/219.gz differ diff --git a/2006Redone Server/data/world/map/22.gz b/2006Redone Server/data/world/map/22.gz new file mode 100644 index 00000000..77dba441 Binary files /dev/null and b/2006Redone Server/data/world/map/22.gz differ diff --git a/2006Redone Server/data/world/map/220.gz b/2006Redone Server/data/world/map/220.gz new file mode 100644 index 00000000..2da4d584 Binary files /dev/null and b/2006Redone Server/data/world/map/220.gz differ diff --git a/2006Redone Server/data/world/map/221.gz b/2006Redone Server/data/world/map/221.gz new file mode 100644 index 00000000..cc7f866c Binary files /dev/null and b/2006Redone Server/data/world/map/221.gz differ diff --git a/2006Redone Server/data/world/map/222.gz b/2006Redone Server/data/world/map/222.gz new file mode 100644 index 00000000..db32a061 Binary files /dev/null and b/2006Redone Server/data/world/map/222.gz differ diff --git a/2006Redone Server/data/world/map/223.gz b/2006Redone Server/data/world/map/223.gz new file mode 100644 index 00000000..2c67c1af Binary files /dev/null and b/2006Redone Server/data/world/map/223.gz differ diff --git a/2006Redone Server/data/world/map/224.gz b/2006Redone Server/data/world/map/224.gz new file mode 100644 index 00000000..0fac89e8 Binary files /dev/null and b/2006Redone Server/data/world/map/224.gz differ diff --git a/2006Redone Server/data/world/map/225.gz b/2006Redone Server/data/world/map/225.gz new file mode 100644 index 00000000..a8a86658 Binary files /dev/null and b/2006Redone Server/data/world/map/225.gz differ diff --git a/2006Redone Server/data/world/map/226.gz b/2006Redone Server/data/world/map/226.gz new file mode 100644 index 00000000..3a8ea56a Binary files /dev/null and b/2006Redone Server/data/world/map/226.gz differ diff --git a/2006Redone Server/data/world/map/227.gz b/2006Redone Server/data/world/map/227.gz new file mode 100644 index 00000000..334d3d9b Binary files /dev/null and b/2006Redone Server/data/world/map/227.gz differ diff --git a/2006Redone Server/data/world/map/228.gz b/2006Redone Server/data/world/map/228.gz new file mode 100644 index 00000000..7ff245a9 Binary files /dev/null and b/2006Redone Server/data/world/map/228.gz differ diff --git a/2006Redone Server/data/world/map/229.gz b/2006Redone Server/data/world/map/229.gz new file mode 100644 index 00000000..f681bed9 Binary files /dev/null and b/2006Redone Server/data/world/map/229.gz differ diff --git a/2006Redone Server/data/world/map/23.gz b/2006Redone Server/data/world/map/23.gz new file mode 100644 index 00000000..81178a39 Binary files /dev/null and b/2006Redone Server/data/world/map/23.gz differ diff --git a/2006Redone Server/data/world/map/230.gz b/2006Redone Server/data/world/map/230.gz new file mode 100644 index 00000000..0f0782e6 Binary files /dev/null and b/2006Redone Server/data/world/map/230.gz differ diff --git a/2006Redone Server/data/world/map/231.gz b/2006Redone Server/data/world/map/231.gz new file mode 100644 index 00000000..f0193fbf Binary files /dev/null and b/2006Redone Server/data/world/map/231.gz differ diff --git a/2006Redone Server/data/world/map/232.gz b/2006Redone Server/data/world/map/232.gz new file mode 100644 index 00000000..ccfd47cd Binary files /dev/null and b/2006Redone Server/data/world/map/232.gz differ diff --git a/2006Redone Server/data/world/map/233.gz b/2006Redone Server/data/world/map/233.gz new file mode 100644 index 00000000..97c35b94 Binary files /dev/null and b/2006Redone Server/data/world/map/233.gz differ diff --git a/2006Redone Server/data/world/map/234.gz b/2006Redone Server/data/world/map/234.gz new file mode 100644 index 00000000..fc9f8975 Binary files /dev/null and b/2006Redone Server/data/world/map/234.gz differ diff --git a/2006Redone Server/data/world/map/235.gz b/2006Redone Server/data/world/map/235.gz new file mode 100644 index 00000000..5773b336 Binary files /dev/null and b/2006Redone Server/data/world/map/235.gz differ diff --git a/2006Redone Server/data/world/map/236.gz b/2006Redone Server/data/world/map/236.gz new file mode 100644 index 00000000..486f2903 Binary files /dev/null and b/2006Redone Server/data/world/map/236.gz differ diff --git a/2006Redone Server/data/world/map/237.gz b/2006Redone Server/data/world/map/237.gz new file mode 100644 index 00000000..c40905b1 Binary files /dev/null and b/2006Redone Server/data/world/map/237.gz differ diff --git a/2006Redone Server/data/world/map/238.gz b/2006Redone Server/data/world/map/238.gz new file mode 100644 index 00000000..29e3744e Binary files /dev/null and b/2006Redone Server/data/world/map/238.gz differ diff --git a/2006Redone Server/data/world/map/239.gz b/2006Redone Server/data/world/map/239.gz new file mode 100644 index 00000000..32195bf6 Binary files /dev/null and b/2006Redone Server/data/world/map/239.gz differ diff --git a/2006Redone Server/data/world/map/240.gz b/2006Redone Server/data/world/map/240.gz new file mode 100644 index 00000000..17b5ad4c Binary files /dev/null and b/2006Redone Server/data/world/map/240.gz differ diff --git a/2006Redone Server/data/world/map/241.gz b/2006Redone Server/data/world/map/241.gz new file mode 100644 index 00000000..71972ceb Binary files /dev/null and b/2006Redone Server/data/world/map/241.gz differ diff --git a/2006Redone Server/data/world/map/242.gz b/2006Redone Server/data/world/map/242.gz new file mode 100644 index 00000000..c0e93492 Binary files /dev/null and b/2006Redone Server/data/world/map/242.gz differ diff --git a/2006Redone Server/data/world/map/243.gz b/2006Redone Server/data/world/map/243.gz new file mode 100644 index 00000000..09a890c5 Binary files /dev/null and b/2006Redone Server/data/world/map/243.gz differ diff --git a/2006Redone Server/data/world/map/244.gz b/2006Redone Server/data/world/map/244.gz new file mode 100644 index 00000000..fc074aea Binary files /dev/null and b/2006Redone Server/data/world/map/244.gz differ diff --git a/2006Redone Server/data/world/map/245.gz b/2006Redone Server/data/world/map/245.gz new file mode 100644 index 00000000..ea376734 Binary files /dev/null and b/2006Redone Server/data/world/map/245.gz differ diff --git a/2006Redone Server/data/world/map/246.gz b/2006Redone Server/data/world/map/246.gz new file mode 100644 index 00000000..b140bfa7 Binary files /dev/null and b/2006Redone Server/data/world/map/246.gz differ diff --git a/2006Redone Server/data/world/map/247.gz b/2006Redone Server/data/world/map/247.gz new file mode 100644 index 00000000..d0b943c2 Binary files /dev/null and b/2006Redone Server/data/world/map/247.gz differ diff --git a/2006Redone Server/data/world/map/248.gz b/2006Redone Server/data/world/map/248.gz new file mode 100644 index 00000000..e17ff24a Binary files /dev/null and b/2006Redone Server/data/world/map/248.gz differ diff --git a/2006Redone Server/data/world/map/249.gz b/2006Redone Server/data/world/map/249.gz new file mode 100644 index 00000000..1e9f24e4 Binary files /dev/null and b/2006Redone Server/data/world/map/249.gz differ diff --git a/2006Redone Server/data/world/map/250.gz b/2006Redone Server/data/world/map/250.gz new file mode 100644 index 00000000..2d8b0c82 Binary files /dev/null and b/2006Redone Server/data/world/map/250.gz differ diff --git a/2006Redone Server/data/world/map/251.gz b/2006Redone Server/data/world/map/251.gz new file mode 100644 index 00000000..a66103bb Binary files /dev/null and b/2006Redone Server/data/world/map/251.gz differ diff --git a/2006Redone Server/data/world/map/252.gz b/2006Redone Server/data/world/map/252.gz new file mode 100644 index 00000000..9bcd691c Binary files /dev/null and b/2006Redone Server/data/world/map/252.gz differ diff --git a/2006Redone Server/data/world/map/253.gz b/2006Redone Server/data/world/map/253.gz new file mode 100644 index 00000000..44a7dfc4 Binary files /dev/null and b/2006Redone Server/data/world/map/253.gz differ diff --git a/2006Redone Server/data/world/map/254.gz b/2006Redone Server/data/world/map/254.gz new file mode 100644 index 00000000..a53e691d Binary files /dev/null and b/2006Redone Server/data/world/map/254.gz differ diff --git a/2006Redone Server/data/world/map/255.gz b/2006Redone Server/data/world/map/255.gz new file mode 100644 index 00000000..5c268f9e Binary files /dev/null and b/2006Redone Server/data/world/map/255.gz differ diff --git a/2006Redone Server/data/world/map/256.gz b/2006Redone Server/data/world/map/256.gz new file mode 100644 index 00000000..c0edcf04 Binary files /dev/null and b/2006Redone Server/data/world/map/256.gz differ diff --git a/2006Redone Server/data/world/map/257.gz b/2006Redone Server/data/world/map/257.gz new file mode 100644 index 00000000..92f21826 Binary files /dev/null and b/2006Redone Server/data/world/map/257.gz differ diff --git a/2006Redone Server/data/world/map/258.gz b/2006Redone Server/data/world/map/258.gz new file mode 100644 index 00000000..0571d43a Binary files /dev/null and b/2006Redone Server/data/world/map/258.gz differ diff --git a/2006Redone Server/data/world/map/259.gz b/2006Redone Server/data/world/map/259.gz new file mode 100644 index 00000000..9e320344 Binary files /dev/null and b/2006Redone Server/data/world/map/259.gz differ diff --git a/2006Redone Server/data/world/map/26.gz b/2006Redone Server/data/world/map/26.gz new file mode 100644 index 00000000..a1d19bec Binary files /dev/null and b/2006Redone Server/data/world/map/26.gz differ diff --git a/2006Redone Server/data/world/map/260.gz b/2006Redone Server/data/world/map/260.gz new file mode 100644 index 00000000..921db266 Binary files /dev/null and b/2006Redone Server/data/world/map/260.gz differ diff --git a/2006Redone Server/data/world/map/261.gz b/2006Redone Server/data/world/map/261.gz new file mode 100644 index 00000000..6dad5bad Binary files /dev/null and b/2006Redone Server/data/world/map/261.gz differ diff --git a/2006Redone Server/data/world/map/262.gz b/2006Redone Server/data/world/map/262.gz new file mode 100644 index 00000000..e1b93f8c Binary files /dev/null and b/2006Redone Server/data/world/map/262.gz differ diff --git a/2006Redone Server/data/world/map/263.gz b/2006Redone Server/data/world/map/263.gz new file mode 100644 index 00000000..4c6521d6 Binary files /dev/null and b/2006Redone Server/data/world/map/263.gz differ diff --git a/2006Redone Server/data/world/map/266.gz b/2006Redone Server/data/world/map/266.gz new file mode 100644 index 00000000..7fb09081 Binary files /dev/null and b/2006Redone Server/data/world/map/266.gz differ diff --git a/2006Redone Server/data/world/map/267.gz b/2006Redone Server/data/world/map/267.gz new file mode 100644 index 00000000..f1da1b33 Binary files /dev/null and b/2006Redone Server/data/world/map/267.gz differ diff --git a/2006Redone Server/data/world/map/268.gz b/2006Redone Server/data/world/map/268.gz new file mode 100644 index 00000000..b8db17c8 Binary files /dev/null and b/2006Redone Server/data/world/map/268.gz differ diff --git a/2006Redone Server/data/world/map/269.gz b/2006Redone Server/data/world/map/269.gz new file mode 100644 index 00000000..c487c14d Binary files /dev/null and b/2006Redone Server/data/world/map/269.gz differ diff --git a/2006Redone Server/data/world/map/27.gz b/2006Redone Server/data/world/map/27.gz new file mode 100644 index 00000000..0b1ce971 Binary files /dev/null and b/2006Redone Server/data/world/map/27.gz differ diff --git a/2006Redone Server/data/world/map/270.gz b/2006Redone Server/data/world/map/270.gz new file mode 100644 index 00000000..bfea28e6 Binary files /dev/null and b/2006Redone Server/data/world/map/270.gz differ diff --git a/2006Redone Server/data/world/map/271.gz b/2006Redone Server/data/world/map/271.gz new file mode 100644 index 00000000..4a6cfb76 Binary files /dev/null and b/2006Redone Server/data/world/map/271.gz differ diff --git a/2006Redone Server/data/world/map/272.gz b/2006Redone Server/data/world/map/272.gz new file mode 100644 index 00000000..fda2a1b8 Binary files /dev/null and b/2006Redone Server/data/world/map/272.gz differ diff --git a/2006Redone Server/data/world/map/273.gz b/2006Redone Server/data/world/map/273.gz new file mode 100644 index 00000000..c1211215 Binary files /dev/null and b/2006Redone Server/data/world/map/273.gz differ diff --git a/2006Redone Server/data/world/map/274.gz b/2006Redone Server/data/world/map/274.gz new file mode 100644 index 00000000..e3ad8342 Binary files /dev/null and b/2006Redone Server/data/world/map/274.gz differ diff --git a/2006Redone Server/data/world/map/275.gz b/2006Redone Server/data/world/map/275.gz new file mode 100644 index 00000000..2bddd4fe Binary files /dev/null and b/2006Redone Server/data/world/map/275.gz differ diff --git a/2006Redone Server/data/world/map/276.gz b/2006Redone Server/data/world/map/276.gz new file mode 100644 index 00000000..d8ac4fda Binary files /dev/null and b/2006Redone Server/data/world/map/276.gz differ diff --git a/2006Redone Server/data/world/map/277.gz b/2006Redone Server/data/world/map/277.gz new file mode 100644 index 00000000..93a8e586 Binary files /dev/null and b/2006Redone Server/data/world/map/277.gz differ diff --git a/2006Redone Server/data/world/map/278.gz b/2006Redone Server/data/world/map/278.gz new file mode 100644 index 00000000..1fc845ef Binary files /dev/null and b/2006Redone Server/data/world/map/278.gz differ diff --git a/2006Redone Server/data/world/map/279.gz b/2006Redone Server/data/world/map/279.gz new file mode 100644 index 00000000..71f9be0d Binary files /dev/null and b/2006Redone Server/data/world/map/279.gz differ diff --git a/2006Redone Server/data/world/map/28.gz b/2006Redone Server/data/world/map/28.gz new file mode 100644 index 00000000..3bafc8b4 Binary files /dev/null and b/2006Redone Server/data/world/map/28.gz differ diff --git a/2006Redone Server/data/world/map/280.gz b/2006Redone Server/data/world/map/280.gz new file mode 100644 index 00000000..3529bf1d Binary files /dev/null and b/2006Redone Server/data/world/map/280.gz differ diff --git a/2006Redone Server/data/world/map/281.gz b/2006Redone Server/data/world/map/281.gz new file mode 100644 index 00000000..0090781d Binary files /dev/null and b/2006Redone Server/data/world/map/281.gz differ diff --git a/2006Redone Server/data/world/map/282.gz b/2006Redone Server/data/world/map/282.gz new file mode 100644 index 00000000..e1558a59 Binary files /dev/null and b/2006Redone Server/data/world/map/282.gz differ diff --git a/2006Redone Server/data/world/map/283.gz b/2006Redone Server/data/world/map/283.gz new file mode 100644 index 00000000..36a466d3 Binary files /dev/null and b/2006Redone Server/data/world/map/283.gz differ diff --git a/2006Redone Server/data/world/map/284.gz b/2006Redone Server/data/world/map/284.gz new file mode 100644 index 00000000..ec497b8c Binary files /dev/null and b/2006Redone Server/data/world/map/284.gz differ diff --git a/2006Redone Server/data/world/map/285.gz b/2006Redone Server/data/world/map/285.gz new file mode 100644 index 00000000..3f811539 Binary files /dev/null and b/2006Redone Server/data/world/map/285.gz differ diff --git a/2006Redone Server/data/world/map/286.gz b/2006Redone Server/data/world/map/286.gz new file mode 100644 index 00000000..9406ae59 Binary files /dev/null and b/2006Redone Server/data/world/map/286.gz differ diff --git a/2006Redone Server/data/world/map/287.gz b/2006Redone Server/data/world/map/287.gz new file mode 100644 index 00000000..eeac7a22 Binary files /dev/null and b/2006Redone Server/data/world/map/287.gz differ diff --git a/2006Redone Server/data/world/map/288.gz b/2006Redone Server/data/world/map/288.gz new file mode 100644 index 00000000..69f6b00d Binary files /dev/null and b/2006Redone Server/data/world/map/288.gz differ diff --git a/2006Redone Server/data/world/map/289.gz b/2006Redone Server/data/world/map/289.gz new file mode 100644 index 00000000..4fb21d1d Binary files /dev/null and b/2006Redone Server/data/world/map/289.gz differ diff --git a/2006Redone Server/data/world/map/29.gz b/2006Redone Server/data/world/map/29.gz new file mode 100644 index 00000000..b5ac3e6f Binary files /dev/null and b/2006Redone Server/data/world/map/29.gz differ diff --git a/2006Redone Server/data/world/map/290.gz b/2006Redone Server/data/world/map/290.gz new file mode 100644 index 00000000..3ffdd8cc Binary files /dev/null and b/2006Redone Server/data/world/map/290.gz differ diff --git a/2006Redone Server/data/world/map/291.gz b/2006Redone Server/data/world/map/291.gz new file mode 100644 index 00000000..5936f450 Binary files /dev/null and b/2006Redone Server/data/world/map/291.gz differ diff --git a/2006Redone Server/data/world/map/292.gz b/2006Redone Server/data/world/map/292.gz new file mode 100644 index 00000000..0e2aa23a Binary files /dev/null and b/2006Redone Server/data/world/map/292.gz differ diff --git a/2006Redone Server/data/world/map/293.gz b/2006Redone Server/data/world/map/293.gz new file mode 100644 index 00000000..d543698f Binary files /dev/null and b/2006Redone Server/data/world/map/293.gz differ diff --git a/2006Redone Server/data/world/map/294.gz b/2006Redone Server/data/world/map/294.gz new file mode 100644 index 00000000..5045fc08 Binary files /dev/null and b/2006Redone Server/data/world/map/294.gz differ diff --git a/2006Redone Server/data/world/map/295.gz b/2006Redone Server/data/world/map/295.gz new file mode 100644 index 00000000..badf93f7 Binary files /dev/null and b/2006Redone Server/data/world/map/295.gz differ diff --git a/2006Redone Server/data/world/map/296.gz b/2006Redone Server/data/world/map/296.gz new file mode 100644 index 00000000..05d669b6 Binary files /dev/null and b/2006Redone Server/data/world/map/296.gz differ diff --git a/2006Redone Server/data/world/map/297.gz b/2006Redone Server/data/world/map/297.gz new file mode 100644 index 00000000..a0ae4ef9 Binary files /dev/null and b/2006Redone Server/data/world/map/297.gz differ diff --git a/2006Redone Server/data/world/map/298.gz b/2006Redone Server/data/world/map/298.gz new file mode 100644 index 00000000..b2f1a8cc Binary files /dev/null and b/2006Redone Server/data/world/map/298.gz differ diff --git a/2006Redone Server/data/world/map/299.gz b/2006Redone Server/data/world/map/299.gz new file mode 100644 index 00000000..ab2bbd56 Binary files /dev/null and b/2006Redone Server/data/world/map/299.gz differ diff --git a/2006Redone Server/data/world/map/3.gz b/2006Redone Server/data/world/map/3.gz new file mode 100644 index 00000000..a083d082 Binary files /dev/null and b/2006Redone Server/data/world/map/3.gz differ diff --git a/2006Redone Server/data/world/map/30.gz b/2006Redone Server/data/world/map/30.gz new file mode 100644 index 00000000..317a0b02 Binary files /dev/null and b/2006Redone Server/data/world/map/30.gz differ diff --git a/2006Redone Server/data/world/map/300.gz b/2006Redone Server/data/world/map/300.gz new file mode 100644 index 00000000..9be02730 Binary files /dev/null and b/2006Redone Server/data/world/map/300.gz differ diff --git a/2006Redone Server/data/world/map/301.gz b/2006Redone Server/data/world/map/301.gz new file mode 100644 index 00000000..63453906 Binary files /dev/null and b/2006Redone Server/data/world/map/301.gz differ diff --git a/2006Redone Server/data/world/map/302.gz b/2006Redone Server/data/world/map/302.gz new file mode 100644 index 00000000..1483b5c6 Binary files /dev/null and b/2006Redone Server/data/world/map/302.gz differ diff --git a/2006Redone Server/data/world/map/303.gz b/2006Redone Server/data/world/map/303.gz new file mode 100644 index 00000000..9614f0e3 Binary files /dev/null and b/2006Redone Server/data/world/map/303.gz differ diff --git a/2006Redone Server/data/world/map/304.gz b/2006Redone Server/data/world/map/304.gz new file mode 100644 index 00000000..524eb098 Binary files /dev/null and b/2006Redone Server/data/world/map/304.gz differ diff --git a/2006Redone Server/data/world/map/305.gz b/2006Redone Server/data/world/map/305.gz new file mode 100644 index 00000000..18a77d29 Binary files /dev/null and b/2006Redone Server/data/world/map/305.gz differ diff --git a/2006Redone Server/data/world/map/306.gz b/2006Redone Server/data/world/map/306.gz new file mode 100644 index 00000000..dbe969fa Binary files /dev/null and b/2006Redone Server/data/world/map/306.gz differ diff --git a/2006Redone Server/data/world/map/307.gz b/2006Redone Server/data/world/map/307.gz new file mode 100644 index 00000000..838368ad Binary files /dev/null and b/2006Redone Server/data/world/map/307.gz differ diff --git a/2006Redone Server/data/world/map/308.gz b/2006Redone Server/data/world/map/308.gz new file mode 100644 index 00000000..7b0684c5 Binary files /dev/null and b/2006Redone Server/data/world/map/308.gz differ diff --git a/2006Redone Server/data/world/map/309.gz b/2006Redone Server/data/world/map/309.gz new file mode 100644 index 00000000..b0933cf8 Binary files /dev/null and b/2006Redone Server/data/world/map/309.gz differ diff --git a/2006Redone Server/data/world/map/31.gz b/2006Redone Server/data/world/map/31.gz new file mode 100644 index 00000000..6f69d40f Binary files /dev/null and b/2006Redone Server/data/world/map/31.gz differ diff --git a/2006Redone Server/data/world/map/310.gz b/2006Redone Server/data/world/map/310.gz new file mode 100644 index 00000000..e7fdcbdc Binary files /dev/null and b/2006Redone Server/data/world/map/310.gz differ diff --git a/2006Redone Server/data/world/map/311.gz b/2006Redone Server/data/world/map/311.gz new file mode 100644 index 00000000..598ac40c Binary files /dev/null and b/2006Redone Server/data/world/map/311.gz differ diff --git a/2006Redone Server/data/world/map/312.gz b/2006Redone Server/data/world/map/312.gz new file mode 100644 index 00000000..33a182ff Binary files /dev/null and b/2006Redone Server/data/world/map/312.gz differ diff --git a/2006Redone Server/data/world/map/313.gz b/2006Redone Server/data/world/map/313.gz new file mode 100644 index 00000000..23f544bc Binary files /dev/null and b/2006Redone Server/data/world/map/313.gz differ diff --git a/2006Redone Server/data/world/map/314.gz b/2006Redone Server/data/world/map/314.gz new file mode 100644 index 00000000..9089d072 Binary files /dev/null and b/2006Redone Server/data/world/map/314.gz differ diff --git a/2006Redone Server/data/world/map/315.gz b/2006Redone Server/data/world/map/315.gz new file mode 100644 index 00000000..3519a7fe Binary files /dev/null and b/2006Redone Server/data/world/map/315.gz differ diff --git a/2006Redone Server/data/world/map/316.gz b/2006Redone Server/data/world/map/316.gz new file mode 100644 index 00000000..b0e2fc0b Binary files /dev/null and b/2006Redone Server/data/world/map/316.gz differ diff --git a/2006Redone Server/data/world/map/317.gz b/2006Redone Server/data/world/map/317.gz new file mode 100644 index 00000000..8a0f2656 Binary files /dev/null and b/2006Redone Server/data/world/map/317.gz differ diff --git a/2006Redone Server/data/world/map/318.gz b/2006Redone Server/data/world/map/318.gz new file mode 100644 index 00000000..e72c1de4 Binary files /dev/null and b/2006Redone Server/data/world/map/318.gz differ diff --git a/2006Redone Server/data/world/map/319.gz b/2006Redone Server/data/world/map/319.gz new file mode 100644 index 00000000..76115e78 Binary files /dev/null and b/2006Redone Server/data/world/map/319.gz differ diff --git a/2006Redone Server/data/world/map/324.gz b/2006Redone Server/data/world/map/324.gz new file mode 100644 index 00000000..0b567616 Binary files /dev/null and b/2006Redone Server/data/world/map/324.gz differ diff --git a/2006Redone Server/data/world/map/325.gz b/2006Redone Server/data/world/map/325.gz new file mode 100644 index 00000000..55d5da1a Binary files /dev/null and b/2006Redone Server/data/world/map/325.gz differ diff --git a/2006Redone Server/data/world/map/328.gz b/2006Redone Server/data/world/map/328.gz new file mode 100644 index 00000000..b624eb10 Binary files /dev/null and b/2006Redone Server/data/world/map/328.gz differ diff --git a/2006Redone Server/data/world/map/329.gz b/2006Redone Server/data/world/map/329.gz new file mode 100644 index 00000000..46288649 Binary files /dev/null and b/2006Redone Server/data/world/map/329.gz differ diff --git a/2006Redone Server/data/world/map/330.gz b/2006Redone Server/data/world/map/330.gz new file mode 100644 index 00000000..febdc40b Binary files /dev/null and b/2006Redone Server/data/world/map/330.gz differ diff --git a/2006Redone Server/data/world/map/331.gz b/2006Redone Server/data/world/map/331.gz new file mode 100644 index 00000000..58c84826 Binary files /dev/null and b/2006Redone Server/data/world/map/331.gz differ diff --git a/2006Redone Server/data/world/map/332.gz b/2006Redone Server/data/world/map/332.gz new file mode 100644 index 00000000..d25cf045 Binary files /dev/null and b/2006Redone Server/data/world/map/332.gz differ diff --git a/2006Redone Server/data/world/map/333.gz b/2006Redone Server/data/world/map/333.gz new file mode 100644 index 00000000..1440ca71 Binary files /dev/null and b/2006Redone Server/data/world/map/333.gz differ diff --git a/2006Redone Server/data/world/map/334.gz b/2006Redone Server/data/world/map/334.gz new file mode 100644 index 00000000..b2305108 Binary files /dev/null and b/2006Redone Server/data/world/map/334.gz differ diff --git a/2006Redone Server/data/world/map/335.gz b/2006Redone Server/data/world/map/335.gz new file mode 100644 index 00000000..6c617bfd Binary files /dev/null and b/2006Redone Server/data/world/map/335.gz differ diff --git a/2006Redone Server/data/world/map/336.gz b/2006Redone Server/data/world/map/336.gz new file mode 100644 index 00000000..57ccf55a Binary files /dev/null and b/2006Redone Server/data/world/map/336.gz differ diff --git a/2006Redone Server/data/world/map/337.gz b/2006Redone Server/data/world/map/337.gz new file mode 100644 index 00000000..dba05491 Binary files /dev/null and b/2006Redone Server/data/world/map/337.gz differ diff --git a/2006Redone Server/data/world/map/338.gz b/2006Redone Server/data/world/map/338.gz new file mode 100644 index 00000000..0ac28bc1 Binary files /dev/null and b/2006Redone Server/data/world/map/338.gz differ diff --git a/2006Redone Server/data/world/map/339.gz b/2006Redone Server/data/world/map/339.gz new file mode 100644 index 00000000..aba2e292 Binary files /dev/null and b/2006Redone Server/data/world/map/339.gz differ diff --git a/2006Redone Server/data/world/map/340.gz b/2006Redone Server/data/world/map/340.gz new file mode 100644 index 00000000..0b39c28e Binary files /dev/null and b/2006Redone Server/data/world/map/340.gz differ diff --git a/2006Redone Server/data/world/map/341.gz b/2006Redone Server/data/world/map/341.gz new file mode 100644 index 00000000..71427c62 Binary files /dev/null and b/2006Redone Server/data/world/map/341.gz differ diff --git a/2006Redone Server/data/world/map/342.gz b/2006Redone Server/data/world/map/342.gz new file mode 100644 index 00000000..f7a9b561 Binary files /dev/null and b/2006Redone Server/data/world/map/342.gz differ diff --git a/2006Redone Server/data/world/map/343.gz b/2006Redone Server/data/world/map/343.gz new file mode 100644 index 00000000..bfc1ae81 Binary files /dev/null and b/2006Redone Server/data/world/map/343.gz differ diff --git a/2006Redone Server/data/world/map/344.gz b/2006Redone Server/data/world/map/344.gz new file mode 100644 index 00000000..5b248a24 Binary files /dev/null and b/2006Redone Server/data/world/map/344.gz differ diff --git a/2006Redone Server/data/world/map/345.gz b/2006Redone Server/data/world/map/345.gz new file mode 100644 index 00000000..c9c4282c Binary files /dev/null and b/2006Redone Server/data/world/map/345.gz differ diff --git a/2006Redone Server/data/world/map/348.gz b/2006Redone Server/data/world/map/348.gz new file mode 100644 index 00000000..c2a39d50 Binary files /dev/null and b/2006Redone Server/data/world/map/348.gz differ diff --git a/2006Redone Server/data/world/map/349.gz b/2006Redone Server/data/world/map/349.gz new file mode 100644 index 00000000..d1491290 Binary files /dev/null and b/2006Redone Server/data/world/map/349.gz differ diff --git a/2006Redone Server/data/world/map/352.gz b/2006Redone Server/data/world/map/352.gz new file mode 100644 index 00000000..ee6f4391 Binary files /dev/null and b/2006Redone Server/data/world/map/352.gz differ diff --git a/2006Redone Server/data/world/map/353.gz b/2006Redone Server/data/world/map/353.gz new file mode 100644 index 00000000..eba4632b Binary files /dev/null and b/2006Redone Server/data/world/map/353.gz differ diff --git a/2006Redone Server/data/world/map/354.gz b/2006Redone Server/data/world/map/354.gz new file mode 100644 index 00000000..c2015954 Binary files /dev/null and b/2006Redone Server/data/world/map/354.gz differ diff --git a/2006Redone Server/data/world/map/355.gz b/2006Redone Server/data/world/map/355.gz new file mode 100644 index 00000000..10cd1a40 Binary files /dev/null and b/2006Redone Server/data/world/map/355.gz differ diff --git a/2006Redone Server/data/world/map/356.gz b/2006Redone Server/data/world/map/356.gz new file mode 100644 index 00000000..62aef361 Binary files /dev/null and b/2006Redone Server/data/world/map/356.gz differ diff --git a/2006Redone Server/data/world/map/357.gz b/2006Redone Server/data/world/map/357.gz new file mode 100644 index 00000000..9e212fa2 Binary files /dev/null and b/2006Redone Server/data/world/map/357.gz differ diff --git a/2006Redone Server/data/world/map/358.gz b/2006Redone Server/data/world/map/358.gz new file mode 100644 index 00000000..a4e44e47 Binary files /dev/null and b/2006Redone Server/data/world/map/358.gz differ diff --git a/2006Redone Server/data/world/map/359.gz b/2006Redone Server/data/world/map/359.gz new file mode 100644 index 00000000..a9b72ebe Binary files /dev/null and b/2006Redone Server/data/world/map/359.gz differ diff --git a/2006Redone Server/data/world/map/36.gz b/2006Redone Server/data/world/map/36.gz new file mode 100644 index 00000000..ded4ba5e Binary files /dev/null and b/2006Redone Server/data/world/map/36.gz differ diff --git a/2006Redone Server/data/world/map/360.gz b/2006Redone Server/data/world/map/360.gz new file mode 100644 index 00000000..6c6c8a80 Binary files /dev/null and b/2006Redone Server/data/world/map/360.gz differ diff --git a/2006Redone Server/data/world/map/361.gz b/2006Redone Server/data/world/map/361.gz new file mode 100644 index 00000000..27a3f888 Binary files /dev/null and b/2006Redone Server/data/world/map/361.gz differ diff --git a/2006Redone Server/data/world/map/362.gz b/2006Redone Server/data/world/map/362.gz new file mode 100644 index 00000000..c922101e Binary files /dev/null and b/2006Redone Server/data/world/map/362.gz differ diff --git a/2006Redone Server/data/world/map/363.gz b/2006Redone Server/data/world/map/363.gz new file mode 100644 index 00000000..d3376291 Binary files /dev/null and b/2006Redone Server/data/world/map/363.gz differ diff --git a/2006Redone Server/data/world/map/364.gz b/2006Redone Server/data/world/map/364.gz new file mode 100644 index 00000000..abbb7274 Binary files /dev/null and b/2006Redone Server/data/world/map/364.gz differ diff --git a/2006Redone Server/data/world/map/365.gz b/2006Redone Server/data/world/map/365.gz new file mode 100644 index 00000000..5872af94 Binary files /dev/null and b/2006Redone Server/data/world/map/365.gz differ diff --git a/2006Redone Server/data/world/map/366.gz b/2006Redone Server/data/world/map/366.gz new file mode 100644 index 00000000..386f4b72 Binary files /dev/null and b/2006Redone Server/data/world/map/366.gz differ diff --git a/2006Redone Server/data/world/map/367.gz b/2006Redone Server/data/world/map/367.gz new file mode 100644 index 00000000..6980ceb8 Binary files /dev/null and b/2006Redone Server/data/world/map/367.gz differ diff --git a/2006Redone Server/data/world/map/368.gz b/2006Redone Server/data/world/map/368.gz new file mode 100644 index 00000000..c1ff6cc9 Binary files /dev/null and b/2006Redone Server/data/world/map/368.gz differ diff --git a/2006Redone Server/data/world/map/369.gz b/2006Redone Server/data/world/map/369.gz new file mode 100644 index 00000000..39c1037d Binary files /dev/null and b/2006Redone Server/data/world/map/369.gz differ diff --git a/2006Redone Server/data/world/map/37.gz b/2006Redone Server/data/world/map/37.gz new file mode 100644 index 00000000..8d3927ac Binary files /dev/null and b/2006Redone Server/data/world/map/37.gz differ diff --git a/2006Redone Server/data/world/map/370.gz b/2006Redone Server/data/world/map/370.gz new file mode 100644 index 00000000..8ff84d84 Binary files /dev/null and b/2006Redone Server/data/world/map/370.gz differ diff --git a/2006Redone Server/data/world/map/371.gz b/2006Redone Server/data/world/map/371.gz new file mode 100644 index 00000000..b9bcad3b Binary files /dev/null and b/2006Redone Server/data/world/map/371.gz differ diff --git a/2006Redone Server/data/world/map/372.gz b/2006Redone Server/data/world/map/372.gz new file mode 100644 index 00000000..ad718f2e Binary files /dev/null and b/2006Redone Server/data/world/map/372.gz differ diff --git a/2006Redone Server/data/world/map/373.gz b/2006Redone Server/data/world/map/373.gz new file mode 100644 index 00000000..3ba97398 Binary files /dev/null and b/2006Redone Server/data/world/map/373.gz differ diff --git a/2006Redone Server/data/world/map/374.gz b/2006Redone Server/data/world/map/374.gz new file mode 100644 index 00000000..4aef0427 Binary files /dev/null and b/2006Redone Server/data/world/map/374.gz differ diff --git a/2006Redone Server/data/world/map/375.gz b/2006Redone Server/data/world/map/375.gz new file mode 100644 index 00000000..eb495ab3 Binary files /dev/null and b/2006Redone Server/data/world/map/375.gz differ diff --git a/2006Redone Server/data/world/map/376.gz b/2006Redone Server/data/world/map/376.gz new file mode 100644 index 00000000..6cdd2ca5 Binary files /dev/null and b/2006Redone Server/data/world/map/376.gz differ diff --git a/2006Redone Server/data/world/map/377.gz b/2006Redone Server/data/world/map/377.gz new file mode 100644 index 00000000..d4b21aa1 Binary files /dev/null and b/2006Redone Server/data/world/map/377.gz differ diff --git a/2006Redone Server/data/world/map/378.gz b/2006Redone Server/data/world/map/378.gz new file mode 100644 index 00000000..29bfba39 Binary files /dev/null and b/2006Redone Server/data/world/map/378.gz differ diff --git a/2006Redone Server/data/world/map/379.gz b/2006Redone Server/data/world/map/379.gz new file mode 100644 index 00000000..e614d12a Binary files /dev/null and b/2006Redone Server/data/world/map/379.gz differ diff --git a/2006Redone Server/data/world/map/38.gz b/2006Redone Server/data/world/map/38.gz new file mode 100644 index 00000000..9831647d Binary files /dev/null and b/2006Redone Server/data/world/map/38.gz differ diff --git a/2006Redone Server/data/world/map/380.gz b/2006Redone Server/data/world/map/380.gz new file mode 100644 index 00000000..4aadeac7 Binary files /dev/null and b/2006Redone Server/data/world/map/380.gz differ diff --git a/2006Redone Server/data/world/map/381.gz b/2006Redone Server/data/world/map/381.gz new file mode 100644 index 00000000..3cea7d27 Binary files /dev/null and b/2006Redone Server/data/world/map/381.gz differ diff --git a/2006Redone Server/data/world/map/382.gz b/2006Redone Server/data/world/map/382.gz new file mode 100644 index 00000000..91d907bc Binary files /dev/null and b/2006Redone Server/data/world/map/382.gz differ diff --git a/2006Redone Server/data/world/map/383.gz b/2006Redone Server/data/world/map/383.gz new file mode 100644 index 00000000..92c789d1 Binary files /dev/null and b/2006Redone Server/data/world/map/383.gz differ diff --git a/2006Redone Server/data/world/map/384.gz b/2006Redone Server/data/world/map/384.gz new file mode 100644 index 00000000..70f6910d Binary files /dev/null and b/2006Redone Server/data/world/map/384.gz differ diff --git a/2006Redone Server/data/world/map/385.gz b/2006Redone Server/data/world/map/385.gz new file mode 100644 index 00000000..f26e123c Binary files /dev/null and b/2006Redone Server/data/world/map/385.gz differ diff --git a/2006Redone Server/data/world/map/386.gz b/2006Redone Server/data/world/map/386.gz new file mode 100644 index 00000000..ea96fa91 Binary files /dev/null and b/2006Redone Server/data/world/map/386.gz differ diff --git a/2006Redone Server/data/world/map/387.gz b/2006Redone Server/data/world/map/387.gz new file mode 100644 index 00000000..8d666d62 Binary files /dev/null and b/2006Redone Server/data/world/map/387.gz differ diff --git a/2006Redone Server/data/world/map/388.gz b/2006Redone Server/data/world/map/388.gz new file mode 100644 index 00000000..a7f63ad4 Binary files /dev/null and b/2006Redone Server/data/world/map/388.gz differ diff --git a/2006Redone Server/data/world/map/389.gz b/2006Redone Server/data/world/map/389.gz new file mode 100644 index 00000000..54dc7cf1 Binary files /dev/null and b/2006Redone Server/data/world/map/389.gz differ diff --git a/2006Redone Server/data/world/map/39.gz b/2006Redone Server/data/world/map/39.gz new file mode 100644 index 00000000..2c671499 Binary files /dev/null and b/2006Redone Server/data/world/map/39.gz differ diff --git a/2006Redone Server/data/world/map/390.gz b/2006Redone Server/data/world/map/390.gz new file mode 100644 index 00000000..0fc7d3d2 Binary files /dev/null and b/2006Redone Server/data/world/map/390.gz differ diff --git a/2006Redone Server/data/world/map/391.gz b/2006Redone Server/data/world/map/391.gz new file mode 100644 index 00000000..b3147f25 Binary files /dev/null and b/2006Redone Server/data/world/map/391.gz differ diff --git a/2006Redone Server/data/world/map/392.gz b/2006Redone Server/data/world/map/392.gz new file mode 100644 index 00000000..b28fb093 Binary files /dev/null and b/2006Redone Server/data/world/map/392.gz differ diff --git a/2006Redone Server/data/world/map/393.gz b/2006Redone Server/data/world/map/393.gz new file mode 100644 index 00000000..a4b099f4 Binary files /dev/null and b/2006Redone Server/data/world/map/393.gz differ diff --git a/2006Redone Server/data/world/map/394.gz b/2006Redone Server/data/world/map/394.gz new file mode 100644 index 00000000..08c33afe Binary files /dev/null and b/2006Redone Server/data/world/map/394.gz differ diff --git a/2006Redone Server/data/world/map/395.gz b/2006Redone Server/data/world/map/395.gz new file mode 100644 index 00000000..e6bc518b Binary files /dev/null and b/2006Redone Server/data/world/map/395.gz differ diff --git a/2006Redone Server/data/world/map/396.gz b/2006Redone Server/data/world/map/396.gz new file mode 100644 index 00000000..93009b9d Binary files /dev/null and b/2006Redone Server/data/world/map/396.gz differ diff --git a/2006Redone Server/data/world/map/397.gz b/2006Redone Server/data/world/map/397.gz new file mode 100644 index 00000000..7e30027c Binary files /dev/null and b/2006Redone Server/data/world/map/397.gz differ diff --git a/2006Redone Server/data/world/map/398.gz b/2006Redone Server/data/world/map/398.gz new file mode 100644 index 00000000..9d3e864d Binary files /dev/null and b/2006Redone Server/data/world/map/398.gz differ diff --git a/2006Redone Server/data/world/map/399.gz b/2006Redone Server/data/world/map/399.gz new file mode 100644 index 00000000..596ed525 Binary files /dev/null and b/2006Redone Server/data/world/map/399.gz differ diff --git a/2006Redone Server/data/world/map/40.gz b/2006Redone Server/data/world/map/40.gz new file mode 100644 index 00000000..808ccbeb Binary files /dev/null and b/2006Redone Server/data/world/map/40.gz differ diff --git a/2006Redone Server/data/world/map/400.gz b/2006Redone Server/data/world/map/400.gz new file mode 100644 index 00000000..97511fcb Binary files /dev/null and b/2006Redone Server/data/world/map/400.gz differ diff --git a/2006Redone Server/data/world/map/401.gz b/2006Redone Server/data/world/map/401.gz new file mode 100644 index 00000000..0052f67b Binary files /dev/null and b/2006Redone Server/data/world/map/401.gz differ diff --git a/2006Redone Server/data/world/map/402.gz b/2006Redone Server/data/world/map/402.gz new file mode 100644 index 00000000..c03ed17d Binary files /dev/null and b/2006Redone Server/data/world/map/402.gz differ diff --git a/2006Redone Server/data/world/map/403.gz b/2006Redone Server/data/world/map/403.gz new file mode 100644 index 00000000..c2dd6f54 Binary files /dev/null and b/2006Redone Server/data/world/map/403.gz differ diff --git a/2006Redone Server/data/world/map/404.gz b/2006Redone Server/data/world/map/404.gz new file mode 100644 index 00000000..be378a24 Binary files /dev/null and b/2006Redone Server/data/world/map/404.gz differ diff --git a/2006Redone Server/data/world/map/405.gz b/2006Redone Server/data/world/map/405.gz new file mode 100644 index 00000000..cf9b0280 Binary files /dev/null and b/2006Redone Server/data/world/map/405.gz differ diff --git a/2006Redone Server/data/world/map/406.gz b/2006Redone Server/data/world/map/406.gz new file mode 100644 index 00000000..72519659 Binary files /dev/null and b/2006Redone Server/data/world/map/406.gz differ diff --git a/2006Redone Server/data/world/map/407.gz b/2006Redone Server/data/world/map/407.gz new file mode 100644 index 00000000..6f81df8e Binary files /dev/null and b/2006Redone Server/data/world/map/407.gz differ diff --git a/2006Redone Server/data/world/map/408.gz b/2006Redone Server/data/world/map/408.gz new file mode 100644 index 00000000..7cfb93d3 Binary files /dev/null and b/2006Redone Server/data/world/map/408.gz differ diff --git a/2006Redone Server/data/world/map/409.gz b/2006Redone Server/data/world/map/409.gz new file mode 100644 index 00000000..1c8550d3 Binary files /dev/null and b/2006Redone Server/data/world/map/409.gz differ diff --git a/2006Redone Server/data/world/map/41.gz b/2006Redone Server/data/world/map/41.gz new file mode 100644 index 00000000..d88ad611 Binary files /dev/null and b/2006Redone Server/data/world/map/41.gz differ diff --git a/2006Redone Server/data/world/map/410.gz b/2006Redone Server/data/world/map/410.gz new file mode 100644 index 00000000..da43eaaf Binary files /dev/null and b/2006Redone Server/data/world/map/410.gz differ diff --git a/2006Redone Server/data/world/map/411.gz b/2006Redone Server/data/world/map/411.gz new file mode 100644 index 00000000..b39af2ab Binary files /dev/null and b/2006Redone Server/data/world/map/411.gz differ diff --git a/2006Redone Server/data/world/map/412.gz b/2006Redone Server/data/world/map/412.gz new file mode 100644 index 00000000..1e6ff3a1 Binary files /dev/null and b/2006Redone Server/data/world/map/412.gz differ diff --git a/2006Redone Server/data/world/map/413.gz b/2006Redone Server/data/world/map/413.gz new file mode 100644 index 00000000..d2cfd633 Binary files /dev/null and b/2006Redone Server/data/world/map/413.gz differ diff --git a/2006Redone Server/data/world/map/414.gz b/2006Redone Server/data/world/map/414.gz new file mode 100644 index 00000000..073937ca Binary files /dev/null and b/2006Redone Server/data/world/map/414.gz differ diff --git a/2006Redone Server/data/world/map/415.gz b/2006Redone Server/data/world/map/415.gz new file mode 100644 index 00000000..f2690615 Binary files /dev/null and b/2006Redone Server/data/world/map/415.gz differ diff --git a/2006Redone Server/data/world/map/416.gz b/2006Redone Server/data/world/map/416.gz new file mode 100644 index 00000000..dec97594 Binary files /dev/null and b/2006Redone Server/data/world/map/416.gz differ diff --git a/2006Redone Server/data/world/map/417.gz b/2006Redone Server/data/world/map/417.gz new file mode 100644 index 00000000..af3b3f23 Binary files /dev/null and b/2006Redone Server/data/world/map/417.gz differ diff --git a/2006Redone Server/data/world/map/418.gz b/2006Redone Server/data/world/map/418.gz new file mode 100644 index 00000000..757e5e39 Binary files /dev/null and b/2006Redone Server/data/world/map/418.gz differ diff --git a/2006Redone Server/data/world/map/419.gz b/2006Redone Server/data/world/map/419.gz new file mode 100644 index 00000000..1e589604 Binary files /dev/null and b/2006Redone Server/data/world/map/419.gz differ diff --git a/2006Redone Server/data/world/map/42.gz b/2006Redone Server/data/world/map/42.gz new file mode 100644 index 00000000..783ac533 Binary files /dev/null and b/2006Redone Server/data/world/map/42.gz differ diff --git a/2006Redone Server/data/world/map/420.gz b/2006Redone Server/data/world/map/420.gz new file mode 100644 index 00000000..a24693ce Binary files /dev/null and b/2006Redone Server/data/world/map/420.gz differ diff --git a/2006Redone Server/data/world/map/421.gz b/2006Redone Server/data/world/map/421.gz new file mode 100644 index 00000000..a4f487d7 Binary files /dev/null and b/2006Redone Server/data/world/map/421.gz differ diff --git a/2006Redone Server/data/world/map/422.gz b/2006Redone Server/data/world/map/422.gz new file mode 100644 index 00000000..bb85d325 Binary files /dev/null and b/2006Redone Server/data/world/map/422.gz differ diff --git a/2006Redone Server/data/world/map/423.gz b/2006Redone Server/data/world/map/423.gz new file mode 100644 index 00000000..4071c01a Binary files /dev/null and b/2006Redone Server/data/world/map/423.gz differ diff --git a/2006Redone Server/data/world/map/424.gz b/2006Redone Server/data/world/map/424.gz new file mode 100644 index 00000000..c364286f Binary files /dev/null and b/2006Redone Server/data/world/map/424.gz differ diff --git a/2006Redone Server/data/world/map/425.gz b/2006Redone Server/data/world/map/425.gz new file mode 100644 index 00000000..45113da6 Binary files /dev/null and b/2006Redone Server/data/world/map/425.gz differ diff --git a/2006Redone Server/data/world/map/426.gz b/2006Redone Server/data/world/map/426.gz new file mode 100644 index 00000000..d76541cd Binary files /dev/null and b/2006Redone Server/data/world/map/426.gz differ diff --git a/2006Redone Server/data/world/map/427.gz b/2006Redone Server/data/world/map/427.gz new file mode 100644 index 00000000..44cb90ac Binary files /dev/null and b/2006Redone Server/data/world/map/427.gz differ diff --git a/2006Redone Server/data/world/map/428.gz b/2006Redone Server/data/world/map/428.gz new file mode 100644 index 00000000..2b12cab3 Binary files /dev/null and b/2006Redone Server/data/world/map/428.gz differ diff --git a/2006Redone Server/data/world/map/429.gz b/2006Redone Server/data/world/map/429.gz new file mode 100644 index 00000000..0fab3c60 Binary files /dev/null and b/2006Redone Server/data/world/map/429.gz differ diff --git a/2006Redone Server/data/world/map/43.gz b/2006Redone Server/data/world/map/43.gz new file mode 100644 index 00000000..0962077b Binary files /dev/null and b/2006Redone Server/data/world/map/43.gz differ diff --git a/2006Redone Server/data/world/map/430.gz b/2006Redone Server/data/world/map/430.gz new file mode 100644 index 00000000..aa91078c Binary files /dev/null and b/2006Redone Server/data/world/map/430.gz differ diff --git a/2006Redone Server/data/world/map/431.gz b/2006Redone Server/data/world/map/431.gz new file mode 100644 index 00000000..fc815012 Binary files /dev/null and b/2006Redone Server/data/world/map/431.gz differ diff --git a/2006Redone Server/data/world/map/432.gz b/2006Redone Server/data/world/map/432.gz new file mode 100644 index 00000000..53e30794 Binary files /dev/null and b/2006Redone Server/data/world/map/432.gz differ diff --git a/2006Redone Server/data/world/map/433.gz b/2006Redone Server/data/world/map/433.gz new file mode 100644 index 00000000..1932a90c Binary files /dev/null and b/2006Redone Server/data/world/map/433.gz differ diff --git a/2006Redone Server/data/world/map/434.gz b/2006Redone Server/data/world/map/434.gz new file mode 100644 index 00000000..8c06fec1 Binary files /dev/null and b/2006Redone Server/data/world/map/434.gz differ diff --git a/2006Redone Server/data/world/map/435.gz b/2006Redone Server/data/world/map/435.gz new file mode 100644 index 00000000..c7bfd4de Binary files /dev/null and b/2006Redone Server/data/world/map/435.gz differ diff --git a/2006Redone Server/data/world/map/436.gz b/2006Redone Server/data/world/map/436.gz new file mode 100644 index 00000000..06e92662 Binary files /dev/null and b/2006Redone Server/data/world/map/436.gz differ diff --git a/2006Redone Server/data/world/map/437.gz b/2006Redone Server/data/world/map/437.gz new file mode 100644 index 00000000..2a58a868 Binary files /dev/null and b/2006Redone Server/data/world/map/437.gz differ diff --git a/2006Redone Server/data/world/map/438.gz b/2006Redone Server/data/world/map/438.gz new file mode 100644 index 00000000..c9f2c4f7 Binary files /dev/null and b/2006Redone Server/data/world/map/438.gz differ diff --git a/2006Redone Server/data/world/map/439.gz b/2006Redone Server/data/world/map/439.gz new file mode 100644 index 00000000..f1031e17 Binary files /dev/null and b/2006Redone Server/data/world/map/439.gz differ diff --git a/2006Redone Server/data/world/map/44.gz b/2006Redone Server/data/world/map/44.gz new file mode 100644 index 00000000..101d5b64 Binary files /dev/null and b/2006Redone Server/data/world/map/44.gz differ diff --git a/2006Redone Server/data/world/map/440.gz b/2006Redone Server/data/world/map/440.gz new file mode 100644 index 00000000..3c3b55d2 Binary files /dev/null and b/2006Redone Server/data/world/map/440.gz differ diff --git a/2006Redone Server/data/world/map/441.gz b/2006Redone Server/data/world/map/441.gz new file mode 100644 index 00000000..d771e718 Binary files /dev/null and b/2006Redone Server/data/world/map/441.gz differ diff --git a/2006Redone Server/data/world/map/442.gz b/2006Redone Server/data/world/map/442.gz new file mode 100644 index 00000000..b465ff25 Binary files /dev/null and b/2006Redone Server/data/world/map/442.gz differ diff --git a/2006Redone Server/data/world/map/443.gz b/2006Redone Server/data/world/map/443.gz new file mode 100644 index 00000000..172aac12 Binary files /dev/null and b/2006Redone Server/data/world/map/443.gz differ diff --git a/2006Redone Server/data/world/map/444.gz b/2006Redone Server/data/world/map/444.gz new file mode 100644 index 00000000..cde944ec Binary files /dev/null and b/2006Redone Server/data/world/map/444.gz differ diff --git a/2006Redone Server/data/world/map/445.gz b/2006Redone Server/data/world/map/445.gz new file mode 100644 index 00000000..408024bd Binary files /dev/null and b/2006Redone Server/data/world/map/445.gz differ diff --git a/2006Redone Server/data/world/map/448.gz b/2006Redone Server/data/world/map/448.gz new file mode 100644 index 00000000..25a9c5c1 Binary files /dev/null and b/2006Redone Server/data/world/map/448.gz differ diff --git a/2006Redone Server/data/world/map/449.gz b/2006Redone Server/data/world/map/449.gz new file mode 100644 index 00000000..8d88b1e8 Binary files /dev/null and b/2006Redone Server/data/world/map/449.gz differ diff --git a/2006Redone Server/data/world/map/45.gz b/2006Redone Server/data/world/map/45.gz new file mode 100644 index 00000000..9397aadb Binary files /dev/null and b/2006Redone Server/data/world/map/45.gz differ diff --git a/2006Redone Server/data/world/map/450.gz b/2006Redone Server/data/world/map/450.gz new file mode 100644 index 00000000..1202a70b Binary files /dev/null and b/2006Redone Server/data/world/map/450.gz differ diff --git a/2006Redone Server/data/world/map/451.gz b/2006Redone Server/data/world/map/451.gz new file mode 100644 index 00000000..a0245d68 Binary files /dev/null and b/2006Redone Server/data/world/map/451.gz differ diff --git a/2006Redone Server/data/world/map/452.gz b/2006Redone Server/data/world/map/452.gz new file mode 100644 index 00000000..9d54d9fe Binary files /dev/null and b/2006Redone Server/data/world/map/452.gz differ diff --git a/2006Redone Server/data/world/map/453.gz b/2006Redone Server/data/world/map/453.gz new file mode 100644 index 00000000..4ca385dc Binary files /dev/null and b/2006Redone Server/data/world/map/453.gz differ diff --git a/2006Redone Server/data/world/map/454.gz b/2006Redone Server/data/world/map/454.gz new file mode 100644 index 00000000..fd52ca54 Binary files /dev/null and b/2006Redone Server/data/world/map/454.gz differ diff --git a/2006Redone Server/data/world/map/455.gz b/2006Redone Server/data/world/map/455.gz new file mode 100644 index 00000000..cfd4d2b8 Binary files /dev/null and b/2006Redone Server/data/world/map/455.gz differ diff --git a/2006Redone Server/data/world/map/456.gz b/2006Redone Server/data/world/map/456.gz new file mode 100644 index 00000000..d24584bc Binary files /dev/null and b/2006Redone Server/data/world/map/456.gz differ diff --git a/2006Redone Server/data/world/map/457.gz b/2006Redone Server/data/world/map/457.gz new file mode 100644 index 00000000..9e434e7c Binary files /dev/null and b/2006Redone Server/data/world/map/457.gz differ diff --git a/2006Redone Server/data/world/map/458.gz b/2006Redone Server/data/world/map/458.gz new file mode 100644 index 00000000..caebbc69 Binary files /dev/null and b/2006Redone Server/data/world/map/458.gz differ diff --git a/2006Redone Server/data/world/map/459.gz b/2006Redone Server/data/world/map/459.gz new file mode 100644 index 00000000..5608f5a6 Binary files /dev/null and b/2006Redone Server/data/world/map/459.gz differ diff --git a/2006Redone Server/data/world/map/46.gz b/2006Redone Server/data/world/map/46.gz new file mode 100644 index 00000000..3ceecfb5 Binary files /dev/null and b/2006Redone Server/data/world/map/46.gz differ diff --git a/2006Redone Server/data/world/map/460.gz b/2006Redone Server/data/world/map/460.gz new file mode 100644 index 00000000..80688145 Binary files /dev/null and b/2006Redone Server/data/world/map/460.gz differ diff --git a/2006Redone Server/data/world/map/461.gz b/2006Redone Server/data/world/map/461.gz new file mode 100644 index 00000000..8b5e5c2e Binary files /dev/null and b/2006Redone Server/data/world/map/461.gz differ diff --git a/2006Redone Server/data/world/map/462.gz b/2006Redone Server/data/world/map/462.gz new file mode 100644 index 00000000..8c5d3f73 Binary files /dev/null and b/2006Redone Server/data/world/map/462.gz differ diff --git a/2006Redone Server/data/world/map/463.gz b/2006Redone Server/data/world/map/463.gz new file mode 100644 index 00000000..8b250714 Binary files /dev/null and b/2006Redone Server/data/world/map/463.gz differ diff --git a/2006Redone Server/data/world/map/464.gz b/2006Redone Server/data/world/map/464.gz new file mode 100644 index 00000000..1dad3bf5 Binary files /dev/null and b/2006Redone Server/data/world/map/464.gz differ diff --git a/2006Redone Server/data/world/map/465.gz b/2006Redone Server/data/world/map/465.gz new file mode 100644 index 00000000..e590ec07 Binary files /dev/null and b/2006Redone Server/data/world/map/465.gz differ diff --git a/2006Redone Server/data/world/map/466.gz b/2006Redone Server/data/world/map/466.gz new file mode 100644 index 00000000..e58184e0 Binary files /dev/null and b/2006Redone Server/data/world/map/466.gz differ diff --git a/2006Redone Server/data/world/map/467.gz b/2006Redone Server/data/world/map/467.gz new file mode 100644 index 00000000..5c92c2bd Binary files /dev/null and b/2006Redone Server/data/world/map/467.gz differ diff --git a/2006Redone Server/data/world/map/468.gz b/2006Redone Server/data/world/map/468.gz new file mode 100644 index 00000000..9828583d Binary files /dev/null and b/2006Redone Server/data/world/map/468.gz differ diff --git a/2006Redone Server/data/world/map/469.gz b/2006Redone Server/data/world/map/469.gz new file mode 100644 index 00000000..5243d8a6 Binary files /dev/null and b/2006Redone Server/data/world/map/469.gz differ diff --git a/2006Redone Server/data/world/map/47.gz b/2006Redone Server/data/world/map/47.gz new file mode 100644 index 00000000..5d12ce61 Binary files /dev/null and b/2006Redone Server/data/world/map/47.gz differ diff --git a/2006Redone Server/data/world/map/470.gz b/2006Redone Server/data/world/map/470.gz new file mode 100644 index 00000000..8f756a0d Binary files /dev/null and b/2006Redone Server/data/world/map/470.gz differ diff --git a/2006Redone Server/data/world/map/471.gz b/2006Redone Server/data/world/map/471.gz new file mode 100644 index 00000000..daee5b77 Binary files /dev/null and b/2006Redone Server/data/world/map/471.gz differ diff --git a/2006Redone Server/data/world/map/472.gz b/2006Redone Server/data/world/map/472.gz new file mode 100644 index 00000000..4ca21d3a Binary files /dev/null and b/2006Redone Server/data/world/map/472.gz differ diff --git a/2006Redone Server/data/world/map/473.gz b/2006Redone Server/data/world/map/473.gz new file mode 100644 index 00000000..5906f81c Binary files /dev/null and b/2006Redone Server/data/world/map/473.gz differ diff --git a/2006Redone Server/data/world/map/474.gz b/2006Redone Server/data/world/map/474.gz new file mode 100644 index 00000000..6491813a Binary files /dev/null and b/2006Redone Server/data/world/map/474.gz differ diff --git a/2006Redone Server/data/world/map/475.gz b/2006Redone Server/data/world/map/475.gz new file mode 100644 index 00000000..09fd0611 Binary files /dev/null and b/2006Redone Server/data/world/map/475.gz differ diff --git a/2006Redone Server/data/world/map/476.gz b/2006Redone Server/data/world/map/476.gz new file mode 100644 index 00000000..17c5cc3b Binary files /dev/null and b/2006Redone Server/data/world/map/476.gz differ diff --git a/2006Redone Server/data/world/map/477.gz b/2006Redone Server/data/world/map/477.gz new file mode 100644 index 00000000..81200f7b Binary files /dev/null and b/2006Redone Server/data/world/map/477.gz differ diff --git a/2006Redone Server/data/world/map/478.gz b/2006Redone Server/data/world/map/478.gz new file mode 100644 index 00000000..48eb3407 Binary files /dev/null and b/2006Redone Server/data/world/map/478.gz differ diff --git a/2006Redone Server/data/world/map/479.gz b/2006Redone Server/data/world/map/479.gz new file mode 100644 index 00000000..b0da32c4 Binary files /dev/null and b/2006Redone Server/data/world/map/479.gz differ diff --git a/2006Redone Server/data/world/map/48.gz b/2006Redone Server/data/world/map/48.gz new file mode 100644 index 00000000..d4045bf8 Binary files /dev/null and b/2006Redone Server/data/world/map/48.gz differ diff --git a/2006Redone Server/data/world/map/480.gz b/2006Redone Server/data/world/map/480.gz new file mode 100644 index 00000000..eb929ac3 Binary files /dev/null and b/2006Redone Server/data/world/map/480.gz differ diff --git a/2006Redone Server/data/world/map/481.gz b/2006Redone Server/data/world/map/481.gz new file mode 100644 index 00000000..e56c5f21 Binary files /dev/null and b/2006Redone Server/data/world/map/481.gz differ diff --git a/2006Redone Server/data/world/map/482.gz b/2006Redone Server/data/world/map/482.gz new file mode 100644 index 00000000..3f31c48c Binary files /dev/null and b/2006Redone Server/data/world/map/482.gz differ diff --git a/2006Redone Server/data/world/map/483.gz b/2006Redone Server/data/world/map/483.gz new file mode 100644 index 00000000..51c8e125 Binary files /dev/null and b/2006Redone Server/data/world/map/483.gz differ diff --git a/2006Redone Server/data/world/map/484.gz b/2006Redone Server/data/world/map/484.gz new file mode 100644 index 00000000..8f1f1812 Binary files /dev/null and b/2006Redone Server/data/world/map/484.gz differ diff --git a/2006Redone Server/data/world/map/485.gz b/2006Redone Server/data/world/map/485.gz new file mode 100644 index 00000000..2fbae31f Binary files /dev/null and b/2006Redone Server/data/world/map/485.gz differ diff --git a/2006Redone Server/data/world/map/486.gz b/2006Redone Server/data/world/map/486.gz new file mode 100644 index 00000000..86ac04bb Binary files /dev/null and b/2006Redone Server/data/world/map/486.gz differ diff --git a/2006Redone Server/data/world/map/487.gz b/2006Redone Server/data/world/map/487.gz new file mode 100644 index 00000000..16e83c2b Binary files /dev/null and b/2006Redone Server/data/world/map/487.gz differ diff --git a/2006Redone Server/data/world/map/488.gz b/2006Redone Server/data/world/map/488.gz new file mode 100644 index 00000000..3fcefcc0 Binary files /dev/null and b/2006Redone Server/data/world/map/488.gz differ diff --git a/2006Redone Server/data/world/map/489.gz b/2006Redone Server/data/world/map/489.gz new file mode 100644 index 00000000..8ba8668e Binary files /dev/null and b/2006Redone Server/data/world/map/489.gz differ diff --git a/2006Redone Server/data/world/map/49.gz b/2006Redone Server/data/world/map/49.gz new file mode 100644 index 00000000..9d7503f0 Binary files /dev/null and b/2006Redone Server/data/world/map/49.gz differ diff --git a/2006Redone Server/data/world/map/490.gz b/2006Redone Server/data/world/map/490.gz new file mode 100644 index 00000000..c464d2f0 Binary files /dev/null and b/2006Redone Server/data/world/map/490.gz differ diff --git a/2006Redone Server/data/world/map/491.gz b/2006Redone Server/data/world/map/491.gz new file mode 100644 index 00000000..43601036 Binary files /dev/null and b/2006Redone Server/data/world/map/491.gz differ diff --git a/2006Redone Server/data/world/map/492.gz b/2006Redone Server/data/world/map/492.gz new file mode 100644 index 00000000..d7f06ffa Binary files /dev/null and b/2006Redone Server/data/world/map/492.gz differ diff --git a/2006Redone Server/data/world/map/493.gz b/2006Redone Server/data/world/map/493.gz new file mode 100644 index 00000000..127bc9f2 Binary files /dev/null and b/2006Redone Server/data/world/map/493.gz differ diff --git a/2006Redone Server/data/world/map/494.gz b/2006Redone Server/data/world/map/494.gz new file mode 100644 index 00000000..a46ef8b7 Binary files /dev/null and b/2006Redone Server/data/world/map/494.gz differ diff --git a/2006Redone Server/data/world/map/495.gz b/2006Redone Server/data/world/map/495.gz new file mode 100644 index 00000000..6b8c1eb7 Binary files /dev/null and b/2006Redone Server/data/world/map/495.gz differ diff --git a/2006Redone Server/data/world/map/496.gz b/2006Redone Server/data/world/map/496.gz new file mode 100644 index 00000000..1161ecb7 Binary files /dev/null and b/2006Redone Server/data/world/map/496.gz differ diff --git a/2006Redone Server/data/world/map/497.gz b/2006Redone Server/data/world/map/497.gz new file mode 100644 index 00000000..b739eef2 Binary files /dev/null and b/2006Redone Server/data/world/map/497.gz differ diff --git a/2006Redone Server/data/world/map/498.gz b/2006Redone Server/data/world/map/498.gz new file mode 100644 index 00000000..912baeea Binary files /dev/null and b/2006Redone Server/data/world/map/498.gz differ diff --git a/2006Redone Server/data/world/map/499.gz b/2006Redone Server/data/world/map/499.gz new file mode 100644 index 00000000..dd4f8787 Binary files /dev/null and b/2006Redone Server/data/world/map/499.gz differ diff --git a/2006Redone Server/data/world/map/50.gz b/2006Redone Server/data/world/map/50.gz new file mode 100644 index 00000000..821ea77c Binary files /dev/null and b/2006Redone Server/data/world/map/50.gz differ diff --git a/2006Redone Server/data/world/map/500.gz b/2006Redone Server/data/world/map/500.gz new file mode 100644 index 00000000..06918daa Binary files /dev/null and b/2006Redone Server/data/world/map/500.gz differ diff --git a/2006Redone Server/data/world/map/501.gz b/2006Redone Server/data/world/map/501.gz new file mode 100644 index 00000000..55b3e022 Binary files /dev/null and b/2006Redone Server/data/world/map/501.gz differ diff --git a/2006Redone Server/data/world/map/502.gz b/2006Redone Server/data/world/map/502.gz new file mode 100644 index 00000000..793b9078 Binary files /dev/null and b/2006Redone Server/data/world/map/502.gz differ diff --git a/2006Redone Server/data/world/map/503.gz b/2006Redone Server/data/world/map/503.gz new file mode 100644 index 00000000..868cb1d6 Binary files /dev/null and b/2006Redone Server/data/world/map/503.gz differ diff --git a/2006Redone Server/data/world/map/504.gz b/2006Redone Server/data/world/map/504.gz new file mode 100644 index 00000000..657405c1 Binary files /dev/null and b/2006Redone Server/data/world/map/504.gz differ diff --git a/2006Redone Server/data/world/map/505.gz b/2006Redone Server/data/world/map/505.gz new file mode 100644 index 00000000..507ffbff Binary files /dev/null and b/2006Redone Server/data/world/map/505.gz differ diff --git a/2006Redone Server/data/world/map/508.gz b/2006Redone Server/data/world/map/508.gz new file mode 100644 index 00000000..e65beb8e Binary files /dev/null and b/2006Redone Server/data/world/map/508.gz differ diff --git a/2006Redone Server/data/world/map/509.gz b/2006Redone Server/data/world/map/509.gz new file mode 100644 index 00000000..9d6c3e9d Binary files /dev/null and b/2006Redone Server/data/world/map/509.gz differ diff --git a/2006Redone Server/data/world/map/51.gz b/2006Redone Server/data/world/map/51.gz new file mode 100644 index 00000000..e0f2f035 Binary files /dev/null and b/2006Redone Server/data/world/map/51.gz differ diff --git a/2006Redone Server/data/world/map/510.gz b/2006Redone Server/data/world/map/510.gz new file mode 100644 index 00000000..976b8992 Binary files /dev/null and b/2006Redone Server/data/world/map/510.gz differ diff --git a/2006Redone Server/data/world/map/511.gz b/2006Redone Server/data/world/map/511.gz new file mode 100644 index 00000000..a199a911 Binary files /dev/null and b/2006Redone Server/data/world/map/511.gz differ diff --git a/2006Redone Server/data/world/map/512.gz b/2006Redone Server/data/world/map/512.gz new file mode 100644 index 00000000..596e5e65 Binary files /dev/null and b/2006Redone Server/data/world/map/512.gz differ diff --git a/2006Redone Server/data/world/map/513.gz b/2006Redone Server/data/world/map/513.gz new file mode 100644 index 00000000..97b4ef7f Binary files /dev/null and b/2006Redone Server/data/world/map/513.gz differ diff --git a/2006Redone Server/data/world/map/514.gz b/2006Redone Server/data/world/map/514.gz new file mode 100644 index 00000000..4ee26ef0 Binary files /dev/null and b/2006Redone Server/data/world/map/514.gz differ diff --git a/2006Redone Server/data/world/map/515.gz b/2006Redone Server/data/world/map/515.gz new file mode 100644 index 00000000..36c8fa12 Binary files /dev/null and b/2006Redone Server/data/world/map/515.gz differ diff --git a/2006Redone Server/data/world/map/516.gz b/2006Redone Server/data/world/map/516.gz new file mode 100644 index 00000000..84badd96 Binary files /dev/null and b/2006Redone Server/data/world/map/516.gz differ diff --git a/2006Redone Server/data/world/map/517.gz b/2006Redone Server/data/world/map/517.gz new file mode 100644 index 00000000..df445a8b Binary files /dev/null and b/2006Redone Server/data/world/map/517.gz differ diff --git a/2006Redone Server/data/world/map/518.gz b/2006Redone Server/data/world/map/518.gz new file mode 100644 index 00000000..88979259 Binary files /dev/null and b/2006Redone Server/data/world/map/518.gz differ diff --git a/2006Redone Server/data/world/map/519.gz b/2006Redone Server/data/world/map/519.gz new file mode 100644 index 00000000..599ce899 Binary files /dev/null and b/2006Redone Server/data/world/map/519.gz differ diff --git a/2006Redone Server/data/world/map/52.gz b/2006Redone Server/data/world/map/52.gz new file mode 100644 index 00000000..51df917f Binary files /dev/null and b/2006Redone Server/data/world/map/52.gz differ diff --git a/2006Redone Server/data/world/map/520.gz b/2006Redone Server/data/world/map/520.gz new file mode 100644 index 00000000..bb2f8a45 Binary files /dev/null and b/2006Redone Server/data/world/map/520.gz differ diff --git a/2006Redone Server/data/world/map/521.gz b/2006Redone Server/data/world/map/521.gz new file mode 100644 index 00000000..b96488e2 Binary files /dev/null and b/2006Redone Server/data/world/map/521.gz differ diff --git a/2006Redone Server/data/world/map/522.gz b/2006Redone Server/data/world/map/522.gz new file mode 100644 index 00000000..f540f320 Binary files /dev/null and b/2006Redone Server/data/world/map/522.gz differ diff --git a/2006Redone Server/data/world/map/523.gz b/2006Redone Server/data/world/map/523.gz new file mode 100644 index 00000000..fb2fef95 Binary files /dev/null and b/2006Redone Server/data/world/map/523.gz differ diff --git a/2006Redone Server/data/world/map/526.gz b/2006Redone Server/data/world/map/526.gz new file mode 100644 index 00000000..6203dd01 Binary files /dev/null and b/2006Redone Server/data/world/map/526.gz differ diff --git a/2006Redone Server/data/world/map/527.gz b/2006Redone Server/data/world/map/527.gz new file mode 100644 index 00000000..6d0a8c9e Binary files /dev/null and b/2006Redone Server/data/world/map/527.gz differ diff --git a/2006Redone Server/data/world/map/528.gz b/2006Redone Server/data/world/map/528.gz new file mode 100644 index 00000000..f83ac622 Binary files /dev/null and b/2006Redone Server/data/world/map/528.gz differ diff --git a/2006Redone Server/data/world/map/529.gz b/2006Redone Server/data/world/map/529.gz new file mode 100644 index 00000000..70d9168b Binary files /dev/null and b/2006Redone Server/data/world/map/529.gz differ diff --git a/2006Redone Server/data/world/map/53.gz b/2006Redone Server/data/world/map/53.gz new file mode 100644 index 00000000..d8e70030 Binary files /dev/null and b/2006Redone Server/data/world/map/53.gz differ diff --git a/2006Redone Server/data/world/map/530.gz b/2006Redone Server/data/world/map/530.gz new file mode 100644 index 00000000..ee364a04 Binary files /dev/null and b/2006Redone Server/data/world/map/530.gz differ diff --git a/2006Redone Server/data/world/map/531.gz b/2006Redone Server/data/world/map/531.gz new file mode 100644 index 00000000..5841c834 Binary files /dev/null and b/2006Redone Server/data/world/map/531.gz differ diff --git a/2006Redone Server/data/world/map/532.gz b/2006Redone Server/data/world/map/532.gz new file mode 100644 index 00000000..57b1f938 Binary files /dev/null and b/2006Redone Server/data/world/map/532.gz differ diff --git a/2006Redone Server/data/world/map/533.gz b/2006Redone Server/data/world/map/533.gz new file mode 100644 index 00000000..d75acb23 Binary files /dev/null and b/2006Redone Server/data/world/map/533.gz differ diff --git a/2006Redone Server/data/world/map/534.gz b/2006Redone Server/data/world/map/534.gz new file mode 100644 index 00000000..4bf58e59 Binary files /dev/null and b/2006Redone Server/data/world/map/534.gz differ diff --git a/2006Redone Server/data/world/map/535.gz b/2006Redone Server/data/world/map/535.gz new file mode 100644 index 00000000..7454083b Binary files /dev/null and b/2006Redone Server/data/world/map/535.gz differ diff --git a/2006Redone Server/data/world/map/536.gz b/2006Redone Server/data/world/map/536.gz new file mode 100644 index 00000000..5caa0e3d Binary files /dev/null and b/2006Redone Server/data/world/map/536.gz differ diff --git a/2006Redone Server/data/world/map/537.gz b/2006Redone Server/data/world/map/537.gz new file mode 100644 index 00000000..8fc91e5f Binary files /dev/null and b/2006Redone Server/data/world/map/537.gz differ diff --git a/2006Redone Server/data/world/map/538.gz b/2006Redone Server/data/world/map/538.gz new file mode 100644 index 00000000..6237489f Binary files /dev/null and b/2006Redone Server/data/world/map/538.gz differ diff --git a/2006Redone Server/data/world/map/539.gz b/2006Redone Server/data/world/map/539.gz new file mode 100644 index 00000000..38941588 Binary files /dev/null and b/2006Redone Server/data/world/map/539.gz differ diff --git a/2006Redone Server/data/world/map/54.gz b/2006Redone Server/data/world/map/54.gz new file mode 100644 index 00000000..75eabc9b Binary files /dev/null and b/2006Redone Server/data/world/map/54.gz differ diff --git a/2006Redone Server/data/world/map/540.gz b/2006Redone Server/data/world/map/540.gz new file mode 100644 index 00000000..2f34760d Binary files /dev/null and b/2006Redone Server/data/world/map/540.gz differ diff --git a/2006Redone Server/data/world/map/541.gz b/2006Redone Server/data/world/map/541.gz new file mode 100644 index 00000000..bfdd8bae Binary files /dev/null and b/2006Redone Server/data/world/map/541.gz differ diff --git a/2006Redone Server/data/world/map/542.gz b/2006Redone Server/data/world/map/542.gz new file mode 100644 index 00000000..afcecc3c Binary files /dev/null and b/2006Redone Server/data/world/map/542.gz differ diff --git a/2006Redone Server/data/world/map/543.gz b/2006Redone Server/data/world/map/543.gz new file mode 100644 index 00000000..f472c8d2 Binary files /dev/null and b/2006Redone Server/data/world/map/543.gz differ diff --git a/2006Redone Server/data/world/map/544.gz b/2006Redone Server/data/world/map/544.gz new file mode 100644 index 00000000..ede07baa Binary files /dev/null and b/2006Redone Server/data/world/map/544.gz differ diff --git a/2006Redone Server/data/world/map/545.gz b/2006Redone Server/data/world/map/545.gz new file mode 100644 index 00000000..431ad8e5 Binary files /dev/null and b/2006Redone Server/data/world/map/545.gz differ diff --git a/2006Redone Server/data/world/map/546.gz b/2006Redone Server/data/world/map/546.gz new file mode 100644 index 00000000..3d0a455e Binary files /dev/null and b/2006Redone Server/data/world/map/546.gz differ diff --git a/2006Redone Server/data/world/map/547.gz b/2006Redone Server/data/world/map/547.gz new file mode 100644 index 00000000..6fe3bd14 Binary files /dev/null and b/2006Redone Server/data/world/map/547.gz differ diff --git a/2006Redone Server/data/world/map/548.gz b/2006Redone Server/data/world/map/548.gz new file mode 100644 index 00000000..e69ce449 Binary files /dev/null and b/2006Redone Server/data/world/map/548.gz differ diff --git a/2006Redone Server/data/world/map/549.gz b/2006Redone Server/data/world/map/549.gz new file mode 100644 index 00000000..2346acfd Binary files /dev/null and b/2006Redone Server/data/world/map/549.gz differ diff --git a/2006Redone Server/data/world/map/55.gz b/2006Redone Server/data/world/map/55.gz new file mode 100644 index 00000000..a1e71183 Binary files /dev/null and b/2006Redone Server/data/world/map/55.gz differ diff --git a/2006Redone Server/data/world/map/550.gz b/2006Redone Server/data/world/map/550.gz new file mode 100644 index 00000000..0992a5c1 Binary files /dev/null and b/2006Redone Server/data/world/map/550.gz differ diff --git a/2006Redone Server/data/world/map/551.gz b/2006Redone Server/data/world/map/551.gz new file mode 100644 index 00000000..73aac6af Binary files /dev/null and b/2006Redone Server/data/world/map/551.gz differ diff --git a/2006Redone Server/data/world/map/552.gz b/2006Redone Server/data/world/map/552.gz new file mode 100644 index 00000000..4ccbd80b Binary files /dev/null and b/2006Redone Server/data/world/map/552.gz differ diff --git a/2006Redone Server/data/world/map/553.gz b/2006Redone Server/data/world/map/553.gz new file mode 100644 index 00000000..a459b1c1 Binary files /dev/null and b/2006Redone Server/data/world/map/553.gz differ diff --git a/2006Redone Server/data/world/map/554.gz b/2006Redone Server/data/world/map/554.gz new file mode 100644 index 00000000..ab1be32d Binary files /dev/null and b/2006Redone Server/data/world/map/554.gz differ diff --git a/2006Redone Server/data/world/map/555.gz b/2006Redone Server/data/world/map/555.gz new file mode 100644 index 00000000..fac0a271 Binary files /dev/null and b/2006Redone Server/data/world/map/555.gz differ diff --git a/2006Redone Server/data/world/map/556.gz b/2006Redone Server/data/world/map/556.gz new file mode 100644 index 00000000..4f04aeb8 Binary files /dev/null and b/2006Redone Server/data/world/map/556.gz differ diff --git a/2006Redone Server/data/world/map/557.gz b/2006Redone Server/data/world/map/557.gz new file mode 100644 index 00000000..558ff274 Binary files /dev/null and b/2006Redone Server/data/world/map/557.gz differ diff --git a/2006Redone Server/data/world/map/558.gz b/2006Redone Server/data/world/map/558.gz new file mode 100644 index 00000000..2cb85db2 Binary files /dev/null and b/2006Redone Server/data/world/map/558.gz differ diff --git a/2006Redone Server/data/world/map/559.gz b/2006Redone Server/data/world/map/559.gz new file mode 100644 index 00000000..a043aa3d Binary files /dev/null and b/2006Redone Server/data/world/map/559.gz differ diff --git a/2006Redone Server/data/world/map/56.gz b/2006Redone Server/data/world/map/56.gz new file mode 100644 index 00000000..92bc9de0 Binary files /dev/null and b/2006Redone Server/data/world/map/56.gz differ diff --git a/2006Redone Server/data/world/map/560.gz b/2006Redone Server/data/world/map/560.gz new file mode 100644 index 00000000..bf0002d5 Binary files /dev/null and b/2006Redone Server/data/world/map/560.gz differ diff --git a/2006Redone Server/data/world/map/561.gz b/2006Redone Server/data/world/map/561.gz new file mode 100644 index 00000000..db77bce1 Binary files /dev/null and b/2006Redone Server/data/world/map/561.gz differ diff --git a/2006Redone Server/data/world/map/562.gz b/2006Redone Server/data/world/map/562.gz new file mode 100644 index 00000000..68e536dc Binary files /dev/null and b/2006Redone Server/data/world/map/562.gz differ diff --git a/2006Redone Server/data/world/map/563.gz b/2006Redone Server/data/world/map/563.gz new file mode 100644 index 00000000..b23682b0 Binary files /dev/null and b/2006Redone Server/data/world/map/563.gz differ diff --git a/2006Redone Server/data/world/map/564.gz b/2006Redone Server/data/world/map/564.gz new file mode 100644 index 00000000..344c8740 Binary files /dev/null and b/2006Redone Server/data/world/map/564.gz differ diff --git a/2006Redone Server/data/world/map/565.gz b/2006Redone Server/data/world/map/565.gz new file mode 100644 index 00000000..0c7e601c Binary files /dev/null and b/2006Redone Server/data/world/map/565.gz differ diff --git a/2006Redone Server/data/world/map/566.gz b/2006Redone Server/data/world/map/566.gz new file mode 100644 index 00000000..d42312d1 Binary files /dev/null and b/2006Redone Server/data/world/map/566.gz differ diff --git a/2006Redone Server/data/world/map/567.gz b/2006Redone Server/data/world/map/567.gz new file mode 100644 index 00000000..0f8e29f9 Binary files /dev/null and b/2006Redone Server/data/world/map/567.gz differ diff --git a/2006Redone Server/data/world/map/568.gz b/2006Redone Server/data/world/map/568.gz new file mode 100644 index 00000000..a52ff5f2 Binary files /dev/null and b/2006Redone Server/data/world/map/568.gz differ diff --git a/2006Redone Server/data/world/map/569.gz b/2006Redone Server/data/world/map/569.gz new file mode 100644 index 00000000..25dd3d03 Binary files /dev/null and b/2006Redone Server/data/world/map/569.gz differ diff --git a/2006Redone Server/data/world/map/57.gz b/2006Redone Server/data/world/map/57.gz new file mode 100644 index 00000000..b990bfd4 Binary files /dev/null and b/2006Redone Server/data/world/map/57.gz differ diff --git a/2006Redone Server/data/world/map/570.gz b/2006Redone Server/data/world/map/570.gz new file mode 100644 index 00000000..23ea0abf Binary files /dev/null and b/2006Redone Server/data/world/map/570.gz differ diff --git a/2006Redone Server/data/world/map/571.gz b/2006Redone Server/data/world/map/571.gz new file mode 100644 index 00000000..a015b755 Binary files /dev/null and b/2006Redone Server/data/world/map/571.gz differ diff --git a/2006Redone Server/data/world/map/572.gz b/2006Redone Server/data/world/map/572.gz new file mode 100644 index 00000000..f35cb610 Binary files /dev/null and b/2006Redone Server/data/world/map/572.gz differ diff --git a/2006Redone Server/data/world/map/573.gz b/2006Redone Server/data/world/map/573.gz new file mode 100644 index 00000000..38557473 Binary files /dev/null and b/2006Redone Server/data/world/map/573.gz differ diff --git a/2006Redone Server/data/world/map/574.gz b/2006Redone Server/data/world/map/574.gz new file mode 100644 index 00000000..79b56907 Binary files /dev/null and b/2006Redone Server/data/world/map/574.gz differ diff --git a/2006Redone Server/data/world/map/575.gz b/2006Redone Server/data/world/map/575.gz new file mode 100644 index 00000000..42c08b6c Binary files /dev/null and b/2006Redone Server/data/world/map/575.gz differ diff --git a/2006Redone Server/data/world/map/576.gz b/2006Redone Server/data/world/map/576.gz new file mode 100644 index 00000000..4f8ef307 Binary files /dev/null and b/2006Redone Server/data/world/map/576.gz differ diff --git a/2006Redone Server/data/world/map/577.gz b/2006Redone Server/data/world/map/577.gz new file mode 100644 index 00000000..42aadb97 Binary files /dev/null and b/2006Redone Server/data/world/map/577.gz differ diff --git a/2006Redone Server/data/world/map/578.gz b/2006Redone Server/data/world/map/578.gz new file mode 100644 index 00000000..3c2ab28e Binary files /dev/null and b/2006Redone Server/data/world/map/578.gz differ diff --git a/2006Redone Server/data/world/map/579.gz b/2006Redone Server/data/world/map/579.gz new file mode 100644 index 00000000..6ba0f73f Binary files /dev/null and b/2006Redone Server/data/world/map/579.gz differ diff --git a/2006Redone Server/data/world/map/58.gz b/2006Redone Server/data/world/map/58.gz new file mode 100644 index 00000000..3c370054 Binary files /dev/null and b/2006Redone Server/data/world/map/58.gz differ diff --git a/2006Redone Server/data/world/map/580.gz b/2006Redone Server/data/world/map/580.gz new file mode 100644 index 00000000..d091c327 Binary files /dev/null and b/2006Redone Server/data/world/map/580.gz differ diff --git a/2006Redone Server/data/world/map/581.gz b/2006Redone Server/data/world/map/581.gz new file mode 100644 index 00000000..65eb76a0 Binary files /dev/null and b/2006Redone Server/data/world/map/581.gz differ diff --git a/2006Redone Server/data/world/map/582.gz b/2006Redone Server/data/world/map/582.gz new file mode 100644 index 00000000..7e255fc7 Binary files /dev/null and b/2006Redone Server/data/world/map/582.gz differ diff --git a/2006Redone Server/data/world/map/583.gz b/2006Redone Server/data/world/map/583.gz new file mode 100644 index 00000000..57644dda Binary files /dev/null and b/2006Redone Server/data/world/map/583.gz differ diff --git a/2006Redone Server/data/world/map/584.gz b/2006Redone Server/data/world/map/584.gz new file mode 100644 index 00000000..9da42e66 Binary files /dev/null and b/2006Redone Server/data/world/map/584.gz differ diff --git a/2006Redone Server/data/world/map/585.gz b/2006Redone Server/data/world/map/585.gz new file mode 100644 index 00000000..5838f7af Binary files /dev/null and b/2006Redone Server/data/world/map/585.gz differ diff --git a/2006Redone Server/data/world/map/586.gz b/2006Redone Server/data/world/map/586.gz new file mode 100644 index 00000000..3c1665a9 Binary files /dev/null and b/2006Redone Server/data/world/map/586.gz differ diff --git a/2006Redone Server/data/world/map/587.gz b/2006Redone Server/data/world/map/587.gz new file mode 100644 index 00000000..a72d3e0e Binary files /dev/null and b/2006Redone Server/data/world/map/587.gz differ diff --git a/2006Redone Server/data/world/map/588.gz b/2006Redone Server/data/world/map/588.gz new file mode 100644 index 00000000..c8a38ad6 Binary files /dev/null and b/2006Redone Server/data/world/map/588.gz differ diff --git a/2006Redone Server/data/world/map/589.gz b/2006Redone Server/data/world/map/589.gz new file mode 100644 index 00000000..6d6b63a4 Binary files /dev/null and b/2006Redone Server/data/world/map/589.gz differ diff --git a/2006Redone Server/data/world/map/59.gz b/2006Redone Server/data/world/map/59.gz new file mode 100644 index 00000000..62496b00 Binary files /dev/null and b/2006Redone Server/data/world/map/59.gz differ diff --git a/2006Redone Server/data/world/map/590.gz b/2006Redone Server/data/world/map/590.gz new file mode 100644 index 00000000..c56e9888 Binary files /dev/null and b/2006Redone Server/data/world/map/590.gz differ diff --git a/2006Redone Server/data/world/map/591.gz b/2006Redone Server/data/world/map/591.gz new file mode 100644 index 00000000..d920a2da Binary files /dev/null and b/2006Redone Server/data/world/map/591.gz differ diff --git a/2006Redone Server/data/world/map/592.gz b/2006Redone Server/data/world/map/592.gz new file mode 100644 index 00000000..ef54ab5a Binary files /dev/null and b/2006Redone Server/data/world/map/592.gz differ diff --git a/2006Redone Server/data/world/map/593.gz b/2006Redone Server/data/world/map/593.gz new file mode 100644 index 00000000..1a405146 Binary files /dev/null and b/2006Redone Server/data/world/map/593.gz differ diff --git a/2006Redone Server/data/world/map/594.gz b/2006Redone Server/data/world/map/594.gz new file mode 100644 index 00000000..26146f05 Binary files /dev/null and b/2006Redone Server/data/world/map/594.gz differ diff --git a/2006Redone Server/data/world/map/595.gz b/2006Redone Server/data/world/map/595.gz new file mode 100644 index 00000000..c49d5022 Binary files /dev/null and b/2006Redone Server/data/world/map/595.gz differ diff --git a/2006Redone Server/data/world/map/596.gz b/2006Redone Server/data/world/map/596.gz new file mode 100644 index 00000000..e409606c Binary files /dev/null and b/2006Redone Server/data/world/map/596.gz differ diff --git a/2006Redone Server/data/world/map/597.gz b/2006Redone Server/data/world/map/597.gz new file mode 100644 index 00000000..5a288cdc Binary files /dev/null and b/2006Redone Server/data/world/map/597.gz differ diff --git a/2006Redone Server/data/world/map/598.gz b/2006Redone Server/data/world/map/598.gz new file mode 100644 index 00000000..1627ad1f Binary files /dev/null and b/2006Redone Server/data/world/map/598.gz differ diff --git a/2006Redone Server/data/world/map/599.gz b/2006Redone Server/data/world/map/599.gz new file mode 100644 index 00000000..fb5a8147 Binary files /dev/null and b/2006Redone Server/data/world/map/599.gz differ diff --git a/2006Redone Server/data/world/map/6.gz b/2006Redone Server/data/world/map/6.gz new file mode 100644 index 00000000..dfa4f591 Binary files /dev/null and b/2006Redone Server/data/world/map/6.gz differ diff --git a/2006Redone Server/data/world/map/60.gz b/2006Redone Server/data/world/map/60.gz new file mode 100644 index 00000000..c9bf58d5 Binary files /dev/null and b/2006Redone Server/data/world/map/60.gz differ diff --git a/2006Redone Server/data/world/map/600.gz b/2006Redone Server/data/world/map/600.gz new file mode 100644 index 00000000..c94312e5 Binary files /dev/null and b/2006Redone Server/data/world/map/600.gz differ diff --git a/2006Redone Server/data/world/map/601.gz b/2006Redone Server/data/world/map/601.gz new file mode 100644 index 00000000..5357aced Binary files /dev/null and b/2006Redone Server/data/world/map/601.gz differ diff --git a/2006Redone Server/data/world/map/602.gz b/2006Redone Server/data/world/map/602.gz new file mode 100644 index 00000000..7fe99726 Binary files /dev/null and b/2006Redone Server/data/world/map/602.gz differ diff --git a/2006Redone Server/data/world/map/603.gz b/2006Redone Server/data/world/map/603.gz new file mode 100644 index 00000000..614cb70a Binary files /dev/null and b/2006Redone Server/data/world/map/603.gz differ diff --git a/2006Redone Server/data/world/map/604.gz b/2006Redone Server/data/world/map/604.gz new file mode 100644 index 00000000..9366d476 Binary files /dev/null and b/2006Redone Server/data/world/map/604.gz differ diff --git a/2006Redone Server/data/world/map/605.gz b/2006Redone Server/data/world/map/605.gz new file mode 100644 index 00000000..7d77c371 Binary files /dev/null and b/2006Redone Server/data/world/map/605.gz differ diff --git a/2006Redone Server/data/world/map/606.gz b/2006Redone Server/data/world/map/606.gz new file mode 100644 index 00000000..b3229f60 Binary files /dev/null and b/2006Redone Server/data/world/map/606.gz differ diff --git a/2006Redone Server/data/world/map/607.gz b/2006Redone Server/data/world/map/607.gz new file mode 100644 index 00000000..46d8a03d Binary files /dev/null and b/2006Redone Server/data/world/map/607.gz differ diff --git a/2006Redone Server/data/world/map/608.gz b/2006Redone Server/data/world/map/608.gz new file mode 100644 index 00000000..6cf102de Binary files /dev/null and b/2006Redone Server/data/world/map/608.gz differ diff --git a/2006Redone Server/data/world/map/609.gz b/2006Redone Server/data/world/map/609.gz new file mode 100644 index 00000000..4e2d106e Binary files /dev/null and b/2006Redone Server/data/world/map/609.gz differ diff --git a/2006Redone Server/data/world/map/61.gz b/2006Redone Server/data/world/map/61.gz new file mode 100644 index 00000000..b943b942 Binary files /dev/null and b/2006Redone Server/data/world/map/61.gz differ diff --git a/2006Redone Server/data/world/map/610.gz b/2006Redone Server/data/world/map/610.gz new file mode 100644 index 00000000..7ab63bf8 Binary files /dev/null and b/2006Redone Server/data/world/map/610.gz differ diff --git a/2006Redone Server/data/world/map/611.gz b/2006Redone Server/data/world/map/611.gz new file mode 100644 index 00000000..271e761d Binary files /dev/null and b/2006Redone Server/data/world/map/611.gz differ diff --git a/2006Redone Server/data/world/map/612.gz b/2006Redone Server/data/world/map/612.gz new file mode 100644 index 00000000..be19282a Binary files /dev/null and b/2006Redone Server/data/world/map/612.gz differ diff --git a/2006Redone Server/data/world/map/613.gz b/2006Redone Server/data/world/map/613.gz new file mode 100644 index 00000000..803d98ba Binary files /dev/null and b/2006Redone Server/data/world/map/613.gz differ diff --git a/2006Redone Server/data/world/map/614.gz b/2006Redone Server/data/world/map/614.gz new file mode 100644 index 00000000..a9fb181e Binary files /dev/null and b/2006Redone Server/data/world/map/614.gz differ diff --git a/2006Redone Server/data/world/map/615.gz b/2006Redone Server/data/world/map/615.gz new file mode 100644 index 00000000..4562d4ac Binary files /dev/null and b/2006Redone Server/data/world/map/615.gz differ diff --git a/2006Redone Server/data/world/map/616.gz b/2006Redone Server/data/world/map/616.gz new file mode 100644 index 00000000..081837c2 Binary files /dev/null and b/2006Redone Server/data/world/map/616.gz differ diff --git a/2006Redone Server/data/world/map/617.gz b/2006Redone Server/data/world/map/617.gz new file mode 100644 index 00000000..1500f439 Binary files /dev/null and b/2006Redone Server/data/world/map/617.gz differ diff --git a/2006Redone Server/data/world/map/618.gz b/2006Redone Server/data/world/map/618.gz new file mode 100644 index 00000000..366f2b9c Binary files /dev/null and b/2006Redone Server/data/world/map/618.gz differ diff --git a/2006Redone Server/data/world/map/619.gz b/2006Redone Server/data/world/map/619.gz new file mode 100644 index 00000000..358c6703 Binary files /dev/null and b/2006Redone Server/data/world/map/619.gz differ diff --git a/2006Redone Server/data/world/map/62.gz b/2006Redone Server/data/world/map/62.gz new file mode 100644 index 00000000..e020fe8a Binary files /dev/null and b/2006Redone Server/data/world/map/62.gz differ diff --git a/2006Redone Server/data/world/map/620.gz b/2006Redone Server/data/world/map/620.gz new file mode 100644 index 00000000..f7bbe5a5 Binary files /dev/null and b/2006Redone Server/data/world/map/620.gz differ diff --git a/2006Redone Server/data/world/map/621.gz b/2006Redone Server/data/world/map/621.gz new file mode 100644 index 00000000..de157b5d Binary files /dev/null and b/2006Redone Server/data/world/map/621.gz differ diff --git a/2006Redone Server/data/world/map/622.gz b/2006Redone Server/data/world/map/622.gz new file mode 100644 index 00000000..45599851 Binary files /dev/null and b/2006Redone Server/data/world/map/622.gz differ diff --git a/2006Redone Server/data/world/map/623.gz b/2006Redone Server/data/world/map/623.gz new file mode 100644 index 00000000..c756063f Binary files /dev/null and b/2006Redone Server/data/world/map/623.gz differ diff --git a/2006Redone Server/data/world/map/624.gz b/2006Redone Server/data/world/map/624.gz new file mode 100644 index 00000000..f5ed9beb Binary files /dev/null and b/2006Redone Server/data/world/map/624.gz differ diff --git a/2006Redone Server/data/world/map/625.gz b/2006Redone Server/data/world/map/625.gz new file mode 100644 index 00000000..536ad6f8 Binary files /dev/null and b/2006Redone Server/data/world/map/625.gz differ diff --git a/2006Redone Server/data/world/map/626.gz b/2006Redone Server/data/world/map/626.gz new file mode 100644 index 00000000..7ff628d7 Binary files /dev/null and b/2006Redone Server/data/world/map/626.gz differ diff --git a/2006Redone Server/data/world/map/627.gz b/2006Redone Server/data/world/map/627.gz new file mode 100644 index 00000000..e35777cb Binary files /dev/null and b/2006Redone Server/data/world/map/627.gz differ diff --git a/2006Redone Server/data/world/map/628.gz b/2006Redone Server/data/world/map/628.gz new file mode 100644 index 00000000..f0c2e4b4 Binary files /dev/null and b/2006Redone Server/data/world/map/628.gz differ diff --git a/2006Redone Server/data/world/map/629.gz b/2006Redone Server/data/world/map/629.gz new file mode 100644 index 00000000..f74e5227 Binary files /dev/null and b/2006Redone Server/data/world/map/629.gz differ diff --git a/2006Redone Server/data/world/map/63.gz b/2006Redone Server/data/world/map/63.gz new file mode 100644 index 00000000..4b114b24 Binary files /dev/null and b/2006Redone Server/data/world/map/63.gz differ diff --git a/2006Redone Server/data/world/map/630.gz b/2006Redone Server/data/world/map/630.gz new file mode 100644 index 00000000..983de364 Binary files /dev/null and b/2006Redone Server/data/world/map/630.gz differ diff --git a/2006Redone Server/data/world/map/631.gz b/2006Redone Server/data/world/map/631.gz new file mode 100644 index 00000000..309a6f69 Binary files /dev/null and b/2006Redone Server/data/world/map/631.gz differ diff --git a/2006Redone Server/data/world/map/632.gz b/2006Redone Server/data/world/map/632.gz new file mode 100644 index 00000000..f28ae5d7 Binary files /dev/null and b/2006Redone Server/data/world/map/632.gz differ diff --git a/2006Redone Server/data/world/map/633.gz b/2006Redone Server/data/world/map/633.gz new file mode 100644 index 00000000..b8931ed0 Binary files /dev/null and b/2006Redone Server/data/world/map/633.gz differ diff --git a/2006Redone Server/data/world/map/634.gz b/2006Redone Server/data/world/map/634.gz new file mode 100644 index 00000000..4c006c52 Binary files /dev/null and b/2006Redone Server/data/world/map/634.gz differ diff --git a/2006Redone Server/data/world/map/635.gz b/2006Redone Server/data/world/map/635.gz new file mode 100644 index 00000000..fe1bc056 Binary files /dev/null and b/2006Redone Server/data/world/map/635.gz differ diff --git a/2006Redone Server/data/world/map/636.gz b/2006Redone Server/data/world/map/636.gz new file mode 100644 index 00000000..7d8fd189 Binary files /dev/null and b/2006Redone Server/data/world/map/636.gz differ diff --git a/2006Redone Server/data/world/map/637.gz b/2006Redone Server/data/world/map/637.gz new file mode 100644 index 00000000..4d384070 Binary files /dev/null and b/2006Redone Server/data/world/map/637.gz differ diff --git a/2006Redone Server/data/world/map/638.gz b/2006Redone Server/data/world/map/638.gz new file mode 100644 index 00000000..afcf2d34 Binary files /dev/null and b/2006Redone Server/data/world/map/638.gz differ diff --git a/2006Redone Server/data/world/map/639.gz b/2006Redone Server/data/world/map/639.gz new file mode 100644 index 00000000..8b4fd396 Binary files /dev/null and b/2006Redone Server/data/world/map/639.gz differ diff --git a/2006Redone Server/data/world/map/64.gz b/2006Redone Server/data/world/map/64.gz new file mode 100644 index 00000000..7b46e4f5 Binary files /dev/null and b/2006Redone Server/data/world/map/64.gz differ diff --git a/2006Redone Server/data/world/map/640.gz b/2006Redone Server/data/world/map/640.gz new file mode 100644 index 00000000..4e0dc881 Binary files /dev/null and b/2006Redone Server/data/world/map/640.gz differ diff --git a/2006Redone Server/data/world/map/641.gz b/2006Redone Server/data/world/map/641.gz new file mode 100644 index 00000000..c9e039ff Binary files /dev/null and b/2006Redone Server/data/world/map/641.gz differ diff --git a/2006Redone Server/data/world/map/642.gz b/2006Redone Server/data/world/map/642.gz new file mode 100644 index 00000000..8506626f Binary files /dev/null and b/2006Redone Server/data/world/map/642.gz differ diff --git a/2006Redone Server/data/world/map/643.gz b/2006Redone Server/data/world/map/643.gz new file mode 100644 index 00000000..5bfee614 Binary files /dev/null and b/2006Redone Server/data/world/map/643.gz differ diff --git a/2006Redone Server/data/world/map/644.gz b/2006Redone Server/data/world/map/644.gz new file mode 100644 index 00000000..0722d6ee Binary files /dev/null and b/2006Redone Server/data/world/map/644.gz differ diff --git a/2006Redone Server/data/world/map/645.gz b/2006Redone Server/data/world/map/645.gz new file mode 100644 index 00000000..b1723412 Binary files /dev/null and b/2006Redone Server/data/world/map/645.gz differ diff --git a/2006Redone Server/data/world/map/646.gz b/2006Redone Server/data/world/map/646.gz new file mode 100644 index 00000000..679e2053 Binary files /dev/null and b/2006Redone Server/data/world/map/646.gz differ diff --git a/2006Redone Server/data/world/map/647.gz b/2006Redone Server/data/world/map/647.gz new file mode 100644 index 00000000..82a0639b Binary files /dev/null and b/2006Redone Server/data/world/map/647.gz differ diff --git a/2006Redone Server/data/world/map/648.gz b/2006Redone Server/data/world/map/648.gz new file mode 100644 index 00000000..d5b5ea0c Binary files /dev/null and b/2006Redone Server/data/world/map/648.gz differ diff --git a/2006Redone Server/data/world/map/649.gz b/2006Redone Server/data/world/map/649.gz new file mode 100644 index 00000000..87f19d00 Binary files /dev/null and b/2006Redone Server/data/world/map/649.gz differ diff --git a/2006Redone Server/data/world/map/65.gz b/2006Redone Server/data/world/map/65.gz new file mode 100644 index 00000000..3039e2d3 Binary files /dev/null and b/2006Redone Server/data/world/map/65.gz differ diff --git a/2006Redone Server/data/world/map/650.gz b/2006Redone Server/data/world/map/650.gz new file mode 100644 index 00000000..eebfd9dc Binary files /dev/null and b/2006Redone Server/data/world/map/650.gz differ diff --git a/2006Redone Server/data/world/map/651.gz b/2006Redone Server/data/world/map/651.gz new file mode 100644 index 00000000..7e5fd509 Binary files /dev/null and b/2006Redone Server/data/world/map/651.gz differ diff --git a/2006Redone Server/data/world/map/652.gz b/2006Redone Server/data/world/map/652.gz new file mode 100644 index 00000000..de44070d Binary files /dev/null and b/2006Redone Server/data/world/map/652.gz differ diff --git a/2006Redone Server/data/world/map/653.gz b/2006Redone Server/data/world/map/653.gz new file mode 100644 index 00000000..9d91f0fc Binary files /dev/null and b/2006Redone Server/data/world/map/653.gz differ diff --git a/2006Redone Server/data/world/map/654.gz b/2006Redone Server/data/world/map/654.gz new file mode 100644 index 00000000..03cc06de Binary files /dev/null and b/2006Redone Server/data/world/map/654.gz differ diff --git a/2006Redone Server/data/world/map/655.gz b/2006Redone Server/data/world/map/655.gz new file mode 100644 index 00000000..c3c8589f Binary files /dev/null and b/2006Redone Server/data/world/map/655.gz differ diff --git a/2006Redone Server/data/world/map/656.gz b/2006Redone Server/data/world/map/656.gz new file mode 100644 index 00000000..5adfebb6 Binary files /dev/null and b/2006Redone Server/data/world/map/656.gz differ diff --git a/2006Redone Server/data/world/map/657.gz b/2006Redone Server/data/world/map/657.gz new file mode 100644 index 00000000..d06ab926 Binary files /dev/null and b/2006Redone Server/data/world/map/657.gz differ diff --git a/2006Redone Server/data/world/map/658.gz b/2006Redone Server/data/world/map/658.gz new file mode 100644 index 00000000..8654c0b5 Binary files /dev/null and b/2006Redone Server/data/world/map/658.gz differ diff --git a/2006Redone Server/data/world/map/659.gz b/2006Redone Server/data/world/map/659.gz new file mode 100644 index 00000000..a652087b Binary files /dev/null and b/2006Redone Server/data/world/map/659.gz differ diff --git a/2006Redone Server/data/world/map/66.gz b/2006Redone Server/data/world/map/66.gz new file mode 100644 index 00000000..3b5ee5b6 Binary files /dev/null and b/2006Redone Server/data/world/map/66.gz differ diff --git a/2006Redone Server/data/world/map/660.gz b/2006Redone Server/data/world/map/660.gz new file mode 100644 index 00000000..541b59e4 Binary files /dev/null and b/2006Redone Server/data/world/map/660.gz differ diff --git a/2006Redone Server/data/world/map/661.gz b/2006Redone Server/data/world/map/661.gz new file mode 100644 index 00000000..304963af Binary files /dev/null and b/2006Redone Server/data/world/map/661.gz differ diff --git a/2006Redone Server/data/world/map/662.gz b/2006Redone Server/data/world/map/662.gz new file mode 100644 index 00000000..6f4bdeae Binary files /dev/null and b/2006Redone Server/data/world/map/662.gz differ diff --git a/2006Redone Server/data/world/map/663.gz b/2006Redone Server/data/world/map/663.gz new file mode 100644 index 00000000..fe5599eb Binary files /dev/null and b/2006Redone Server/data/world/map/663.gz differ diff --git a/2006Redone Server/data/world/map/666.gz b/2006Redone Server/data/world/map/666.gz new file mode 100644 index 00000000..4672dcfb Binary files /dev/null and b/2006Redone Server/data/world/map/666.gz differ diff --git a/2006Redone Server/data/world/map/667.gz b/2006Redone Server/data/world/map/667.gz new file mode 100644 index 00000000..186e4271 Binary files /dev/null and b/2006Redone Server/data/world/map/667.gz differ diff --git a/2006Redone Server/data/world/map/668.gz b/2006Redone Server/data/world/map/668.gz new file mode 100644 index 00000000..83dfb3c5 Binary files /dev/null and b/2006Redone Server/data/world/map/668.gz differ diff --git a/2006Redone Server/data/world/map/669.gz b/2006Redone Server/data/world/map/669.gz new file mode 100644 index 00000000..55668d52 Binary files /dev/null and b/2006Redone Server/data/world/map/669.gz differ diff --git a/2006Redone Server/data/world/map/67.gz b/2006Redone Server/data/world/map/67.gz new file mode 100644 index 00000000..ec2859ee Binary files /dev/null and b/2006Redone Server/data/world/map/67.gz differ diff --git a/2006Redone Server/data/world/map/670.gz b/2006Redone Server/data/world/map/670.gz new file mode 100644 index 00000000..6da6ab57 Binary files /dev/null and b/2006Redone Server/data/world/map/670.gz differ diff --git a/2006Redone Server/data/world/map/671.gz b/2006Redone Server/data/world/map/671.gz new file mode 100644 index 00000000..96b60167 Binary files /dev/null and b/2006Redone Server/data/world/map/671.gz differ diff --git a/2006Redone Server/data/world/map/672.gz b/2006Redone Server/data/world/map/672.gz new file mode 100644 index 00000000..50379215 Binary files /dev/null and b/2006Redone Server/data/world/map/672.gz differ diff --git a/2006Redone Server/data/world/map/673.gz b/2006Redone Server/data/world/map/673.gz new file mode 100644 index 00000000..4bbf1d4a Binary files /dev/null and b/2006Redone Server/data/world/map/673.gz differ diff --git a/2006Redone Server/data/world/map/674.gz b/2006Redone Server/data/world/map/674.gz new file mode 100644 index 00000000..56cb40e7 Binary files /dev/null and b/2006Redone Server/data/world/map/674.gz differ diff --git a/2006Redone Server/data/world/map/675.gz b/2006Redone Server/data/world/map/675.gz new file mode 100644 index 00000000..03d3317f Binary files /dev/null and b/2006Redone Server/data/world/map/675.gz differ diff --git a/2006Redone Server/data/world/map/676.gz b/2006Redone Server/data/world/map/676.gz new file mode 100644 index 00000000..653c5098 Binary files /dev/null and b/2006Redone Server/data/world/map/676.gz differ diff --git a/2006Redone Server/data/world/map/677.gz b/2006Redone Server/data/world/map/677.gz new file mode 100644 index 00000000..32d1934f Binary files /dev/null and b/2006Redone Server/data/world/map/677.gz differ diff --git a/2006Redone Server/data/world/map/678.gz b/2006Redone Server/data/world/map/678.gz new file mode 100644 index 00000000..dfb3333c Binary files /dev/null and b/2006Redone Server/data/world/map/678.gz differ diff --git a/2006Redone Server/data/world/map/679.gz b/2006Redone Server/data/world/map/679.gz new file mode 100644 index 00000000..169900c0 Binary files /dev/null and b/2006Redone Server/data/world/map/679.gz differ diff --git a/2006Redone Server/data/world/map/68.gz b/2006Redone Server/data/world/map/68.gz new file mode 100644 index 00000000..62275de4 Binary files /dev/null and b/2006Redone Server/data/world/map/68.gz differ diff --git a/2006Redone Server/data/world/map/680.gz b/2006Redone Server/data/world/map/680.gz new file mode 100644 index 00000000..05988823 Binary files /dev/null and b/2006Redone Server/data/world/map/680.gz differ diff --git a/2006Redone Server/data/world/map/681.gz b/2006Redone Server/data/world/map/681.gz new file mode 100644 index 00000000..e7b0bc11 Binary files /dev/null and b/2006Redone Server/data/world/map/681.gz differ diff --git a/2006Redone Server/data/world/map/682.gz b/2006Redone Server/data/world/map/682.gz new file mode 100644 index 00000000..ee597ada Binary files /dev/null and b/2006Redone Server/data/world/map/682.gz differ diff --git a/2006Redone Server/data/world/map/683.gz b/2006Redone Server/data/world/map/683.gz new file mode 100644 index 00000000..510d4c21 Binary files /dev/null and b/2006Redone Server/data/world/map/683.gz differ diff --git a/2006Redone Server/data/world/map/684.gz b/2006Redone Server/data/world/map/684.gz new file mode 100644 index 00000000..2a27a531 Binary files /dev/null and b/2006Redone Server/data/world/map/684.gz differ diff --git a/2006Redone Server/data/world/map/685.gz b/2006Redone Server/data/world/map/685.gz new file mode 100644 index 00000000..1e5af25e Binary files /dev/null and b/2006Redone Server/data/world/map/685.gz differ diff --git a/2006Redone Server/data/world/map/686.gz b/2006Redone Server/data/world/map/686.gz new file mode 100644 index 00000000..523b7cca Binary files /dev/null and b/2006Redone Server/data/world/map/686.gz differ diff --git a/2006Redone Server/data/world/map/687.gz b/2006Redone Server/data/world/map/687.gz new file mode 100644 index 00000000..95a85eee Binary files /dev/null and b/2006Redone Server/data/world/map/687.gz differ diff --git a/2006Redone Server/data/world/map/688.gz b/2006Redone Server/data/world/map/688.gz new file mode 100644 index 00000000..ca296eb5 Binary files /dev/null and b/2006Redone Server/data/world/map/688.gz differ diff --git a/2006Redone Server/data/world/map/689.gz b/2006Redone Server/data/world/map/689.gz new file mode 100644 index 00000000..a5fa9c02 Binary files /dev/null and b/2006Redone Server/data/world/map/689.gz differ diff --git a/2006Redone Server/data/world/map/69.gz b/2006Redone Server/data/world/map/69.gz new file mode 100644 index 00000000..65c51dd7 Binary files /dev/null and b/2006Redone Server/data/world/map/69.gz differ diff --git a/2006Redone Server/data/world/map/690.gz b/2006Redone Server/data/world/map/690.gz new file mode 100644 index 00000000..990b52e5 Binary files /dev/null and b/2006Redone Server/data/world/map/690.gz differ diff --git a/2006Redone Server/data/world/map/691.gz b/2006Redone Server/data/world/map/691.gz new file mode 100644 index 00000000..63196e64 Binary files /dev/null and b/2006Redone Server/data/world/map/691.gz differ diff --git a/2006Redone Server/data/world/map/692.gz b/2006Redone Server/data/world/map/692.gz new file mode 100644 index 00000000..377d10a5 Binary files /dev/null and b/2006Redone Server/data/world/map/692.gz differ diff --git a/2006Redone Server/data/world/map/693.gz b/2006Redone Server/data/world/map/693.gz new file mode 100644 index 00000000..e914cb3e Binary files /dev/null and b/2006Redone Server/data/world/map/693.gz differ diff --git a/2006Redone Server/data/world/map/694.gz b/2006Redone Server/data/world/map/694.gz new file mode 100644 index 00000000..1d71a5c7 Binary files /dev/null and b/2006Redone Server/data/world/map/694.gz differ diff --git a/2006Redone Server/data/world/map/695.gz b/2006Redone Server/data/world/map/695.gz new file mode 100644 index 00000000..cccc69bf Binary files /dev/null and b/2006Redone Server/data/world/map/695.gz differ diff --git a/2006Redone Server/data/world/map/696.gz b/2006Redone Server/data/world/map/696.gz new file mode 100644 index 00000000..c73518eb Binary files /dev/null and b/2006Redone Server/data/world/map/696.gz differ diff --git a/2006Redone Server/data/world/map/697.gz b/2006Redone Server/data/world/map/697.gz new file mode 100644 index 00000000..4635a029 Binary files /dev/null and b/2006Redone Server/data/world/map/697.gz differ diff --git a/2006Redone Server/data/world/map/698.gz b/2006Redone Server/data/world/map/698.gz new file mode 100644 index 00000000..c5cc6d54 Binary files /dev/null and b/2006Redone Server/data/world/map/698.gz differ diff --git a/2006Redone Server/data/world/map/699.gz b/2006Redone Server/data/world/map/699.gz new file mode 100644 index 00000000..3f045fa2 Binary files /dev/null and b/2006Redone Server/data/world/map/699.gz differ diff --git a/2006Redone Server/data/world/map/7.gz b/2006Redone Server/data/world/map/7.gz new file mode 100644 index 00000000..8e24196d Binary files /dev/null and b/2006Redone Server/data/world/map/7.gz differ diff --git a/2006Redone Server/data/world/map/70.gz b/2006Redone Server/data/world/map/70.gz new file mode 100644 index 00000000..64a14f3d Binary files /dev/null and b/2006Redone Server/data/world/map/70.gz differ diff --git a/2006Redone Server/data/world/map/700.gz b/2006Redone Server/data/world/map/700.gz new file mode 100644 index 00000000..c7ea9b7d Binary files /dev/null and b/2006Redone Server/data/world/map/700.gz differ diff --git a/2006Redone Server/data/world/map/701.gz b/2006Redone Server/data/world/map/701.gz new file mode 100644 index 00000000..9aec4bba Binary files /dev/null and b/2006Redone Server/data/world/map/701.gz differ diff --git a/2006Redone Server/data/world/map/702.gz b/2006Redone Server/data/world/map/702.gz new file mode 100644 index 00000000..392141b3 Binary files /dev/null and b/2006Redone Server/data/world/map/702.gz differ diff --git a/2006Redone Server/data/world/map/703.gz b/2006Redone Server/data/world/map/703.gz new file mode 100644 index 00000000..4241356b Binary files /dev/null and b/2006Redone Server/data/world/map/703.gz differ diff --git a/2006Redone Server/data/world/map/704.gz b/2006Redone Server/data/world/map/704.gz new file mode 100644 index 00000000..5f2d40cf Binary files /dev/null and b/2006Redone Server/data/world/map/704.gz differ diff --git a/2006Redone Server/data/world/map/705.gz b/2006Redone Server/data/world/map/705.gz new file mode 100644 index 00000000..fda94ae3 Binary files /dev/null and b/2006Redone Server/data/world/map/705.gz differ diff --git a/2006Redone Server/data/world/map/706.gz b/2006Redone Server/data/world/map/706.gz new file mode 100644 index 00000000..37e52556 Binary files /dev/null and b/2006Redone Server/data/world/map/706.gz differ diff --git a/2006Redone Server/data/world/map/707.gz b/2006Redone Server/data/world/map/707.gz new file mode 100644 index 00000000..c18a1cf6 Binary files /dev/null and b/2006Redone Server/data/world/map/707.gz differ diff --git a/2006Redone Server/data/world/map/708.gz b/2006Redone Server/data/world/map/708.gz new file mode 100644 index 00000000..08db226a Binary files /dev/null and b/2006Redone Server/data/world/map/708.gz differ diff --git a/2006Redone Server/data/world/map/709.gz b/2006Redone Server/data/world/map/709.gz new file mode 100644 index 00000000..c8fba5a7 Binary files /dev/null and b/2006Redone Server/data/world/map/709.gz differ diff --git a/2006Redone Server/data/world/map/71.gz b/2006Redone Server/data/world/map/71.gz new file mode 100644 index 00000000..efb630d1 Binary files /dev/null and b/2006Redone Server/data/world/map/71.gz differ diff --git a/2006Redone Server/data/world/map/710.gz b/2006Redone Server/data/world/map/710.gz new file mode 100644 index 00000000..804bfac0 Binary files /dev/null and b/2006Redone Server/data/world/map/710.gz differ diff --git a/2006Redone Server/data/world/map/711.gz b/2006Redone Server/data/world/map/711.gz new file mode 100644 index 00000000..422fa8c0 Binary files /dev/null and b/2006Redone Server/data/world/map/711.gz differ diff --git a/2006Redone Server/data/world/map/712.gz b/2006Redone Server/data/world/map/712.gz new file mode 100644 index 00000000..d5338b0b Binary files /dev/null and b/2006Redone Server/data/world/map/712.gz differ diff --git a/2006Redone Server/data/world/map/713.gz b/2006Redone Server/data/world/map/713.gz new file mode 100644 index 00000000..41a9a692 Binary files /dev/null and b/2006Redone Server/data/world/map/713.gz differ diff --git a/2006Redone Server/data/world/map/714.gz b/2006Redone Server/data/world/map/714.gz new file mode 100644 index 00000000..8999452c Binary files /dev/null and b/2006Redone Server/data/world/map/714.gz differ diff --git a/2006Redone Server/data/world/map/715.gz b/2006Redone Server/data/world/map/715.gz new file mode 100644 index 00000000..f6dbd797 Binary files /dev/null and b/2006Redone Server/data/world/map/715.gz differ diff --git a/2006Redone Server/data/world/map/716.gz b/2006Redone Server/data/world/map/716.gz new file mode 100644 index 00000000..f9773bb1 Binary files /dev/null and b/2006Redone Server/data/world/map/716.gz differ diff --git a/2006Redone Server/data/world/map/717.gz b/2006Redone Server/data/world/map/717.gz new file mode 100644 index 00000000..f5b0bcb6 Binary files /dev/null and b/2006Redone Server/data/world/map/717.gz differ diff --git a/2006Redone Server/data/world/map/72.gz b/2006Redone Server/data/world/map/72.gz new file mode 100644 index 00000000..64add34e Binary files /dev/null and b/2006Redone Server/data/world/map/72.gz differ diff --git a/2006Redone Server/data/world/map/720.gz b/2006Redone Server/data/world/map/720.gz new file mode 100644 index 00000000..2877f1c7 Binary files /dev/null and b/2006Redone Server/data/world/map/720.gz differ diff --git a/2006Redone Server/data/world/map/721.gz b/2006Redone Server/data/world/map/721.gz new file mode 100644 index 00000000..7f63fa53 Binary files /dev/null and b/2006Redone Server/data/world/map/721.gz differ diff --git a/2006Redone Server/data/world/map/722.gz b/2006Redone Server/data/world/map/722.gz new file mode 100644 index 00000000..75747707 Binary files /dev/null and b/2006Redone Server/data/world/map/722.gz differ diff --git a/2006Redone Server/data/world/map/723.gz b/2006Redone Server/data/world/map/723.gz new file mode 100644 index 00000000..c5d30309 Binary files /dev/null and b/2006Redone Server/data/world/map/723.gz differ diff --git a/2006Redone Server/data/world/map/724.gz b/2006Redone Server/data/world/map/724.gz new file mode 100644 index 00000000..2e20699c Binary files /dev/null and b/2006Redone Server/data/world/map/724.gz differ diff --git a/2006Redone Server/data/world/map/725.gz b/2006Redone Server/data/world/map/725.gz new file mode 100644 index 00000000..f468f2f5 Binary files /dev/null and b/2006Redone Server/data/world/map/725.gz differ diff --git a/2006Redone Server/data/world/map/726.gz b/2006Redone Server/data/world/map/726.gz new file mode 100644 index 00000000..5e547d1f Binary files /dev/null and b/2006Redone Server/data/world/map/726.gz differ diff --git a/2006Redone Server/data/world/map/727.gz b/2006Redone Server/data/world/map/727.gz new file mode 100644 index 00000000..498c8d42 Binary files /dev/null and b/2006Redone Server/data/world/map/727.gz differ diff --git a/2006Redone Server/data/world/map/728.gz b/2006Redone Server/data/world/map/728.gz new file mode 100644 index 00000000..966a7f00 Binary files /dev/null and b/2006Redone Server/data/world/map/728.gz differ diff --git a/2006Redone Server/data/world/map/729.gz b/2006Redone Server/data/world/map/729.gz new file mode 100644 index 00000000..6a24264f Binary files /dev/null and b/2006Redone Server/data/world/map/729.gz differ diff --git a/2006Redone Server/data/world/map/73.gz b/2006Redone Server/data/world/map/73.gz new file mode 100644 index 00000000..c3c3defc Binary files /dev/null and b/2006Redone Server/data/world/map/73.gz differ diff --git a/2006Redone Server/data/world/map/730.gz b/2006Redone Server/data/world/map/730.gz new file mode 100644 index 00000000..b1383af8 Binary files /dev/null and b/2006Redone Server/data/world/map/730.gz differ diff --git a/2006Redone Server/data/world/map/731.gz b/2006Redone Server/data/world/map/731.gz new file mode 100644 index 00000000..1a8c252d Binary files /dev/null and b/2006Redone Server/data/world/map/731.gz differ diff --git a/2006Redone Server/data/world/map/732.gz b/2006Redone Server/data/world/map/732.gz new file mode 100644 index 00000000..6f55232c Binary files /dev/null and b/2006Redone Server/data/world/map/732.gz differ diff --git a/2006Redone Server/data/world/map/733.gz b/2006Redone Server/data/world/map/733.gz new file mode 100644 index 00000000..d8a1f379 Binary files /dev/null and b/2006Redone Server/data/world/map/733.gz differ diff --git a/2006Redone Server/data/world/map/736.gz b/2006Redone Server/data/world/map/736.gz new file mode 100644 index 00000000..49e89f68 Binary files /dev/null and b/2006Redone Server/data/world/map/736.gz differ diff --git a/2006Redone Server/data/world/map/737.gz b/2006Redone Server/data/world/map/737.gz new file mode 100644 index 00000000..9c23d026 Binary files /dev/null and b/2006Redone Server/data/world/map/737.gz differ diff --git a/2006Redone Server/data/world/map/738.gz b/2006Redone Server/data/world/map/738.gz new file mode 100644 index 00000000..46aff51f Binary files /dev/null and b/2006Redone Server/data/world/map/738.gz differ diff --git a/2006Redone Server/data/world/map/739.gz b/2006Redone Server/data/world/map/739.gz new file mode 100644 index 00000000..2fce99ff Binary files /dev/null and b/2006Redone Server/data/world/map/739.gz differ diff --git a/2006Redone Server/data/world/map/74.gz b/2006Redone Server/data/world/map/74.gz new file mode 100644 index 00000000..88ee875c Binary files /dev/null and b/2006Redone Server/data/world/map/74.gz differ diff --git a/2006Redone Server/data/world/map/740.gz b/2006Redone Server/data/world/map/740.gz new file mode 100644 index 00000000..01bbf746 Binary files /dev/null and b/2006Redone Server/data/world/map/740.gz differ diff --git a/2006Redone Server/data/world/map/741.gz b/2006Redone Server/data/world/map/741.gz new file mode 100644 index 00000000..cade58f7 Binary files /dev/null and b/2006Redone Server/data/world/map/741.gz differ diff --git a/2006Redone Server/data/world/map/742.gz b/2006Redone Server/data/world/map/742.gz new file mode 100644 index 00000000..2172097f Binary files /dev/null and b/2006Redone Server/data/world/map/742.gz differ diff --git a/2006Redone Server/data/world/map/743.gz b/2006Redone Server/data/world/map/743.gz new file mode 100644 index 00000000..0823b922 Binary files /dev/null and b/2006Redone Server/data/world/map/743.gz differ diff --git a/2006Redone Server/data/world/map/744.gz b/2006Redone Server/data/world/map/744.gz new file mode 100644 index 00000000..aac6dc38 Binary files /dev/null and b/2006Redone Server/data/world/map/744.gz differ diff --git a/2006Redone Server/data/world/map/745.gz b/2006Redone Server/data/world/map/745.gz new file mode 100644 index 00000000..f9675a51 Binary files /dev/null and b/2006Redone Server/data/world/map/745.gz differ diff --git a/2006Redone Server/data/world/map/746.gz b/2006Redone Server/data/world/map/746.gz new file mode 100644 index 00000000..3a3084d4 Binary files /dev/null and b/2006Redone Server/data/world/map/746.gz differ diff --git a/2006Redone Server/data/world/map/747.gz b/2006Redone Server/data/world/map/747.gz new file mode 100644 index 00000000..0ae71d6c Binary files /dev/null and b/2006Redone Server/data/world/map/747.gz differ diff --git a/2006Redone Server/data/world/map/748.gz b/2006Redone Server/data/world/map/748.gz new file mode 100644 index 00000000..fb6df00e Binary files /dev/null and b/2006Redone Server/data/world/map/748.gz differ diff --git a/2006Redone Server/data/world/map/749.gz b/2006Redone Server/data/world/map/749.gz new file mode 100644 index 00000000..cb06b93a Binary files /dev/null and b/2006Redone Server/data/world/map/749.gz differ diff --git a/2006Redone Server/data/world/map/75.gz b/2006Redone Server/data/world/map/75.gz new file mode 100644 index 00000000..68f86973 Binary files /dev/null and b/2006Redone Server/data/world/map/75.gz differ diff --git a/2006Redone Server/data/world/map/750.gz b/2006Redone Server/data/world/map/750.gz new file mode 100644 index 00000000..157ef1f5 Binary files /dev/null and b/2006Redone Server/data/world/map/750.gz differ diff --git a/2006Redone Server/data/world/map/751.gz b/2006Redone Server/data/world/map/751.gz new file mode 100644 index 00000000..c98f2814 Binary files /dev/null and b/2006Redone Server/data/world/map/751.gz differ diff --git a/2006Redone Server/data/world/map/752.gz b/2006Redone Server/data/world/map/752.gz new file mode 100644 index 00000000..af22a058 Binary files /dev/null and b/2006Redone Server/data/world/map/752.gz differ diff --git a/2006Redone Server/data/world/map/753.gz b/2006Redone Server/data/world/map/753.gz new file mode 100644 index 00000000..ce9effda Binary files /dev/null and b/2006Redone Server/data/world/map/753.gz differ diff --git a/2006Redone Server/data/world/map/754.gz b/2006Redone Server/data/world/map/754.gz new file mode 100644 index 00000000..2eeaf0df Binary files /dev/null and b/2006Redone Server/data/world/map/754.gz differ diff --git a/2006Redone Server/data/world/map/755.gz b/2006Redone Server/data/world/map/755.gz new file mode 100644 index 00000000..c8c78c1d Binary files /dev/null and b/2006Redone Server/data/world/map/755.gz differ diff --git a/2006Redone Server/data/world/map/756.gz b/2006Redone Server/data/world/map/756.gz new file mode 100644 index 00000000..777e41bf Binary files /dev/null and b/2006Redone Server/data/world/map/756.gz differ diff --git a/2006Redone Server/data/world/map/757.gz b/2006Redone Server/data/world/map/757.gz new file mode 100644 index 00000000..6522cf65 Binary files /dev/null and b/2006Redone Server/data/world/map/757.gz differ diff --git a/2006Redone Server/data/world/map/758.gz b/2006Redone Server/data/world/map/758.gz new file mode 100644 index 00000000..bacba8a3 Binary files /dev/null and b/2006Redone Server/data/world/map/758.gz differ diff --git a/2006Redone Server/data/world/map/759.gz b/2006Redone Server/data/world/map/759.gz new file mode 100644 index 00000000..9c69878e Binary files /dev/null and b/2006Redone Server/data/world/map/759.gz differ diff --git a/2006Redone Server/data/world/map/76.gz b/2006Redone Server/data/world/map/76.gz new file mode 100644 index 00000000..c1877114 Binary files /dev/null and b/2006Redone Server/data/world/map/76.gz differ diff --git a/2006Redone Server/data/world/map/760.gz b/2006Redone Server/data/world/map/760.gz new file mode 100644 index 00000000..67a823e0 Binary files /dev/null and b/2006Redone Server/data/world/map/760.gz differ diff --git a/2006Redone Server/data/world/map/761.gz b/2006Redone Server/data/world/map/761.gz new file mode 100644 index 00000000..0e482fa2 Binary files /dev/null and b/2006Redone Server/data/world/map/761.gz differ diff --git a/2006Redone Server/data/world/map/762.gz b/2006Redone Server/data/world/map/762.gz new file mode 100644 index 00000000..197ae5ea Binary files /dev/null and b/2006Redone Server/data/world/map/762.gz differ diff --git a/2006Redone Server/data/world/map/763.gz b/2006Redone Server/data/world/map/763.gz new file mode 100644 index 00000000..be8f9fa0 Binary files /dev/null and b/2006Redone Server/data/world/map/763.gz differ diff --git a/2006Redone Server/data/world/map/764.gz b/2006Redone Server/data/world/map/764.gz new file mode 100644 index 00000000..54e843c6 Binary files /dev/null and b/2006Redone Server/data/world/map/764.gz differ diff --git a/2006Redone Server/data/world/map/765.gz b/2006Redone Server/data/world/map/765.gz new file mode 100644 index 00000000..95f76a34 Binary files /dev/null and b/2006Redone Server/data/world/map/765.gz differ diff --git a/2006Redone Server/data/world/map/766.gz b/2006Redone Server/data/world/map/766.gz new file mode 100644 index 00000000..4cad0490 Binary files /dev/null and b/2006Redone Server/data/world/map/766.gz differ diff --git a/2006Redone Server/data/world/map/767.gz b/2006Redone Server/data/world/map/767.gz new file mode 100644 index 00000000..085e9d7e Binary files /dev/null and b/2006Redone Server/data/world/map/767.gz differ diff --git a/2006Redone Server/data/world/map/768.gz b/2006Redone Server/data/world/map/768.gz new file mode 100644 index 00000000..6c65d913 Binary files /dev/null and b/2006Redone Server/data/world/map/768.gz differ diff --git a/2006Redone Server/data/world/map/769.gz b/2006Redone Server/data/world/map/769.gz new file mode 100644 index 00000000..43471c1c Binary files /dev/null and b/2006Redone Server/data/world/map/769.gz differ diff --git a/2006Redone Server/data/world/map/77.gz b/2006Redone Server/data/world/map/77.gz new file mode 100644 index 00000000..e561393c Binary files /dev/null and b/2006Redone Server/data/world/map/77.gz differ diff --git a/2006Redone Server/data/world/map/770.gz b/2006Redone Server/data/world/map/770.gz new file mode 100644 index 00000000..ddbfd029 Binary files /dev/null and b/2006Redone Server/data/world/map/770.gz differ diff --git a/2006Redone Server/data/world/map/771.gz b/2006Redone Server/data/world/map/771.gz new file mode 100644 index 00000000..a24b9510 Binary files /dev/null and b/2006Redone Server/data/world/map/771.gz differ diff --git a/2006Redone Server/data/world/map/772.gz b/2006Redone Server/data/world/map/772.gz new file mode 100644 index 00000000..b85c9b86 Binary files /dev/null and b/2006Redone Server/data/world/map/772.gz differ diff --git a/2006Redone Server/data/world/map/773.gz b/2006Redone Server/data/world/map/773.gz new file mode 100644 index 00000000..a616ddf6 Binary files /dev/null and b/2006Redone Server/data/world/map/773.gz differ diff --git a/2006Redone Server/data/world/map/774.gz b/2006Redone Server/data/world/map/774.gz new file mode 100644 index 00000000..ac354cf8 Binary files /dev/null and b/2006Redone Server/data/world/map/774.gz differ diff --git a/2006Redone Server/data/world/map/775.gz b/2006Redone Server/data/world/map/775.gz new file mode 100644 index 00000000..65d3099f Binary files /dev/null and b/2006Redone Server/data/world/map/775.gz differ diff --git a/2006Redone Server/data/world/map/776.gz b/2006Redone Server/data/world/map/776.gz new file mode 100644 index 00000000..009005f5 Binary files /dev/null and b/2006Redone Server/data/world/map/776.gz differ diff --git a/2006Redone Server/data/world/map/777.gz b/2006Redone Server/data/world/map/777.gz new file mode 100644 index 00000000..772fd7d4 Binary files /dev/null and b/2006Redone Server/data/world/map/777.gz differ diff --git a/2006Redone Server/data/world/map/78.gz b/2006Redone Server/data/world/map/78.gz new file mode 100644 index 00000000..ae2ab9d0 Binary files /dev/null and b/2006Redone Server/data/world/map/78.gz differ diff --git a/2006Redone Server/data/world/map/780.gz b/2006Redone Server/data/world/map/780.gz new file mode 100644 index 00000000..e604ec0f Binary files /dev/null and b/2006Redone Server/data/world/map/780.gz differ diff --git a/2006Redone Server/data/world/map/781.gz b/2006Redone Server/data/world/map/781.gz new file mode 100644 index 00000000..3a51d3e0 Binary files /dev/null and b/2006Redone Server/data/world/map/781.gz differ diff --git a/2006Redone Server/data/world/map/782.gz b/2006Redone Server/data/world/map/782.gz new file mode 100644 index 00000000..42eeca00 Binary files /dev/null and b/2006Redone Server/data/world/map/782.gz differ diff --git a/2006Redone Server/data/world/map/783.gz b/2006Redone Server/data/world/map/783.gz new file mode 100644 index 00000000..bf1de9b1 Binary files /dev/null and b/2006Redone Server/data/world/map/783.gz differ diff --git a/2006Redone Server/data/world/map/784.gz b/2006Redone Server/data/world/map/784.gz new file mode 100644 index 00000000..d680b6ff Binary files /dev/null and b/2006Redone Server/data/world/map/784.gz differ diff --git a/2006Redone Server/data/world/map/785.gz b/2006Redone Server/data/world/map/785.gz new file mode 100644 index 00000000..21f94116 Binary files /dev/null and b/2006Redone Server/data/world/map/785.gz differ diff --git a/2006Redone Server/data/world/map/786.gz b/2006Redone Server/data/world/map/786.gz new file mode 100644 index 00000000..9ae5c51f Binary files /dev/null and b/2006Redone Server/data/world/map/786.gz differ diff --git a/2006Redone Server/data/world/map/787.gz b/2006Redone Server/data/world/map/787.gz new file mode 100644 index 00000000..a12875d1 Binary files /dev/null and b/2006Redone Server/data/world/map/787.gz differ diff --git a/2006Redone Server/data/world/map/788.gz b/2006Redone Server/data/world/map/788.gz new file mode 100644 index 00000000..57b6078a Binary files /dev/null and b/2006Redone Server/data/world/map/788.gz differ diff --git a/2006Redone Server/data/world/map/789.gz b/2006Redone Server/data/world/map/789.gz new file mode 100644 index 00000000..7279c5e7 Binary files /dev/null and b/2006Redone Server/data/world/map/789.gz differ diff --git a/2006Redone Server/data/world/map/79.gz b/2006Redone Server/data/world/map/79.gz new file mode 100644 index 00000000..42e24d54 Binary files /dev/null and b/2006Redone Server/data/world/map/79.gz differ diff --git a/2006Redone Server/data/world/map/790.gz b/2006Redone Server/data/world/map/790.gz new file mode 100644 index 00000000..57c9868b Binary files /dev/null and b/2006Redone Server/data/world/map/790.gz differ diff --git a/2006Redone Server/data/world/map/791.gz b/2006Redone Server/data/world/map/791.gz new file mode 100644 index 00000000..7cdbe237 Binary files /dev/null and b/2006Redone Server/data/world/map/791.gz differ diff --git a/2006Redone Server/data/world/map/792.gz b/2006Redone Server/data/world/map/792.gz new file mode 100644 index 00000000..e870b24f Binary files /dev/null and b/2006Redone Server/data/world/map/792.gz differ diff --git a/2006Redone Server/data/world/map/793.gz b/2006Redone Server/data/world/map/793.gz new file mode 100644 index 00000000..89c2440d Binary files /dev/null and b/2006Redone Server/data/world/map/793.gz differ diff --git a/2006Redone Server/data/world/map/794.gz b/2006Redone Server/data/world/map/794.gz new file mode 100644 index 00000000..33ba3ecb Binary files /dev/null and b/2006Redone Server/data/world/map/794.gz differ diff --git a/2006Redone Server/data/world/map/795.gz b/2006Redone Server/data/world/map/795.gz new file mode 100644 index 00000000..65faded1 Binary files /dev/null and b/2006Redone Server/data/world/map/795.gz differ diff --git a/2006Redone Server/data/world/map/796.gz b/2006Redone Server/data/world/map/796.gz new file mode 100644 index 00000000..eba52f83 Binary files /dev/null and b/2006Redone Server/data/world/map/796.gz differ diff --git a/2006Redone Server/data/world/map/797.gz b/2006Redone Server/data/world/map/797.gz new file mode 100644 index 00000000..9737e8b3 Binary files /dev/null and b/2006Redone Server/data/world/map/797.gz differ diff --git a/2006Redone Server/data/world/map/798.gz b/2006Redone Server/data/world/map/798.gz new file mode 100644 index 00000000..2e8cdd8a Binary files /dev/null and b/2006Redone Server/data/world/map/798.gz differ diff --git a/2006Redone Server/data/world/map/799.gz b/2006Redone Server/data/world/map/799.gz new file mode 100644 index 00000000..42bc6c5f Binary files /dev/null and b/2006Redone Server/data/world/map/799.gz differ diff --git a/2006Redone Server/data/world/map/8.gz b/2006Redone Server/data/world/map/8.gz new file mode 100644 index 00000000..0518e58d Binary files /dev/null and b/2006Redone Server/data/world/map/8.gz differ diff --git a/2006Redone Server/data/world/map/80.gz b/2006Redone Server/data/world/map/80.gz new file mode 100644 index 00000000..fbb3798e Binary files /dev/null and b/2006Redone Server/data/world/map/80.gz differ diff --git a/2006Redone Server/data/world/map/800.gz b/2006Redone Server/data/world/map/800.gz new file mode 100644 index 00000000..8f98f2d2 Binary files /dev/null and b/2006Redone Server/data/world/map/800.gz differ diff --git a/2006Redone Server/data/world/map/801.gz b/2006Redone Server/data/world/map/801.gz new file mode 100644 index 00000000..56e459d4 Binary files /dev/null and b/2006Redone Server/data/world/map/801.gz differ diff --git a/2006Redone Server/data/world/map/806.gz b/2006Redone Server/data/world/map/806.gz new file mode 100644 index 00000000..65e70c2e Binary files /dev/null and b/2006Redone Server/data/world/map/806.gz differ diff --git a/2006Redone Server/data/world/map/807.gz b/2006Redone Server/data/world/map/807.gz new file mode 100644 index 00000000..1c5f8920 Binary files /dev/null and b/2006Redone Server/data/world/map/807.gz differ diff --git a/2006Redone Server/data/world/map/808.gz b/2006Redone Server/data/world/map/808.gz new file mode 100644 index 00000000..f5883233 Binary files /dev/null and b/2006Redone Server/data/world/map/808.gz differ diff --git a/2006Redone Server/data/world/map/809.gz b/2006Redone Server/data/world/map/809.gz new file mode 100644 index 00000000..e586acba Binary files /dev/null and b/2006Redone Server/data/world/map/809.gz differ diff --git a/2006Redone Server/data/world/map/81.gz b/2006Redone Server/data/world/map/81.gz new file mode 100644 index 00000000..94a5d9d7 Binary files /dev/null and b/2006Redone Server/data/world/map/81.gz differ diff --git a/2006Redone Server/data/world/map/810.gz b/2006Redone Server/data/world/map/810.gz new file mode 100644 index 00000000..37b45294 Binary files /dev/null and b/2006Redone Server/data/world/map/810.gz differ diff --git a/2006Redone Server/data/world/map/811.gz b/2006Redone Server/data/world/map/811.gz new file mode 100644 index 00000000..c9ac69fb Binary files /dev/null and b/2006Redone Server/data/world/map/811.gz differ diff --git a/2006Redone Server/data/world/map/812.gz b/2006Redone Server/data/world/map/812.gz new file mode 100644 index 00000000..3e9b7c5f Binary files /dev/null and b/2006Redone Server/data/world/map/812.gz differ diff --git a/2006Redone Server/data/world/map/813.gz b/2006Redone Server/data/world/map/813.gz new file mode 100644 index 00000000..81728400 Binary files /dev/null and b/2006Redone Server/data/world/map/813.gz differ diff --git a/2006Redone Server/data/world/map/814.gz b/2006Redone Server/data/world/map/814.gz new file mode 100644 index 00000000..40767c0f Binary files /dev/null and b/2006Redone Server/data/world/map/814.gz differ diff --git a/2006Redone Server/data/world/map/815.gz b/2006Redone Server/data/world/map/815.gz new file mode 100644 index 00000000..1864f863 Binary files /dev/null and b/2006Redone Server/data/world/map/815.gz differ diff --git a/2006Redone Server/data/world/map/816.gz b/2006Redone Server/data/world/map/816.gz new file mode 100644 index 00000000..c1cfd4da Binary files /dev/null and b/2006Redone Server/data/world/map/816.gz differ diff --git a/2006Redone Server/data/world/map/817.gz b/2006Redone Server/data/world/map/817.gz new file mode 100644 index 00000000..0da54cb4 Binary files /dev/null and b/2006Redone Server/data/world/map/817.gz differ diff --git a/2006Redone Server/data/world/map/818.gz b/2006Redone Server/data/world/map/818.gz new file mode 100644 index 00000000..d6df8f50 Binary files /dev/null and b/2006Redone Server/data/world/map/818.gz differ diff --git a/2006Redone Server/data/world/map/819.gz b/2006Redone Server/data/world/map/819.gz new file mode 100644 index 00000000..a8a140c6 Binary files /dev/null and b/2006Redone Server/data/world/map/819.gz differ diff --git a/2006Redone Server/data/world/map/82.gz b/2006Redone Server/data/world/map/82.gz new file mode 100644 index 00000000..5f0156dc Binary files /dev/null and b/2006Redone Server/data/world/map/82.gz differ diff --git a/2006Redone Server/data/world/map/820.gz b/2006Redone Server/data/world/map/820.gz new file mode 100644 index 00000000..cfbc7d92 Binary files /dev/null and b/2006Redone Server/data/world/map/820.gz differ diff --git a/2006Redone Server/data/world/map/821.gz b/2006Redone Server/data/world/map/821.gz new file mode 100644 index 00000000..b431e7b0 Binary files /dev/null and b/2006Redone Server/data/world/map/821.gz differ diff --git a/2006Redone Server/data/world/map/822.gz b/2006Redone Server/data/world/map/822.gz new file mode 100644 index 00000000..59e89e0f Binary files /dev/null and b/2006Redone Server/data/world/map/822.gz differ diff --git a/2006Redone Server/data/world/map/823.gz b/2006Redone Server/data/world/map/823.gz new file mode 100644 index 00000000..312f270c Binary files /dev/null and b/2006Redone Server/data/world/map/823.gz differ diff --git a/2006Redone Server/data/world/map/824.gz b/2006Redone Server/data/world/map/824.gz new file mode 100644 index 00000000..4ded2fe2 Binary files /dev/null and b/2006Redone Server/data/world/map/824.gz differ diff --git a/2006Redone Server/data/world/map/825.gz b/2006Redone Server/data/world/map/825.gz new file mode 100644 index 00000000..2b977013 Binary files /dev/null and b/2006Redone Server/data/world/map/825.gz differ diff --git a/2006Redone Server/data/world/map/826.gz b/2006Redone Server/data/world/map/826.gz new file mode 100644 index 00000000..8c2a4561 Binary files /dev/null and b/2006Redone Server/data/world/map/826.gz differ diff --git a/2006Redone Server/data/world/map/827.gz b/2006Redone Server/data/world/map/827.gz new file mode 100644 index 00000000..009c5381 Binary files /dev/null and b/2006Redone Server/data/world/map/827.gz differ diff --git a/2006Redone Server/data/world/map/828.gz b/2006Redone Server/data/world/map/828.gz new file mode 100644 index 00000000..066ac012 Binary files /dev/null and b/2006Redone Server/data/world/map/828.gz differ diff --git a/2006Redone Server/data/world/map/829.gz b/2006Redone Server/data/world/map/829.gz new file mode 100644 index 00000000..7222526a Binary files /dev/null and b/2006Redone Server/data/world/map/829.gz differ diff --git a/2006Redone Server/data/world/map/83.gz b/2006Redone Server/data/world/map/83.gz new file mode 100644 index 00000000..536b0cc8 Binary files /dev/null and b/2006Redone Server/data/world/map/83.gz differ diff --git a/2006Redone Server/data/world/map/830.gz b/2006Redone Server/data/world/map/830.gz new file mode 100644 index 00000000..0fd951d6 Binary files /dev/null and b/2006Redone Server/data/world/map/830.gz differ diff --git a/2006Redone Server/data/world/map/831.gz b/2006Redone Server/data/world/map/831.gz new file mode 100644 index 00000000..7180d466 Binary files /dev/null and b/2006Redone Server/data/world/map/831.gz differ diff --git a/2006Redone Server/data/world/map/832.gz b/2006Redone Server/data/world/map/832.gz new file mode 100644 index 00000000..c5b4f13a Binary files /dev/null and b/2006Redone Server/data/world/map/832.gz differ diff --git a/2006Redone Server/data/world/map/833.gz b/2006Redone Server/data/world/map/833.gz new file mode 100644 index 00000000..efcfd44f Binary files /dev/null and b/2006Redone Server/data/world/map/833.gz differ diff --git a/2006Redone Server/data/world/map/834.gz b/2006Redone Server/data/world/map/834.gz new file mode 100644 index 00000000..ff84fd43 Binary files /dev/null and b/2006Redone Server/data/world/map/834.gz differ diff --git a/2006Redone Server/data/world/map/835.gz b/2006Redone Server/data/world/map/835.gz new file mode 100644 index 00000000..c18ce9ed Binary files /dev/null and b/2006Redone Server/data/world/map/835.gz differ diff --git a/2006Redone Server/data/world/map/836.gz b/2006Redone Server/data/world/map/836.gz new file mode 100644 index 00000000..a3a7af9a Binary files /dev/null and b/2006Redone Server/data/world/map/836.gz differ diff --git a/2006Redone Server/data/world/map/837.gz b/2006Redone Server/data/world/map/837.gz new file mode 100644 index 00000000..42fcdc27 Binary files /dev/null and b/2006Redone Server/data/world/map/837.gz differ diff --git a/2006Redone Server/data/world/map/838.gz b/2006Redone Server/data/world/map/838.gz new file mode 100644 index 00000000..0b312c53 Binary files /dev/null and b/2006Redone Server/data/world/map/838.gz differ diff --git a/2006Redone Server/data/world/map/839.gz b/2006Redone Server/data/world/map/839.gz new file mode 100644 index 00000000..b632a39c Binary files /dev/null and b/2006Redone Server/data/world/map/839.gz differ diff --git a/2006Redone Server/data/world/map/84.gz b/2006Redone Server/data/world/map/84.gz new file mode 100644 index 00000000..0241a7dd Binary files /dev/null and b/2006Redone Server/data/world/map/84.gz differ diff --git a/2006Redone Server/data/world/map/840.gz b/2006Redone Server/data/world/map/840.gz new file mode 100644 index 00000000..b2729216 Binary files /dev/null and b/2006Redone Server/data/world/map/840.gz differ diff --git a/2006Redone Server/data/world/map/841.gz b/2006Redone Server/data/world/map/841.gz new file mode 100644 index 00000000..118468fb Binary files /dev/null and b/2006Redone Server/data/world/map/841.gz differ diff --git a/2006Redone Server/data/world/map/842.gz b/2006Redone Server/data/world/map/842.gz new file mode 100644 index 00000000..dc73fe43 Binary files /dev/null and b/2006Redone Server/data/world/map/842.gz differ diff --git a/2006Redone Server/data/world/map/843.gz b/2006Redone Server/data/world/map/843.gz new file mode 100644 index 00000000..e16aa88e Binary files /dev/null and b/2006Redone Server/data/world/map/843.gz differ diff --git a/2006Redone Server/data/world/map/844.gz b/2006Redone Server/data/world/map/844.gz new file mode 100644 index 00000000..43151c6b Binary files /dev/null and b/2006Redone Server/data/world/map/844.gz differ diff --git a/2006Redone Server/data/world/map/845.gz b/2006Redone Server/data/world/map/845.gz new file mode 100644 index 00000000..090d6bd6 Binary files /dev/null and b/2006Redone Server/data/world/map/845.gz differ diff --git a/2006Redone Server/data/world/map/846.gz b/2006Redone Server/data/world/map/846.gz new file mode 100644 index 00000000..20bf95da Binary files /dev/null and b/2006Redone Server/data/world/map/846.gz differ diff --git a/2006Redone Server/data/world/map/847.gz b/2006Redone Server/data/world/map/847.gz new file mode 100644 index 00000000..ba90dbb9 Binary files /dev/null and b/2006Redone Server/data/world/map/847.gz differ diff --git a/2006Redone Server/data/world/map/848.gz b/2006Redone Server/data/world/map/848.gz new file mode 100644 index 00000000..ab443278 Binary files /dev/null and b/2006Redone Server/data/world/map/848.gz differ diff --git a/2006Redone Server/data/world/map/849.gz b/2006Redone Server/data/world/map/849.gz new file mode 100644 index 00000000..4328fb2c Binary files /dev/null and b/2006Redone Server/data/world/map/849.gz differ diff --git a/2006Redone Server/data/world/map/85.gz b/2006Redone Server/data/world/map/85.gz new file mode 100644 index 00000000..5c5fa21b Binary files /dev/null and b/2006Redone Server/data/world/map/85.gz differ diff --git a/2006Redone Server/data/world/map/850.gz b/2006Redone Server/data/world/map/850.gz new file mode 100644 index 00000000..5bf36bb5 Binary files /dev/null and b/2006Redone Server/data/world/map/850.gz differ diff --git a/2006Redone Server/data/world/map/851.gz b/2006Redone Server/data/world/map/851.gz new file mode 100644 index 00000000..8d1bbc05 Binary files /dev/null and b/2006Redone Server/data/world/map/851.gz differ diff --git a/2006Redone Server/data/world/map/852.gz b/2006Redone Server/data/world/map/852.gz new file mode 100644 index 00000000..6f3d3530 Binary files /dev/null and b/2006Redone Server/data/world/map/852.gz differ diff --git a/2006Redone Server/data/world/map/853.gz b/2006Redone Server/data/world/map/853.gz new file mode 100644 index 00000000..53da4726 Binary files /dev/null and b/2006Redone Server/data/world/map/853.gz differ diff --git a/2006Redone Server/data/world/map/854.gz b/2006Redone Server/data/world/map/854.gz new file mode 100644 index 00000000..ed6d14c9 Binary files /dev/null and b/2006Redone Server/data/world/map/854.gz differ diff --git a/2006Redone Server/data/world/map/855.gz b/2006Redone Server/data/world/map/855.gz new file mode 100644 index 00000000..b9a7a15b Binary files /dev/null and b/2006Redone Server/data/world/map/855.gz differ diff --git a/2006Redone Server/data/world/map/856.gz b/2006Redone Server/data/world/map/856.gz new file mode 100644 index 00000000..394be717 Binary files /dev/null and b/2006Redone Server/data/world/map/856.gz differ diff --git a/2006Redone Server/data/world/map/857.gz b/2006Redone Server/data/world/map/857.gz new file mode 100644 index 00000000..877e4dbb Binary files /dev/null and b/2006Redone Server/data/world/map/857.gz differ diff --git a/2006Redone Server/data/world/map/858.gz b/2006Redone Server/data/world/map/858.gz new file mode 100644 index 00000000..86f1392e Binary files /dev/null and b/2006Redone Server/data/world/map/858.gz differ diff --git a/2006Redone Server/data/world/map/859.gz b/2006Redone Server/data/world/map/859.gz new file mode 100644 index 00000000..cb97a9c9 Binary files /dev/null and b/2006Redone Server/data/world/map/859.gz differ diff --git a/2006Redone Server/data/world/map/86.gz b/2006Redone Server/data/world/map/86.gz new file mode 100644 index 00000000..0349a5a9 Binary files /dev/null and b/2006Redone Server/data/world/map/86.gz differ diff --git a/2006Redone Server/data/world/map/860.gz b/2006Redone Server/data/world/map/860.gz new file mode 100644 index 00000000..78406923 Binary files /dev/null and b/2006Redone Server/data/world/map/860.gz differ diff --git a/2006Redone Server/data/world/map/861.gz b/2006Redone Server/data/world/map/861.gz new file mode 100644 index 00000000..82adc805 Binary files /dev/null and b/2006Redone Server/data/world/map/861.gz differ diff --git a/2006Redone Server/data/world/map/862.gz b/2006Redone Server/data/world/map/862.gz new file mode 100644 index 00000000..4411951c Binary files /dev/null and b/2006Redone Server/data/world/map/862.gz differ diff --git a/2006Redone Server/data/world/map/863.gz b/2006Redone Server/data/world/map/863.gz new file mode 100644 index 00000000..db343179 Binary files /dev/null and b/2006Redone Server/data/world/map/863.gz differ diff --git a/2006Redone Server/data/world/map/864.gz b/2006Redone Server/data/world/map/864.gz new file mode 100644 index 00000000..271ccbd6 Binary files /dev/null and b/2006Redone Server/data/world/map/864.gz differ diff --git a/2006Redone Server/data/world/map/865.gz b/2006Redone Server/data/world/map/865.gz new file mode 100644 index 00000000..05425872 Binary files /dev/null and b/2006Redone Server/data/world/map/865.gz differ diff --git a/2006Redone Server/data/world/map/866.gz b/2006Redone Server/data/world/map/866.gz new file mode 100644 index 00000000..ae2a49de Binary files /dev/null and b/2006Redone Server/data/world/map/866.gz differ diff --git a/2006Redone Server/data/world/map/867.gz b/2006Redone Server/data/world/map/867.gz new file mode 100644 index 00000000..9f804841 Binary files /dev/null and b/2006Redone Server/data/world/map/867.gz differ diff --git a/2006Redone Server/data/world/map/868.gz b/2006Redone Server/data/world/map/868.gz new file mode 100644 index 00000000..b18e6e01 Binary files /dev/null and b/2006Redone Server/data/world/map/868.gz differ diff --git a/2006Redone Server/data/world/map/869.gz b/2006Redone Server/data/world/map/869.gz new file mode 100644 index 00000000..4b2e5dff Binary files /dev/null and b/2006Redone Server/data/world/map/869.gz differ diff --git a/2006Redone Server/data/world/map/87.gz b/2006Redone Server/data/world/map/87.gz new file mode 100644 index 00000000..3e55c633 Binary files /dev/null and b/2006Redone Server/data/world/map/87.gz differ diff --git a/2006Redone Server/data/world/map/870.gz b/2006Redone Server/data/world/map/870.gz new file mode 100644 index 00000000..25f8d325 Binary files /dev/null and b/2006Redone Server/data/world/map/870.gz differ diff --git a/2006Redone Server/data/world/map/871.gz b/2006Redone Server/data/world/map/871.gz new file mode 100644 index 00000000..1037c93f Binary files /dev/null and b/2006Redone Server/data/world/map/871.gz differ diff --git a/2006Redone Server/data/world/map/872.gz b/2006Redone Server/data/world/map/872.gz new file mode 100644 index 00000000..630c2a1b Binary files /dev/null and b/2006Redone Server/data/world/map/872.gz differ diff --git a/2006Redone Server/data/world/map/873.gz b/2006Redone Server/data/world/map/873.gz new file mode 100644 index 00000000..572c7690 Binary files /dev/null and b/2006Redone Server/data/world/map/873.gz differ diff --git a/2006Redone Server/data/world/map/874.gz b/2006Redone Server/data/world/map/874.gz new file mode 100644 index 00000000..7be49824 Binary files /dev/null and b/2006Redone Server/data/world/map/874.gz differ diff --git a/2006Redone Server/data/world/map/875.gz b/2006Redone Server/data/world/map/875.gz new file mode 100644 index 00000000..6bc7d028 Binary files /dev/null and b/2006Redone Server/data/world/map/875.gz differ diff --git a/2006Redone Server/data/world/map/876.gz b/2006Redone Server/data/world/map/876.gz new file mode 100644 index 00000000..63f38dab Binary files /dev/null and b/2006Redone Server/data/world/map/876.gz differ diff --git a/2006Redone Server/data/world/map/877.gz b/2006Redone Server/data/world/map/877.gz new file mode 100644 index 00000000..f4670c02 Binary files /dev/null and b/2006Redone Server/data/world/map/877.gz differ diff --git a/2006Redone Server/data/world/map/88.gz b/2006Redone Server/data/world/map/88.gz new file mode 100644 index 00000000..ca16eef6 Binary files /dev/null and b/2006Redone Server/data/world/map/88.gz differ diff --git a/2006Redone Server/data/world/map/880.gz b/2006Redone Server/data/world/map/880.gz new file mode 100644 index 00000000..303f9c8a Binary files /dev/null and b/2006Redone Server/data/world/map/880.gz differ diff --git a/2006Redone Server/data/world/map/881.gz b/2006Redone Server/data/world/map/881.gz new file mode 100644 index 00000000..3b1ac3a1 Binary files /dev/null and b/2006Redone Server/data/world/map/881.gz differ diff --git a/2006Redone Server/data/world/map/882.gz b/2006Redone Server/data/world/map/882.gz new file mode 100644 index 00000000..9d12f96a Binary files /dev/null and b/2006Redone Server/data/world/map/882.gz differ diff --git a/2006Redone Server/data/world/map/883.gz b/2006Redone Server/data/world/map/883.gz new file mode 100644 index 00000000..6b521f81 Binary files /dev/null and b/2006Redone Server/data/world/map/883.gz differ diff --git a/2006Redone Server/data/world/map/886.gz b/2006Redone Server/data/world/map/886.gz new file mode 100644 index 00000000..00348c54 Binary files /dev/null and b/2006Redone Server/data/world/map/886.gz differ diff --git a/2006Redone Server/data/world/map/887.gz b/2006Redone Server/data/world/map/887.gz new file mode 100644 index 00000000..7ed4b045 Binary files /dev/null and b/2006Redone Server/data/world/map/887.gz differ diff --git a/2006Redone Server/data/world/map/888.gz b/2006Redone Server/data/world/map/888.gz new file mode 100644 index 00000000..814cc60f Binary files /dev/null and b/2006Redone Server/data/world/map/888.gz differ diff --git a/2006Redone Server/data/world/map/889.gz b/2006Redone Server/data/world/map/889.gz new file mode 100644 index 00000000..e99447ea Binary files /dev/null and b/2006Redone Server/data/world/map/889.gz differ diff --git a/2006Redone Server/data/world/map/89.gz b/2006Redone Server/data/world/map/89.gz new file mode 100644 index 00000000..aa2f417a Binary files /dev/null and b/2006Redone Server/data/world/map/89.gz differ diff --git a/2006Redone Server/data/world/map/890.gz b/2006Redone Server/data/world/map/890.gz new file mode 100644 index 00000000..749c216d Binary files /dev/null and b/2006Redone Server/data/world/map/890.gz differ diff --git a/2006Redone Server/data/world/map/891.gz b/2006Redone Server/data/world/map/891.gz new file mode 100644 index 00000000..f6b68b51 Binary files /dev/null and b/2006Redone Server/data/world/map/891.gz differ diff --git a/2006Redone Server/data/world/map/892.gz b/2006Redone Server/data/world/map/892.gz new file mode 100644 index 00000000..68a65a38 Binary files /dev/null and b/2006Redone Server/data/world/map/892.gz differ diff --git a/2006Redone Server/data/world/map/893.gz b/2006Redone Server/data/world/map/893.gz new file mode 100644 index 00000000..ca0e8cad Binary files /dev/null and b/2006Redone Server/data/world/map/893.gz differ diff --git a/2006Redone Server/data/world/map/894.gz b/2006Redone Server/data/world/map/894.gz new file mode 100644 index 00000000..dc688a66 Binary files /dev/null and b/2006Redone Server/data/world/map/894.gz differ diff --git a/2006Redone Server/data/world/map/895.gz b/2006Redone Server/data/world/map/895.gz new file mode 100644 index 00000000..889f3843 Binary files /dev/null and b/2006Redone Server/data/world/map/895.gz differ diff --git a/2006Redone Server/data/world/map/896.gz b/2006Redone Server/data/world/map/896.gz new file mode 100644 index 00000000..0f49e8d4 Binary files /dev/null and b/2006Redone Server/data/world/map/896.gz differ diff --git a/2006Redone Server/data/world/map/897.gz b/2006Redone Server/data/world/map/897.gz new file mode 100644 index 00000000..36e2e9ca Binary files /dev/null and b/2006Redone Server/data/world/map/897.gz differ diff --git a/2006Redone Server/data/world/map/898.gz b/2006Redone Server/data/world/map/898.gz new file mode 100644 index 00000000..ec287b8a Binary files /dev/null and b/2006Redone Server/data/world/map/898.gz differ diff --git a/2006Redone Server/data/world/map/899.gz b/2006Redone Server/data/world/map/899.gz new file mode 100644 index 00000000..26347520 Binary files /dev/null and b/2006Redone Server/data/world/map/899.gz differ diff --git a/2006Redone Server/data/world/map/9.gz b/2006Redone Server/data/world/map/9.gz new file mode 100644 index 00000000..740b910f Binary files /dev/null and b/2006Redone Server/data/world/map/9.gz differ diff --git a/2006Redone Server/data/world/map/90.gz b/2006Redone Server/data/world/map/90.gz new file mode 100644 index 00000000..9efabdac Binary files /dev/null and b/2006Redone Server/data/world/map/90.gz differ diff --git a/2006Redone Server/data/world/map/900.gz b/2006Redone Server/data/world/map/900.gz new file mode 100644 index 00000000..26ff76aa Binary files /dev/null and b/2006Redone Server/data/world/map/900.gz differ diff --git a/2006Redone Server/data/world/map/901.gz b/2006Redone Server/data/world/map/901.gz new file mode 100644 index 00000000..c44dc967 Binary files /dev/null and b/2006Redone Server/data/world/map/901.gz differ diff --git a/2006Redone Server/data/world/map/902.gz b/2006Redone Server/data/world/map/902.gz new file mode 100644 index 00000000..41a130c0 Binary files /dev/null and b/2006Redone Server/data/world/map/902.gz differ diff --git a/2006Redone Server/data/world/map/903.gz b/2006Redone Server/data/world/map/903.gz new file mode 100644 index 00000000..8d62263e Binary files /dev/null and b/2006Redone Server/data/world/map/903.gz differ diff --git a/2006Redone Server/data/world/map/904.gz b/2006Redone Server/data/world/map/904.gz new file mode 100644 index 00000000..6991ef69 Binary files /dev/null and b/2006Redone Server/data/world/map/904.gz differ diff --git a/2006Redone Server/data/world/map/905.gz b/2006Redone Server/data/world/map/905.gz new file mode 100644 index 00000000..b2e751bd Binary files /dev/null and b/2006Redone Server/data/world/map/905.gz differ diff --git a/2006Redone Server/data/world/map/906.gz b/2006Redone Server/data/world/map/906.gz new file mode 100644 index 00000000..22347ab0 Binary files /dev/null and b/2006Redone Server/data/world/map/906.gz differ diff --git a/2006Redone Server/data/world/map/907.gz b/2006Redone Server/data/world/map/907.gz new file mode 100644 index 00000000..c5e46a74 Binary files /dev/null and b/2006Redone Server/data/world/map/907.gz differ diff --git a/2006Redone Server/data/world/map/908.gz b/2006Redone Server/data/world/map/908.gz new file mode 100644 index 00000000..aaa1195d Binary files /dev/null and b/2006Redone Server/data/world/map/908.gz differ diff --git a/2006Redone Server/data/world/map/909.gz b/2006Redone Server/data/world/map/909.gz new file mode 100644 index 00000000..a648678d Binary files /dev/null and b/2006Redone Server/data/world/map/909.gz differ diff --git a/2006Redone Server/data/world/map/91.gz b/2006Redone Server/data/world/map/91.gz new file mode 100644 index 00000000..d9b75a88 Binary files /dev/null and b/2006Redone Server/data/world/map/91.gz differ diff --git a/2006Redone Server/data/world/map/910.gz b/2006Redone Server/data/world/map/910.gz new file mode 100644 index 00000000..0319a546 Binary files /dev/null and b/2006Redone Server/data/world/map/910.gz differ diff --git a/2006Redone Server/data/world/map/911.gz b/2006Redone Server/data/world/map/911.gz new file mode 100644 index 00000000..6f9bf589 Binary files /dev/null and b/2006Redone Server/data/world/map/911.gz differ diff --git a/2006Redone Server/data/world/map/912.gz b/2006Redone Server/data/world/map/912.gz new file mode 100644 index 00000000..76b58ca8 Binary files /dev/null and b/2006Redone Server/data/world/map/912.gz differ diff --git a/2006Redone Server/data/world/map/913.gz b/2006Redone Server/data/world/map/913.gz new file mode 100644 index 00000000..151469b1 Binary files /dev/null and b/2006Redone Server/data/world/map/913.gz differ diff --git a/2006Redone Server/data/world/map/914.gz b/2006Redone Server/data/world/map/914.gz new file mode 100644 index 00000000..1d9920dc Binary files /dev/null and b/2006Redone Server/data/world/map/914.gz differ diff --git a/2006Redone Server/data/world/map/915.gz b/2006Redone Server/data/world/map/915.gz new file mode 100644 index 00000000..c7b640b2 Binary files /dev/null and b/2006Redone Server/data/world/map/915.gz differ diff --git a/2006Redone Server/data/world/map/916.gz b/2006Redone Server/data/world/map/916.gz new file mode 100644 index 00000000..1bc57f0b Binary files /dev/null and b/2006Redone Server/data/world/map/916.gz differ diff --git a/2006Redone Server/data/world/map/917.gz b/2006Redone Server/data/world/map/917.gz new file mode 100644 index 00000000..24ddbbd7 Binary files /dev/null and b/2006Redone Server/data/world/map/917.gz differ diff --git a/2006Redone Server/data/world/map/918.gz b/2006Redone Server/data/world/map/918.gz new file mode 100644 index 00000000..cb553717 Binary files /dev/null and b/2006Redone Server/data/world/map/918.gz differ diff --git a/2006Redone Server/data/world/map/919.gz b/2006Redone Server/data/world/map/919.gz new file mode 100644 index 00000000..42e1ec2e Binary files /dev/null and b/2006Redone Server/data/world/map/919.gz differ diff --git a/2006Redone Server/data/world/map/92.gz b/2006Redone Server/data/world/map/92.gz new file mode 100644 index 00000000..63e83c23 Binary files /dev/null and b/2006Redone Server/data/world/map/92.gz differ diff --git a/2006Redone Server/data/world/map/920.gz b/2006Redone Server/data/world/map/920.gz new file mode 100644 index 00000000..2f02fa0e Binary files /dev/null and b/2006Redone Server/data/world/map/920.gz differ diff --git a/2006Redone Server/data/world/map/921.gz b/2006Redone Server/data/world/map/921.gz new file mode 100644 index 00000000..9f581994 Binary files /dev/null and b/2006Redone Server/data/world/map/921.gz differ diff --git a/2006Redone Server/data/world/map/922.gz b/2006Redone Server/data/world/map/922.gz new file mode 100644 index 00000000..3853e3be Binary files /dev/null and b/2006Redone Server/data/world/map/922.gz differ diff --git a/2006Redone Server/data/world/map/923.gz b/2006Redone Server/data/world/map/923.gz new file mode 100644 index 00000000..4407f710 Binary files /dev/null and b/2006Redone Server/data/world/map/923.gz differ diff --git a/2006Redone Server/data/world/map/924.gz b/2006Redone Server/data/world/map/924.gz new file mode 100644 index 00000000..9f5dc086 Binary files /dev/null and b/2006Redone Server/data/world/map/924.gz differ diff --git a/2006Redone Server/data/world/map/925.gz b/2006Redone Server/data/world/map/925.gz new file mode 100644 index 00000000..fc3c0d9b Binary files /dev/null and b/2006Redone Server/data/world/map/925.gz differ diff --git a/2006Redone Server/data/world/map/926.gz b/2006Redone Server/data/world/map/926.gz new file mode 100644 index 00000000..a7269ea9 Binary files /dev/null and b/2006Redone Server/data/world/map/926.gz differ diff --git a/2006Redone Server/data/world/map/927.gz b/2006Redone Server/data/world/map/927.gz new file mode 100644 index 00000000..5256dde3 Binary files /dev/null and b/2006Redone Server/data/world/map/927.gz differ diff --git a/2006Redone Server/data/world/map/928.gz b/2006Redone Server/data/world/map/928.gz new file mode 100644 index 00000000..15f7f60c Binary files /dev/null and b/2006Redone Server/data/world/map/928.gz differ diff --git a/2006Redone Server/data/world/map/929.gz b/2006Redone Server/data/world/map/929.gz new file mode 100644 index 00000000..292ec2a6 Binary files /dev/null and b/2006Redone Server/data/world/map/929.gz differ diff --git a/2006Redone Server/data/world/map/93.gz b/2006Redone Server/data/world/map/93.gz new file mode 100644 index 00000000..ef9ed6f0 Binary files /dev/null and b/2006Redone Server/data/world/map/93.gz differ diff --git a/2006Redone Server/data/world/map/930.gz b/2006Redone Server/data/world/map/930.gz new file mode 100644 index 00000000..6e362a2a Binary files /dev/null and b/2006Redone Server/data/world/map/930.gz differ diff --git a/2006Redone Server/data/world/map/931.gz b/2006Redone Server/data/world/map/931.gz new file mode 100644 index 00000000..40181a48 Binary files /dev/null and b/2006Redone Server/data/world/map/931.gz differ diff --git a/2006Redone Server/data/world/map/932.gz b/2006Redone Server/data/world/map/932.gz new file mode 100644 index 00000000..8ee64174 Binary files /dev/null and b/2006Redone Server/data/world/map/932.gz differ diff --git a/2006Redone Server/data/world/map/933.gz b/2006Redone Server/data/world/map/933.gz new file mode 100644 index 00000000..bbf11699 Binary files /dev/null and b/2006Redone Server/data/world/map/933.gz differ diff --git a/2006Redone Server/data/world/map/934.gz b/2006Redone Server/data/world/map/934.gz new file mode 100644 index 00000000..efebb75f Binary files /dev/null and b/2006Redone Server/data/world/map/934.gz differ diff --git a/2006Redone Server/data/world/map/935.gz b/2006Redone Server/data/world/map/935.gz new file mode 100644 index 00000000..9ab87615 Binary files /dev/null and b/2006Redone Server/data/world/map/935.gz differ diff --git a/2006Redone Server/data/world/map/936.gz b/2006Redone Server/data/world/map/936.gz new file mode 100644 index 00000000..1de4186f Binary files /dev/null and b/2006Redone Server/data/world/map/936.gz differ diff --git a/2006Redone Server/data/world/map/937.gz b/2006Redone Server/data/world/map/937.gz new file mode 100644 index 00000000..68e3456e Binary files /dev/null and b/2006Redone Server/data/world/map/937.gz differ diff --git a/2006Redone Server/data/world/map/938.gz b/2006Redone Server/data/world/map/938.gz new file mode 100644 index 00000000..17949974 Binary files /dev/null and b/2006Redone Server/data/world/map/938.gz differ diff --git a/2006Redone Server/data/world/map/939.gz b/2006Redone Server/data/world/map/939.gz new file mode 100644 index 00000000..4181397e Binary files /dev/null and b/2006Redone Server/data/world/map/939.gz differ diff --git a/2006Redone Server/data/world/map/94.gz b/2006Redone Server/data/world/map/94.gz new file mode 100644 index 00000000..57bb64b4 Binary files /dev/null and b/2006Redone Server/data/world/map/94.gz differ diff --git a/2006Redone Server/data/world/map/940.gz b/2006Redone Server/data/world/map/940.gz new file mode 100644 index 00000000..0da9e461 Binary files /dev/null and b/2006Redone Server/data/world/map/940.gz differ diff --git a/2006Redone Server/data/world/map/941.gz b/2006Redone Server/data/world/map/941.gz new file mode 100644 index 00000000..1092ffc1 Binary files /dev/null and b/2006Redone Server/data/world/map/941.gz differ diff --git a/2006Redone Server/data/world/map/942.gz b/2006Redone Server/data/world/map/942.gz new file mode 100644 index 00000000..58f3f4b2 Binary files /dev/null and b/2006Redone Server/data/world/map/942.gz differ diff --git a/2006Redone Server/data/world/map/943.gz b/2006Redone Server/data/world/map/943.gz new file mode 100644 index 00000000..824e3d4b Binary files /dev/null and b/2006Redone Server/data/world/map/943.gz differ diff --git a/2006Redone Server/data/world/map/944.gz b/2006Redone Server/data/world/map/944.gz new file mode 100644 index 00000000..36929266 Binary files /dev/null and b/2006Redone Server/data/world/map/944.gz differ diff --git a/2006Redone Server/data/world/map/945.gz b/2006Redone Server/data/world/map/945.gz new file mode 100644 index 00000000..41eaa4aa Binary files /dev/null and b/2006Redone Server/data/world/map/945.gz differ diff --git a/2006Redone Server/data/world/map/946.gz b/2006Redone Server/data/world/map/946.gz new file mode 100644 index 00000000..1d12e98d Binary files /dev/null and b/2006Redone Server/data/world/map/946.gz differ diff --git a/2006Redone Server/data/world/map/947.gz b/2006Redone Server/data/world/map/947.gz new file mode 100644 index 00000000..94e48192 Binary files /dev/null and b/2006Redone Server/data/world/map/947.gz differ diff --git a/2006Redone Server/data/world/map/948.gz b/2006Redone Server/data/world/map/948.gz new file mode 100644 index 00000000..6e1ef016 Binary files /dev/null and b/2006Redone Server/data/world/map/948.gz differ diff --git a/2006Redone Server/data/world/map/949.gz b/2006Redone Server/data/world/map/949.gz new file mode 100644 index 00000000..85bd167c Binary files /dev/null and b/2006Redone Server/data/world/map/949.gz differ diff --git a/2006Redone Server/data/world/map/95.gz b/2006Redone Server/data/world/map/95.gz new file mode 100644 index 00000000..77fc5bc2 Binary files /dev/null and b/2006Redone Server/data/world/map/95.gz differ diff --git a/2006Redone Server/data/world/map/950.gz b/2006Redone Server/data/world/map/950.gz new file mode 100644 index 00000000..0078cf53 Binary files /dev/null and b/2006Redone Server/data/world/map/950.gz differ diff --git a/2006Redone Server/data/world/map/951.gz b/2006Redone Server/data/world/map/951.gz new file mode 100644 index 00000000..7ddfbfa6 Binary files /dev/null and b/2006Redone Server/data/world/map/951.gz differ diff --git a/2006Redone Server/data/world/map/952.gz b/2006Redone Server/data/world/map/952.gz new file mode 100644 index 00000000..8b09b63b Binary files /dev/null and b/2006Redone Server/data/world/map/952.gz differ diff --git a/2006Redone Server/data/world/map/953.gz b/2006Redone Server/data/world/map/953.gz new file mode 100644 index 00000000..b69cefd4 Binary files /dev/null and b/2006Redone Server/data/world/map/953.gz differ diff --git a/2006Redone Server/data/world/map/954.gz b/2006Redone Server/data/world/map/954.gz new file mode 100644 index 00000000..e4e0778b Binary files /dev/null and b/2006Redone Server/data/world/map/954.gz differ diff --git a/2006Redone Server/data/world/map/955.gz b/2006Redone Server/data/world/map/955.gz new file mode 100644 index 00000000..b55f2b4a Binary files /dev/null and b/2006Redone Server/data/world/map/955.gz differ diff --git a/2006Redone Server/data/world/map/956.gz b/2006Redone Server/data/world/map/956.gz new file mode 100644 index 00000000..a71b2935 Binary files /dev/null and b/2006Redone Server/data/world/map/956.gz differ diff --git a/2006Redone Server/data/world/map/957.gz b/2006Redone Server/data/world/map/957.gz new file mode 100644 index 00000000..088fc611 Binary files /dev/null and b/2006Redone Server/data/world/map/957.gz differ diff --git a/2006Redone Server/data/world/map/958.gz b/2006Redone Server/data/world/map/958.gz new file mode 100644 index 00000000..710c87f8 Binary files /dev/null and b/2006Redone Server/data/world/map/958.gz differ diff --git a/2006Redone Server/data/world/map/959.gz b/2006Redone Server/data/world/map/959.gz new file mode 100644 index 00000000..bb8774d3 Binary files /dev/null and b/2006Redone Server/data/world/map/959.gz differ diff --git a/2006Redone Server/data/world/map/96.gz b/2006Redone Server/data/world/map/96.gz new file mode 100644 index 00000000..2b014bdc Binary files /dev/null and b/2006Redone Server/data/world/map/96.gz differ diff --git a/2006Redone Server/data/world/map/960.gz b/2006Redone Server/data/world/map/960.gz new file mode 100644 index 00000000..954113cc Binary files /dev/null and b/2006Redone Server/data/world/map/960.gz differ diff --git a/2006Redone Server/data/world/map/961.gz b/2006Redone Server/data/world/map/961.gz new file mode 100644 index 00000000..557b900c Binary files /dev/null and b/2006Redone Server/data/world/map/961.gz differ diff --git a/2006Redone Server/data/world/map/962.gz b/2006Redone Server/data/world/map/962.gz new file mode 100644 index 00000000..fe233231 Binary files /dev/null and b/2006Redone Server/data/world/map/962.gz differ diff --git a/2006Redone Server/data/world/map/963.gz b/2006Redone Server/data/world/map/963.gz new file mode 100644 index 00000000..673efe6b Binary files /dev/null and b/2006Redone Server/data/world/map/963.gz differ diff --git a/2006Redone Server/data/world/map/964.gz b/2006Redone Server/data/world/map/964.gz new file mode 100644 index 00000000..db83d1e7 Binary files /dev/null and b/2006Redone Server/data/world/map/964.gz differ diff --git a/2006Redone Server/data/world/map/965.gz b/2006Redone Server/data/world/map/965.gz new file mode 100644 index 00000000..eafae2bd Binary files /dev/null and b/2006Redone Server/data/world/map/965.gz differ diff --git a/2006Redone Server/data/world/map/966.gz b/2006Redone Server/data/world/map/966.gz new file mode 100644 index 00000000..f578da03 Binary files /dev/null and b/2006Redone Server/data/world/map/966.gz differ diff --git a/2006Redone Server/data/world/map/967.gz b/2006Redone Server/data/world/map/967.gz new file mode 100644 index 00000000..f5689af2 Binary files /dev/null and b/2006Redone Server/data/world/map/967.gz differ diff --git a/2006Redone Server/data/world/map/968.gz b/2006Redone Server/data/world/map/968.gz new file mode 100644 index 00000000..a4f11d7c Binary files /dev/null and b/2006Redone Server/data/world/map/968.gz differ diff --git a/2006Redone Server/data/world/map/969.gz b/2006Redone Server/data/world/map/969.gz new file mode 100644 index 00000000..85133bfe Binary files /dev/null and b/2006Redone Server/data/world/map/969.gz differ diff --git a/2006Redone Server/data/world/map/97.gz b/2006Redone Server/data/world/map/97.gz new file mode 100644 index 00000000..85d38dea Binary files /dev/null and b/2006Redone Server/data/world/map/97.gz differ diff --git a/2006Redone Server/data/world/map/970.gz b/2006Redone Server/data/world/map/970.gz new file mode 100644 index 00000000..a6175c9d Binary files /dev/null and b/2006Redone Server/data/world/map/970.gz differ diff --git a/2006Redone Server/data/world/map/971.gz b/2006Redone Server/data/world/map/971.gz new file mode 100644 index 00000000..02f577ee Binary files /dev/null and b/2006Redone Server/data/world/map/971.gz differ diff --git a/2006Redone Server/data/world/map/972.gz b/2006Redone Server/data/world/map/972.gz new file mode 100644 index 00000000..504b5d1f Binary files /dev/null and b/2006Redone Server/data/world/map/972.gz differ diff --git a/2006Redone Server/data/world/map/973.gz b/2006Redone Server/data/world/map/973.gz new file mode 100644 index 00000000..29a2683c Binary files /dev/null and b/2006Redone Server/data/world/map/973.gz differ diff --git a/2006Redone Server/data/world/map/974.gz b/2006Redone Server/data/world/map/974.gz new file mode 100644 index 00000000..a8a1b764 Binary files /dev/null and b/2006Redone Server/data/world/map/974.gz differ diff --git a/2006Redone Server/data/world/map/975.gz b/2006Redone Server/data/world/map/975.gz new file mode 100644 index 00000000..e5231431 Binary files /dev/null and b/2006Redone Server/data/world/map/975.gz differ diff --git a/2006Redone Server/data/world/map/976.gz b/2006Redone Server/data/world/map/976.gz new file mode 100644 index 00000000..f6cded0b Binary files /dev/null and b/2006Redone Server/data/world/map/976.gz differ diff --git a/2006Redone Server/data/world/map/977.gz b/2006Redone Server/data/world/map/977.gz new file mode 100644 index 00000000..b5eea262 Binary files /dev/null and b/2006Redone Server/data/world/map/977.gz differ diff --git a/2006Redone Server/data/world/map/978.gz b/2006Redone Server/data/world/map/978.gz new file mode 100644 index 00000000..9ba8b940 Binary files /dev/null and b/2006Redone Server/data/world/map/978.gz differ diff --git a/2006Redone Server/data/world/map/979.gz b/2006Redone Server/data/world/map/979.gz new file mode 100644 index 00000000..f89bf99e Binary files /dev/null and b/2006Redone Server/data/world/map/979.gz differ diff --git a/2006Redone Server/data/world/map/98.gz b/2006Redone Server/data/world/map/98.gz new file mode 100644 index 00000000..17c3c660 Binary files /dev/null and b/2006Redone Server/data/world/map/98.gz differ diff --git a/2006Redone Server/data/world/map/980.gz b/2006Redone Server/data/world/map/980.gz new file mode 100644 index 00000000..48d82702 Binary files /dev/null and b/2006Redone Server/data/world/map/980.gz differ diff --git a/2006Redone Server/data/world/map/981.gz b/2006Redone Server/data/world/map/981.gz new file mode 100644 index 00000000..0337e256 Binary files /dev/null and b/2006Redone Server/data/world/map/981.gz differ diff --git a/2006Redone Server/data/world/map/982.gz b/2006Redone Server/data/world/map/982.gz new file mode 100644 index 00000000..fd46d5b6 Binary files /dev/null and b/2006Redone Server/data/world/map/982.gz differ diff --git a/2006Redone Server/data/world/map/983.gz b/2006Redone Server/data/world/map/983.gz new file mode 100644 index 00000000..66eab22c Binary files /dev/null and b/2006Redone Server/data/world/map/983.gz differ diff --git a/2006Redone Server/data/world/map/984.gz b/2006Redone Server/data/world/map/984.gz new file mode 100644 index 00000000..d51236ef Binary files /dev/null and b/2006Redone Server/data/world/map/984.gz differ diff --git a/2006Redone Server/data/world/map/985.gz b/2006Redone Server/data/world/map/985.gz new file mode 100644 index 00000000..49df2cff Binary files /dev/null and b/2006Redone Server/data/world/map/985.gz differ diff --git a/2006Redone Server/data/world/map/986.gz b/2006Redone Server/data/world/map/986.gz new file mode 100644 index 00000000..aaeaed8f Binary files /dev/null and b/2006Redone Server/data/world/map/986.gz differ diff --git a/2006Redone Server/data/world/map/987.gz b/2006Redone Server/data/world/map/987.gz new file mode 100644 index 00000000..eb304126 Binary files /dev/null and b/2006Redone Server/data/world/map/987.gz differ diff --git a/2006Redone Server/data/world/map/988.gz b/2006Redone Server/data/world/map/988.gz new file mode 100644 index 00000000..1a1cb4f9 Binary files /dev/null and b/2006Redone Server/data/world/map/988.gz differ diff --git a/2006Redone Server/data/world/map/989.gz b/2006Redone Server/data/world/map/989.gz new file mode 100644 index 00000000..c4d062d3 Binary files /dev/null and b/2006Redone Server/data/world/map/989.gz differ diff --git a/2006Redone Server/data/world/map/99.gz b/2006Redone Server/data/world/map/99.gz new file mode 100644 index 00000000..9360cd14 Binary files /dev/null and b/2006Redone Server/data/world/map/99.gz differ diff --git a/2006Redone Server/data/world/map/990.gz b/2006Redone Server/data/world/map/990.gz new file mode 100644 index 00000000..fa4e41bf Binary files /dev/null and b/2006Redone Server/data/world/map/990.gz differ diff --git a/2006Redone Server/data/world/map/991.gz b/2006Redone Server/data/world/map/991.gz new file mode 100644 index 00000000..5ed37955 Binary files /dev/null and b/2006Redone Server/data/world/map/991.gz differ diff --git a/2006Redone Server/data/world/map/992.gz b/2006Redone Server/data/world/map/992.gz new file mode 100644 index 00000000..5bcfbe1a Binary files /dev/null and b/2006Redone Server/data/world/map/992.gz differ diff --git a/2006Redone Server/data/world/map/993.gz b/2006Redone Server/data/world/map/993.gz new file mode 100644 index 00000000..f4789616 Binary files /dev/null and b/2006Redone Server/data/world/map/993.gz differ diff --git a/2006Redone Server/data/world/map/994.gz b/2006Redone Server/data/world/map/994.gz new file mode 100644 index 00000000..b53d29dd Binary files /dev/null and b/2006Redone Server/data/world/map/994.gz differ diff --git a/2006Redone Server/data/world/map/995.gz b/2006Redone Server/data/world/map/995.gz new file mode 100644 index 00000000..adfa42b3 Binary files /dev/null and b/2006Redone Server/data/world/map/995.gz differ diff --git a/2006Redone Server/data/world/map/996.gz b/2006Redone Server/data/world/map/996.gz new file mode 100644 index 00000000..9152a280 Binary files /dev/null and b/2006Redone Server/data/world/map/996.gz differ diff --git a/2006Redone Server/data/world/map/997.gz b/2006Redone Server/data/world/map/997.gz new file mode 100644 index 00000000..e4c53799 Binary files /dev/null and b/2006Redone Server/data/world/map/997.gz differ diff --git a/2006Redone Server/data/world/map_index b/2006Redone Server/data/world/map_index new file mode 100644 index 00000000..8f24fb56 Binary files /dev/null and b/2006Redone Server/data/world/map_index differ diff --git a/2006Redone Server/data/world/object/loc.dat b/2006Redone Server/data/world/object/loc.dat new file mode 100644 index 00000000..566e4b0a Binary files /dev/null and b/2006Redone Server/data/world/object/loc.dat differ diff --git a/2006Redone Server/data/world/object/loc.idx b/2006Redone Server/data/world/object/loc.idx new file mode 100644 index 00000000..635c8b3d Binary files /dev/null and b/2006Redone Server/data/world/object/loc.idx differ diff --git a/2006Redone Server/initiate.bat b/2006Redone Server/initiate.bat new file mode 100644 index 00000000..14a90a0a --- /dev/null +++ b/2006Redone Server/initiate.bat @@ -0,0 +1,3 @@ +@echo off +java -Xmx256m -cp bin;libs\*; server.Server +pause \ No newline at end of file diff --git a/2006Redone Server/libs/commons-lang3-3.1.jar b/2006Redone Server/libs/commons-lang3-3.1.jar new file mode 100644 index 00000000..a85e539b Binary files /dev/null and b/2006Redone Server/libs/commons-lang3-3.1.jar differ diff --git a/2006Redone Server/libs/javac++.jar b/2006Redone Server/libs/javac++.jar new file mode 100644 index 00000000..46f53b7f Binary files /dev/null and b/2006Redone Server/libs/javac++.jar differ diff --git a/2006Redone Server/libs/mina.jar b/2006Redone Server/libs/mina.jar new file mode 100644 index 00000000..a5fc451c Binary files /dev/null and b/2006Redone Server/libs/mina.jar differ diff --git a/2006Redone Server/libs/mysql-connector-java-5.1.23-bin.jar b/2006Redone Server/libs/mysql-connector-java-5.1.23-bin.jar new file mode 100644 index 00000000..9bd1fded Binary files /dev/null and b/2006Redone Server/libs/mysql-connector-java-5.1.23-bin.jar differ diff --git a/2006Redone Server/libs/slf4j-nop.jar b/2006Redone Server/libs/slf4j-nop.jar new file mode 100644 index 00000000..55f2fa2b Binary files /dev/null and b/2006Redone Server/libs/slf4j-nop.jar differ diff --git a/2006Redone Server/libs/slf4j.jar b/2006Redone Server/libs/slf4j.jar new file mode 100644 index 00000000..35502caa Binary files /dev/null and b/2006Redone Server/libs/slf4j.jar differ diff --git a/2006Redone Server/libs/xpp3-1.1.4c.jar b/2006Redone Server/libs/xpp3-1.1.4c.jar new file mode 100644 index 00000000..451ac82a Binary files /dev/null and b/2006Redone Server/libs/xpp3-1.1.4c.jar differ diff --git a/2006Redone Server/libs/xstream-1.4.1.jar b/2006Redone Server/libs/xstream-1.4.1.jar new file mode 100644 index 00000000..8374fa27 Binary files /dev/null and b/2006Redone Server/libs/xstream-1.4.1.jar differ diff --git a/2006Redone Server/src/redone/Connection.java b/2006Redone Server/src/redone/Connection.java new file mode 100644 index 00000000..e3b9d62e --- /dev/null +++ b/2006Redone Server/src/redone/Connection.java @@ -0,0 +1,318 @@ +package redone; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; + +import redone.game.players.Client; + +/** + * Connection Check Class + * + * @author Ryan / Lmctruck30 + */ + +public class Connection { + + public static ArrayList bannedIps = new ArrayList(); + public static ArrayList bannedNames = new ArrayList(); + public static ArrayList mutedIps = new ArrayList(); + public static ArrayList mutedNames = new ArrayList(); + public static ArrayList loginLimitExceeded = new ArrayList(); + + /** + * Adds the banned usernames and ips from the text file to the ban list + **/ + public static void initialize() { + banUsers(); + banIps(); + muteUsers(); + muteIps(); + } + + /** + * Adding Name To List + */ + public static void addIpToLoginList(String IP) { + loginLimitExceeded.add(IP); + } + + /** + * Remove Ip From List + */ + public static void removeIpFromLoginList(String IP) { + loginLimitExceeded.remove(IP); + } + + /** + * Clear Name List + */ + public static void clearLoginList() { + loginLimitExceeded.clear(); + } + + public static boolean checkLoginList(String IP) { + loginLimitExceeded.add(IP); + int num = 0; + for (String ips : loginLimitExceeded) { + if (IP.equals(ips)) { + num++; + } + } + if (num > 5) { + return true; + } + return false; + } + + public static void unMuteUser(String name) { + mutedNames.remove(name); + deleteFromFile("./Data/bans/UsersMuted.txt", name); + } + + public static void unIPMuteUser(String name) { + mutedIps.remove(name); + deleteFromFile("./Data/bans/IpsMuted.txt", name); + } + + /** + * Adding Ban IP + **/ + public static void addIpToBanList(String IP) { + bannedIps.add(IP); + } + + public static void addIpToMuteList(String IP) { + mutedIps.add(IP); + addIpToMuteFile(IP); + } + + /** + * Removing Ban IP + **/ + public static void removeIpFromBanList(String IP) { + bannedIps.remove(IP); + } + + /** + * Contains Ban IP + **/ + public static boolean isIpBanned(String IP) { + if (bannedIps.contains(IP)) { + return true; + } + return false; + } + + /** + * Adding banned username + **/ + public static void addNameToBanList(String name) { + bannedNames.add(name.toLowerCase()); + } + + public static void addNameToMuteList(String name) { + mutedNames.add(name.toLowerCase()); + addUserToFile(name); + } + + /** + * Removing banned username + **/ + public static void removeNameFromBanList(String name) { + bannedNames.remove(name.toLowerCase()); + deleteFromFile("./Data/bans/UsersBanned.txt", name); + } + + public static void removeNameFromMuteList(String name) { + bannedNames.remove(name.toLowerCase()); + deleteFromFile("./Data/bans/UsersMuted.txt", name); + } + + public static void deleteFromFile(String file, String name) { + try { + BufferedReader r = new BufferedReader(new FileReader(file)); + ArrayList contents = new ArrayList(); + while (true) { + String line = r.readLine(); + if (line == null) { + break; + } else { + line = line.trim(); + } + if (!line.equalsIgnoreCase(name)) { + contents.add(line); + } + } + r.close(); + BufferedWriter w = new BufferedWriter(new FileWriter(file)); + for (String line : contents) { + w.write(line, 0, line.length()); + w.newLine(); + } + w.flush(); + w.close(); + } catch (Exception e) { + } + } + + /** + * Contains banned username + **/ + public static boolean isNamedBanned(String name) { + if (bannedNames.contains(name.toLowerCase())) { + return true; + } + return false; + } + + /** + * Reads all usernames from text file then adds them all to the ban list + **/ + public static void banUsers() { + try { + BufferedReader in = new BufferedReader(new FileReader( + "./Data/bans/UsersBanned.txt")); + String data = null; + try { + while ((data = in.readLine()) != null) { + addNameToBanList(data); + } + } finally { + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void muteUsers() { + try { + BufferedReader in = new BufferedReader(new FileReader( + "./Data/bans/UsersMuted.txt")); + String data = null; + try { + while ((data = in.readLine()) != null) { + mutedNames.add(data); + } + } finally { + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Reads all the Ips from text file then adds them all to ban list + **/ + public static void banIps() { + try { + BufferedReader in = new BufferedReader(new FileReader( + "./Data/bans/IpsBanned.txt")); + String data = null; + try { + while ((data = in.readLine()) != null) { + addIpToBanList(data); + } + } finally { + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void muteIps() { + try { + BufferedReader in = new BufferedReader(new FileReader( + "./Data/bans/IpsMuted.txt")); + String data = null; + try { + while ((data = in.readLine()) != null) { + mutedIps.add(data); + } + } finally { + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Writes the username into the text file - when using the ::ban playername + * command + **/ + public static void addNameToFile(String Name) { + try { + BufferedWriter out = new BufferedWriter(new FileWriter( + "./Data/bans/UsersBanned.txt", true)); + try { + out.newLine(); + out.write(Name); + } finally { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void addUserToFile(String Name) { + try { + BufferedWriter out = new BufferedWriter(new FileWriter( + "./Data/bans/UsersMuted.txt", true)); + try { + out.newLine(); + out.write(Name); + } finally { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Writes the IP into the text file - use ::ipban username + **/ + public static void addIpToFile(String Name) { + try { + BufferedWriter out = new BufferedWriter(new FileWriter( + "./Data/bans/IpsBanned.txt", true)); + try { + out.newLine(); + out.write(Name); + } finally { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void addIpToMuteFile(String Name) { + try { + BufferedWriter out = new BufferedWriter(new FileWriter( + "./Data/bans/IpsMuted.txt", true)); + try { + out.newLine(); + out.write(Name); + } finally { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static boolean isMuted(Client c) { + return mutedNames.contains(c.playerName.toLowerCase()) + || mutedIps.contains(c.connectedFrom); + } + +} diff --git a/2006Redone Server/src/redone/Constants.java b/2006Redone Server/src/redone/Constants.java new file mode 100644 index 00000000..2d974619 --- /dev/null +++ b/2006Redone Server/src/redone/Constants.java @@ -0,0 +1,190 @@ +package redone; + +public class Constants { + + public final static boolean SERVER_DEBUG = false; + + public final static String SERVER_NAME = "2006Redone", SERVER_VERSION = "Server Stage v " + Constants.TEST_VERSION + "."; + public final static double TEST_VERSION = 1.13; + public static int BANK_SIZE = 352; + public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE, CLIENT_VERSION = 999999, + WORLD = 1, IPS_ALLOWED = 3, CONNECTION_DELAY = 100, + MESSAGE_DELAY = 6000, MAX_PLAYERS = 100, REQ_AMOUNT = 150; + public final static boolean SOUND = true, MEMBERS_AREAS = true, + GUILDS = true, MEMBERSHIP = true, WORLD_LIST_FIX = false, + PARTY_ROOM_DISABLED = true, combatSounds = true, + printobjectId = false, EXPERIMENTS = false; + public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151, + 18128, 5065, 5715, 2449, 904, 147, 962 }; + public static boolean TUTORIAL_ISLAND = true, HOLIDAYS = true, + MEMBERS_ONLY = false, sendServerPackets = false, HALLOWEEN = false; + + public final static int HAT = 0, CAPE = 1, AMULET = 2, WEAPON = 3, + CHEST = 4, SHIELD = 5, LEGS = 7, HANDS = 9, FEET = 10, RING = 12, + ARROWS = 13; + + public final static int[] COMBAT_RELATED_ITEMS = { 35, 39, 40, 41, 42, 43, + 44, 50, 53, 54, 60, 64, 75, 76, 78, 88, 546, 548, 577, 581, 598, + 626, 628, 630, 632, 634, 667, 687, 746, 747, 767, 772, 775, 776, + 777, 778, 818, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, + 857, 859, 861, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 942, 975, 1007, 1019, 1021, + 1023, 1027, 1029, 1031, 1033, 1035, 1052, 1059, 1061, 1063, 1065, + 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, + 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, + 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, + 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, + 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, + 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, + 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, + 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1237, 1239, 1241, 1243, + 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, + 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, + 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, + 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, + 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, + 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, + 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, + 1399, 1401, 1403, 1405, 1407, 1409, 1419, 1420, 1422, 1424, 1426, + 1428, 1430, 1432, 1434, 1540, 1718, 1724, 2402, 2412, 2413, 2414, + 2415, 2416, 2417, 2487, 2489, 2491, 2493, 2495, 2497, 2499, 2501, + 2503, 2513, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, + 2541, 2577, 2579, 2581, 2583, 2585, 2587, 2589, 2591, 2593, 2595, + 2597, 2599, 2601, 2603, 2605, 2607, 2609, 2611, 2613, 2615, 2617, + 2619, 2621, 2623, 2625, 2627, 2629, 2653, 2655, 2659, 2661, 2663, + 2667, 2669, 2671, 2673, 2861, 2864, 2865, 2866, 2890, 2896, 2906, + 2916, 2926, 2936, 2961, 2963, 3053, 3054, 3095, 3096, 3097, 3098, + 3099, 3100, 3101, 3105, 3107, 3122, 3140, 3170, 3171, 3172, 3173, + 3174, 3175, 3176, 3190, 3192, 3194, 3196, 3198, 3200, 3202, 3204, + 3327, 3329, 3331, 3333, 3335, 3337, 3339, 3341, 3343, 3385, 3387, + 3389, 3391, 3393, 3472, 3473, 3474, 3475, 3476, 3477, 3479, 3481, + 3483, 3485, 3486, 3488, 3748, 3749, 3751, 3753, 3755, 3757, 3758, + 3759, 3761, 3763, 3765, 3767, 3769, 3771, 3773, 3775, 3777, 3779, + 3781, 3783, 3785, 3787, 3789, 3791, 3797, 3840, 3841, 3842, 3843, + 3844, 4087, 4089, 4091, 4093, 4095, 4097, 4099, 4101, 4103, 4105, + 4107, 4109, 4111, 4113, 4115, 4117, 4119, 4121, 4123, 4125, 4127, + 4129, 4131, 4150, 4151, 4153, 4156, 4158, 4160, 4170, 4172, 4173, + 4174, 4175, 4212, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, + 4222, 4223, 4224, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, + 4234, 4298, 4300, 4302, 4304, 4308, 4310, 4502, 4503, 4504, 4505, + 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4580, 4582, 4585, 4587, + 4600, 4675, 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, + 4726, 4728, 4730, 4732, 4734, 4736, 4738, 4740, 4745, 4747, 4749, + 4751, 4753, 4755, 4757, 4759, 4778, 4783, 4788, 4793, 4803, 4827, + 4860, 4866, 4872, 4878, 4884, 4890, 4896, 4902, 4908, 4914, 4920, + 4926, 4932, 4938, 4944, 4950, 4956, 4962, 4968, 4974, 4980, 4986, + 4992, 4998, 5014, 5016, 5018, 5553, 5554, 5555, 5556, 5557, 5574, + 5575, 5576, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, + 5625, 5626, 5627, 5648, 5654, 5655, 5656, 5657, 5658, 5659, 5660, + 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5670, 5672, 5674, + 5676, 5678, 5680, 5682, 5686, 5688, 5690, 5692, 5694, 5696, 5698, + 5700, 5704, 5706, 5708, 5710, 5712, 5714, 5716, 5718, 5720, 5722, + 5724, 5726, 5728, 5730, 5734, 5736, 6061, 6062, 6106, 6107, 6108, + 6109, 6110, 6111, 6128, 6129, 6130, 6131, 6133, 6135, 6137, 6139, + 6141, 6143, 6145, 6147, 6149, 6151, 6153, 6235, 6257, 6279, 6313, + 6315, 6317, 6322, 6324, 6326, 6328, 6330, 6416, 6522, 6523, 6524, + 6525, 6526, 6527, 6528, 6562, 6563, 6568, 6570, 6587, 6589, 6591, + 6593, 6595, 6597, 6599, 6601, 6603, 6605, 6607, 6609, 6611, 6613, + 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6720, + 6724, 6726, 6739, 6745, 6746, 6760, 6762, 6764, 6809, 6889, 6893, + 6894, 6895, 6897, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, + 6924, 6959, 7158, 7159, 7332, 7334, 7336, 7338, 7340, 7342, 7344, + 7346, 7348, 7350, 7352, 7354, 7356, 7358, 7360, 7362, 7364, 7366, + 7368, 7374, 7390, 7392, 7394, 7396, 7398, 7399, 7400, 7410, 7433, + 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7454, + 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7539, 7552, 7553, + 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7668, + 7686, 7687, 7806, 7807, 7808, 7809 }; + + public final static int[] ALCOHOL_RELATED_ITEMS = { 8940, 3803, 3712, 3711, + 2092, 2074, 3801 }; + + public final static int[] ITEM_SELLABLE = { 3842, 3844, 3840, 8844, 8845, + 8846, 8847, 8848, 8849, 8850, 10551, 6570, 7462, 7461, 7460, 7459, + 7458, 7457, 7456, 7455, 7454, 8839, 8840, 8842, 11663, 11664, 11666, + 10499, 9748, 9754, 9751, 9769, 9757, 9760, 9763, 9802, 9808, 9784, + 9799, 9805, 9781, 9796, 9793, 9775, 9772, 9778, 9787, 9811, 9766, + 9749, 9755, 9752, 9770, 9758, 9761, 9764, 9803, 9809, 9785, 9800, + 9806, 9782, 9797, 9794, 9776, 9773, 9779, 9788, 9812, 9767, 9747, + 9753, 9750, 9768, 9756, 9759, 9762, 9801, 9807, 9783, 9798, 9804, + 9780, 9795, 9792, 9774, 9771, 9777, 9786, 9810, 9765, 995, 2415, + 2416, 2417, 88, 1540, 2714, 432, 433, 1555, 1556, 1557, 1558, 1559, + 1560, 1561, 1562, 1563, 1564, 1565, 7585, 7584, 300, 775, 776, 777, + 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 2528, 4447, + 290, 666, 667 }; + public final static int[] ITEM_TRADEABLE = { 3842, 3844, 3840, 8844, 8845, + 8846, 8847, 8848, 8849, 8850, 10551, 6570, 7462, 7461, 7460, 7459, + 7458, 7457, 7456, 7455, 7454, 8839, 8840, 8842, 11663, 11664, + 11665, 10499, 9748, 9754, 9751, 9769, 9757, 9760, 9763, 9802, 9808, + 9784, 9799, 9805, 9781, 9796, 9793, 9775, 9772, 9778, 9787, 9811, + 9766, 9749, 9755, 9752, 9770, 9758, 9761, 9764, 9803, 9809, 9785, + 9800, 9806, 9782, 9797, 9794, 9776, 9773, 9779, 9788, 9812, 9767, + 9747, 9753, 9750, 9768, 9756, 9759, 9762, 9801, 9807, 9783, 9798, + 9804, 9780, 9795, 9792, 9774, 9771, 9777, 9786, 9810, 9765, 2528, + 4447, 772, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, + 775, 776, 777, 300, 88, 2415, 2416, 2417, 4214, 4215, 4216, 4217, + 4218, 4219, 4220, 4221, 4222, 4223, 4224, 1555, 1556, 1557, 1558, + 1559, 1560, 1561, 1562, 1563, 1564, 1565, 7585, 7584, 2714, 432, + 433, 290, 5075, 5074, 5073, 5071, 5070, 7413, 6529, 4067, 2996, 1464, 666, 667 }; + + public final static int[] ITEM_UNALCHABLE = { 995, 1555, 1556, 1557, 1558, + 1559, 1560, 1561, 1562, 1563, 1564, 1565, 7583, 1566, 7585, 2528, + 4214, 4212, 2714, 432, 433, 300, 775, 776, 777, 6180, 6181, 6182, + 6183, 6184, 6185, 6186, 6187, 6188, 2528, 4447, 290, 666, 667}; + + public final static int[] ITEM_BANKABLE = {2528, 4447}; + + public final static int[] DESTROYABLE_ITEMS = {775, 776, 777, 2528, 6570, 2714, 432, 433, 300, 666}; + + public final static int[] FUN_WEAPONS = { 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475, + 2476, 2477 }; // fun weapons for dueling + + public static boolean ADMIN_CAN_TRADE = false; // can admins trade? + public final static boolean ADMIN_DROP_ITEMS = false; + public final static boolean ADMIN_CAN_SELL_ITEMS = false; + public final static int RESPAWN_X = 3222; // when dead respawn here + public final static int RESPAWN_Y = 3218; + public final static int DUELING_RESPAWN_X = 3362; + public final static int DUELING_RESPAWN_Y = 3263; + public final static int NO_TELEPORT_WILD_LEVEL = 20; + public final static int SKULL_TIMER = 1200; + public final static int TELEBLOCK_DELAY = 20000; + public final static boolean SINGLE_AND_MULTI_ZONES = true; + public final static boolean COMBAT_LEVEL_DIFFERENCE = true; + public final static boolean itemRequirements = true; + public final static int MELEE_EXP_RATE = 4; // damage * exp rate + public final static int RANGE_EXP_RATE = 4; + public final static int MAGIC_EXP_RATE = 4; + public final static int CASTLE_WARS_X = 2439; + public final static int CASTLE_WARS_Y = 3087; + public static double SERVER_EXP_BONUS = 5; + public final static int INCREASE_SPECIAL_AMOUNT = 17500; + public final static boolean PRAYER_POINTS_REQUIRED = true; + public final static boolean PRAYER_LEVEL_REQUIRED = true; + public final static int GOD_SPELL_CHARGE = 300000; + public final static boolean CORRECT_ARROWS = true; + public final static boolean CRYSTAL_BOW_DEGRADES = true; + public final static int SAVE_TIMER = 120; // save every 2 minute + public final static int NPC_RANDOM_WALK_DISTANCE = 5; + public final static int NPC_FOLLOW_DISTANCE = 10; + public final static String[] UNDEAD = { + "armoured zombie", "ankous", "banshee", "crawling hand", "dried zombie", "ghost", "ghostly warrior", "ghast", + "mummy", "mighty banshee", "reventant imp", "reventant goblin", "reventant icefiend", "reventant pyrefiend", + "reventant hobgoblin", "reventant vampyre", "reventant werewolf", "reventant cyclops", "reventant darkbeast", + "reventant demon", "reventant ork", "reventant hellhound", "reventant knight", "reventant dragon", + "shade", "skeleton", "skeleton brute", "skeleton thug", "skeleton warload", "summoned zombie", + "skorge", "tortured soul", "undead chicken", "undead cow", "undead one", "undead troll", "zombie", "zombie rat", "zogre" + }; + public final static int TIMEOUT = 20; + public final static int CYCLE_TIME = 600; + public final static int BUFFER_SIZE = 10000; + + public final static int ATTACK = 0, DEFENCE = 1, STRENGTH = 2, + HITPOINTS = 3, RANGED = 4, PRAYER = 5, MAGIC = 6, COOKING = 7, + WOODCUTTING = 8, FLETCHING = 9, FISHING = 10, FIREMAKING = 11, + CRAFTING = 12, SMITHING = 13, MINING = 14, HERBLORE = 15, + AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19, + RUNECRAFTING = 20; +} diff --git a/2006Redone Server/src/redone/Server.java b/2006Redone Server/src/redone/Server.java new file mode 100644 index 00000000..40800ac8 --- /dev/null +++ b/2006Redone Server/src/redone/Server.java @@ -0,0 +1,186 @@ +package redone; + +import java.io.IOException; +import java.net.InetSocketAddress; + +import org.apache.mina.common.IoAcceptor; +import org.apache.mina.transport.socket.nio.SocketAcceptor; +import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; + +import redone.event.CycleEventHandler; +import redone.event.TaskScheduler; +import redone.game.content.minigames.FightCaves; +import redone.game.content.minigames.FightPits; +import redone.game.content.minigames.PestControl; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.minigames.trawler.Trawler; +import redone.game.globalworldobjects.Doors; +import redone.game.globalworldobjects.DoubleDoors; +import redone.game.items.ItemDefinitions; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.game.players.PlayerSave; +import redone.game.shops.ShopHandler; +import redone.net.ConnectionHandler; +import redone.net.ConnectionThrottleFilter; +import redone.util.HostBlacklist; +import redone.world.ClanChatHandler; +import redone.world.GlobalDropsHandler; +import redone.world.ItemHandler; +import redone.world.ObjectHandler; +import redone.world.ObjectManager; +import redone.world.clip.ObjectDef; +import redone.world.clip.Region; + +/** + * Server.java + * + * @author Sanity + * @author Graham + * @author Blake + * @author Ryan Lmctruck30 + * @author Integration Julian. + */ +public class Server { + + + public static int[] cannonsX = new int [50]; + public static int[] cannonsY = new int [50]; + public static String[] cannonsO = new String [50]; + public static boolean sleeping; + public static final int cycleRate; + public static boolean UpdateServer = false; + public static long lastMassSave = System.currentTimeMillis(); + private static IoAcceptor acceptor; + private static ConnectionHandler connectionHandler; + private static ConnectionThrottleFilter throttleFilter; + public static boolean shutdownServer = false; + public static int garbageCollectDelay = 40; + public static boolean shutdownClientHandler; + public static int serverlistenerPort; + public static ItemHandler itemHandler = new ItemHandler(); + public static PlayerHandler playerHandler = new PlayerHandler(); + public static NpcHandler npcHandler = new NpcHandler(); + public static ShopHandler shopHandler = new ShopHandler(); + public static ObjectHandler objectHandler = new ObjectHandler(); + public static ObjectManager objectManager = new ObjectManager(); + public static FightCaves fightCaves = new FightCaves(); + public static PestControl pestControl = new PestControl(); + public static Trawler trawler = new Trawler(); + private static final TaskScheduler scheduler = new TaskScheduler(); + public static ClanChatHandler clanChat = new ClanChatHandler(); + + public static TaskScheduler getTaskScheduler() { + return scheduler; + } + + /** + * Port and Cycle rate. + */ + static { + serverlistenerPort = 43594; + cycleRate = 600; + shutdownServer = false; + } + + public static void main(java.lang.String args[]) + throws NullPointerException, IOException { + if (Constants.SERVER_DEBUG) { + System.out.println("@@@@ DEBUG MODE IS ENABLED @@@@"); + } + + /** + * Starting Up Server + */ + System.out.println("Launching " + Constants.SERVER_NAME + "..."); + + /** + * Accepting Connections + */ + acceptor = new SocketAcceptor(); + connectionHandler = new ConnectionHandler(); + + SocketAcceptorConfig sac = new SocketAcceptorConfig(); + sac.getSessionConfig().setTcpNoDelay(false); + sac.setReuseAddress(true); + sac.setBacklog(100); + + throttleFilter = new ConnectionThrottleFilter( + Constants.CONNECTION_DELAY); + sac.getFilterChain().addFirst("throttleFilter", throttleFilter); + acceptor.bind(new InetSocketAddress(serverlistenerPort), + connectionHandler, sac); + + /** + * Initialise Handlers + */ + ObjectDef.loadConfig(); + Region.load(); + Doors.getSingleton().load(); + DoubleDoors.getSingleton().load(); + ItemDefinitions.read(); + GlobalDropsHandler.initialize(); + Connection.initialize(); + HostBlacklist.loadBlacklist(); + + /** + * Server Successfully Loaded + */ + System.out.println("Server listening on port 85.214.117.88: " + + serverlistenerPort); + + /** + * Main Server Tick + */ + try { + while (!Server.shutdownServer) { + Thread.sleep(600); + itemHandler.process(); + playerHandler.process(); + npcHandler.process(); + shopHandler.process(); + objectManager.process(); + CastleWars.process(); + FightPits.process(); + pestControl.process(); + CycleEventHandler.getSingleton().process(); + if (System.currentTimeMillis() - lastMassSave > 300000) { + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + PlayerSave.saveGame((Client) p); + System.out.println("Saved game for " + p.playerName + + "."); + lastMassSave = System.currentTimeMillis(); + } + } + } + } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("A fatal exception has been thrown!"); + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + if (p.inTrade) { + ((Client)p).getTrading().declineTrade(); + } + if(p.duelStatus == 6) { + ((Client)p).getDueling().claimStakedItems(); + } + PlayerSave.saveGame((Client) p); + System.out.println("Saved game for " + p.playerName + "."); + } + } + acceptor = null; + connectionHandler = null; + sac = null; + System.exit(0); + } + + public static boolean playerExecuted = false; + +} diff --git a/2006Redone Server/src/redone/event/CycleEvent.java b/2006Redone Server/src/redone/event/CycleEvent.java new file mode 100644 index 00000000..14d56555 --- /dev/null +++ b/2006Redone Server/src/redone/event/CycleEvent.java @@ -0,0 +1,22 @@ +package redone.event; + +/** + * What the event must implement + * + * @author Stuart + */ +public abstract class CycleEvent { + + /** + * Code which should be ran when the event is executed + * + * @param container + */ + public abstract void execute(CycleEventContainer container); + + /** + * Code which should be ran when the event stops + */ + public abstract void stop(); + +} diff --git a/2006Redone Server/src/redone/event/CycleEventContainer.java b/2006Redone Server/src/redone/event/CycleEventContainer.java new file mode 100644 index 00000000..12678c28 --- /dev/null +++ b/2006Redone Server/src/redone/event/CycleEventContainer.java @@ -0,0 +1,137 @@ +package redone.event; + +/** + * The wrapper for our event + * + * @author Stuart + * @author Null++ + */ + +public class CycleEventContainer { + + /** + * Event owner + */ + private final Object owner; + + /** + * Is the event running or not + */ + private boolean isRunning; + + /** + * The amount of cycles per event execution + */ + private int tick; + + /** + * The actual event + */ + private final CycleEvent event; + + /** + * The current amount of cycles passed + */ + private int cyclesPassed; + + /** + * The event ID + */ + private final int eventID; + + /** + * Sets the event containers details + * + * @param owner + * , the owner of the event + * @param event + * , the actual event to run + * @param tick + * , the cycles between execution of the event + */ + public CycleEventContainer(int id, Object owner, CycleEvent event, int tick) { + eventID = id; + this.owner = owner; + this.event = event; + isRunning = true; + cyclesPassed = 0; + this.tick = tick; + } + + /** + * Execute the contents of the event + */ + public void execute() { + event.execute(this); + } + + /** + * Stop the event from running + */ + public void stop() { + isRunning = false; + event.stop(); + } + + /** + * Does the event need to be ran? + * + * @return true yes false no + */ + public boolean needsExecution() { + if (!isRunning()) { + return false; + } + if (++cyclesPassed >= tick) { + cyclesPassed = 0; + return true; + } + return false; + } + + /** + * Returns the owner of the event + * + * @return + */ + public Object getOwner() { + return owner; + } + + /** + * Is the event running? + * + * @return true yes false no + */ + public boolean isRunning() { + return isRunning; + } + + /** + * Returns the event id + * + * @return id + */ + public int getID() { + return eventID; + } + + /** + * Returns the current cycle/tick. + * + * @return + */ + public int getTick() { + return tick; + } + + /** + * Set the amount of cycles between the execution + * + * @param tick + */ + public void setTick(int tick) { + this.tick = tick; + } + +} diff --git a/2006Redone Server/src/redone/event/CycleEventHandler.java b/2006Redone Server/src/redone/event/CycleEventHandler.java new file mode 100644 index 00000000..6b6939ed --- /dev/null +++ b/2006Redone Server/src/redone/event/CycleEventHandler.java @@ -0,0 +1,138 @@ +package redone.event; + +import java.util.ArrayList; +import java.util.List; + +/** + * Handles all of our cycle based events + * + * @author Stuart + * @author Null++ + */ +public class CycleEventHandler { + + /** + * The instance of this class + */ + private static CycleEventHandler instance; + + /** + * Returns the instance of this class + * + * @return + */ + public static CycleEventHandler getSingleton() { + if (instance == null) { + instance = new CycleEventHandler(); + } + return instance; + } + + /** + * Holds all of our events currently being ran + */ + private final List events; + + /** + * Creates a new instance of this class + */ + public CycleEventHandler() { + events = new ArrayList(); + } + + /** + * Add an event to the list + * + * @param id + * @param owner + * @param event + * @param cycles + */ + public void addEvent(int id, Object owner, CycleEvent event, int cycles) { + events.add(new CycleEventContainer(id, owner, event, cycles)); + } + + /** + * Add an event to the list + * + * @param owner + * @param event + * @param cycles + */ + public void addEvent(Object owner, CycleEvent event, int cycles) { + events.add(new CycleEventContainer(-1, owner, event, cycles)); + } + + /** + * Execute and remove events + */ + public void process() { + List eventsCopy = new ArrayList( + events); + List remove = new ArrayList(); + for (CycleEventContainer c : eventsCopy) { + if (c != null) { + if (c.needsExecution() && c.isRunning()) { + c.execute(); + if (!c.isRunning()) { + remove.add(c); + + } + } + } + } + for (CycleEventContainer c : remove) { + events.remove(c); + } + } + + /** + * Returns the amount of events currently running + * + * @return amount + */ + public int getEventsCount() { + return events.size(); + } + + /** + * Stops all events for a specific owner and id + * + * @param owner + */ + public void stopEvents(Object owner) { + for (CycleEventContainer c : events) { + if (c.getOwner() == owner) { + c.stop(); + } + } + } + + /** + * Stops all events for a specific owner and id + * + * @param owner + * @param id + */ + public void stopEvents(Object owner, int id) { + for (CycleEventContainer c : events) { + if (c.getOwner() == owner && id == c.getID()) { + c.stop(); + } + } + } + + /** + * Stops all events for a specific owner and id + * + * @param id + */ + public void stopEvents(int id) { + for (CycleEventContainer c : events) { + if (id == c.getID()) { + c.stop(); + } + } + } + +} diff --git a/2006Redone Server/src/redone/event/Task.java b/2006Redone Server/src/redone/event/Task.java new file mode 100644 index 00000000..ad49b5b0 --- /dev/null +++ b/2006Redone Server/src/redone/event/Task.java @@ -0,0 +1,180 @@ +package redone.event; + +/** + * Represents a periodic task that can be scheduled with a {@link TaskScheduler} + * . + * + * @author Graham + */ +public abstract class Task { + + /** + * The number of cycles between consecutive executions of this task. + */ + private final int delay; + + /** + * A flag which indicates if this task should be executed once immediately. + */ + private final boolean immediate; + + /** + * The current 'count down' value. When this reaches zero the task will be + * executed. + */ + private int countdown; + + /** + * A flag which indicates if this task is still running. + */ + private boolean running = true; + + /** + * Creates a new task with a delay of 1 cycle. + */ + public Task() { + this(1); + } + + /** + * Creates a new task with a delay of 1 cycle and immediate flag. + * + * @param immediate + * A flag that indicates if for the first execution there should + * be no delay. + */ + public Task(boolean immediate) { + this(1, immediate); + } + + /** + * Creates a new task with the specified delay. + * + * @param delay + * The number of cycles between consecutive executions of this + * task. + * @throws IllegalArgumentException + * if the {@code delay} is not positive. + */ + public Task(int delay) { + this(delay, false); + } + + /** + * Creates a new task with the specified delay and immediate flag. + * + * @param delay + * The number of cycles between consecutive executions of this + * task. + * @param immediate + * A flag which indicates if for the first execution there should + * be no delay. + * @throws IllegalArgumentException + * if the {@code delay} is not positive. + */ + public Task(int delay, boolean immediate) { + checkDelay(delay); + this.delay = delay; + countdown = delay; + this.immediate = immediate; + } + + /** + * Checks if this task is an immediate task. + * + * @return {@code true} if so, {@code false} if not. + */ + public boolean isImmediate() { + return immediate; + } + + /** + * Checks if the task is running. + * + * @return {@code true} if so, {@code false} if not. + */ + public boolean isRunning() { + return running; + } + + /** + * Checks if the task is stopped. + * + * @return {@code true} if so, {@code false} if not. + */ + public boolean isStopped() { + return !running; + } + + /** + * This method should be called by the scheduling class every cycle. It + * updates the {@link #countdown} and calls the {@link #execute()} method if + * necessary. + * + * @return A flag indicating if the task is running. + */ + public boolean tick() { + if (running && --countdown == 0) { + execute(); + countdown = delay; + } + return running; + } + + /** + * Performs this task's action. + */ + protected abstract void execute(); + + /** + * Changes the delay of this task. + * + * @param delay + * The number of cycles between consecutive executions of this + * task. + * @throws IllegalArgumentException + * if the {@code delay} is not positive. + */ + public void setDelay(int delay) { + checkDelay(delay); + delay = 0; + } + + /** + * Stops this task. + * + * @throws IllegalStateException + * if the task has already been stopped. + */ + public void stop() { + checkStopped(); + running = false; + } + + /** + * Checks if the delay is negative and throws an exception if so. + * + * @param delay + * The delay. + * @throws IllegalArgumentException + * if the delay is not positive. + */ + private void checkDelay(int delay) { + if (delay <= 0) { + throw new IllegalArgumentException("Delay must be positive."); + } + } + + /** + * Checks if this task has been stopped and throws an exception if so. + * + * @throws IllegalStateException + * if the task has been stopped. + */ + private void checkStopped() { + if (!running) { + throw new IllegalStateException(); + } + } + +} diff --git a/2006Redone Server/src/redone/event/TaskScheduler.java b/2006Redone Server/src/redone/event/TaskScheduler.java new file mode 100644 index 00000000..d6bfe9ba --- /dev/null +++ b/2006Redone Server/src/redone/event/TaskScheduler.java @@ -0,0 +1,114 @@ +package redone.event; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * A class which schedules the execution of {@link Task}s. + * + * @author Graham + */ +public final class TaskScheduler implements Runnable { + + /** + * A logger used to report error messages. + */ + private static final Logger logger = Logger.getLogger(TaskScheduler.class + .getName()); + + /** + * The time period, in milliseconds, of a single cycle. + */ + private static final int TIME_PERIOD = 600; + + /** + * The {@link ScheduledExecutorService} which schedules calls to the + * {@link #run()} method. + */ + private final ScheduledExecutorService service = Executors + .newSingleThreadScheduledExecutor(); + + /** + * A list of active tasks. + */ + private final List tasks = new ArrayList(); + + /** + * A queue of tasks that still need to be added. + */ + private final Queue newTasks = new ArrayDeque(); + + /** + * Creates and starts the task scheduler. + */ + public TaskScheduler() { + service.scheduleAtFixedRate(this, 0, TIME_PERIOD, TimeUnit.MILLISECONDS); + } + + /** + * Stops the task scheduler. + */ + public void terminate() { + service.shutdown(); + } + + /** + * Schedules the specified task. If this scheduler has been stopped with the + * {@link #terminate()} method the task will not be executed or + * garbage-collected. + * + * @param task + * The task to schedule. + */ + public void schedule(final Task task) { + if (task.isImmediate()) { + service.execute(new Runnable() { + + @Override + public void run() { + task.execute(); + } + }); + } + + synchronized (newTasks) { + newTasks.add(task); + } + } + + /** + * This method is automatically called every cycle by the + * {@link ScheduledExecutorService} and executes, adds and removes + * {@link Task}s. It should not be called directly as this will lead to + * concurrency issues and inaccurate time-keeping. + */ + @Override + public void run() { + synchronized (newTasks) { + Task task; + while ((task = newTasks.poll()) != null) { + tasks.add(task); + } + } + + for (Iterator it = tasks.iterator(); it.hasNext();) { + Task task = it.next(); + try { + if (!task.tick()) { + it.remove(); + } + } catch (Throwable t) { + logger.log(Level.SEVERE, "Exception during task execution.", t); + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/BankPin.java b/2006Redone Server/src/redone/game/content/BankPin.java new file mode 100644 index 00000000..5b5f7d4e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/BankPin.java @@ -0,0 +1,351 @@ +package redone.game.content; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Handles the BankPin on Bank's + * + * @author Michael + * @author Ian / Core + * @author Linus + * @author Genesis + */ + +public class BankPin { + + public int recovery_Delay = 3; + + private final Client client; + + public BankPin(Client client) { + this.client = client; + } + + public int allowTimer = 2000000; + + public int dateExpired() { + return client.pinDeleteDateRequested = dateRequested() + recovery_Delay; + } + + public int dateRequested() { + Calendar cal = new GregorianCalendar(); + int day = cal.get(Calendar.DAY_OF_MONTH); + int month = cal.get(Calendar.MONTH); + int year = cal.get(Calendar.YEAR); + return client.pinDeleteDateRequested = year * 10000 + month * 100 + day; + } + + public void closeBankPin() { + firstPin = secondPin = thirdPin = fourthPin = client.playerBankPin = 0; + falseButtons(); + client.getPlayerAssistant().removeAllWindows(); + } + + public void pinSettingFrames() { + int pinSendFrames[] = { 15075, 15080, 15110, 15171, 15076, 15176, + 15104, 15082, 15079 }; + for (int j = 0; j < 9; j++) { + client.getPlayerAssistant().sendFrame126("", pinSendFrames[j]); + } + client.getPlayerAssistant().sendFrame126("Welcome to our bank", 15038); + client.getPlayerAssistant().sendFrame126("recovery system.", 15039); + client.getPlayerAssistant().sendFrame126("Remember, it's important", + 15040); + client.getPlayerAssistant() + .sendFrame126("to change your recovery", 15041); + client.getPlayerAssistant().sendFrame126("pin and password", 15042); + client.getPlayerAssistant().sendFrame126("every 1-3 months", 15043); + if (!client.hasBankpin) { + client.getPlayerAssistant().sendFrame126("Set a Bank Pin", 15078); + client.getPlayerAssistant().sendFrame126("No PIN Set", 15105); + } else { + client.getPlayerAssistant().sendFrame126("Delete your PIN", 15078); + if (client.requestPinDelete) { + client.getPlayerAssistant().sendFrame126("Pending delete", 15105); + } else { + client.getPlayerAssistant().sendFrame126("Has Bank PIN", 15105); + } + } + client.getPlayerAssistant().sendFrame126(recovery_Delay + " days", 15107); + } + + public void bankPinSettings() { + pinSettingFrames(); + client.getPlayerAssistant().showInterface(14924); + } + + private int resetBankNumbers() { + return firstPin = secondPin = thirdPin = fourthPin = client.playerBankPin = client.firstPin = client.secondPin = client.thirdPin = client.fourthPin = -1; + } + + public boolean resetBankPin() { + resetBankNumbers(); + falseButtons(); + client.getPlayerAssistant().closeAllWindows(); + return client.hasBankpin = false; + } + + public void bankPinEnter(int button) { + if (allowTimer > 0 && allowTimer <= 300000) { + int time = allowTimer / 6000; + if (time >= 2) { + client.getActionSender() + .sendMessage( + "Please wait " + + time + + " minutes before attempting your bank pin again."); + } else if (time == 1) { + client.getActionSender() + .sendMessage( + "Please wait " + + time + + " minute before attempting your bank pin again."); + } else if (time <= 0) { + client.getActionSender() + .sendMessage( + "Please wait less " + + "than a minute before attempting your bank pin again."); + } + return; + } + sendPins(); + if (!client.firstPinEnter) { + handleButtonOne(button); + } else if (!client.secondPinEnter) { + handleButtonTwo(button); + } else if (!client.thirdPinEnter) { + handleButtonThree(button); + } else if (!client.fourthPinEnter) { + handleButtonFour(button); + } + } + + public void openPin() { + if (client.enterdBankpin) { + client.getPlayerAssistant().openUpBank(); + return; + } + randomizeNumbers(); + client.getPlayerAssistant().sendFrame126("First click the FIRST digit", + 15313); + client.getPlayerAssistant().sendFrame126("", 14923); + int pinSendFrames[] = { 14913, 14914, 14915, 14916 }; + for (int j = 0; j < 4; j++) { + client.getPlayerAssistant().sendFrame126("?", pinSendFrames[j]); + } + client.getPlayerAssistant().showInterface(7424); + sendPins(); + } + + private void sendPins() { + if (client.enterdBankpin) { + client.getPlayerAssistant().openUpBank(); + return; + } + for (int i = 0; i < getBankPins().length; i++) { + client.getPlayerAssistant().sendFrame126("" + getBankPins()[i], + stringIds[i]); + } + } + + private void handleButtonOne(int button) { + client.getPlayerAssistant().sendFrame126("Now click the SECOND digit", + 15313); + client.getPlayerAssistant().sendFrame126("*", 14913); + for (int i = 0; i < getActionButtons().length; i++) { + if (getActionButtons()[i] == button) { + firstPin = getBankPins()[i]; + } + } + client.firstPinEnter = true; + randomizeNumbers(); + } + + private void handleButtonTwo(int button) { + client.getPlayerAssistant().sendFrame126("Now click the THIRD digit", + 15313); + client.getPlayerAssistant().sendFrame126("*", 14914); + for (int i = 0; i < getActionButtons().length; i++) { + if (getActionButtons()[i] == button) { + secondPin = getBankPins()[i]; + } + } + client.secondPinEnter = true; + randomizeNumbers(); + } + + private void handleButtonThree(int button) { + client.getPlayerAssistant().sendFrame126("Now click the LAST digit", + 15313); + client.getPlayerAssistant().sendFrame126("*", 14915); + for (int i = 0; i < getActionButtons().length; i++) { + if (getActionButtons()[i] == button) { + thirdPin = getBankPins()[i]; + } + } + client.thirdPinEnter = true; + randomizeNumbers(); + } + + private boolean falseButtons() { + return client.fourthPinEnter = client.thirdPinEnter = client.secondPinEnter = client.firstPinEnter = false; + } + + private void handleButtonFour(int button) { + if (client.enterdBankpin) { + client.getPlayerAssistant().openUpBank(); + return; + } + client.getPlayerAssistant().sendFrame126("*", 14916); + for (int i = 0; i < getActionButtons().length; i++) { + if (getActionButtons()[i] == button) { + fourthPin = getBankPins()[i]; + } + } + client.fourthPinEnter = true; + if (!client.hasBankpin) { + client.firstPin = client.bankPin1 = firstPin; + client.secondPin = client.bankPin2 = secondPin; + client.thirdPin = client.bankPin3 = thirdPin; + client.fourthPin = client.bankPin4 = fourthPin; + client.hasBankpin = client.enterdBankpin = true; + client.getActionSender().sendMessage( + "You have just created a bank pin."); + client.getActionSender().sendMessage( + "Your new Bank PIN is: " + firstPin + " - " + secondPin + + " - " + thirdPin + " - " + fourthPin); + client.saveCharacter = true; + } + + int one = firstPin, two = secondPin, three = thirdPin, four = fourthPin; + if (client.bankPin1 == one && client.bankPin2 == two + && client.bankPin3 == three && client.bankPin4 == four) { + falseButtons(); + client.getPlayerAssistant().removeAllWindows(); + client.enterdBankpin = true; + client.playerBankPin = 15000; + client.getPlayerAssistant().openUpBank(); + + } else { + client.attemptsRemaining--; + if (client.attemptsRemaining <= 0) { + allowTimer = 30000; + } + if (client.attemptsRemaining == -1) { + client.attemptsRemaining = 3; + allowTimer = 2000000; + } + if (client.attemptsRemaining > 1) { + client.getActionSender().sendMessage( + "Invalid pin. You have " + client.attemptsRemaining + + " attempts remaining."); + } else if (client.attemptsRemaining == 1) { + client.getActionSender().sendMessage( + "Invalid pin. You have " + client.attemptsRemaining + + " attempt remaining."); + } else if (client.attemptsRemaining <= 0) { + client.getActionSender() + .sendMessage( + "Invalid pin. You must wait 5 minutes before attempting again."); + } + client.getPlayerAssistant().removeAllWindows(); + falseButtons(); + } + } + + private void randomizeNumbers() { + int i = Misc.random(4); + if (i == client.lastPinSettings) { + i = client.lastPinSettings == 0 ? client.lastPinSettings + : client.lastPinSettings; + } + switch (i) { + case 0: + bankPins[0] = 1; + bankPins[1] = 7; + bankPins[2] = 0; + bankPins[3] = 8; + bankPins[4] = 4; + bankPins[5] = 6; + bankPins[6] = 5; + bankPins[7] = 9; + bankPins[8] = 3; + bankPins[9] = 2; + break; + + case 1: + bankPins[0] = 5; + bankPins[1] = 4; + bankPins[2] = 3; + bankPins[3] = 7; + bankPins[4] = 8; + bankPins[5] = 6; + bankPins[6] = 9; + bankPins[7] = 2; + bankPins[8] = 1; + bankPins[9] = 0; + break; + + case 2: + bankPins[0] = 4; + bankPins[1] = 7; + bankPins[2] = 6; + bankPins[3] = 5; + bankPins[4] = 2; + bankPins[5] = 3; + bankPins[6] = 1; + bankPins[7] = 8; + bankPins[8] = 9; + bankPins[9] = 0; + break; + + case 3: + bankPins[0] = 9; + bankPins[1] = 4; + bankPins[2] = 2; + bankPins[3] = 7; + bankPins[4] = 8; + bankPins[5] = 6; + bankPins[6] = 0; + bankPins[7] = 3; + bankPins[8] = 1; + bankPins[9] = 5; + break; + } + client.lastPinSettings = i; + sendPins(); + } + + private final int bankPins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + private final int stringIds[] = { 14883, 14884, 14885, 14886, 14887, 14888, + 14889, 14890, 14891, 14892 }; + private final int actionButtons[] = { 58025, 58026, 58027, 58028, 58029, + 58030, 58031, 58032, 58033, 58034 }; + + private int[] getBankPins() { + return bankPins; + } + + private int[] getActionButtons() { + return actionButtons; + } + + private int firstPin; + private int secondPin; + private int thirdPin; + private int fourthPin; + + @Override + public String toString() { + return "BankPin{" + "recovery_Delay=" + recovery_Delay + ", client=" + + client + ", allowTimer=" + allowTimer + ", bankPins=" + + bankPins + ", stringIds=" + stringIds + ", actionButtons=" + + actionButtons + ", firstPin=" + firstPin + ", secondPin=" + + secondPin + ", thirdPin=" + thirdPin + ", fourthPin=" + + fourthPin + '}'; + } +} diff --git a/2006Redone Server/src/redone/game/content/EmoteHandler.java b/2006Redone Server/src/redone/game/content/EmoteHandler.java new file mode 100644 index 00000000..4af83243 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/EmoteHandler.java @@ -0,0 +1,71 @@ +package redone.game.content; + +import java.util.HashMap; + +import redone.game.players.Client; + +public class EmoteHandler { + + private final Client player; + + public EmoteHandler(Client c) { + this.player = c; + } + + public Emotes EMOTES = null; + + public enum Emotes { + Yes(168, 855, -1), No(169, 856, -1), Bow(164, 858, -1), Angry(167, 864, + -1), Think(162, 857, -1), Wave(163, 863, -1), Shrug(52058, + 2113, -1), Cheer(171, 862, -1), Beckon(165, 859, -1), Laugh( + 170, 861, -1), Jump_For_Joy(52054, 2109, -1), Yawn(52056, 2111, + -1), Dance(166, 866, -1), Jig(52051, 2106, -1), Twirl(52052, + 2107, -1), Headbang(52053, 2108, -1), Cry(161, 860, -1), Blow_Kiss( + 43092, 0x558, 574), Panic(52050, 2105, -1), Rasberry(52055, + 2110, -1), Clap(172, 865, -1), Salute(52057, 2112, -1), Goblin_Bow( + 52071, 0x84F, -1), Goblin_Salute(52072, 0x850, -1), Glass_Box( + 2155, 0x46B, -1), Climb_Rope(25103, 0x46A, -1), Lean(25106, + 0x469, -1), Glass_Wall(2154, 0x468, -1), Idea(88060, 4276, 712), Stomp( + 88061, 4278, -1), Flap(88062, 4280, -1), Slap_Head(88063, 4275, + -1), Zombie_Walk(72032, 3544, -1), Zombie_Dance(72033, 3543, -1), Zombie_Hand( + 88065, 7272, 1244), Scared(59062, 2836, -1), Bunny_Hop(72254, + 3866, -1); + + private Emotes(int buttonId, int animId, int gfxId) { + buttonID = buttonId; + animID = animId; + gfxID = gfxId; + } + + public static HashMap emotes = new HashMap(); + + public static Emotes loadEmote(int buttonId) { + return emotes.get(buttonId); + } + + static { + for (Emotes e : Emotes.values()) { + emotes.put(e.buttonID, e); + } + } + + public int gfxID; + public int animID; + public int buttonID; + } + + public void startEmote(int buttonId) { + Emotes EMOTES = Emotes.loadEmote(buttonId); + if (EMOTES != null && this.EMOTES == null) { + this.EMOTES = EMOTES; + if (EMOTES.animID != 1) { + if (player.tutorialProgress == 10) { + player.getDialogueHandler().sendDialogues(3039, 0); + } + player.startAnimation(EMOTES.animID); + EMOTES = null; + this.EMOTES = null; + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/MemberShipHandler.java b/2006Redone Server/src/redone/game/content/MemberShipHandler.java new file mode 100644 index 00000000..b737cad3 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/MemberShipHandler.java @@ -0,0 +1,90 @@ +package redone.game.content; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +/** + * Membership Handler + * @author Andrew's + */ + +public class MemberShipHandler { + + public static final boolean MEMBERS_AREAS = true; + + public static boolean isMembers(Client player) { + if (!player.membership && player.playerRights < 2) { + player.getActionSender() + .sendMessage( + "You can't use this feature because this is a members only feature."); + player.getActionSender().sendClearScreen(); + return false; + } + return true; + } + + public static boolean membersAreas(Client player) { + player.getActionSender().sendMessage( + "This member area is currently disabled until finished sorry."); + player.getActionSender().sendClearScreen(); + return false; + } + + private static void updateBank(Client player) { + if (player.membership && Constants.MEMBERSHIP) { + Constants.BANK_SIZE = 352; + } else { + player.getActionSender().sendMessage( + "Error in the updating bank process."); + } + } + + public void teleHome(Client player) { + if (player.membership == true) { + String type = player.playerMagicBook == 0 ? "modern" : "ancient"; + player.getPlayerAssistant().startTeleport(Constants.RESPAWN_X, + Constants.RESPAWN_Y, 0, type); + player.getActionSender().sendMessage( + "You teleport to Lumbridge."); + } else { + player.getActionSender().sendMessage( + "Teleporting is disabled for non members."); + } + } + + public static void giveMembership(final Client other, final Client player) { + CycleEventHandler.getSingleton().addEvent(other, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (Constants.MEMBERSHIP) { + other.membership = true; + updateBank(other); + other.getActionSender().sendMessage( + "You have been awarded membership!"); + other.getActionSender().sendMessage( + "You now have " + Constants.BANK_SIZE + + " bank slots!");// to test + other.getActionSender().sendMessage( + "You can now do ::membercommands for commands!"); + other.getActionSender().sendMessage( + "You may now use the ancient magicks book!"); + other.getActionSender() + .sendMessage( + "Your membership lasts forever enjoy! You will be logged so the changes can take place."); + other.logout(); + stop(); + } else { + player.getActionSender().sendMessage("Awarding membership has been disabled."); + container.stop(); + } + } + @Override + public void stop() { + + } + }, 3); + } +} diff --git a/2006Redone Server/src/redone/game/content/combat/CombatAssistant.java b/2006Redone Server/src/redone/game/content/combat/CombatAssistant.java new file mode 100644 index 00000000..6aa88336 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/CombatAssistant.java @@ -0,0 +1,2348 @@ +package redone.game.content.combat; + +import redone.Constants; +import redone.Server; +import redone.game.content.combat.magic.CastOnOther; +import redone.game.content.combat.magic.MagicData; +import redone.game.content.combat.magic.MagicMaxHit; +import redone.game.content.combat.magic.MagicRequirements; +import redone.game.content.combat.magic.MagicSpells; +import redone.game.content.combat.melee.MeleeData; +import redone.game.content.combat.melee.MeleeMaxHit; +import redone.game.content.combat.npcs.NpcEmotes; +import redone.game.content.combat.prayer.PrayerDrain; +import redone.game.content.combat.range.RangeData; +import redone.game.content.combat.range.RangeMaxHit; +import redone.game.content.minigames.FightCaves; +import redone.game.content.minigames.FightPits; +import redone.game.content.minigames.PestControl; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.music.sound.CombatSounds; +import redone.game.content.music.sound.SoundList; +import redone.game.content.skills.slayer.SlayerRequirements; +import redone.game.items.ItemAssistant; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerAssistant; +import redone.game.players.PlayerHandler; +import redone.game.players.antimacro.AntiBotting; +import redone.util.Misc; +import redone.world.clip.PathFinder; + +/** + * Rewritten Combat + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class CombatAssistant { + + private final Client c; + + public CombatAssistant(Client Client) { + c = Client; + } + + public static boolean inCombat(Client c) { + if (c.underAttackBy > 0 || c.underAttackBy2 > 0) { + return true; + } + return false; + } + + public void delayedHit(int i) { // npc hit delay + if (NpcHandler.npcs[i] != null) { + if (NpcHandler.npcs[i].isDead) { + c.npcIndex = 0; + return; + } + if (NpcHandler.npcs[i].attackTimer <= 3 || NpcHandler.npcs[i].attackTimer == 0 && NpcHandler.npcs[i].hitDelayTimer > 0 && !c.castingMagic) { // block animation + NpcHandler.npcs[i].animNumber = NpcEmotes.getBlockEmote(i); // block emote + NpcHandler.npcs[i].animUpdateRequired = true; + NpcHandler.npcs[i].updateRequired = true; + } + if (Constants.combatSounds && NpcHandler.npcs[i].npcType < 3177 && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender().sendSound(CombatSounds.getNpcBlockSound(NpcHandler.npcs[c.oldNpcIndex].npcType), 100, 0); + } + NpcHandler.npcs[i].facePlayer(c.playerId); + if (NpcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.getsPulled(c, i)) { + NpcHandler.npcs[i].killerId = c.playerId; + } else if (NpcHandler.npcs[i].underAttackBy < 0 && !Server.npcHandler.getsPulled(c, i)) { + NpcHandler.npcs[i].killerId = c.playerId; + } + c.lastNpcAttacked = i; + if (c.projectileStage == 0) { // melee hit damage + applyNpcMeleeDamage(i, 1); + if (c.doubleHit) { + applyNpcMeleeDamage(i, 2); + } + } + if (!c.castingMagic && c.projectileStage > 0) { // range hit + // damage + int damage = Misc.random(rangeMaxHit()); + int damage2 = -1; + if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) { + damage2 = Misc.random(rangeMaxHit()); + } + boolean ignoreDef = false; + if (Misc.random(5) == 1 && c.lastArrowUsed == 9243) { + ignoreDef = true; + NpcHandler.npcs[i].gfx0(758); + } + + if (Misc.random(NpcHandler.npcs[i].defence) > Misc + .random(10 + calculateRangeAttack()) && !ignoreDef) { + damage = 0; + } else if (NpcHandler.npcs[i].npcType == 2881 + || NpcHandler.npcs[i].npcType == 2883 && !ignoreDef) { + damage = 0; + } + + if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0) { + NpcHandler.npcs[i].gfx0(754); + damage = NpcHandler.npcs[i].HP / 5; + c.handleHitMask(c.playerLevel[3] / 10); + c.dealDamage(c.playerLevel[3] / 10); + c.gfx0(754); + } + + if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) { + if (Misc.random(NpcHandler.npcs[i].defence) > Misc.random(10 + calculateRangeAttack())) { + damage2 = 0; + } + } + if (c.dbowSpec) { + NpcHandler.npcs[i].gfx100(1100); + if (damage < 8) { + damage = 8; + } + if (damage2 < 8) { + damage2 = 8; + } + c.dbowSpec = false; + } + if (damage > 0 && Misc.random(5) == 1 + && c.lastArrowUsed == 9244) { + damage *= 1.45; + NpcHandler.npcs[i].gfx0(756); + } + + if (NpcHandler.npcs[i].HP - damage < 0) { + damage = NpcHandler.npcs[i].HP; + } + if (NpcHandler.npcs[i].HP - damage <= 0 && damage2 > 0) { + damage2 = 0; + } + if (c.fightMode == 3) {//range shared + c.getPlayerAssistant().addSkillXP(damage * Constants.RANGE_EXP_RATE / 3, 4); + c.getPlayerAssistant().addSkillXP(damage / 3, 1); + c.getPlayerAssistant().addSkillXP(damage / 3, 3); + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(4); + } else { + c.getPlayerAssistant().addSkillXP(damage * Constants.RANGE_EXP_RATE, 4); + c.getPlayerAssistant().addSkillXP(damage * Constants.RANGE_EXP_RATE /3, 3); + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(4); + } + if (damage > 0) { + if (NpcHandler.npcs[i].npcType >= 3777 && NpcHandler.npcs[i].npcType <= 3780 || PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType)) { + c.pcDamage += damage; + } + } + boolean dropArrows = true; + + for (int noArrowId : RangeData.NO_ARROW_DROP) { + if (c.lastWeaponUsed == noArrowId) { + dropArrows = false; + break; + } + } + if (dropArrows) { + c.getItemAssistant().dropArrowNpc(); + } + if (NpcHandler.npcs[i].npcType == FightCaves.TZTOK_JAD && NpcHandler.npcs[i].spawnedBy == c.getId() && ((NpcHandler.npcs[i].HP < (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)) && + (NpcHandler.npcs[i].HP-damage+(damage2 > -1 ? damage2 : 0) < (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)))) { + if (c.canHealersRespawn) { + FightCaves.spawnHealers(c, i, 4-c.spawnedHealers); + } + } + NpcHandler.npcs[i].underAttack = true; + NpcHandler.npcs[i].hitDiff = damage; + NpcHandler.npcs[i].HP -= damage; + if (damage2 > -1) { + NpcHandler.npcs[i].hitDiff2 = damage2; + NpcHandler.npcs[i].HP -= damage2; + c.totalDamageDealt += damage2; + } + if (c.killingNpcIndex != c.oldNpcIndex) { + c.totalDamageDealt = 0; + } + c.killingNpcIndex = c.oldNpcIndex; + c.totalDamageDealt += damage; + NpcHandler.npcs[i].hitUpdateRequired = true; + if (damage2 > -1) { + NpcHandler.npcs[i].hitUpdateRequired2 = true; + } + NpcHandler.npcs[i].updateRequired = true; + + } else if (c.projectileStage > 0) { // magic hit damage + int damage = Misc + .random(MagicData.MAGIC_SPELLS[c.oldSpellId][6]); + if (MagicSpells.godSpells(c)) { + if (System.currentTimeMillis() - c.godSpellDelay < Constants.GOD_SPELL_CHARGE) { + damage += Misc.random(10); + } + } + boolean magicFailed = false; + // c.npcIndex = 0; + int bonusAttack = getBonusAttack(i); + if (Misc.random(NpcHandler.npcs[i].defence) > 10 + + Misc.random(mageAtk()) + bonusAttack) { + damage = 0; + magicFailed = true; + } else if (NpcHandler.npcs[i].npcType == 2881 + || NpcHandler.npcs[i].npcType == 2882) { + damage = 0; + magicFailed = true; + } + + if (NpcHandler.npcs[i].npcType == FightCaves.TZTOK_JAD && NpcHandler.npcs[i].spawnedBy == c.getId() && ((NpcHandler.npcs[i].HP > (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)) && + (NpcHandler.npcs[i].HP-damage < (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)))) { + if (c.canHealersRespawn) + FightCaves.spawnHealers(c, i, 4-c.spawnedHealers); + } + + if (NpcHandler.npcs[i].HP - damage < 0) { + damage = NpcHandler.npcs[i].HP; + } + //magic + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage * Constants.MAGIC_EXP_RATE, 6); + if (MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1161 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1153 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1157 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1542 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1543 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1562) { + c.getPlayerAssistant().addSkillXP(damage * Constants.MAGIC_EXP_RATE / 3, 3); + } + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(6); + + if (damage > 0) { + if (NpcHandler.npcs[i].npcType >= 3777 && NpcHandler.npcs[i].npcType <= 3780 || PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType)) { + c.pcDamage += damage; + } + } + if (MagicSpells.getEndGfxHeight(c) == 100 && !magicFailed) { // end GFX + NpcHandler.npcs[i] + .gfx100(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } else if (!magicFailed) { + NpcHandler.npcs[i] + .gfx0(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } + + if (magicFailed) { + NpcHandler.npcs[i].gfx100(85); + } + if (!magicFailed) { + int freezeDelay = MagicSpells.getFreezeTime(c);// freeze + if (freezeDelay > 0 && NpcHandler.npcs[i].freezeTimer == 0) { + NpcHandler.npcs[i].freezeTimer = freezeDelay; + } + switch (MagicData.MAGIC_SPELLS[c.oldSpellId][0]) { + case 12901: + case 12919: // blood spells + case 12911: + case 12929: + int heal = Misc.random(damage / 2); + if (c.playerLevel[3] + heal >= c.getPlayerAssistant() + .getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getPlayerAssistant() + .getLevelForXP(c.playerXP[3]); + } else { + c.playerLevel[3] += heal; + } + c.getPlayerAssistant().refreshSkill(3); + break; + } + + } + NpcHandler.npcs[i].underAttack = true; + if (MagicData.MAGIC_SPELLS[c.oldSpellId][6] != 0) { + NpcHandler.npcs[i].hitDiff = damage; + NpcHandler.npcs[i].HP -= damage; + NpcHandler.npcs[i].hitUpdateRequired = true; + c.totalDamageDealt += damage; + } + c.killingNpcIndex = c.oldNpcIndex; + NpcHandler.npcs[i].updateRequired = true; + c.usingMagic = false; + c.castingMagic = false; + c.oldSpellId = 0; + } + } + + if (c.bowSpecShot <= 0) { + c.oldNpcIndex = 0; + c.projectileStage = 0; + c.doubleHit = false; + c.lastWeaponUsed = 0; + c.bowSpecShot = 0; + } + if (c.bowSpecShot >= 2) { + c.bowSpecShot = 0; + // c.attackTimer = + // getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()); + } + if (c.bowSpecShot == 1) { + fireProjectileNpc(); + c.hitDelay = 2; + c.bowSpecShot = 0; + } + } + + public void applyNpcMeleeDamage(int i, int damageMask) { + int damage = Misc.random(meleeMaxHit()); + boolean fullVeracsEffect = c.getPlayerAssistant().fullVeracs() + && Misc.random(3) == 1; + if (NpcHandler.npcs[i].HP - damage < 0) { + damage = NpcHandler.npcs[i].HP; + } + + if (!fullVeracsEffect) { + if (Misc.random(NpcHandler.npcs[i].defence) > 10 + Misc + .random(calcAtt())) { + damage = 0; + } else if (NpcHandler.npcs[i].npcType == 2882 + || NpcHandler.npcs[i].npcType == 2883) { + damage = 0; + } + } + if (NpcHandler.npcs[i].HP - damage > 0) { + if (NpcHandler.npcs[i].npcType == FightCaves.TZTOK_JAD && NpcHandler.npcs[i].spawnedBy == c.getId() && ((NpcHandler.npcs[i].HP > (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)) && + (NpcHandler.npcs[i].HP-damage < (FightCaves.getHp(FightCaves.TZTOK_JAD)/2)))) { + if (c.canHealersRespawn) + FightCaves.spawnHealers(c, i, 4-c.spawnedHealers); + } + } + boolean guthansEffect = false; + if (c.getPlayerAssistant().fullGuthans()) { + if (Misc.random(3) == 1) { + guthansEffect = true; + } + } + if (c.fightMode == 3 && NpcHandler.npcs[i].npcType != 2459 && NpcHandler.npcs[i].npcType != 2460 && NpcHandler.npcs[i].npcType != 2461 && NpcHandler.npcs[i].npcType != 2462) { + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 0); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 1); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 2); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 3); + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(2); + c.getPlayerAssistant().refreshSkill(3); + } else { + if (NpcHandler.npcs[i].npcType != 2459 && NpcHandler.npcs[i].npcType != 2460 && NpcHandler.npcs[i].npcType != 2461 && NpcHandler.npcs[i].npcType != 2462) { + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE, c.fightMode); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 3); + c.getPlayerAssistant().refreshSkill(c.fightMode); + c.getPlayerAssistant().refreshSkill(3); + } + } + if (damage > 0) { + if (NpcHandler.npcs[i].npcType >= 3777 && NpcHandler.npcs[i].npcType <= 3780 || PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType)) { + c.pcDamage += damage; + } + } + if (damage > 0 && guthansEffect) { + c.playerLevel[3] += damage; + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + c.getPlayerAssistant().refreshSkill(3); + NpcHandler.npcs[i].gfx0(398); + } + NpcHandler.npcs[i].underAttack = true; + c.killingNpcIndex = c.npcIndex; + c.lastNpcAttacked = i; + switch (c.specEffect) { + case 4: + if (damage > 0) { + if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3])) { + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + ; + } else { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + } else { + c.playerLevel[3] += damage; + } + c.getPlayerAssistant().refreshSkill(3); + } + break; + + } + switch (damageMask) { + case 1: + NpcHandler.npcs[i].hitDiff = damage; + NpcHandler.npcs[i].HP -= damage; + c.totalDamageDealt += damage; + NpcHandler.npcs[i].hitUpdateRequired = true; + NpcHandler.npcs[i].updateRequired = true; + break; + + case 2: + NpcHandler.npcs[i].hitDiff2 = damage; + NpcHandler.npcs[i].HP -= damage; + c.totalDamageDealt += damage; + NpcHandler.npcs[i].hitUpdateRequired2 = true; + NpcHandler.npcs[i].updateRequired = true; + c.doubleHit = false; + break; + + } + } + + public void fireProjectileNpc() { + if (c.oldNpcIndex > 0) { + if (NpcHandler.npcs[c.oldNpcIndex] != null) { + c.projectileStage = 2; + int pX = c.getX(); + int pY = c.getY(); + int nX = NpcHandler.npcs[c.oldNpcIndex].getX(); + int nY = NpcHandler.npcs[c.oldNpcIndex].getY(); + int offX = (pY - nY) * -1; + int offY = (pX - nX) * -1; + c.getPlayerAssistant().createPlayersProjectile(pX, pY, offX, + offY, 50, RangeData.getProjectileSpeed(c), + RangeData.getRangeProjectileGFX(c), 43, 31, c.oldNpcIndex + 1, + MagicSpells.getStartDelay(c)); + if (RangeData.usingDbow(c)) { + c.getPlayerAssistant().createPlayersProjectile2(pX, pY, + offX, offY, 50, RangeData.getProjectileSpeed(c), + RangeData.getRangeProjectileGFX(c), 60, 31, c.oldNpcIndex + 1, + MagicSpells.getStartDelay(c), 35); + } + } + } + } + + public void attackNpc(int i) { + // int equippedWeapon = c.playerEquipment[c.playerWeapon]; + // final int npcId = NPCHandler.npcs[i].npcType; + if (NpcHandler.npcs[i] != null) { + if (NpcHandler.npcs[i].isDead || NpcHandler.npcs[i].MaxHP <= 0) { + c.usingMagic = false; + c.faceUpdate(0); + c.npcIndex = 0; + return; + } + if (c.absY == 3228 && NpcHandler.npcs[i].absY == 3227) { + resetPlayerAttack(); + return; + } + if (c.absY == 3224 && NpcHandler.npcs[i].absY == 3225) { + resetPlayerAttack(); + return; + } + if (c.absY == 3226 && NpcHandler.npcs[i].absY == 3227) { + resetPlayerAttack(); + return; + } + if (c.absY == 3228 && NpcHandler.npcs[i].absY == 3227) { + resetPlayerAttack(); + return; + } + if (c.absX == 3252 && c.absY > 3254 && c.absY < 3272 || c.absY == 3254 && c.absX > 3252 && c.absX < 3265) { + resetPlayerAttack(); + return; + } + if (c.usingMagic && MagicData.MAGIC_SPELLS[c.spellId][0] == 1171) { + if (!NpcHandler.isUndead(i)) { + c.getActionSender().sendMessage("This spell only affects skeletons, zombies, ghosts and shades."); + resetPlayerAttack(); + c.stopMovement(); + c.npcIndex = 0; + return; + } + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't attack npcs, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + resetPlayerAttack(); + return; + } + if (c.respawnTimer > 0) { + c.npcIndex = 0; + return; + } + if (!SlayerRequirements.itemNeededSlayer(c, i)) { + return; + } + if (!c.getSlayer().canAttackNpc(i)) { + return; + } + if (NpcHandler.npcs[i].npcType == 9) { + if (c.absX == 3225 && c.absY > 3459 && c.absY < 3465 || c.absX > 3222 && c.absX < 3226 && c.absY > 3456 && c.absY < 3460 + || c.absX > 3213 && c.absX < 3223 && c.absY == 3457 || c.absX > 3202 && c.absX < 3212 && c.absY == 3457 + || c.absX > 3199 && c.absX < 3203 && c.absY > 3456 && c.absY < 3460 || c.absX == 3200 && c.absY > 3459 && c.absY < 3467) { + resetPlayerAttack(); + return; + } + } + if (c.absX == 3180 && c.absY > 3433 && c.absY < 3447) { + resetPlayerAttack(); + return; + } + if (c.absX > 2837 && c.absX < 2840 && c.absY == 9772) { + resetPlayerAttack(); + return; + } + if (NpcHandler.npcs[i].npcType == 134 || NpcHandler.npcs[i].npcType == 1267 || NpcHandler.npcs[i].npcType == 1265) { + if (Misc.random(350) == 0) { + AntiBotting.botCheckInterface(c); + } + } + if (NpcHandler.npcs[i].npcType == 757 && c.vampSlayer > 2) { + if (!c.getItemAssistant().playerHasItem(1549, 1) || !c.getItemAssistant().playerHasItem(2347, 1)) { + c.getActionSender().sendMessage("You need a stake and hammer to attack count draynor."); + resetPlayerAttack(); + return; + } + } + if (c.isWoodcutting == true) { + c.getActionSender().sendMessage("You can't attack an npc while woodcutting."); + resetPlayerAttack(); + return; + } + if (NpcHandler.npcs[i].npcType == 1676) { + c.getActionSender().sendMessage("You don't have the heart to kill the poor creature again."); + resetPlayerAttack(); + return; + } + if (NpcHandler.npcs[i].npcType == 411) { + c.getActionSender().sendMessage("You can't attack a swarm!"); + resetPlayerAttack(); + return; + } + if (!c.goodDistance(c.getX(), c.getY(), NpcHandler.npcs[i].getX(), NpcHandler.npcs[i].getY(), 1)) { + + } + if (NpcHandler.npcs[i].underAttackBy > 0 && NpcHandler.npcs[i].underAttackBy != c.playerId && !NpcHandler.npcs[i].inMulti()) { + c.npcIndex = 0; + c.getActionSender().sendMessage("This monster is already in combat."); + return; + } + if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) { + resetPlayerAttack(); + c.getActionSender().sendMessage("I am already under attack."); + return; + } + if (NpcHandler.npcs[i].spawnedBy != c.playerId && NpcHandler.npcs[i].spawnedBy > 0) { + resetPlayerAttack(); + c.getActionSender().sendMessage("This monster was not spawned for you."); + return; + } + c.followId2 = i; + c.followId = 0; + if (c.attackTimer <= 0) { + boolean usingBow = false; + boolean usingArrows = false; + boolean usingOtherRangeWeapons = false; + boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185; + c.bonusAttack = 0; + c.rangeItemUsed = 0; + c.projectileStage = 0; + if (c.autocasting) { + c.spellId = c.autocastId; + c.usingMagic = true; + } + if (c.spellId > 0) { + c.usingMagic = true; + } + c.attackTimer = getAttackDelay(); + c.specAccuracy = 1.0; + c.specDamage = 1.0; + if (!c.usingMagic) { + for (int bowId : RangeData.BOWS) { + if (c.playerEquipment[c.playerWeapon] == bowId) { + usingBow = true; + for (int arrowId : RangeData.ARROWS) { + if (c.playerEquipment[c.playerArrows] == arrowId) { + usingArrows = true; + } + } + } + } + + for (int otherRangeId : RangeData.OTHER_RANGE_WEAPONS) { + if (c.playerEquipment[c.playerWeapon] == otherRangeId) { + usingOtherRangeWeapons = true; + } + } + } + if (armaNpc(i) && !usingCross && !usingBow && !c.usingMagic + && !RangeData.usingCrystalBow(c) && !usingOtherRangeWeapons) { + resetPlayerAttack(); + return; + } + if (usingOtherRangeWeapons || usingBow + && Constants.combatSounds + && NpcHandler.npcs[i].npcType < 3177 + && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender().sendSound(SoundList.SHOOT_ARROW, + 100, 0); + } + if (!c.goodDistance(c.getX(), c.getY(), NpcHandler.npcs[i].getX(), NpcHandler.npcs[i].getY(), 2) && RangeData.usingHally(c) && !usingOtherRangeWeapons && !usingBow && !c.usingMagic || !c.goodDistance(c.getX(), c.getY(), NpcHandler.npcs[i].getX(), NpcHandler.npcs[i].getY(), 4) + && usingOtherRangeWeapons + && !usingBow + && !c.usingMagic + || !c.goodDistance(c.getX(), c.getY(), + NpcHandler.npcs[i].getX(), + NpcHandler.npcs[i].getY(), 1) + && !usingOtherRangeWeapons + && !RangeData.usingHally(c) + && !usingBow + && !c.usingMagic + || !c.goodDistance(c.getX(), c.getY(), + NpcHandler.npcs[i].getX(), + NpcHandler.npcs[i].getY(), 8) + && (usingBow || c.usingMagic)) { + c.attackTimer = 2; + return; + } + + if (!usingCross + && !usingArrows + && usingBow + && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) { + c.getActionSender().sendMessage( + "There is no ammo left in your quiver."); + c.stopMovement(); + c.npcIndex = 0; + return; + } + if (RangeData.correctBowAndArrows(c) < c.playerEquipment[c.playerArrows] + && Constants.CORRECT_ARROWS && usingBow + && !RangeData.usingCrystalBow(c) + && c.playerEquipment[c.playerWeapon] != 9185) { + c.getItemAssistant(); + c.getItemAssistant(); + c.getActionSender().sendMessage( + "You can't use " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerArrows]) + .toLowerCase() + + "s with a " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerWeapon]) + .toLowerCase() + "."); + c.stopMovement(); + c.npcIndex = 0; + return; + } + + if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts()) { + c.getActionSender().sendMessage( + "You must use bolts with a crossbow."); + c.stopMovement(); + resetPlayerAttack(); + return; + } + + if (usingBow + || c.usingMagic + || usingOtherRangeWeapons + || c.goodDistance(c.getX(), c.getY(), + NpcHandler.npcs[i].getX(), + NpcHandler.npcs[i].getY(), 2) && RangeData.usingHally(c)) { + c.stopMovement(); + } + + + /** + * Npc projectiles + */ + if (PlayerAssistant.pathBlocked(c, NpcHandler.npcs[i])) { + if((c.usingBow || c.usingMagic || usingOtherRangeWeapons || c.autocasting)) { + PathFinder.getPathFinder().findRoute(c, NpcHandler.npcs[i].getX(), NpcHandler.npcs[i].getY(), true, 8, 8); + if(!c.usingBow && !c.usingMagic && !usingOtherRangeWeapons && !c.autocasting) { + PathFinder.getPathFinder().findRoute(c,NpcHandler.npcs[i].getX(), NpcHandler.npcs[i].getY(), true, 1, 1); + c.attackTimer = 0; + return; + } + } + } + + + if (!checkMagicReqs(c.spellId)) { + c.stopMovement(); + c.npcIndex = 0; + return; + } + + c.faceUpdate(i); + NpcHandler.npcs[i].underAttackBy = c.playerId; + NpcHandler.npcs[i].lastDamageTaken = System.currentTimeMillis(); + if (c.usingSpecial && !c.usingMagic) { + if (c.getCombatAssistant().checkSpecAmount( + c.playerEquipment[c.playerWeapon])) { + c.lastWeaponUsed = c.playerEquipment[c.playerWeapon]; + c.lastArrowUsed = c.playerEquipment[c.playerArrows]; + c.getSpecials().activateSpecial( + c.playerEquipment[c.playerWeapon], i); + return; + } else { + c.getActionSender() + .sendMessage( + "You don't have the required special energy to use this attack."); + c.usingSpecial = false; + c.getItemAssistant().updateSpecialBar(); + if (Constants.combatSounds) { + c.getActionSender() + .sendSound( + CombatSounds + .specialSounds(c.playerEquipment[c.playerWeapon]), + 100, 0); + } + c.npcIndex = 0; + return; + } + } + c.specMaxHitIncrease = 0; + if (!c.usingMagic) { + if (Constants.combatSounds) { + c.getActionSender().sendSound( + CombatSounds.getWeaponSounds(c), 100, 0); + } + c.startAnimation(getWepAnim()); + } else { + if (Constants.combatSounds) { + c.getActionSender().sendSound( + CombatSounds.getMagicSound(c, c.spellId), 100, + 0); + } + c.startAnimation(MagicData.MAGIC_SPELLS[c.spellId][2]); + } + c.lastWeaponUsed = c.playerEquipment[c.playerWeapon]; + c.lastArrowUsed = c.playerEquipment[c.playerArrows]; + if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee + // hit + // delay + c.hitDelay = getHitDelay(); + c.projectileStage = 0; + c.oldNpcIndex = i; + } + + if (usingBow && !usingOtherRangeWeapons && !c.usingMagic + || usingCross) { // range hit delay + if (usingCross) { + c.usingBow = true; + } + if (c.fightMode == 2) { + c.attackTimer--; + } + c.lastArrowUsed = c.playerEquipment[c.playerArrows]; + c.lastWeaponUsed = c.playerEquipment[c.playerWeapon]; + c.gfx100(RangeData.getRangeStartGFX(c)); + c.hitDelay = getHitDelay(); + c.projectileStage = 1; + c.oldNpcIndex = i; + if (c.playerEquipment[c.playerWeapon] >= 4212 + && c.playerEquipment[c.playerWeapon] <= 4223) { + c.rangeItemUsed = c.playerEquipment[c.playerWeapon]; + c.crystalBowArrowCount++; + c.lastArrowUsed = 0; + } else { + c.rangeItemUsed = c.playerEquipment[c.playerArrows]; + c.getItemAssistant().deleteArrow(); + } + fireProjectileNpc(); + } + + if (usingOtherRangeWeapons && !c.usingMagic && !usingBow) { // knives, + // darts, + // etc + // hit + // delay + c.lastWeaponUsed = c.playerEquipment[c.playerWeapon]; + c.rangeItemUsed = c.playerEquipment[c.playerWeapon]; + c.getItemAssistant().deleteEquipment(); + c.gfx100(RangeData.getRangeStartGFX(c)); + c.lastArrowUsed = 0; + c.hitDelay = getHitDelay(); + c.projectileStage = 1; + c.oldNpcIndex = i; + if (c.fightMode == 2) { + c.attackTimer--; + } + fireProjectileNpc(); + } + + if (c.usingMagic) { // magic hit delay + int pX = c.getX(); + int pY = c.getY(); + int nX = NpcHandler.npcs[i].getX(); + int nY = NpcHandler.npcs[i].getY(); + int offX = (pY - nY) * -1; + int offY = (pX - nX) * -1; + c.castingMagic = true; + c.projectileStage = 2; + if (MagicData.MAGIC_SPELLS[c.spellId][3] > 0) { + if (MagicSpells.getStartGfxHeight(c) == 100) { + c.gfx100(MagicData.MAGIC_SPELLS[c.spellId][3]); + } else { + c.gfx0(MagicData.MAGIC_SPELLS[c.spellId][3]); + } + } + if (MagicData.MAGIC_SPELLS[c.spellId][4] > 0) { + c.getPlayerAssistant().createPlayersProjectile(pX, pY, + offX, offY, 50, 78, + MagicData.MAGIC_SPELLS[c.spellId][4], + MagicSpells.getStartHeight(c), MagicSpells.getEndHeight(c), i + 1, 50); + } + c.hitDelay = getHitDelay(); + c.oldNpcIndex = i; + c.oldSpellId = c.spellId; + c.spellId = 0; + if (!c.autocasting) { + c.npcIndex = 0; + } + } + + if (usingBow && Constants.CRYSTAL_BOW_DEGRADES) { // crystal + // bow + // degrading + if (c.playerEquipment[c.playerWeapon] == 4212) { // new + // crystal + // bow + // becomes + // full + // bow + // on + // the + // first + // shot + c.getItemAssistant().wearItem(4214, 1, 3); + } + if (c.crystalBowArrowCount >= 250) { + switch (c.playerEquipment[c.playerWeapon]) { + + case 4223: // 1/10 bow + c.getItemAssistant().wearItem(-1, 1, 3); + c.getActionSender().sendMessage( + "Your crystal bow has fully degraded."); + if (!c.getItemAssistant().addItem(4207, 1)) { + Server.itemHandler.createGroundItem(c, 4207, + c.getX(), c.getY(), 1, c.getId()); + } + c.crystalBowArrowCount = 0; + break; + + default: + c.getItemAssistant().wearItem( + ++c.playerEquipment[c.playerWeapon], 1, 3); + c.getActionSender().sendMessage( + "Your crystal bow degrades."); + c.crystalBowArrowCount = 0; + break; + + } + } + } + } + } + } + + /** + * Attack Players, same as npc tbh xD + **/ + + public void attackPlayer(int i) { + Client o = (Client) PlayerHandler.players[i]; + /*if (c.connectedFrom.equals(o.connectedFrom)) { + c.getActionSender().sendMessage("You cannot attack your self."); + resetPlayerAttack(); + return; + }*/ + int equippedWeapon = c.playerEquipment[c.playerWeapon]; + + if (PlayerHandler.players[i] != null) { + + if (c.usingMagic && MagicData.MAGIC_SPELLS[c.spellId][0] == 1171) { + c.getActionSender().sendMessage("This spell only affects skeletons, zombies, ghosts and shades, not humans."); + resetPlayerAttack(); + c.stopMovement(); + return; + } + + if (CastleWars.isInCw(PlayerHandler.players[i]) + && CastleWars.isInCw(c)) { + if (CastleWars.getTeamNumber(c) == CastleWars.getTeamNumber((Client) PlayerHandler.players[i])) { + c.getActionSender().sendMessage("You cannot attack your own teammate."); + resetPlayerAttack(); + return; + } + } + + if (!CastleWars.isInCw(PlayerHandler.players[i]) + && CastleWars.isInCw(c)) { + c.getActionSender().sendMessage( + "You cannot attack people outside castle wars."); + resetPlayerAttack(); + return; + } + + if (PlayerHandler.players[i].isDead) { + resetPlayerAttack(); + return; + } + + if (c.respawnTimer > 0 || PlayerHandler.players[i].respawnTimer > 0) { + resetPlayerAttack(); + return; + } + + /* + * if( c.getPlayerAssistant().getWearingAmount() < 4 && c.duelStatus + * < 1 && ! c.inCw() && c.inPits == false ) { + * c.getPacketDispatcher().sendMessage( + * "You must be wearing at least 4 items to attack someone." ); + * resetPlayerAttack(); return; } + */ + boolean sameSpot = c.absX == PlayerHandler.players[i].getX() + && c.absY == PlayerHandler.players[i].getY(); + if (!c.goodDistance(PlayerHandler.players[i].getX(), PlayerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) { + resetPlayerAttack(); + return; + } + + if (PlayerHandler.players[i].respawnTimer > 0) { + PlayerHandler.players[i].playerIndex = 0; + resetPlayerAttack(); + return; + } + + if (PlayerHandler.players[i].heightLevel != c.heightLevel) { + resetPlayerAttack(); + return; + } + // c.getPacketDispatcher().sendMessage("Made it here0."); + c.followId = i; + c.followId2 = 0; + if (c.attackTimer <= 0) { + c.usingBow = false; + c.specEffect = 0; + c.usingRangeWeapon = false; + c.rangeItemUsed = 0; + boolean usingBow = false; + boolean usingArrows = false; + boolean usingOtherRangeWeapons = false; + boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185; + c.projectileStage = 0; + if (c.absX == PlayerHandler.players[i].absX + && c.absY == PlayerHandler.players[i].absY) { + if (c.freezeTimer > 0) { + resetPlayerAttack(); + return; + } + c.followId = i; + c.attackTimer = 0; + return; + } + + // c.getPacketDispatcher().sendMessage("Made it here1."); + if (!c.usingMagic) { + for (int bowId : RangeData.BOWS) { + if (c.playerEquipment[c.playerWeapon] == bowId) { + usingBow = true; + for (int arrowId : RangeData.ARROWS) { + if (c.playerEquipment[c.playerArrows] == arrowId) { + usingArrows = true; + } + } + } + } + + for (int otherRangeId : RangeData.OTHER_RANGE_WEAPONS) { + if (c.playerEquipment[c.playerWeapon] == otherRangeId) { + usingOtherRangeWeapons = true; + } + } + } + if (c.autocasting) { + c.spellId = c.autocastId; + c.usingMagic = true; + } + // c.getPacketDispatcher().sendMessage("Made it here2."); + if (c.spellId > 0) { + c.usingMagic = true; + } + c.attackTimer = getAttackDelay(); + + if (c.duelRule[9]) { + boolean canUseWeapon = false; + for (int funWeapon : Constants.FUN_WEAPONS) { + if (c.playerEquipment[c.playerWeapon] == funWeapon) { + canUseWeapon = true; + } + } + if (!canUseWeapon) { + c.getActionSender().sendMessage( + "You can only use fun weapons in this duel!"); + resetPlayerAttack(); + return; + } + } + // c.getPacketDispatcher().sendMessage("Made it here3."); + if (c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) { + c.getActionSender().sendMessage( + "Range has been disabled in this duel!"); + return; + } + if (c.duelRule[3] && !usingBow && !usingOtherRangeWeapons + && !c.usingMagic) { + c.getActionSender().sendMessage( + "Melee has been disabled in this duel!"); + return; + } + + if (c.duelRule[4] && c.usingMagic) { + c.getActionSender().sendMessage( + "Magic has been disabled in this duel!"); + resetPlayerAttack(); + return; + } + + if (!c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[i].getX(), + PlayerHandler.players[i].getY(), 4) + && usingOtherRangeWeapons + && !usingBow + && !c.usingMagic + || !c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[i].getX(), + PlayerHandler.players[i].getY(), 2) + && !usingOtherRangeWeapons + && RangeData.usingHally(c) + && !usingBow + && !c.usingMagic + || !c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[i].getX(), + PlayerHandler.players[i].getY(), + getRequiredDistance()) + && !usingOtherRangeWeapons + && !RangeData.usingHally(c) + && !usingBow + && !c.usingMagic + || !c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[i].getX(), + PlayerHandler.players[i].getY(), 10) + && (usingBow || c.usingMagic)) { + // c.getPacketDispatcher().sendMessage("Setting attack timer to 1"); + c.attackTimer = 1; + if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons + && c.freezeTimer > 0) { + resetPlayerAttack(); + } + return; + } + + if (!usingCross + && !usingArrows + && usingBow + && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223) + && !c.usingMagic) { + c.getActionSender().sendMessage( + "There is no ammo left in your quiver."); + c.stopMovement(); + resetPlayerAttack(); + return; + } + if (RangeData.correctBowAndArrows(c) < c.playerEquipment[c.playerArrows] + && Constants.CORRECT_ARROWS && usingBow + && !RangeData.usingCrystalBow(c) + && c.playerEquipment[c.playerWeapon] != 9185 + && !c.usingMagic) { + c.getItemAssistant(); + c.getItemAssistant(); + c.getActionSender().sendMessage( + "You can't use " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerArrows]) + .toLowerCase() + + "s with a " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerWeapon]) + .toLowerCase() + "."); + c.stopMovement(); + resetPlayerAttack(); + return; + } + if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts() + && !c.usingMagic) { + c.getActionSender().sendMessage( + "You must use bolts with a crossbow."); + c.stopMovement(); + resetPlayerAttack(); + return; + } + + if (usingBow || c.usingMagic || usingOtherRangeWeapons + || RangeData.usingHally(c)) { + c.stopMovement(); + } + + /** + * Player projectiles + */ + if(PlayerAssistant.pathBlocked(c, o)) { + if((c.usingBow || c.usingMagic || usingOtherRangeWeapons || c.autocasting)) { + PathFinder.getPathFinder().findRoute(c, o.absX, o.absY, true, 8, 8); + if(!c.usingBow && !c.usingMagic && !usingOtherRangeWeapons && !c.autocasting) { + PathFinder.getPathFinder().findRoute(c, o.absX, o.absY, true, 1, 1); + c.attackTimer = 0; + return; + } + } + } + + if (!checkMagicReqs(c.spellId)) { + c.stopMovement(); + resetPlayerAttack(); + return; + } + + c.faceUpdate(i + 32768); + + if (c.duelStatus != 5 + && !PlayerHandler.players[c.playerIndex].inCwGame() + && FightPits.getState(c) == null) { + if (!c.attackedPlayers.contains(c.playerIndex) + && !PlayerHandler.players[c.playerIndex].attackedPlayers + .contains(c.playerId)) { + c.attackedPlayers.add(c.playerIndex); + c.isSkulled = true; + c.skullTimer = Constants.SKULL_TIMER; + c.headIconPk = 0; + c.getPlayerAssistant().requestUpdates(); + } + } + c.specAccuracy = 1.0; + c.specDamage = 1.0; + c.delayedDamage = c.delayedDamage2 = 0; + if (c.usingSpecial && !c.usingMagic) { + if (c.duelRule[10] && c.duelStatus == 5) { + c.getActionSender() + .sendMessage( + "Special attacks have been disabled during this duel!"); + c.usingSpecial = false; + c.getItemAssistant().updateSpecialBar(); + if (Constants.combatSounds) { + c.getActionSender() + .sendSound( + CombatSounds + .specialSounds(c.playerEquipment[c.playerWeapon]), + 100, 0); + } + resetPlayerAttack(); + return; + } + if (checkSpecAmount(equippedWeapon)) { + c.lastArrowUsed = c.playerEquipment[c.playerArrows]; + c.getSpecials().activateSpecial( + c.playerEquipment[c.playerWeapon], i); + c.followId = c.playerIndex; + return; + } else { + c.getActionSender() + .sendMessage( + "You don't have the required special energy to use this attack."); + c.usingSpecial = false; + c.getItemAssistant().updateSpecialBar(); + if (Constants.combatSounds) { + c.getActionSender() + .sendSound( + CombatSounds + .specialSounds(c.playerEquipment[c.playerWeapon]), + 100, 0); + } + c.playerIndex = 0; + return; + } + } + + if (!c.usingMagic) { + if (Constants.combatSounds) { + c.getActionSender().sendSound( + CombatSounds.getWeaponSounds(c), 100, 0); + } + c.startAnimation(getWepAnim()); + c.mageFollow = false; + } else { + c.startAnimation(MagicData.MAGIC_SPELLS[c.spellId][2]); + if (Constants.combatSounds) { + c.getActionSender().sendSound( + CombatSounds.getMagicSound(c, c.spellId), 100, + 0); + } + c.mageFollow = true; + c.followId = c.playerIndex; + } + PlayerHandler.players[i].underAttackBy = c.playerId; + PlayerHandler.players[i].logoutDelay = System.currentTimeMillis(); + PlayerHandler.players[i].singleCombatDelay = System.currentTimeMillis(); + PlayerHandler.players[i].killerId = c.playerId; + c.lastArrowUsed = 0; + c.rangeItemUsed = 0; + if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee + // hit + // delay; + c.followId = PlayerHandler.players[c.playerIndex].playerId; + c.getPlayerAssistant().followPlayer(); + c.hitDelay = getHitDelay(); + c.delayedDamage = Misc.random(meleeMaxHit()); + c.projectileStage = 0; + c.oldPlayerIndex = i; + } + + if (usingBow && !usingOtherRangeWeapons && !c.usingMagic + || usingCross) { // range hit delay + if (c.playerEquipment[c.playerWeapon] >= 4212 + && c.playerEquipment[c.playerWeapon] <= 4223) { + c.rangeItemUsed = c.playerEquipment[c.playerWeapon]; + c.crystalBowArrowCount++; + } else { + c.rangeItemUsed = c.playerEquipment[c.playerArrows]; + c.getItemAssistant().deleteArrow(); + } + if (c.fightMode == 2) { + c.attackTimer--; + } + if (usingCross) { + c.usingBow = true; + } + + c.usingBow = true; + c.followId = PlayerHandler.players[c.playerIndex].playerId; + c.getPlayerAssistant().followPlayer(); + c.lastWeaponUsed = c.playerEquipment[c.playerWeapon]; + c.lastArrowUsed = c.playerEquipment[c.playerArrows]; + c.gfx100(RangeData.getRangeStartGFX(c)); + c.hitDelay = getHitDelay(); + c.projectileStage = 1; + c.oldPlayerIndex = i; + fireProjectilePlayer(); + } + + if (usingOtherRangeWeapons) { // knives, darts, etc hit delay + c.rangeItemUsed = c.playerEquipment[c.playerWeapon]; + c.getItemAssistant().deleteEquipment(); + c.usingRangeWeapon = true; + c.followId = PlayerHandler.players[c.playerIndex].playerId; + c.getPlayerAssistant().followPlayer(); + c.gfx100(RangeData.getRangeStartGFX(c)); + if (c.fightMode == 2) { + c.attackTimer--; + } + c.hitDelay = getHitDelay(); + c.projectileStage = 1; + c.oldPlayerIndex = i; + fireProjectilePlayer(); + } + + if (c.usingMagic) { // magic hit delay + int pX = c.getX(); + int pY = c.getY(); + int nX = PlayerHandler.players[i].getX(); + int nY = PlayerHandler.players[i].getY(); + int offX = (pY - nY) * -1; + int offY = (pX - nX) * -1; + c.castingMagic = true; + c.projectileStage = 2; + if (MagicData.MAGIC_SPELLS[c.spellId][3] > 0) { + if (MagicSpells.getStartGfxHeight(c) == 100) { + c.gfx100(MagicData.MAGIC_SPELLS[c.spellId][3]); + } else { + c.gfx0(MagicData.MAGIC_SPELLS[c.spellId][3]); + } + } + if (MagicData.MAGIC_SPELLS[c.spellId][4] > 0) { + c.getPlayerAssistant().createPlayersProjectile(pX, pY, + offX, offY, 50, 78, + MagicData.MAGIC_SPELLS[c.spellId][4], + MagicSpells.getStartHeight(c), MagicSpells.getEndHeight(c), -i - 1, + MagicSpells.getStartDelay(c)); + } + if (c.autocastId > 0) { + c.followId = c.playerIndex; + c.followDistance = 5; + } + c.hitDelay = getHitDelay(); + c.oldPlayerIndex = i; + c.oldSpellId = c.spellId; + c.spellId = 0; + if (MagicData.MAGIC_SPELLS[c.oldSpellId][0] == 12891 + && o.isMoving) { + // c.getPacketDispatcher().sendMessage("Barrage projectile.."); + c.getPlayerAssistant().createPlayersProjectile(pX, pY, + offX, offY, 50, 85, 368, 25, 25, -i - 1, + MagicSpells.getStartDelay(c)); + } + if (Misc.random(o.getCombatAssistant().mageDef()) > Misc + .random(mageAtk())) { + c.magicFailed = true; + } else { + c.magicFailed = false; + } + int freezeDelay = MagicSpells.getFreezeTime(c);// freeze time + if (freezeDelay > 0 + && PlayerHandler.players[i].freezeTimer <= -3 + && !c.magicFailed) { + PlayerHandler.players[i].freezeTimer = freezeDelay; + o.resetWalkingQueue(); + o.getActionSender().sendMessage( + "You have been frozen."); + o.frozenBy = c.playerId; + } + if (!checkReqs()) { + return; + } + if (!c.autocasting && c.spellId <= 0) { + c.playerIndex = 0; + } + } + + if (usingBow && Constants.CRYSTAL_BOW_DEGRADES) { // crystal + // bow + // degrading + if (c.playerEquipment[c.playerWeapon] == 4212) { // new + // crystal + // bow + // becomes + // full + // bow + // on + // the + // first + // shot + c.getItemAssistant().wearItem(4214, 1, 3); + } + if (c.crystalBowArrowCount >= 250) { + switch (c.playerEquipment[c.playerWeapon]) { + + case 4223: // 1/10 bow + c.getItemAssistant().wearItem(-1, 1, 3); + c.getActionSender().sendMessage( + "Your crystal bow has fully degraded."); + if (!c.getItemAssistant().addItem(4207, 1)) { + Server.itemHandler.createGroundItem(c, 4207, + c.getX(), c.getY(), 1, c.getId()); + } + c.crystalBowArrowCount = 0; + break; + + default: + c.getItemAssistant().wearItem( + ++c.playerEquipment[c.playerWeapon], 1, 3); + c.getActionSender().sendMessage( + "Your crystal bow degrades."); + c.crystalBowArrowCount = 0; + break; + } + } + } + } + } + } + + public void appendVengeance(int otherPlayer, int damage) { + if (damage <= 0) { + return; + } + Player o = PlayerHandler.players[otherPlayer]; + o.forcedText = "Taste Vengeance!"; + o.forcedChatUpdateRequired = true; + o.updateRequired = true; + o.vengOn = false; + if (o.playerLevel[3] - damage > 0) { + damage = (int) (damage * 0.75); + if (damage > c.playerLevel[3]) { + damage = c.playerLevel[3]; + } + c.setHitDiff2(damage); + c.setHitUpdateRequired2(true); + c.playerLevel[3] -= damage; + c.getPlayerAssistant().refreshSkill(3); + } + c.updateRequired = true; + } + + public void playerDelayedHit(int i) { + if (PlayerHandler.players[i] != null) { + if (PlayerHandler.players[i].isDead || c.isDead + || PlayerHandler.players[i].playerLevel[3] <= 0 + || c.playerLevel[3] <= 0) { + c.playerIndex = 0; + return; + } + if (PlayerHandler.players[i].respawnTimer > 0) { + c.faceUpdate(0); + c.playerIndex = 0; + return; + } + Client o = (Client) PlayerHandler.players[i]; + o.getPlayerAssistant().removeAllWindows(); + if (o.playerIndex <= 0 && o.npcIndex <= 0) { + if (o.autoRet == 1) { + o.playerIndex = c.playerId; + } + } + if (o.attackTimer <= 3 || o.attackTimer == 0 && o.playerIndex == 0 + && !c.castingMagic) { // block animation + o.startAnimation(o.getCombatAssistant().getBlockEmote()); + if (Constants.combatSounds) { + o.getActionSender().sendSound( + CombatSounds.getPlayerBlockSounds(o), 100, 0); + } + } + if (o.inTrade) { + o.getTrading().declineTrade(); + } + if (c.projectileStage == 0) { // melee hit damage + applyPlayerMeleeDamage(i, 1); + if (c.doubleHit) { + applyPlayerMeleeDamage(i, 2); + } + } + if (!c.castingMagic && c.projectileStage > 0) { // range hit + // damage + int damage = Misc.random(rangeMaxHit()); + int damage2 = -1; + if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) { + damage2 = Misc.random(rangeMaxHit()); + } + boolean ignoreDef = false; + if (Misc.random(4) == 1 && c.lastArrowUsed == 9243) { + ignoreDef = true; + o.gfx0(758); + } + if (Misc.random(10 + o.getCombatAssistant() + .calculateRangeDefence()) > Misc + .random(10 + calculateRangeAttack()) + && !ignoreDef) { + damage = 0; + } + if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 + && damage > 0) { + PlayerHandler.players[i].gfx0(754); + damage = NpcHandler.npcs[i].HP / 5; + c.handleHitMask(c.playerLevel[3] / 10); + c.dealDamage(c.playerLevel[3] / 10); + c.gfx0(754); + } + + if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) { + if (Misc.random(10 + o.getCombatAssistant() + .calculateRangeDefence()) > Misc + .random(10 + calculateRangeAttack())) { + damage2 = 0; + } + } + + if (c.dbowSpec) { + o.gfx100(1100); + if (damage < 8) { + damage = 8; + } + if (damage2 < 8) { + damage2 = 8; + } + c.dbowSpec = false; + } + if (damage > 0 && Misc.random(5) == 1 + && c.lastArrowUsed == 9244) { + damage *= 1.45; + o.gfx0(756); + } + if (o.getPrayer().prayerActive[17] + && System.currentTimeMillis() - o.protRangeDelay > 1500) { // if + // prayer + // active + // reduce + // damage + // by + // half + damage = damage * 60 / 100; + if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) { + damage2 = damage2 * 60 / 100; + } + } + if (PlayerHandler.players[i].playerLevel[3] - damage < 0) { + damage = PlayerHandler.players[i].playerLevel[3]; + } + if (PlayerHandler.players[i].playerLevel[3] - damage - damage2 < 0) { + damage2 = PlayerHandler.players[i].playerLevel[3] - damage; + } + if (damage < 0) { + damage = 0; + } + if (damage2 < 0 && damage2 != -1) { + damage2 = 0; + } + if (o.vengOn) { + appendVengeance(i, damage); + appendVengeance(i, damage2); + } + if (damage > 0) { + applyRecoil(c, damage, i); + } + if (damage2 > 0) { + applyRecoil(c, damage2, i); + } + if (c.fightMode == 3) { + c.getPlayerAssistant().addSkillXP(damage * Constants.RANGE_EXP_RATE / 3, 4); + c.getPlayerAssistant().addSkillXP(damage / 3, 1); + c.getPlayerAssistant().addSkillXP(damage / 3, 3); + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(4); + } else { + c.getPlayerAssistant().addSkillXP(damage * Constants.RANGE_EXP_RATE, 4); + c.getPlayerAssistant().addSkillXP(damage / 3, 3); + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(4); + } + boolean dropArrows = true; + + for (int noArrowId : RangeData.NO_ARROW_DROP) { + if (c.lastWeaponUsed == noArrowId) { + dropArrows = false; + break; + } + } + if (dropArrows) { + c.getItemAssistant().dropArrowPlayer(); + } + PlayerHandler.players[i].underAttackBy = c.playerId; + PlayerHandler.players[i].logoutDelay = System.currentTimeMillis(); + PlayerHandler.players[i].singleCombatDelay = System.currentTimeMillis(); + PlayerHandler.players[i].killerId = c.playerId; + // Server.playerHandler.players[i].setHitDiff(damage); + // Server.playerHandler.players[i].playerLevel[3] -= damage; + PlayerHandler.players[i].dealDamage(damage); + PlayerHandler.players[i].damageTaken[c.playerId] += damage; + c.killedBy = PlayerHandler.players[i].playerId; + PlayerHandler.players[i].handleHitMask(damage); + if (damage2 != -1) { + // Server.playerHandler.players[i].playerLevel[3] -= + // damage2; + PlayerHandler.players[i].dealDamage(damage2); + PlayerHandler.players[i].damageTaken[c.playerId] += damage2; + PlayerHandler.players[i].handleHitMask(damage2); + + } + o.getPlayerAssistant().refreshSkill(3); + + // Server.playerHandler.players[i].setHitUpdateRequired(true); + PlayerHandler.players[i].updateRequired = true; + applySmite(i, damage); + if (damage2 != -1) { + applySmite(i, damage2); + } + + } else if (c.projectileStage > 0) { // magic hit damage + int damage = Misc + .random(MagicData.MAGIC_SPELLS[c.oldSpellId][6]); + if (MagicSpells.godSpells(c)) { + if (System.currentTimeMillis() - c.godSpellDelay < Constants.GOD_SPELL_CHARGE) { + damage += 10; + } + } + // c.playerIndex = 0; + if (c.magicFailed) { + damage = 0; + } + + if (o.getPrayer().prayerActive[16] + && System.currentTimeMillis() - o.protMageDelay > 1500) { // if + // prayer + // active + // reduce + // damage + // by + // half + damage = damage * 60 / 100; + } + if (PlayerHandler.players[i].playerLevel[3] - damage < 0) { + damage = PlayerHandler.players[i].playerLevel[3]; + } + if (o.vengOn) { + appendVengeance(i, damage); + } + if (damage > 0) { + applyRecoil(c, damage, i); + } + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage * Constants.MAGIC_EXP_RATE, 6); + if (MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1161 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1153 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1157 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1542 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1543 && MagicData.MAGIC_SPELLS[c.oldSpellId][0] != 1562) { + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage / 3, 3); + } + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(6); + + if (MagicSpells.getEndGfxHeight(c) == 100 && !c.magicFailed) { // end GFX + PlayerHandler.players[i] + .gfx100(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } else if (!c.magicFailed) { + PlayerHandler.players[i] + .gfx0(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } else if (c.magicFailed) { + PlayerHandler.players[i].gfx100(85); + c.getActionSender().sendSound(SoundList.MAGE_FAIL, 100, + 0); + } + + if (!c.magicFailed) { + if (System.currentTimeMillis() + - PlayerHandler.players[i].reduceStat > 35000) { + PlayerHandler.players[i].reduceStat = System + .currentTimeMillis(); + switch (MagicData.MAGIC_SPELLS[c.oldSpellId][0]) { + case 12987: + case 13011: + case 12999: + case 13023: + PlayerHandler.players[i].playerLevel[0] -= o + .getPlayerAssistant() + .getLevelForXP( + PlayerHandler.players[i].playerXP[0]) * 10 / 100; + break; + } + } + + switch (MagicData.MAGIC_SPELLS[c.oldSpellId][0]) { + case 12445: // teleblock + if (System.currentTimeMillis() - o.teleBlockDelay > o.teleBlockLength) { + o.teleBlockDelay = System.currentTimeMillis(); + o.getActionSender().sendMessage( + "You have been teleblocked."); + o.getActionSender().sendSound( + SoundList.TELEBLOCK_HIT, 100, 0); + if (o.getPrayer().prayerActive[16] + && System.currentTimeMillis() + - o.protMageDelay > 1500) { + o.teleBlockLength = 150000; + } else { + o.teleBlockLength = 300000; + } + } + break; + + case 12901: + case 12919: // blood spells + case 12911: + case 12929: + int heal = damage / 4; + if (c.playerLevel[3] + heal > c.getPlayerAssistant() + .getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getPlayerAssistant() + .getLevelForXP(c.playerXP[3]); + } else { + c.playerLevel[3] += heal; + } + c.getPlayerAssistant().refreshSkill(3); + break; + + case 1153: + PlayerHandler.players[i].playerLevel[0] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[0]) * 5 / 100; + o.getActionSender().sendMessage( + "Your attack level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(0); + break; + + case 1157: + PlayerHandler.players[i].playerLevel[2] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[2]) * 5 / 100; + o.getActionSender().sendMessage( + "Your strength level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(2); + break; + + case 1161: + PlayerHandler.players[i].playerLevel[1] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[1]) * 5 / 100; + o.getActionSender().sendMessage( + "Your defence level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(1); + break; + + case 1542: + PlayerHandler.players[i].playerLevel[1] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[1]) * 10 / 100; + o.getActionSender().sendMessage( + "Your defence level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(1); + break; + + case 1543: + PlayerHandler.players[i].playerLevel[2] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[2]) * 10 / 100; + o.getActionSender().sendMessage( + "Your strength level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(2); + break; + + case 1562: + PlayerHandler.players[i].playerLevel[0] -= o + .getPlayerAssistant().getLevelForXP( + PlayerHandler.players[i].playerXP[0]) * 10 / 100; + o.getActionSender().sendMessage( + "Your attack level has been reduced!"); + PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System + .currentTimeMillis(); + o.getPlayerAssistant().refreshSkill(0); + break; + } + } + + PlayerHandler.players[i].logoutDelay = System.currentTimeMillis(); + PlayerHandler.players[i].underAttackBy = c.playerId; + PlayerHandler.players[i].killerId = c.playerId; + PlayerHandler.players[i].singleCombatDelay = System + .currentTimeMillis(); + if (MagicData.MAGIC_SPELLS[c.oldSpellId][6] != 0) { + // Server.playerHandler.players[i].playerLevel[3] -= damage; + PlayerHandler.players[i].dealDamage(damage); + PlayerHandler.players[i].damageTaken[c.playerId] += damage; + c.totalPlayerDamageDealt += damage; + if (!c.magicFailed) { + // Server.playerHandler.players[i].setHitDiff(damage); + // Server.playerHandler.players[i].setHitUpdateRequired(true); + PlayerHandler.players[i].handleHitMask(damage); + } + } + applySmite(i, damage); + c.killedBy = PlayerHandler.players[i].playerId; + o.getPlayerAssistant().refreshSkill(3); + PlayerHandler.players[i].updateRequired = true; + c.usingMagic = false; + c.castingMagic = false; + if (o.inMulti() && MagicSpells.multis(c)) { + c.barrageCount = 0; + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + if (j == o.playerId) { + continue; + } + if (c.barrageCount >= 9) { + break; + } + if (o.goodDistance(o.getX(), o.getY(), + PlayerHandler.players[j].getX(), + PlayerHandler.players[j].getY(), 1)) { + MagicSpells.appendMultiBarrage(c, j, c.magicFailed); + } + } + } + } + c.getPlayerAssistant().refreshSkill(3); + c.getPlayerAssistant().refreshSkill(6); + c.oldSpellId = 0; + } + } + c.getPlayerAssistant().requestUpdates(); + if (c.bowSpecShot <= 0) { + c.oldPlayerIndex = 0; + c.projectileStage = 0; + c.lastWeaponUsed = 0; + c.doubleHit = false; + c.bowSpecShot = 0; + } + if (c.bowSpecShot != 0) { + c.bowSpecShot = 0; + } + } + + public void applyPlayerMeleeDamage(int i, int damageMask) { + Client o = (Client) PlayerHandler.players[i]; + if (o == null) { + return; + } + int damage = 0; + boolean veracsEffect = false; + boolean guthansEffect = false; + if (c.getPlayerAssistant().fullVeracs()) { + if (Misc.random(4) == 1) { + veracsEffect = true; + } + } + if (c.getPlayerAssistant().fullGuthans()) { + if (Misc.random(4) == 1) { + guthansEffect = true; + } + } + if (damageMask == 1) { + damage = c.delayedDamage; + c.delayedDamage = 0; + } else { + damage = c.delayedDamage2; + c.delayedDamage2 = 0; + } + if (Misc.random(o.getCombatAssistant().calcDef()) > Misc + .random(calcAtt()) && !veracsEffect) { + damage = 0; + c.bonusAttack = 0; + } else if (c.playerEquipment[c.playerWeapon] == 5698 + && o.poisonDamage <= 0 && Misc.random(3) == 1) { + o.getPlayerAssistant().appendPoison(13); + c.bonusAttack += damage / 3; + } else { + c.bonusAttack += damage / 3; + } + if (o.getPrayer().prayerActive[18] + && System.currentTimeMillis() - o.protMeleeDelay > 1500 + && !veracsEffect) { // if prayer active reduce damage by 40% + damage = damage * 60 / 100; + } + if (c.maxNextHit) { + damage = meleeMaxHit(); + } + if (damage > 0 && guthansEffect) { + c.playerLevel[3] += damage; + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + c.getPlayerAssistant().refreshSkill(3); + o.gfx0(398); + } + if (c.ssSpec && damageMask == 2) { + damage = 5 + Misc.random(11); + c.ssSpec = false; + } + if (PlayerHandler.players[i].playerLevel[3] - damage < 0) { + damage = PlayerHandler.players[i].playerLevel[3]; + } + if (o.vengOn && damage > 0) { + appendVengeance(i, damage); + } + if (damage > 0) { + applyRecoil(c, damage, i); + } + switch (c.specEffect) { + case 1: // dragon scimmy special + if (damage > 0) { + if (o.getPrayer().prayerActive[16] + || o.getPrayer().prayerActive[17] + || o.getPrayer().prayerActive[18]) { + o.headIcon = -1; + o.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[16], 0); + o.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[17], 0); + o.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[18], 0); + } + o.getActionSender().sendMessage("You have been injured!"); + o.getPrayer().stopPrayerDelay = System.currentTimeMillis(); + o.getPrayer().prayerActive[16] = false; + o.getPrayer().prayerActive[17] = false; + o.getPrayer().prayerActive[18] = false; + o.getPlayerAssistant().requestUpdates(); + } + break; + case 2: + if (damage > 0) { + if (o.freezeTimer <= 0) { + o.freezeTimer = 30; + } + o.gfx0(369); + o.getActionSender().sendMessage("You have been frozen."); + o.frozenBy = c.playerId; + o.stopMovement(); + c.getActionSender().sendMessage("You freeze your enemy."); + } + break; + case 3: + if (damage > 0) { + o.playerLevel[1] -= damage; + o.getActionSender().sendMessage("You feel weak."); + if (o.playerLevel[1] < 1) { + o.playerLevel[1] = 1; + } + o.getPlayerAssistant().refreshSkill(1); + } + break; + case 4: + if (damage > 0) { + if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3])) { + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + ; + } else { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + } else { + c.playerLevel[3] += damage; + } + c.getPlayerAssistant().refreshSkill(3); + } + break; + } + c.specEffect = 0; + if (c.fightMode == 3) {//melee shared + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 0); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 1); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE / 3, 2); + c.getPlayerAssistant().addSkillXP(damage / 3, 3); + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(2); + c.getPlayerAssistant().refreshSkill(3); + } else { + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE, c.fightMode); + c.getPlayerAssistant().addSkillXP(damage * Constants.MELEE_EXP_RATE/3, 3); + c.getPlayerAssistant().refreshSkill(c.fightMode); + c.getPlayerAssistant().refreshSkill(3); + } + PlayerHandler.players[i].logoutDelay = System.currentTimeMillis(); + PlayerHandler.players[i].underAttackBy = c.playerId; + PlayerHandler.players[i].killerId = c.playerId; + PlayerHandler.players[i].singleCombatDelay = System.currentTimeMillis(); + if (c.killedBy != PlayerHandler.players[i].playerId) { + c.totalPlayerDamageDealt = 0; + } + c.killedBy = PlayerHandler.players[i].playerId; + applySmite(i, damage); + switch (damageMask) { + case 1: + PlayerHandler.players[i].dealDamage(damage); + PlayerHandler.players[i].damageTaken[c.playerId] += damage; + c.totalPlayerDamageDealt += damage; + PlayerHandler.players[i].updateRequired = true; + o.getPlayerAssistant().refreshSkill(3); + break; + + case 2: + PlayerHandler.players[i].dealDamage(damage); + PlayerHandler.players[i].damageTaken[c.playerId] += damage; + c.totalPlayerDamageDealt += damage; + PlayerHandler.players[i].updateRequired = true; + c.doubleHit = false; + o.getPlayerAssistant().refreshSkill(3); + break; + } + PlayerHandler.players[i].handleHitMask(damage); + } + + public void applySmite(int index, int damage) { + if (!c.getPrayer().prayerActive[23]) { + return; + } + if (damage <= 0) { + return; + } + if (PlayerHandler.players[index] != null) { + Client c2 = (Client) PlayerHandler.players[index]; + c2.playerLevel[5] -= damage / 4; + if (c2.playerLevel[5] <= 0) { + c2.playerLevel[5] = 0; + PrayerDrain.resetPrayers(c2); + } + c2.getPlayerAssistant().refreshSkill(5); + } + + } + + public void fireProjectilePlayer() { + if (c.oldPlayerIndex > 0) { + if (PlayerHandler.players[c.oldPlayerIndex] != null) { + c.projectileStage = 2; + int pX = c.getX(); + int pY = c.getY(); + int oX = PlayerHandler.players[c.oldPlayerIndex].getX(); + int oY = PlayerHandler.players[c.oldPlayerIndex].getY(); + int offX = (pY - oY) * -1; + int offY = (pX - oX) * -1; + if (!c.msbSpec) { + c.getPlayerAssistant().createPlayersProjectile(pX, pY, + offX, offY, 50, RangeData.getProjectileSpeed(c), + RangeData.getRangeProjectileGFX(c), 43, 31, + -c.oldPlayerIndex - 1, MagicSpells.getStartDelay(c)); + } else if (c.msbSpec) { + c.getPlayerAssistant().createPlayersProjectile2(pX, pY, + offX, offY, 50, RangeData.getProjectileSpeed(c), + RangeData.getRangeProjectileGFX(c), 43, 31, + -c.oldPlayerIndex - 1, MagicSpells.getStartDelay(c), 10); + c.msbSpec = false; + } + if (RangeData.usingDbow(c)) { + c.getPlayerAssistant().createPlayersProjectile2(pX, pY, + offX, offY, 50, RangeData.getProjectileSpeed(c), + RangeData.getRangeProjectileGFX(c), 60, 31, + -c.oldPlayerIndex - 1, MagicSpells.getStartDelay(c), 35); + } + } + } + } + + public void resetPlayerAttack() { + c.usingMagic = false; + c.npcIndex = 0; + c.faceUpdate(0); + c.playerIndex = 0; + c.getPlayerAssistant().resetFollow(); + // c.getPacketDispatcher().sendMessage("Reset attack."); + } + + public int getCombatDifference(int combat1, int combat2) { + if (combat1 > combat2) { + return combat1 - combat2; + } + if (combat2 > combat1) { + return combat2 - combat1; + } + return 0; + } + + /** + * Wildy and duel info + **/ + + public boolean checkReqs() { + if (PlayerHandler.players[c.playerIndex] == null) { + return false; + } + if (c.inCw()) { + return true; + } + if (c.playerIndex == c.playerId) { + return false; + } + if (c.inPits && PlayerHandler.players[c.playerIndex].inPits) { + return true; + } + if (PlayerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) { + if (c.duelingArena() || c.duelStatus == 5) { + c.getActionSender().sendMessage("You can't challenge inside the arena!"); + return false; + } + c.getDueling().requestDuel(c.playerIndex); + return false; + } + if (c.duelStatus == 5 + && PlayerHandler.players[c.playerIndex].duelStatus == 5) { + if (PlayerHandler.players[c.playerIndex].duelingWith == c.getId()) { + return true; + } else { + c.getActionSender() + .sendMessage("This isn't your opponent!"); + return false; + } + } + if (CastOnOther.castOnOtherSpells(c)) { + return true; + } + if (!PlayerHandler.players[c.playerIndex].inWild() + && !PlayerHandler.players[c.playerIndex].inCwGame() + && !CastOnOther.castOnOtherSpells(c)) { + c.getActionSender().sendMessage( + "That player is not in the wilderness."); + c.stopMovement(); + resetPlayerAttack(); + return false; + } + if (!c.inWild() && !PlayerHandler.players[c.playerIndex].inCwGame() + && !CastOnOther.castOnOtherSpells(c)) { + c.getActionSender().sendMessage( + "You are not in the wilderness."); + c.stopMovement(); + resetPlayerAttack(); + return false; + } + if (Constants.COMBAT_LEVEL_DIFFERENCE && !c.inCw()) { + int combatDif1 = getCombatDifference(c.combatLevel, + PlayerHandler.players[c.playerIndex].combatLevel); + if (combatDif1 > c.wildLevel + || combatDif1 > PlayerHandler.players[c.playerIndex].wildLevel) { + c.getActionSender() + .sendMessage( + "Your combat level difference is too great to attack that player here."); + c.stopMovement(); + resetPlayerAttack(); + return false; + } + } + + if (Constants.SINGLE_AND_MULTI_ZONES) { + if (!PlayerHandler.players[c.playerIndex].inMulti()) { // single + // combat + // zones + if (PlayerHandler.players[c.playerIndex].underAttackBy != c.playerId + && PlayerHandler.players[c.playerIndex].underAttackBy != 0) { + c.getActionSender().sendMessage( + "That player is already in combat."); + c.stopMovement(); + resetPlayerAttack(); + return false; + } + if (PlayerHandler.players[c.playerIndex].playerId != c.underAttackBy + && c.underAttackBy != 0 || c.underAttackBy2 > 0) { + c.getActionSender().sendMessage( + "You are already in combat."); + c.stopMovement(); + resetPlayerAttack(); + return false; + } + } + } + return true; + } + + public int getRequiredDistance() { + if (c.followId > 0 && c.freezeTimer <= 0 && !c.isMoving) { + return 2; + } else if (c.followId > 0 && c.freezeTimer <= 0 && c.isMoving) { + return 3; + } else { + return 1; + } + } + + public void handleDfs() { + if (System.currentTimeMillis() - c.dfsDelay > 30000) { + if (c.playerIndex > 0 + && PlayerHandler.players[c.playerIndex] != null) { + int damage = Misc.random(15) + 5; + c.startAnimation(2836); + c.gfx0(600); + PlayerHandler.players[c.playerIndex].playerLevel[3] -= damage; + PlayerHandler.players[c.playerIndex].hitDiff2 = damage; + PlayerHandler.players[c.playerIndex].hitUpdateRequired2 = true; + PlayerHandler.players[c.playerIndex].updateRequired = true; + c.dfsDelay = System.currentTimeMillis(); + } else { + c.getActionSender().sendMessage( + "I should be in combat before using this."); + } + } else { + c.getActionSender().sendMessage( + "My shield hasn't finished recharging yet."); + } + } + + public void handleDfsNPC() { + if (System.currentTimeMillis() - c.dfsDelay > 30000) { + if (c.npcIndex > 0 && NpcHandler.npcs[c.npcIndex] != null) { + int damage = Misc.random(15) + 5; + c.startAnimation(2836); + c.gfx0(600); + NpcHandler.npcs[c.npcIndex].HP -= damage; + NpcHandler.npcs[c.npcIndex].hitDiff2 = damage; + NpcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true; + NpcHandler.npcs[c.npcIndex].updateRequired = true; + c.dfsDelay = System.currentTimeMillis(); + } else { + c.getActionSender().sendMessage( + "I should be in combat before using this."); + } + } else { + c.getActionSender().sendMessage( + "My shield hasn't finished recharging yet."); + } + } + + /* + * public void applyRecoil(int damage, int i) { if (damage > 0 && + * PlayerHandler.players[i].playerEquipment[c.playerRing] == 2550) { int + * recDamage = damage / 10 + 1; if (!c.getHitUpdateRequired()) { + * c.setHitDiff(recDamage); c.setHitUpdateRequired(true); } else if + * (!c.getHitUpdateRequired2()) { c.setHitDiff2(recDamage); + * c.setHitUpdateRequired2(true); } c.dealDamage(recDamage); + * c.updateRequired = true; } } + */ + + public static void applyRecoilNPC(Client c, int damage, int i) { + if (c == null || c.npcIndex == 0) { + return; + } + if (damage > 0 && c.playerEquipment[c.playerRing] == 2550) { + int recDamage = damage / 10 + 1; + NpcHandler.npcs[c.npcIndex].HP -= recDamage; + NpcHandler.npcs[c.npcIndex].handleHitMask(recDamage); + removeRecoil(c); + c.recoilHits += damage; + } + } + + public static void applyRecoil(Client c, int damage, int i) { + if (damage > 0 + && PlayerHandler.players[i].playerEquipment[c.playerRing] == 2550) { + int recDamage = damage / 10 + 1; + if (!c.getHitUpdateRequired()) { + c.setHitDiff(recDamage); + c.setHitUpdateRequired(true); + } else if (!c.getHitUpdateRequired2()) { + c.setHitDiff2(recDamage); + c.setHitUpdateRequired2(true); + } + c.dealDamage(recDamage); + c.updateRequired = true; + removeRecoil(c); + c.recoilHits += damage; + } + } + + public static void removeRecoil(Client c) { + if (c.recoilHits >= 400) { + c.getItemAssistant().removeItem(2550, c.playerRing); + c.getItemAssistant().deleteItem(2550, + c.getItemAssistant().getItemSlot(2550), 1); + c.getActionSender().sendMessage("Your ring of recoil shaters!"); + c.recoilHits = 0; + } else { + c.recoilHits++; + } + } + + public int getBonusAttack(int i) { + switch (NpcHandler.npcs[i].npcType) { + case 2883: + return Misc.random(50) + 30; + case 2026: + case 2027: + case 2029: + case 2030: + return Misc.random(50) + 30; + } + return 0; + } + + public void handleGmaulPlayer() { + int equippedWeapon = c.playerEquipment[c.playerWeapon]; + if (c.playerIndex > 0) { + Client o = (Client) PlayerHandler.players[c.playerIndex]; + if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), + getRequiredDistance())) { + if (checkReqs()) { + if (checkSpecAmount(equippedWeapon)) { + boolean hit = Misc.random(calcAtt()) > Misc.random(o + .getCombatAssistant().calcDef()); + int damage = 0; + if (hit) { + damage = Misc.random(meleeMaxHit()); + } + if (o.getPrayer().prayerActive[18] + && System.currentTimeMillis() + - o.protMeleeDelay > 1500) { + damage *= .6; + } + o.handleHitMask(damage); + c.startAnimation(1667); + c.gfx100(337); + o.dealDamage(damage); + } + } + } + } + } + + public boolean armaNpc(int i) { + switch (NpcHandler.npcs[i].npcType) { + case 2558: + case 2559: + case 2560: + case 2561: + return true; + } + return false; + } + + public void activateSpecial(int weapon, int i) { + c.getSpecials().activateSpecial(weapon, i); + } + + public boolean checkSpecAmount(int weapon) { + if (c.specAmount >= c.getSpecials().specAmount()) { + c.specAmount -= c.getSpecials().specAmount(); + c.getItemAssistant().addSpecialBar(weapon); + return true; + } + return false; + } + + public int meleeMaxHit() { + return MeleeMaxHit.calculateMeleeMaxHit(c); + } + + public int calcDef() { + return MeleeData.calculateMeleeDefence(c); + } + + public int calcAtt() { + return MeleeData.calculateMeleeAttack(c); + } + + public void getPlayerAnimIndex() { + MeleeData.getPlayerAnimIndex(c); + } + + public int getHitDelay() { + return MeleeData.getHitDelay(c); + } + + public int getAttackDelay() { + return MeleeData.getAttackDelay(c); + } + + public int getWepAnim() { + return MeleeData.getWeaponAnimation(c); + } + + public int getBlockEmote() { + return MeleeData.getBlockEmote(c); + } + + public int rangeMaxHit() { + return RangeMaxHit.rangeMaxHit(c); + } + + public boolean checkMagicReqs(int spell) { + return MagicRequirements.checkMagicReqs(c, spell); + } + + public int calculateRangeDefence() { + return RangeMaxHit.calculateRangeDefence(c); + } + + public int calculateRangeAttack() { + return RangeMaxHit.calculateRangeAttack(c); + } + + public boolean usingBolts() { + return RangeData.usingBolts(c); + } + + public boolean properBolts() { + return RangeData.properBolts(c); + } + + public int mageDef() { + return MagicMaxHit.mageDefenceBonus(c); + } + + public int mageAtk() { + return MagicMaxHit.mageAttackBonus(c); + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/Specials.java b/2006Redone Server/src/redone/game/content/combat/Specials.java new file mode 100644 index 00000000..a6388821 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/Specials.java @@ -0,0 +1,400 @@ +package redone.game.content.combat; + +import java.util.HashMap; + +import redone.Constants; +import redone.game.content.combat.range.RangeData; +import redone.game.content.music.sound.CombatSounds; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class Specials { + + private final Client player; + + public Specials(Client c) { + this.player = c; + } + + private enum specialAttack { + + // ItemName(ItemId, SpecDamage, SpecAccuracy, SpecAmount, Anim, GFX0, + // GFX100, DoubleHit, SsSpec, SpecEffect) + + ABYSSAL_WHIP(4151, 1, 1, 5, 1658, 341, -1, false, false, 0), + DRAGON_DAGGER(1215, .95, 1.15, 2.5, 1062, -1, 252, true, false, 0), + DRAGON_DAGGER_P(1231, .85, 1.15, 2.5, 1062, -1, 252, true, false, 0), + DRAGON_DAGGER_PP(5698, .85, 1.15, 2.5, 1062, -1, 252, true, false, 0), + DRAGON_DAGGER_PPP(5680, .85, 1.15, 2.5, 1062, -1, 252, true, false, 0), + DRAGON_LONG(1305, 1.20, 1.10, 2.5, 1058, -1, 248, false, false, 0), + DRAGON_MACE(1434, 1.55, .85, 2.5, 1060, -1, 251, false, false, 0), + DRAGON_SCIMITAR(4587, 1, 1, 5.5, 1872, -1, 347, false, false, 1), + DRAGON_HALBERD(3204, 1.25, .85, 3.3, 1203, -1, 282, true, false, 0), + GRANITE_MAUL(4153, 1.10, .85, 5, 1667, -1, 337, false, false, 0), + MAGIC_SHORTBOW(861, 1.05, .95, 5.5, 1074, -1, -1, true, false, 0), + MAGIC_LONGBOW(859, 1.20, 1.05, 5.5, 426, -1, -1, false, false, 0); + + private int weapon, anim, gfx1, gfx2, specEffect; + private double specDamage, specAccuracy, specAmount; + private boolean doubleHit, ssSpec; + + private specialAttack(int weapon, double specDamage, + double specAccuracy, double specAmount, int anim, int gfx1, + int gfx2, boolean doubleHit, boolean ssSpec, int specEffect) { + this.weapon = weapon; + this.specDamage = specDamage; + this.specAccuracy = specAccuracy; + this.specAmount = specAmount; + this.anim = anim; + this.gfx1 = gfx1; + this.gfx2 = gfx2; + this.doubleHit = doubleHit; + this.ssSpec = ssSpec; + this.specEffect = specEffect; + } + + private int getWeapon() { + return weapon; + } + + private double getSpecDamage() { + return specDamage; + } + + private double getSpecAccuracy() { + return specAccuracy; + } + + private double getSpecAmount() { + return specAmount; + } + + private int getAnim() { + return anim; + } + + private int getGfx1() { + return gfx1; + } + + private int getGfx2() { + return gfx2; + } + + private boolean getDoubleHit() { + return doubleHit; + } + + private boolean getSsSpec() { + return ssSpec; + } + + @SuppressWarnings("unused") + private int getSpecEffect() { + return specEffect; + } + + public static HashMap specialAttack = new HashMap(); + + @SuppressWarnings("unused") + public static specialAttack getWeapon(int weapon) { + return specialAttack.get(weapon); + } + + static { + for (specialAttack SA : specialAttack.values()) { + specialAttack.put(SA.getWeapon(), SA); + } + } + } + + public void activateSpecial(int weapon, int i) { + int equippedWeapon = player.playerEquipment[player.playerWeapon]; + if (NpcHandler.npcs[i] == null && player.npcIndex > 0 + || PlayerHandler.players[player.playerIndex] == null + && player.playerIndex > 0) { + return; + } + player.doubleHit = false; + player.specEffect = 0; + player.projectileStage = 0; + player.specMaxHitIncrease = 2; + if (player.npcIndex > 0) { + player.oldNpcIndex = i; + } else if (player.playerIndex > 0) { + player.oldPlayerIndex = i; + PlayerHandler.players[i].underAttackBy = player.playerId; + PlayerHandler.players[i].logoutDelay = System.currentTimeMillis(); + PlayerHandler.players[i].singleCombatDelay = System + .currentTimeMillis(); + PlayerHandler.players[i].killerId = player.playerId; + } + player.specEffect = 0; + player.projectileStage = 0; + for (specialAttack SA : specialAttack.values()) { + if (NpcHandler.npcs[player.npcIndex] == null && player.npcIndex > 0) { + return; + } + if (PlayerHandler.players[player.playerIndex] == null + && player.playerIndex > 0) { + return; + } + if (equippedWeapon == SA.getWeapon()) { + if (SA.getWeapon() == 11235) { + player.usingBow = true; + player.dbowSpec = true; + player.rangeItemUsed = player.playerEquipment[player.playerArrows]; + player.getItemAssistant().deleteArrow(); + player.getItemAssistant().deleteArrow(); + player.lastWeaponUsed = weapon; + player.hitDelay = 3; + player.startAnimation(426); + player.projectileStage = 1; + player.gfx100(RangeData.getRangeStartGFX(player)); + player.hitDelay = player.getCombatAssistant().getHitDelay(); + if (player.fightMode == 2) { + player.attackTimer--; + } + if (player.playerIndex > 0) { + player.getCombatAssistant().fireProjectilePlayer(); + } else if (player.npcIndex > 0) { + player.getCombatAssistant().fireProjectileNpc(); + } + player.specAccuracy = SA.getSpecAccuracy(); + player.specDamage = SA.getSpecDamage(); + } else if (SA.getWeapon() == 15241) { + player.usingBow = true; + player.rangeItemUsed = player.playerEquipment[player.playerArrows]; + player.getItemAssistant().deleteArrow(); + player.lastWeaponUsed = weapon; + player.startAnimation(12175); + player.specAccuracy = SA.getSpecAccuracy(); + player.specDamage = SA.getSpecDamage(); + player.hitDelay = 5; + player.attackTimer -= 7; + player.hitDelay = player.getCombatAssistant().getHitDelay(); + if (player.fightMode == 2) { + if (player.playerIndex > 0) { + player.getCombatAssistant().fireProjectilePlayer(); + } else if (player.npcIndex > 0) { + player.getCombatAssistant().fireProjectileNpc(); + } + } + } else if (SA.getWeapon() == 13879 || SA.getWeapon() == 13883) { + player.usingRangeWeapon = true; + player.rangeItemUsed = player.playerEquipment[player.playerWeapon]; + player.getItemAssistant().deleteArrow(); + player.lastWeaponUsed = weapon; + player.startAnimation(SA.getAnim()); + player.gfx0(SA.getGfx1()); + player.specAccuracy = SA.getSpecAccuracy(); + player.specDamage = SA.getSpecDamage(); + player.projectileStage = 1; + player.hitDelay = player.getCombatAssistant().getHitDelay(); + if (player.fightMode == 2) { + player.attackTimer--; + } + if (player.playerIndex > 0) { + player.getCombatAssistant().fireProjectilePlayer(); + } else if (player.npcIndex > 0) { + player.getCombatAssistant().fireProjectileNpc(); + } + } else if (SA.getWeapon() == 859 || SA.getWeapon() == 861) { + player.usingBow = true; + player.bowSpecShot = 1; + player.rangeItemUsed = player.playerEquipment[player.playerArrows]; + player.getItemAssistant().deleteArrow(); + player.lastWeaponUsed = weapon; + player.startAnimation(SA.getAnim()); + player.projectileStage = 1; + player.hitDelay = player.getCombatAssistant().getHitDelay(); + if (player.fightMode == 2) { + player.attackTimer--; + } + if (player.playerIndex > 0) { + player.getCombatAssistant().fireProjectilePlayer(); + } else if (player.npcIndex > 0) { + player.getCombatAssistant().fireProjectileNpc(); + } + } else if (SA.getGfx1() == -1) { + player.gfx100(SA.getGfx2()); + player.startAnimation(SA.getAnim()); + player.specDamage = SA.getSpecDamage(); + player.specAccuracy = SA.getSpecAccuracy(); + player.hitDelay = player.getCombatAssistant().getHitDelay(); + player.doubleHit = SA.getDoubleHit(); + player.ssSpec = SA.getSsSpec(); + } else { + player.gfx0(SA.getGfx1()); + player.startAnimation(SA.getAnim()); + player.specDamage = SA.getSpecDamage(); + player.specAccuracy = SA.getSpecAccuracy(); + player.hitDelay = player.getCombatAssistant().getHitDelay(); + player.doubleHit = SA.getDoubleHit(); + player.ssSpec = SA.getSsSpec(); + } + } + player.delayedDamage = Misc.random(player.getCombatAssistant().meleeMaxHit()); + player.delayedDamage2 = Misc + .random(player.getCombatAssistant().meleeMaxHit()); + player.usingSpecial = false; + player.getItemAssistant().updateSpecialBar(); + if (Constants.combatSounds) { + player.getActionSender() + .sendSound( + CombatSounds + .specialSounds(player.playerEquipment[player.playerWeapon]), + 100, 0); + } + } + } + + public void handleGmaul() { + if (player.npcIndex > 0 && NpcHandler.npcs[player.npcIndex] != null) { + if (player.goodDistance(player.getX(), player.getY(), NpcHandler.npcs[player.npcIndex] + .getX(), NpcHandler.npcs[player.npcIndex].getY(), player + .getCombatAssistant().getRequiredDistance())) { + if (player.getCombatAssistant().checkSpecAmount(4153)) { + boolean hit = Misc.random(player.getCombatAssistant().calcAtt()) > Misc + .random(NpcHandler.npcs[player.npcIndex].defence); + int damage = 0; + if (hit) { + damage = Misc.random(player.getCombatAssistant() + .meleeMaxHit()); + NpcHandler.npcs[player.npcIndex].HP -= damage; + NpcHandler.npcs[player.npcIndex].hitDiff2 = damage; + NpcHandler.npcs[player.npcIndex].hitUpdateRequired2 = true; + NpcHandler.npcs[player.npcIndex].updateRequired = true; + player.startAnimation(1667); + player.gfx100(340); + } + } + } + } else if (player.playerIndex > 0) { + final Client o = (Client) PlayerHandler.players[player.playerIndex]; + if (player.goodDistance(player.getX(), player.getY(), o.getX(), o.getY(), player + .getCombatAssistant().getRequiredDistance())) { + if (player.getCombatAssistant().checkReqs()) { + if (player.getCombatAssistant().checkSpecAmount(4153)) { + boolean hit = Misc.random(player.getCombatAssistant() + .calcAtt()) > Misc.random(o + .getCombatAssistant().calcDef()); + int damage = 0; + if (hit) { + damage = Misc.random(player.getCombatAssistant() + .meleeMaxHit()); + } + if (o.getPrayer().prayerActive[18] + && System.currentTimeMillis() + - o.protMeleeDelay > 1500) { + damage *= .6; + } + if (o.playerLevel[3] - damage <= 0) { + damage = o.playerLevel[3]; + } + if (o.playerLevel[3] > 0) { + o.handleHitMask(damage); + player.startAnimation(1667); + o.gfx100(337); + o.dealDamage(damage); + } + } + } + } + } + } + + public double specAmount() { + for (specialAttack SA : specialAttack.values()) { + if (player.playerEquipment[player.playerWeapon] == SA.getWeapon()) { + return SA.getSpecAmount(); + } + } + return 0; + } + + public static void specialClicking(Client player, int actionButtonId) { + switch (actionButtonId) { + case 29188: + if (player.playerEquipment[player.playerWeapon] == 1434) { + player.specBarId = 7636; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29163: + if (player.playerEquipment[player.playerWeapon] == 4587) { + player.specBarId = 7611; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 33033: + if (player.playerEquipment[player.playerWeapon] == 4153) { + player.specBarId = 8505; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29038: + if (player.playerEquipment[player.playerWeapon] == 4153) { + player.specBarId = 7486; + player.getSpecials().handleGmaul(); + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29063: + if (player.playerEquipment[player.playerWeapon] == 1377) { + if (player.getCombatAssistant().checkSpecAmount(1377)) { + player.gfx0(246); + player.forcedChat("Raarrrrrgggggghhhhhhh!"); + player.startAnimation(1056); + player.playerLevel[2] = player.getLevelForXP(player.playerXP[2]) + player.getLevelForXP(player.playerXP[2]) * 15 / 100; + player.getPlayerAssistant().refreshSkill(2); + player.getItemAssistant().updateSpecialBar(); + } else { + player.getActionSender().sendMessage("You don't have the required special energy to use this attack."); + } + } + break; + + case 48023: + if (player.playerEquipment[player.playerWeapon] == 4151) { + player.specBarId = 12335; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29138: + if (player.playerEquipment[player.playerWeapon] == 1215 || player.playerEquipment[player.playerWeapon] == 1231 || player.playerEquipment[player.playerWeapon] == 5680 || player.playerEquipment[player.playerWeapon] == 5698) { + player.specBarId = 7586; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29113: + if (player.playerEquipment[player.playerWeapon] == 861 || player.playerEquipment[player.playerWeapon] == 859) { + player.specBarId = 7561; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + } + break; + + case 29238: + player.specBarId = 7686; + player.usingSpecial = !player.usingSpecial; + player.getItemAssistant().updateSpecialBar(); + break; + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/CastOnOther.java b/2006Redone Server/src/redone/game/content/combat/magic/CastOnOther.java new file mode 100644 index 00000000..fe7e4bcd --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/CastOnOther.java @@ -0,0 +1,83 @@ +package redone.game.content.combat.magic; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; + +public class CastOnOther extends CastRequirements { + + public static boolean castOnOtherSpells(Client c) { + int[] spells = { 12435, 12455, 12425, 30298, 30290, 30282, }; + for (int spell : spells) { + if (c.castingSpellId == spell) { + return true; + } + } + return false; + } + + public static void teleOtherDistance(Client c, int type, int i) { + Client castOn = (Client) PlayerHandler.players[i]; + int[][] data = { { 74, SOUL, LAW, EARTH, 1, 1, 1 }, + { 82, SOUL, LAW, WATER, 1, 1, 1 }, + { 90, SOUL, LAW, -1, 2, 1, -1 }, }; + if (!hasRequiredLevel(c, data[type][0])) { + c.getActionSender().sendMessage( + "You need to have a magic level of " + data[type][0] + + " to cast this spell."); + return; + } + if (!hasRunes(c, new int[] { data[type][1], data[type][2], + data[type][3] }, new int[] { data[type][4], data[type][5], + data[type][6] })) { + return; + } + deleteRunes(c, + new int[] { data[type][1], data[type][2], data[type][3] }, + new int[] { data[type][4], data[type][5], data[type][6] }); + String[] location = { "Lumbridge", "Falador", "Camelot", }; + c.faceUpdate(i + 32768); + c.startAnimation(1818); + c.gfx0(343); + if (castOn != null) { + if (castOn.distanceToPoint(c.absX, c.absY) <= 15) { + if (c.heightLevel == castOn.heightLevel) { + c.getPlayerAssistant().sendFrame126(location[type], 12560); + c.getPlayerAssistant().sendFrame126(c.playerName, 12558); + c.getPlayerAssistant().showInterface(12468); + castOn.teleotherType = type; + } + } + } + } + + public static void teleOtherLocation(final Client c, final int i, + boolean decline) { + c.getPlayerAssistant().removeAllWindows(); + final int[][] coords = { { 3222, 3218 }, // LUMBRIDGE + { 2964, 3378 }, // FALADOR + { 2757, 3477 }, // CAMELOT + }; + if (!decline) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.startAnimation(715); + c.teleportToX = coords[c.teleotherType][0]; + c.teleportToY = coords[c.teleotherType][1]; + c.teleotherType = -1; + container.stop(); + } + @Override + public void stop() { + // TODO Auto-generated method stub + + } + }, 3); + c.startAnimation(1816); + c.gfx100(342); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/CastRequirements.java b/2006Redone Server/src/redone/game/content/combat/magic/CastRequirements.java new file mode 100644 index 00000000..c078fe92 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/CastRequirements.java @@ -0,0 +1,67 @@ +package redone.game.content.combat.magic; + +import redone.game.players.Client; + +public class CastRequirements { + + public static boolean hasRunes(Client c, int[] runes, int[] amount) { + for (int i = 0; i < runes.length; i++) { + if (c.getItemAssistant().playerHasItem(runes[i], amount[i])) { + return true; + } + } + c.getActionSender().sendMessage( + "You don't have enough required runes to cast this spell!"); + return false; + } + + public static boolean hasRunes(Client c, int[][] runes) { + int hasRunes = 0; + for (int[] rune : runes) { + if (c.getItemAssistant().playerHasItem(rune[0], rune[1])) { + hasRunes++; + } + } + if (hasRunes == runes.length) { + deleteRunes(c, runes); + return true; + } + c.getActionSender().sendMessage( + "You don't have the required runes to cast this spell."); + return false; + } + + public static void deleteRunes(Client c, int[][] runes) { + for (int[] rune : runes) { + if (!MagicRequirements.wearingStaff(c, rune[0])) { + c.getItemAssistant().deleteItem(rune[0], rune[1]); + } + } + } + + public static void deleteRunes(Client c, int[] runes, int[] amount) { + for (int i = 0; i < runes.length; i++) { + c.getItemAssistant().deleteItem(runes[i], + c.getItemAssistant().getItemSlot(runes[i]), amount[i]); + } + } + + public static boolean hasRequiredLevel(Client c, int i) { + return c.playerLevel[6] >= i; + } + + public static final int FIRE = 554; + public static final int WATER = 555; + public static final int AIR = 556; + public static final int EARTH = 557; + public static final int MIND = 558; + public static final int BODY = 559; + public static final int DEATH = 560; + public static final int NATURE = 561; + public static final int CHAOS = 562; + public static final int LAW = 563; + public static final int COSMIC = 564; + public static final int BLOOD = 565; + public static final int SOUL = 566; + public static final int ASTRAL = 9075; +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/Enchanting.java b/2006Redone Server/src/redone/game/content/combat/magic/Enchanting.java new file mode 100644 index 00000000..f45ae856 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/Enchanting.java @@ -0,0 +1,249 @@ +package redone.game.content.combat.magic; + +import java.util.HashMap; +import java.util.Map; + +import redone.game.players.Client; + +public class Enchanting { + + private final Client c; + + public Enchanting(Client c) { + this.c = c; + } + + public enum Enchant { + + SAPPHIRERING(1637, 2550, 7, 18, 719, 114, 1), SAPPHIREAMULET(1694, + 1727, 7, 18, 719, 114, 1), SAPPHIRENECKLACE(1656, 3853, 7, 18, + 719, 114, 1), + + EMERALDRING(1639, 2552, 27, 37, 719, 114, 2), EMERALDAMULET(1696, 1729, + 27, 37, 719, 114, 2), EMERALDNECKLACE(1658, 5521, 27, 37, 719, + 114, 2), + + RUBYRING(1641, 2568, 47, 59, 720, 115, 3), RUBYAMULET(1698, 1725, 47, + 59, 720, 115, 3), + // RUBYNECKLACE(1660, 11194, 47, 59, 720, 115, 3), + + DIAMONDRING(1643, 2570, 57, 67, 720, 115, 4), DIAMONDAMULET(1700, 1731, + 57, 67, 720, 115, 4), + // DIAMONDNECKLACE(1662, 11090, 57, 67, 720, 115, 4), + + DRAGONSTONERING(1645, 2572, 68, 78, 721, 116, 5), + DRAGONSTONEAMULET(1702, 1704, 68, 78, 721, 116, 5), + // DRAGONSTONENECKLACE(1664, 11105, 68, 78, 721, 116, 5), + + ONYXRING(6575, 6583, 87, 97, 721, 452, 6), ONYXAMULET(6581, 6585, 87, + 97, 721, 452, 6); + + // ONYXNECKLACE(6577, 11128, 87, 97, 721, 452, 6) + + int unenchanted, enchanted, levelReq, xpGiven, anim, gfx, + reqEnchantmentLevel; + + private Enchant(int unenchanted, int enchanted, int levelReq, + int xpGiven, int anim, int gfx, int reqEnchantmentLevel) { + this.unenchanted = unenchanted; + this.enchanted = enchanted; + this.levelReq = levelReq; + this.xpGiven = xpGiven; + this.anim = anim; + this.gfx = gfx; + this.reqEnchantmentLevel = reqEnchantmentLevel; + } + + public int getUnenchanted() { + return unenchanted; + } + + public int getEnchanted() { + return enchanted; + } + + public int getLevelReq() { + return levelReq; + } + + public int getXp() { + return xpGiven; + } + + public int getAnim() { + return anim; + } + + public int getGFX() { + return gfx; + } + + public int getELevel() { + return reqEnchantmentLevel; + } + + private static final Map enc = new HashMap(); + + public static Enchant forId(int itemID) { + return enc.get(itemID); + } + + static { + for (Enchant en : Enchant.values()) { + enc.put(en.getUnenchanted(), en); + } + } + } + + private enum EnchantSpell { + + SAPPHIRE(1155, 555, 1, 564, 1, -1, 0), EMERALD(1165, 556, 3, 564, 1, + -1, 0), RUBY(1176, 554, 5, 564, 1, -1, 0), DIAMOND(1180, 557, + 10, 564, 1, -1, 0), DRAGONSTONE(1187, 555, 15, 557, 15, 564, 1), ONYX( + 6003, 557, 20, 554, 20, 564, 1); + + int spell, reqRune1, reqAmtRune1, reqRune2, reqAmtRune2, reqRune3, + reqAmtRune3; + + private EnchantSpell(int spell, int reqRune1, int reqAmtRune1, + int reqRune2, int reqAmtRune2, int reqRune3, int reqAmtRune3) { + this.spell = spell; + this.reqRune1 = reqRune1; + this.reqAmtRune1 = reqAmtRune1; + this.reqRune2 = reqRune2; + this.reqAmtRune2 = reqAmtRune2; + this.reqRune3 = reqRune3; + this.reqAmtRune3 = reqAmtRune3; + } + + public int getSpell() { + return spell; + } + + public int getReq1() { + return reqRune1; + } + + public int getReqAmt1() { + return reqAmtRune1; + } + + public int getReq2() { + return reqRune2; + } + + public int getReqAmt2() { + return reqAmtRune2; + } + + public int getReq3() { + return reqRune3; + } + + public int getReqAmt3() { + return reqAmtRune3; + } + + public static final Map ens = new HashMap(); + + public static EnchantSpell forId(int id) { + return ens.get(id); + } + + static { + for (EnchantSpell en : EnchantSpell.values()) { + ens.put(en.getSpell(), en); + } + } + + } + + private boolean hasRunes(int spellID) { + EnchantSpell ens = EnchantSpell.forId(spellID); + if (ens.getReq3() == 0) { + return c.getItemAssistant().playerHasItem(ens.getReq1(), + ens.getReqAmt1()) + && c.getItemAssistant().playerHasItem(ens.getReq2(), + ens.getReqAmt2()) + && c.getItemAssistant().playerHasItem(ens.getReq3(), + ens.getReqAmt3()); + } else { + return c.getItemAssistant().playerHasItem(ens.getReq1(), + ens.getReqAmt1()) + && c.getItemAssistant().playerHasItem(ens.getReq2(), + ens.getReqAmt2()); + } + } + + private int getEnchantmentLevel(int spellID) { + switch (spellID) { + case 1155: // Lvl-1 enchant sapphire + return 1; + case 1165: // Lvl-2 enchant emerald + return 2; + case 1176: // Lvl-3 enchant ruby + return 3; + case 1180: // Lvl-4 enchant diamond + return 4; + case 1187: // Lvl-5 enchant dragonstone + return 5; + case 6003: // Lvl-6 enchant onyx + return 6; + } + return 0; + } + + public void enchantItem(int itemID, int spellID) { + Enchant enc = Enchant.forId(itemID); + EnchantSpell ens = EnchantSpell.forId(spellID); + if (enc == null || ens == null) { + + return; + } + if (c.playerLevel[c.playerMagic] >= enc.getLevelReq()) { + if (c.getItemAssistant().playerHasItem(enc.getUnenchanted(), 1)) { + if (hasRunes(spellID)) { + if (getEnchantmentLevel(spellID) == enc.getELevel()) { + c.getItemAssistant().deleteItem(enc.getUnenchanted(), 1); + c.getItemAssistant().addItem(enc.getEnchanted(), 1); + c.getPlayerAssistant().addSkillXP(enc.getXp(), + c.playerMagic); + c.getItemAssistant() + .deleteItem( + ens.getReq1(), + c.getItemAssistant().getItemSlot( + ens.getReq1()), + ens.getReqAmt1()); + c.getItemAssistant() + .deleteItem( + ens.getReq2(), + c.getItemAssistant().getItemSlot( + ens.getReq2()), + ens.getReqAmt2()); + c.startAnimation(enc.getAnim()); + c.gfx100(enc.getGFX()); + if (ens.getReq3() != -1) { + c.getItemAssistant().deleteItem( + ens.getReq3(), + c.getItemAssistant().getItemSlot( + ens.getReq3()), ens.getReqAmt3()); + } + c.getPlayerAssistant().sendFrame106(6); + } else { + c.getActionSender().sendMessage( + "You can only enchant this jewelry using a level-" + + enc.getELevel() + + " enchantment spell!"); + } + } else { + c.getActionSender().sendMessage( + "You do not have enough runes to cast this spell."); + } + } + } else { + c.getActionSender().sendMessage( + "You need a magic level of at least " + enc.getLevelReq() + + " to cast this spell."); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/MagicData.java b/2006Redone Server/src/redone/game/content/combat/magic/MagicData.java new file mode 100644 index 00000000..e4ddb28b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/MagicData.java @@ -0,0 +1,388 @@ +package redone.game.content.combat.magic; + +import redone.game.players.Client; +public class MagicData { + + public static final int[][] MAGIC_SPELLS = { + // example {magicId, level req, animation, startGFX, projectile Id, + // endGFX, maxhit, exp gained, rune 1, rune 1 amount, rune 2, rune 2 + // amount, rune 3, rune 3 amount, rune 4, rune 4 amount} + + // Modern Spells + { 1152, 1, 711, 90, 91, 92, 2, 5, 556, 1, 558, 1, 0, 0, 0, 0, 993 }, // wind + // strike + { 1154, 5, 711, 93, 94, 95, 4, 7, 555, 1, 556, 1, 558, 1, 0, 0, 211 }, // water + // strike + { 1156, 9, 711, 96, 97, 98, 6, 9, 557, 2, 556, 1, 558, 1, 0, 0, 0 },// earth + // strike + { 1158, 13, 711, 99, 100, 101, 8, 11, 554, 3, 556, 2, 558, 1, 0, 0, + 0 }, // fire + // strike + { 1160, 17, 711, 117, 118, 119, 9, 13, 556, 2, 562, 1, 0, 0, 0, 0, + 0 }, // wind + // bolt + { 1163, 23, 711, 120, 121, 122, 10, 16, 556, 2, 555, 2, 562, 1, 0, + 0, 0 }, // water + // bolt + { 1166, 29, 711, 123, 124, 125, 11, 20, 556, 2, 557, 3, 562, 1, 0, + 0, 0 }, // earth + // bolt + { 1169, 35, 711, 126, 127, 128, 12, 22, 556, 3, 554, 4, 562, 1, 0, + 0, 0 }, // fire + // bolt + { 1172, 41, 711, 132, 133, 134, 13, 25, 556, 3, 560, 1, 0, 0, 0, 0, + 0 }, // wind + // blast + { 1175, 47, 711, 135, 136, 137, 14, 28, 556, 3, 555, 3, 560, 1, 0, + 0, 0 }, // water + // blast + { 1177, 53, 711, 138, 139, 140, 15, 31, 556, 3, 557, 4, 560, 1, 0, + 0, 0 }, // earth + // blast + { 1181, 59, 711, 129, 130, 131, 16, 35, 556, 4, 554, 5, 560, 1, 0, + 0, 0 }, // fire + // blast + { 1183, 62, 727, 158, 159, 160, 17, 36, 556, 5, 565, 1, 0, 0, 0, 0, + 0 }, // wind + // wave + { 1185, 65, 727, 161, 162, 163, 18, 37, 556, 5, 555, 7, 565, 1, 0, + 0, 0 }, // water + // wave + { 1188, 70, 727, 164, 165, 166, 19, 40, 556, 5, 557, 7, 565, 1, 0, + 0, 0 }, // earth + // wave + { 1189, 75, 727, 155, 156, 157, 20, 42, 556, 5, 554, 7, 565, 1, 0, + 0, 0 }, // fire + // wave + + { 1153, 3, 716, 102, 103, 104, 0, 13, 555, 3, 557, 2, 559, 1, 0, 0, + 0 }, // confuse + { 1157, 11, 716, 105, 106, 107, 0, 20, 555, 3, 557, 2, 559, 1, 0, + 0, 0 }, // weaken + { 1161, 19, 716, 108, 109, 110, 0, 29, 555, 2, 557, 3, 559, 1, 0, + 0, 0 }, // curse + { 1542, 66, 729, 167, 168, 169, 0, 76, 557, 5, 555, 5, 566, 1, 0, + 0, 0 }, // vulnerability + { 1543, 73, 729, 170, 171, 172, 0, 83, 557, 8, 555, 8, 566, 1, 0, + 0, 0 }, // enfeeble + { 1562, 80, 729, 173, 174, 107, 0, 90, 557, 12, 555, 12, 556, 1, 0, + 0, 0 }, // stun + + { 1572, 20, 710, 177, 178, 181, 0, 30, 557, 3, 555, 3, 561, 2, 0, + 0, 0 }, // bind + { 1582, 50, 710, 177, 178, 180, 2, 60, 557, 4, 555, 4, 561, 3, 0, + 0, 0 }, // snare + { 1592, 79, 710, 177, 178, 179, 4, 90, 557, 5, 555, 5, 561, 4, 0, + 0, 0 }, // entangle + + { 1171, 39, 724, 145, 146, 147, 15, 25, 556, 2, 557, 2, 562, 1, 0, 0, 0 }, // crumble + { 1539, 50, 708, 87, 88, 89, 25, 42, 554, 5, 560, 1, 0, 0, 0, 0, 0 }, // iban + // blast + { 12037, 50, 1576, 327, 328, 329, 19, 30, 560, 1, 558, 4, 0, 0, 0, + 0, 0 }, // magic + // dart + + { 1190, 60, 811, 0, 0, 76, 20, 60, 554, 2, 565, 2, 556, 4, 0, 0, 0 }, // sara + // strike + { 1191, 60, 811, 0, 0, 77, 20, 60, 554, 1, 565, 2, 556, 4, 0, 0, 0 }, // cause + // of + // guthix + { 1192, 60, 811, 0, 0, 78, 20, 60, 554, 4, 565, 2, 556, 1, 0, 0, 0 }, // flames + // of + // zammy + + { 12445, 85, 1819, 0, 344, 345, 0, 65, 563, 1, 562, 1, 560, 1, 0, + 0, 0 }, // teleblock + + // Ancient Spells + { 12939, 50, 1978, 0, 384, 385, 13, 30, 560, 2, 562, 2, 554, 1, + 556, 1, 0 }, // smoke + // rush + { 12987, 52, 1978, 0, 378, 379, 14, 31, 560, 2, 562, 2, 566, 1, + 556, 1, 0 }, // shadow + // rush + { 12901, 56, 1978, 0, 0, 373, 15, 33, 560, 2, 562, 2, 565, 1, 0, 0, + 0 }, // blood + // rush + { 12861, 58, 1978, 0, 360, 361, 16, 34, 560, 2, 562, 2, 555, 2, 0, + 0, 0 }, // ice + // rush + { 12963, 62, 1979, 0, 0, 389, 19, 36, 560, 2, 562, 4, 556, 2, 554, + 2, 0 }, // smoke + // burst + { 13011, 64, 1979, 0, 0, 382, 20, 37, 560, 2, 562, 4, 556, 2, 566, + 2, 0 }, // shadow + // burst + { 12919, 68, 1979, 0, 0, 376, 21, 39, 560, 2, 562, 4, 565, 2, 0, 0, + 0 }, // blood + // burst + { 12881, 70, 1979, 0, 0, 363, 22, 40, 560, 2, 562, 4, 555, 4, 0, 0, + 0 }, // ice + // burst + { 12951, 74, 1978, 0, 386, 387, 23, 42, 560, 2, 554, 2, 565, 2, + 556, 2, 0 }, // smoke + // blitz + { 12999, 76, 1978, 0, 380, 381, 24, 43, 560, 2, 565, 2, 556, 2, + 566, 2, 0 }, // shadow + // blitz + { 12911, 80, 1978, 0, 374, 375, 25, 45, 560, 2, 565, 4, 0, 0, 0, 0, + 0 }, // blood + // blitz + { 12871, 82, 1978, 366, 0, 367, 26, 46, 560, 2, 565, 2, 555, 3, 0, + 0, 0 }, // ice + // blitz + { 12975, 86, 1979, 0, 0, 391, 27, 48, 560, 4, 565, 2, 556, 4, 554, + 4, 0 }, // smoke + // barrage + { 13023, 88, 1979, 0, 0, 383, 28, 49, 560, 4, 565, 2, 556, 4, 566, + 3, 0 }, // shadow + // barrage + { 12929, 92, 1979, 0, 0, 377, 29, 51, 560, 4, 565, 4, 566, 1, 0, 0, + 0 }, // blood + // barrage + { 12891, 94, 1979, 0, 0, 369, 30, 52, 560, 4, 565, 2, 555, 6, 0, 0, + 0 }, // ice + // barrage + + { -1, 80, 811, 301, 0, 0, 0, 0, 554, 3, 565, 3, 556, 3, 0, 0, 0 }, // charge + { -1, 21, 712, 112, 0, 0, 0, 10, 554, 3, 561, 1, 0, 0, 0, 0, 0 }, // low + // alch + { -1, 55, 713, 113, 0, 0, 0, 20, 554, 5, 561, 1, 0, 0, 0, 0, 0 }, // high + // alch + { -1, 33, 728, 142, 143, 144, 0, 35, 556, 1, 563, 1, 0, 0, 0, 0, 0 } // telegrab + + }; + + public static String getSpellName(int id) { + switch (id) { + case 0: + return "Air Strike"; + case 1: + return "Water Strike"; + case 2: + return "Earth Strike"; + case 3: + return "Fire Strike"; + case 4: + return "Air Bolt"; + case 5: + return "Water Bolt"; + case 6: + return "Earth Bolt"; + case 7: + return "Fire Bolt"; + case 8: + return "Air Blast"; + case 9: + return "Water Blast"; + case 10: + return "Earth Blast"; + case 11: + return "Fire Blast"; + case 12: + return "Air Wave"; + case 13: + return "Water Wave"; + case 14: + return "Earth Wave"; + case 15: + return "Fire Wave"; + case 32: + return "Shadow Rush"; + case 33: + return "Smoke Rush"; + case 34: + return "Blood Rush"; + case 35: + return "Ice Rush"; + case 36: + return "Shadow Burst"; + case 37: + return "Smoke Burst"; + case 38: + return "Blood Burst"; + case 39: + return "Ice Burst"; + case 40: + return "Shadow Blitz"; + case 41: + return "Smoke Blitz"; + case 42: + return "Blood Blitz"; + case 43: + return "Ice Blitz"; + case 44: + return "Shadow Barrage"; + case 45: + return "Smoke Barrage"; + case 46: + return "Blood Barrage"; + case 47: + return "Ice Barrage"; + default: + return "Select Spell"; + } + } + + public static boolean multis(Client c) { + switch (MAGIC_SPELLS[c.oldSpellId][0]) { + case 12891: + case 12881: + case 13011: + case 13023: + case 12919: // blood spells + case 12929: + case 12963: + case 12975: + return true; + } + return false; + + } + + public static int getFreezeTime(Client c) { + switch (MAGIC_SPELLS[c.oldSpellId][0]) { + case 1572: + case 12861: // ice rush + return 10; + + case 1582: + case 12881: // ice burst + return 17; + + case 1592: + case 12871: // ice blitz + return 25; + + case 12891: // ice barrage + return 33; + + default: + return 0; + } + } + + public static int getStartHeight(Client c) { + switch (MAGIC_SPELLS[c.spellId][0]) { + case 1562: // stun + return 25; + + case 12939:// smoke rush + return 35; + + case 12987: // shadow rush + return 38; + + case 12861: // ice rush + return 15; + + case 12951: // smoke blitz + return 38; + + case 12999: // shadow blitz + return 25; + + case 12911: // blood blitz + return 25; + + default: + return 43; + } + } + + public static int getEndHeight(Client c) { + switch (MAGIC_SPELLS[c.spellId][0]) { + case 1562: // stun + return 10; + + case 12939: // smoke rush + return 20; + + case 12987: // shadow rush + return 28; + + case 12861: // ice rush + return 10; + + case 12951: // smoke blitz + return 28; + + case 12999: // shadow blitz + return 15; + + case 12911: // blood blitz + return 10; + + default: + return 31; + } + } + + public static int getStartDelay(Client c) { + switch (MAGIC_SPELLS[c.spellId][0]) { + case 1539: + return 60; + + default: + return 53; + } + } + + public static boolean godSpells(Client c) { + switch (MAGIC_SPELLS[c.spellId][0]) { + case 1190: + return true; + + case 1191: + return true; + + case 1192: + return true; + + default: + return false; + } + } + + public static int getEndGfxHeight(Client c) { + switch (MAGIC_SPELLS[c.oldSpellId][0]) { + case 12987: + case 12901: + case 12861: + case 12445: + case 1192: + case 13011: + case 12919: + case 12881: + case 12999: + case 12911: + case 12871: + case 13023: + case 12929: + case 12891: + return 0; + + default: + return 100; + } + } + + public static int getStartGfxHeight(Client c) { + switch (MAGIC_SPELLS[c.spellId][0]) { + case 12871: + case 12891: + return 0; + + default: + return 100; + } + } + + public static boolean fullVoidMage(Client c) { + return c.playerEquipment[c.playerHat] == 11663 + && c.playerEquipment[c.playerLegs] == 8840 + && c.playerEquipment[c.playerChest] == 8839 + && c.playerEquipment[c.playerHands] == 8842; + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/MagicMaxHit.java b/2006Redone Server/src/redone/game/content/combat/magic/MagicMaxHit.java new file mode 100644 index 00000000..8ad501da --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/MagicMaxHit.java @@ -0,0 +1,38 @@ +package redone.game.content.combat.magic; + +import redone.game.players.Client; + +public class MagicMaxHit { + + public static int mageAttackBonus(Client c) { + int magicBonus = c.playerLevel[6]; + if (MagicData.fullVoidMage(c)) { + magicBonus += c.getLevelForXP(c.playerXP[6]) * 0.2; + } + if (c.getPrayer().prayerActive[4]) { + magicBonus *= 1.05; + } else if (c.getPrayer().prayerActive[12]) { + magicBonus *= 1.10; + } else if (c.getPrayer().prayerActive[20]) { + magicBonus *= 1.15; + } + return magicBonus + c.playerBonus[3] * 2; + } + + public static int mageDefenceBonus(Client c) { + int defenceBonus = c.playerLevel[1] / 2 + c.playerLevel[6] / 2; + if (c.getPrayer().prayerActive[0]) { + defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05; + } else if (c.getPrayer().prayerActive[3]) { + defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1; + } else if (c.getPrayer().prayerActive[9]) { + defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15; + } else if (c.getPrayer().prayerActive[18]) { + defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2; + } else if (c.getPrayer().prayerActive[19]) { + defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25; + } + return defenceBonus + c.playerBonus[8] + c.playerBonus[8] / 3; + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/MagicRequirements.java b/2006Redone Server/src/redone/game/content/combat/magic/MagicRequirements.java new file mode 100644 index 00000000..38faf0db --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/MagicRequirements.java @@ -0,0 +1,175 @@ +package redone.game.content.combat.magic; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; + +public class MagicRequirements { + + public static boolean wearingStaff(Client c, int runeId) { + int wep = c.playerEquipment[c.playerWeapon]; + switch (runeId) { + case 554: + if (wep == 1387 || wep == 1393 || wep == 3053) { + return true; + } + break; + case 555: + if (wep == 1383 || wep == 1395) { + return true; + } + break; + case 556: + if (wep == 1381 || wep == 1397) { + return true; + } + break; + case 557: + if (wep == 1385 || wep == 1399 || wep == 3053) { + return true; + } + break; + } + return false; + } + + public static boolean checkMagicReqs(Client c, int spell) { + if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) { // check for runes + if (!c.getItemAssistant().playerHasItem( + MagicData.MAGIC_SPELLS[spell][8], + MagicData.MAGIC_SPELLS[spell][9]) + && !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8]) + || !c.getItemAssistant().playerHasItem( + MagicData.MAGIC_SPELLS[spell][10], + MagicData.MAGIC_SPELLS[spell][11]) + && !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][10]) + || !c.getItemAssistant().playerHasItem( + MagicData.MAGIC_SPELLS[spell][12], + MagicData.MAGIC_SPELLS[spell][13]) + && !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][12]) + || !c.getItemAssistant().playerHasItem( + MagicData.MAGIC_SPELLS[spell][14], + MagicData.MAGIC_SPELLS[spell][15]) + && !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][14])) { + c.getActionSender() + .sendMessage( + "You don't have the required runes to cast this spell."); + return false; + } + } + + if (c.usingMagic && c.playerIndex > 0) { + if (PlayerHandler.players[c.playerIndex] != null) { + for (int r = 0; r < c.REDUCE_SPELLS.length; r++) { // reducing + // spells, + // confuse + // etc + if (PlayerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == MagicData.MAGIC_SPELLS[spell][0]) { + c.reduceSpellId = r; + if (System.currentTimeMillis() + - PlayerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId] > PlayerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) { + PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true; + } else { + PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false; + } + break; + } + } + if (!PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) { + c.getActionSender().sendMessage( + "That player is currently immune to this spell."); + c.usingMagic = false; + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + return false; + } + } + } + + int staffRequired = getStaffNeeded(c); + if (c.usingMagic && staffRequired > 0 && MagicTeleports.RUNES_REQUIRED) { // staff + // required + if (c.playerEquipment[c.playerWeapon] != staffRequired) { + c.getActionSender() + .sendMessage( + "You need a " + + ItemAssistant.getItemName( + staffRequired).toLowerCase() + + " to cast this spell."); + return false; + } + } + + if (c.usingMagic && MagicTeleports.MAGIC_LEVEL_REQUIRED) { // check magic level + if (c.playerLevel[6] < MagicData.MAGIC_SPELLS[spell][1]) { + c.getActionSender().sendMessage( + "You need to have a magic level of " + + MagicData.MAGIC_SPELLS[spell][1] + + " to cast this spell."); + return false; + } + } + if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) { + if (MagicData.MAGIC_SPELLS[spell][8] > 0) { // deleting runes + if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8])) { + c.getItemAssistant().deleteItem( + MagicData.MAGIC_SPELLS[spell][8], + c.getItemAssistant().getItemSlot( + MagicData.MAGIC_SPELLS[spell][8]), + MagicData.MAGIC_SPELLS[spell][9]); + } + } + if (MagicData.MAGIC_SPELLS[spell][10] > 0) { + if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][10])) { + c.getItemAssistant().deleteItem( + MagicData.MAGIC_SPELLS[spell][10], + c.getItemAssistant().getItemSlot( + MagicData.MAGIC_SPELLS[spell][10]), + MagicData.MAGIC_SPELLS[spell][11]); + } + } + if (MagicData.MAGIC_SPELLS[spell][12] > 0) { + if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][12])) { + c.getItemAssistant().deleteItem( + MagicData.MAGIC_SPELLS[spell][12], + c.getItemAssistant().getItemSlot( + MagicData.MAGIC_SPELLS[spell][12]), + MagicData.MAGIC_SPELLS[spell][13]); + } + } + if (MagicData.MAGIC_SPELLS[spell][14] > 0) { + if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][14])) { + c.getItemAssistant().deleteItem( + MagicData.MAGIC_SPELLS[spell][14], + c.getItemAssistant().getItemSlot( + MagicData.MAGIC_SPELLS[spell][14]), + MagicData.MAGIC_SPELLS[spell][15]); + } + } + } + return true; + } + + public static int getStaffNeeded(Client c) { + switch (MagicData.MAGIC_SPELLS[c.spellId][0]) { + case 1539: + return 1409; + + case 12037: + return 4170; + + case 1190: + return 2415; + + case 1191: + return 2416; + + case 1192: + return 2417; + + default: + return 0; + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/magic/MagicSpells.java b/2006Redone Server/src/redone/game/content/combat/magic/MagicSpells.java new file mode 100644 index 00000000..fa7d8d3e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/MagicSpells.java @@ -0,0 +1,139 @@ +package redone.game.content.combat.magic; + +import redone.Constants; +import redone.game.content.music.sound.SoundList; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class MagicSpells extends MagicData { + + public static void appendMultiBarrage(Client c, int playerId, boolean splashed) { + if (PlayerHandler.players[playerId] != null) { + Client c2 = (Client) PlayerHandler.players[playerId]; + if (c2.isDead || c2.respawnTimer > 0) { + return; + } + if (checkMultiBarrageReqs(c, playerId)) { + c.barrageCount++; + if (Misc.random(mageAtk(c)) > Misc.random(mageDef(c)) + && !c.magicFailed) { + if (getEndGfxHeight(c) == 100) { // end GFX + c2.gfx100(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } else { + c2.gfx0(MagicData.MAGIC_SPELLS[c.oldSpellId][5]); + } + int damage = Misc + .random(MagicData.MAGIC_SPELLS[c.oldSpellId][6]); + if (c2.getPrayer().prayerActive[12]) { + damage *= (int) .60; + } + if (c2.playerLevel[3] - damage < 0) { + damage = c2.playerLevel[3]; + } + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage * Constants.MAGIC_EXP_RATE, 6); + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage / 3, 3); + // Server.playerHandler.players[playerId].setHitDiff(damage); + // Server.playerHandler.players[playerId].setHitUpdateRequired(true); + PlayerHandler.players[playerId].handleHitMask(damage); + // Server.playerHandler.players[playerId].playerLevel[3] -= + // damage; + PlayerHandler.players[playerId].dealDamage(damage); + PlayerHandler.players[playerId].damageTaken[c.playerId] += damage; + c2.getPlayerAssistant().refreshSkill(3); + c.totalPlayerDamageDealt += damage; + multiSpellEffect(c, playerId, damage); + } else { + c2.gfx100(85); + c.getActionSender().sendSound(SoundList.MAGE_FAIL, 100, + 0); + } + } + } + } + + public static void multiSpellEffect(Client c, int playerId, int damage) { + switch (MagicData.MAGIC_SPELLS[c.oldSpellId][0]) { + case 13011: + case 13023: + if (System.currentTimeMillis() + - PlayerHandler.players[playerId].reduceStat > 35000) { + PlayerHandler.players[playerId].reduceStat = System + .currentTimeMillis(); + PlayerHandler.players[playerId].playerLevel[0] -= PlayerHandler.players[playerId] + .getLevelForXP(PlayerHandler.players[playerId].playerXP[0]) * 10 / 100; + } + break; + case 12919: // blood spells + case 12929: + int heal = damage / 4; + if (c.playerLevel[3] + heal >= c.getPlayerAssistant() + .getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getPlayerAssistant().getLevelForXP( + c.playerXP[3]); + } else { + c.playerLevel[3] += heal; + } + c.getPlayerAssistant().refreshSkill(3); + break; + case 12891: + case 12881: + if (PlayerHandler.players[playerId].freezeTimer < -4) { + PlayerHandler.players[playerId].freezeTimer = getFreezeTime(c); + PlayerHandler.players[playerId].stopMovement(); + } + break; + } + } + + public static boolean checkMultiBarrageReqs(Client c, int i) { + if (PlayerHandler.players[i] == null) { + return false; + } + if (i == c.playerId) { + return false; + } + if (c.inPits && PlayerHandler.players[i].inPits) { + return true; + } + if (!PlayerHandler.players[i].inWild()) { + return false; + } + if (Constants.COMBAT_LEVEL_DIFFERENCE) { + int combatDif1 = c.getCombatAssistant().getCombatDifference(c.combatLevel, + PlayerHandler.players[i].combatLevel); + if (combatDif1 > c.wildLevel + || combatDif1 > PlayerHandler.players[i].wildLevel) { + c.getActionSender() + .sendMessage( + "Your combat level difference is too great to attack that player here."); + return false; + } + } + + if (Constants.SINGLE_AND_MULTI_ZONES) { + if (!PlayerHandler.players[i].inMulti()) { // single combat + // zones + if (PlayerHandler.players[i].underAttackBy != c.playerId + && PlayerHandler.players[i].underAttackBy != 0) { + return false; + } + if (PlayerHandler.players[i].playerId != c.underAttackBy + && c.underAttackBy != 0) { + c.getActionSender().sendMessage( + "You are already in combat."); + return false; + } + } + } + return true; + } + + public static int mageAtk(Client c) { + return MagicMaxHit.mageAttackBonus(c); + } + + public static int mageDef(Client c) { + return MagicMaxHit.mageDefenceBonus(c); + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/combat/magic/MagicTeleports.java b/2006Redone Server/src/redone/game/content/combat/magic/MagicTeleports.java new file mode 100644 index 00000000..00e8bb07 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/MagicTeleports.java @@ -0,0 +1,535 @@ +package redone.game.content.combat.magic; + +import redone.game.content.quests.QuestAssistant; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class MagicTeleports { + + public static final int AIR_RUNE = 556, FIRE_RUNE = 554, WATER_RUNE = 555, + EARTH_RUNE = 557, LAW_RUNE = 563, BLOOD_RUNE = 565, + SOUL_RUNE = 566, BANANA = 1963; + + public static void handleLoginText(Client player) { + player.getPlayerAssistant().sendFrame126("Varrock Teleport", 1300); + player.getPlayerAssistant().sendFrame126("Lumbridge Teleport", 1325); + player.getPlayerAssistant().sendFrame126("Falador Teleport", 1350); + player.getPlayerAssistant().sendFrame126("Camelot Teleport", 1382); + player.getPlayerAssistant().sendFrame126("Ardougne Teleport", 1415); + player.getPlayerAssistant().sendFrame126("Paddewwa Teleport", 13037); + player.getPlayerAssistant().sendFrame126("Senntisten Teleport", 13047); + player.getPlayerAssistant().sendFrame126("Kharyrll Teleport", 13055); + player.getPlayerAssistant().sendFrame126("Lassar Teleport", 13063); + player.getPlayerAssistant().sendFrame126("Dareeyak Teleport", 13071); + } + + /** + * Modern Teleports + */ + public static final int VARROCK_X = 3213, VARROCK_Y = 3423; + public static final int LUMBRIDGE_X = 3222, LUMBRIDGE_Y = 3218; + public static final int FALADOR_X = 2964, FALADOR_Y = 3378; + public static final int CAMELOT_X = 2757, CAMELOT_Y = 3479; + public static final int ARDOUGNE_X = 2662, ARDOUGNE_Y = 3305; + public static final int WATCHTOWER_X = 2547, WATCHTOWER_Y = 3112; + public static final int TROLLHEIM_X = 2910, TROLLHEIM_Y = 3612; + public static final int APE_ATOLL_X = 2754, APE_ATOLL_Y = 2784; + + /** + * Ancient Teleports + */ + public static final int PADDEWWA_X = 3098, PADDEWWA_Y = 9884; + public static final int SENNTISTEN_X = 3321, SENNTISTEN_Y = 3335; + public static final int KHARYRLL_X = 3493, KHARYRLL_Y = 3472; + public static final int LASSAR_X = 3006, LASSAR_Y = 3471; + public static final int DAREEYAK_X = 3161, DAREEYAK_Y = 3671; + public static final int CARRALLANGAR_X = 3157, CARRALLANGAR_Y = 3669; + public static final int ANNAKARL_X = 3286, ANNAKARL_Y = 3884; + public static final int GHORROCK_X = 2977, GHORROCK_Y = 3873; + + public static final boolean MAGIC_LEVEL_REQUIRED = true, RUNES_REQUIRED = true; + + public static boolean hasRuneStaff(Client player, int rune) { + if (rune == 556) {//Air + if (player.playerEquipment[player.playerWeapon] == 1381//Staff of air + || player.playerEquipment[player.playerWeapon] == 1397//Air battlestaff + || player.playerEquipment[player.playerWeapon] == 1405) {//Mystic air staff + return true; + } + } + if (rune == 555) {//Water + if (player.playerEquipment[player.playerWeapon] == 1383//Staff of water + || player.playerEquipment[player.playerWeapon] == 1395//Water battlestaff + || player.playerEquipment[player.playerWeapon] == 6562//Mud battlestaff + || player.playerEquipment[player.playerWeapon] == 6563//Mystic mud staff + || player.playerEquipment[player.playerWeapon] == 11736//Steam battlestaff + || player.playerEquipment[player.playerWeapon] == 11738//Mystic steam staff + || player.playerEquipment[player.playerWeapon] == 1403) {//Mystic water staff + return true; + } + } + if (rune == 557) {//Earth + if (player.playerEquipment[player.playerWeapon] == 1385//Staff of earth + || player.playerEquipment[player.playerWeapon] == 1399//Earth battlestaff + || player.playerEquipment[player.playerWeapon] == 3053//Lava battlestaff + || player.playerEquipment[player.playerWeapon] == 3054//Mystic lava staff + || player.playerEquipment[player.playerWeapon] == 6562//Mud battlestaff + || player.playerEquipment[player.playerWeapon] == 6563//Mystic mud staff + || player.playerEquipment[player.playerWeapon] == 1407) {//Mystic earth staff + return true; + } + } + if (rune == 554) {//Fire + if (player.playerEquipment[player.playerWeapon] == 1387//Staff of fire + || player.playerEquipment[player.playerWeapon] == 1393//Fire battlestaff + || player.playerEquipment[player.playerWeapon] == 3053//Lava battlestaff + || player.playerEquipment[player.playerWeapon] == 3054//Mystic lava staff + || player.playerEquipment[player.playerWeapon] == 11736//Steam battlestaff + || player.playerEquipment[player.playerWeapon] == 11738//Mystic steam staff + || player.playerEquipment[player.playerWeapon] == 1401) {//Mystic fire staff + return true; + } + } + return false; + } + + public static void paddewwaTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(FIRE_RUNE, 1) && hasRuneStaff(player, FIRE_RUNE) == false || !player.getItemAssistant().playerHasItem(FIRE_RUNE, 1) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 54) { + player.getActionSender().sendMessage("You need a magic level of 54 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + if (hasRuneStaff(player, FIRE_RUNE) == false) { + player.getItemAssistant().deleteItem2(FIRE_RUNE, 1); + } else if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 1); + } + player.getPlayerAssistant().startTeleport(PADDEWWA_X + Misc.random(2), PADDEWWA_Y - Misc.random(2), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(64, player.playerMagic); + } + + public static void senntisenTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(SOUL_RUNE, 1)) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 60) { + player.getActionSender().sendMessage("You need a magic level of 60 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getItemAssistant().deleteItem2(SOUL_RUNE, 1); + player.getPlayerAssistant().startTeleport(SENNTISTEN_X + Misc.random(1), SENNTISTEN_Y - Misc.random(1), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(70, player.playerMagic); + } + + public static void kharyllTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(BLOOD_RUNE, 1)) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 66) { + player.getActionSender().sendMessage("You need a magic level of 66 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getItemAssistant().deleteItem2(BLOOD_RUNE, 1); + player.getPlayerAssistant().startTeleport(KHARYRLL_X, KHARYRLL_Y, 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(76, player.playerMagic); + } + + public static void lassarTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(WATER_RUNE, 4) && hasRuneStaff(player, WATER_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 72) { + player.getActionSender().sendMessage("You need a magic level of 72 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + if (hasRuneStaff(player, WATER_RUNE) == false) { + player.getItemAssistant().deleteItem2(WATER_RUNE, 4); + } + player.getPlayerAssistant().startTeleport(LASSAR_X + Misc.random(2), LASSAR_Y - Misc.random(2), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(82, player.playerMagic); + } + + public static void dareeyakTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(FIRE_RUNE, 3) && hasRuneStaff(player, FIRE_RUNE) == false || !player.getItemAssistant().playerHasItem(AIR_RUNE, 2) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 78) { + player.getActionSender().sendMessage("You need a magic level of 78 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + if (hasRuneStaff(player, FIRE_RUNE) == false) { + player.getItemAssistant().deleteItem2(FIRE_RUNE, 3); + } + if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 2); + } + player.getPlayerAssistant().startTeleport( + DAREEYAK_X + Misc.random(1), + DAREEYAK_Y - Misc.random(1), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(88, player.playerMagic); + } + + public static void carrallangarTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(SOUL_RUNE, 2) + || !player.getItemAssistant().playerHasItem(LAW_RUNE, 2)) { + player.getActionSender() + .sendMessage( + "You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 84) { + player.getActionSender().sendMessage("You need a magic level of 84 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(SOUL_RUNE, 2); + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getPlayerAssistant().startTeleport(CARRALLANGAR_X + Misc.random(2), CARRALLANGAR_Y - Misc.random(2), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(94, player.playerMagic); + } + + public static void annakarlTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(BLOOD_RUNE, 2) || !player.getItemAssistant().playerHasItem(LAW_RUNE, 2)) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 90) { + player.getActionSender().sendMessage("You need a magic level of 90 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(BLOOD_RUNE, 2); + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getPlayerAssistant().startTeleport(ANNAKARL_X + Misc.random(1), ANNAKARL_Y - Misc.random(1), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(100, player.playerMagic); + } + + public static void ghorrockTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(WATER_RUNE, 8) && hasRuneStaff(player, WATER_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 96) { + player.getActionSender().sendMessage("You need a magic level of 96 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + if (hasRuneStaff(player, WATER_RUNE) == false) { + player.getItemAssistant().deleteItem2(WATER_RUNE, 8); + } + player.getPlayerAssistant().startTeleport(GHORROCK_X + Misc.random(3), + GHORROCK_Y - Misc.random(3), 0, "ancient"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(106, player.playerMagic); + } + + public static void varrockTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 1) || !player.getItemAssistant().playerHasItem(FIRE_RUNE, 1) && hasRuneStaff(player, FIRE_RUNE) == false || !player.getItemAssistant().playerHasItem(AIR_RUNE, 3) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 25) { + player.getActionSender().sendMessage("You need a magic level of 25 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 1); + if (hasRuneStaff(player, FIRE_RUNE) == false) { + player.getItemAssistant().deleteItem2(FIRE_RUNE, 1); + } + if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 3); + } + player.getPlayerAssistant().startTeleport(VARROCK_X + Misc.random(2), VARROCK_Y - Misc.random(2), 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(35, player.playerMagic); + } + + public static void lumbridgeTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 1) || !player.getItemAssistant().playerHasItem(EARTH_RUNE, 1) && hasRuneStaff(player, EARTH_RUNE) == false || !player.getItemAssistant().playerHasItem(AIR_RUNE, 3) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 32) { + player.getActionSender().sendMessage("You need a magic level of 32 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 1); + if (hasRuneStaff(player, EARTH_RUNE) == false) { + player.getItemAssistant().deleteItem2(EARTH_RUNE, 1); + } + if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 3); + } + player.getPlayerAssistant().startTeleport(LUMBRIDGE_X, LUMBRIDGE_Y, 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(35, player.playerMagic); + } + + public static void faladorTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 1) || !player.getItemAssistant().playerHasItem(WATER_RUNE, 1) && hasRuneStaff(player, WATER_RUNE) == false || !player.getItemAssistant().playerHasItem(AIR_RUNE, 3) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 37) { + player.getActionSender().sendMessage("You need a magic level of 37 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 1); + if (hasRuneStaff(player, WATER_RUNE) == false) { + player.getItemAssistant().deleteItem2(WATER_RUNE, 1); + } + if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 3); + } + player.getPlayerAssistant().startTeleport(FALADOR_X + Misc.random(4), FALADOR_Y - Misc.random(4), 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(48, player.playerMagic); + } + + public static void camelotTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 1) || !player.getItemAssistant().playerHasItem(AIR_RUNE, 5) && hasRuneStaff(player, AIR_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 45) { + player.getActionSender().sendMessage("You need a magic level of 45 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 1); + if (hasRuneStaff(player, AIR_RUNE) == false) { + player.getItemAssistant().deleteItem2(AIR_RUNE, 5); + } + // 2757, 3479 + player.getPlayerAssistant().startTeleport(CAMELOT_X + Misc.random(1), CAMELOT_Y - Misc.random(1), 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(55.5, player.playerMagic); + } + + public static void ardougneTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(WATER_RUNE, 2) && hasRuneStaff(player, WATER_RUNE) == false) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 51) { + player.getActionSender().sendMessage("You need a magic level of 51 to cast this spell."); + return; + } + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + if (hasRuneStaff(player, WATER_RUNE) == false) { + player.getItemAssistant().deleteItem2(WATER_RUNE, 2); + } + player.getPlayerAssistant().startTeleport(ARDOUGNE_X + Misc.random(4), + ARDOUGNE_Y - Misc.random(4), 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(61, player.playerMagic); + } + + public static void watchTowerTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(EARTH_RUNE, 2) && hasRuneStaff(player, EARTH_RUNE) == false || !player.getItemAssistant().playerHasItem(LAW_RUNE, 2)) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 58) { + player.getActionSender().sendMessage( + "You need a magic level of 58 to cast this spell."); + return; + } + } + if (hasRuneStaff(player, EARTH_RUNE) == false) { + player.getItemAssistant().deleteItem2(EARTH_RUNE, 2); + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getPlayerAssistant().startTeleport(WATCHTOWER_X, WATCHTOWER_Y, 1, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(68, player.playerMagic); + } + + public static void trollhiemTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(FIRE_RUNE, 2) && hasRuneStaff(player, FIRE_RUNE) == false || !player.getItemAssistant().playerHasItem(LAW_RUNE, 2)) { + player.getActionSender().sendMessage("You don't have the required runes to cast this spell."); + return; + } + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 61) { + player.getActionSender().sendMessage("You need a magic level of 61 to cast this spell."); + return; + } + } + if (hasRuneStaff(player, FIRE_RUNE) == false) { + player.getItemAssistant().deleteItem2(FIRE_RUNE, 2); + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getPlayerAssistant().startTeleport(2892 + Misc.random(2), + 3679 - Misc.random(2), 0, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(68, player.playerMagic); + } + + public static void apeAtollTeleport(Client player) { + if (System.currentTimeMillis() - player.lastCast < 5000) { + return; + } + RandomEventHandler.addRandom(player); + if (RUNES_REQUIRED) { + if (!player.getItemAssistant().playerHasItem(LAW_RUNE, 2) || !player.getItemAssistant().playerHasItem(FIRE_RUNE, 2) && hasRuneStaff(player, FIRE_RUNE) == false || !player.getItemAssistant().playerHasItem(WATER_RUNE, 2) && hasRuneStaff(player, WATER_RUNE) == false || !player.getItemAssistant().playerHasItem(BANANA, 1)) { + player.getActionSender().sendMessage("You don't have the required items to cast this spell."); + return; + } + } + if (player.questPoints < QuestAssistant.MAXIMUM_QUESTPOINTS) { + player.getActionSender().sendMessage("You need " + QuestAssistant.MAXIMUM_QUESTPOINTS + " quest points to teleport here."); + return; + } + if (MAGIC_LEVEL_REQUIRED) { + if (player.playerLevel[player.playerMagic] < 64) { + player.getActionSender().sendMessage("You need a magic level of 64 to cast this spell."); + return; + } + } + if (hasRuneStaff(player, FIRE_RUNE) == false) { + player.getItemAssistant().deleteItem2(FIRE_RUNE, 2); + } else if (hasRuneStaff(player, WATER_RUNE) == false) { + player.getItemAssistant().deleteItem2(WATER_RUNE, 2); + } + player.getItemAssistant().deleteItem2(LAW_RUNE, 2); + player.getItemAssistant().deleteItem2(BANANA, 1); + player.getPlayerAssistant().startTeleport(2798 + Misc.random(1), 2798 - Misc.random(1), 1, "modern"); + player.lastCast = System.currentTimeMillis(); + player.getPlayerAssistant().addSkillXP(76, player.playerMagic); + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/combat/magic/NonCombatSpells.java b/2006Redone Server/src/redone/game/content/combat/magic/NonCombatSpells.java new file mode 100644 index 00000000..548b7b57 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/magic/NonCombatSpells.java @@ -0,0 +1,23 @@ +package redone.game.content.combat.magic; + +import redone.game.players.Client; + +public class NonCombatSpells { + + public static void teleportObelisk(Client c, int x, int y, int height) { + if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) { + c.getActionSender().sendMessage( + "You are teleblocked and can't teleport."); + return; + } + if (!c.isDead && !c.isTeleporting) { + c.stopMovement(); + c.getPlayerAssistant().removeAllWindows(); + c.npcIndex = 0; + c.playerIndex = 0; + c.faceNpc(0); + c.getPlayerAssistant().spellTeleport(x, y, height); + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/melee/MeleeData.java b/2006Redone Server/src/redone/game/content/combat/melee/MeleeData.java new file mode 100644 index 00000000..bc296f9f --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/melee/MeleeData.java @@ -0,0 +1,463 @@ +package redone.game.content.combat.melee; + +import redone.Constants; +import redone.game.content.combat.magic.MagicData; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class MeleeData { + + public static boolean fullVoidMelee(Client c) { + return c.playerEquipment[c.playerHat] == 11665 + && c.playerEquipment[c.playerLegs] == 8840 + && c.playerEquipment[c.playerChest] == 8839 + && c.playerEquipment[c.playerHands] == 8842; + } + + public static int calculateMeleeAttack(Client c) { + int attackLevel = c.playerLevel[0]; + // 2, 5, 11, 18, 19 + if (c.getPrayer().prayerActive[2]) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05; + } else if (c.getPrayer().prayerActive[7]) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1; + } else if (c.getPrayer().prayerActive[15]) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15; + } else if (c.getPrayer().prayerActive[24]) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15; + } else if (c.getPrayer().prayerActive[25]) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2; + } + if (fullVoidMelee(c)) { + attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1; + } + attackLevel *= c.specAccuracy; + // c.sendMessage("Attack: " + (attackLevel + + // (c.playerBonus[bestMeleeAtk()] * 2))); + int i = c.playerBonus[bestMeleeAtk(c)]; + i += c.bonusAttack; + if (c.playerEquipment[c.playerAmulet] == 11128 + && c.playerEquipment[c.playerWeapon] == 6528) { + i *= 1.30; + } + return (int) (attackLevel + attackLevel * 0.15 + (i + i * 0.05)); + } + + public static int bestMeleeAtk(Client c) { + if (c.playerBonus[0] > c.playerBonus[1] + && c.playerBonus[0] > c.playerBonus[2]) { + return 0; + } + if (c.playerBonus[1] > c.playerBonus[0] + && c.playerBonus[1] > c.playerBonus[2]) { + return 1; + } + return c.playerBonus[2] <= c.playerBonus[1] + || c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2; + } + + public static int calculateMeleeDefence(Client c) { + int defenceLevel = c.playerLevel[1]; + int i = c.playerBonus[bestMeleeDef(c)]; + if (c.getPrayer().prayerActive[0]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05; + } else if (c.getPrayer().prayerActive[5]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1; + } else if (c.getPrayer().prayerActive[13]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15; + } else if (c.getPrayer().prayerActive[24]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2; + } else if (c.getPrayer().prayerActive[25]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25; + } + return (int) (defenceLevel + defenceLevel * 0.15 + (i + i * 0.05)); + } + + public static int bestMeleeDef(Client c) { + if (c.playerBonus[5] > c.playerBonus[6] + && c.playerBonus[5] > c.playerBonus[7]) { + return 5; + } + if (c.playerBonus[6] > c.playerBonus[5] + && c.playerBonus[6] > c.playerBonus[7]) { + return 6; + } + return c.playerBonus[7] <= c.playerBonus[5] + || c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7; + } + + /** + * Weapon and magic attack speed! + **/ + + public static int getAttackDelay(Client c) { + String s = ItemAssistant.getItemName(c.playerEquipment[Constants.WEAPON]).toLowerCase(); + if (c.usingMagic) { + switch (MagicData.MAGIC_SPELLS[c.spellId][0]) { + case 12871: // ice blitz + case 13023: // shadow barrage + case 12891: // ice barrage + return 5; + + default: + return 5; + } + } + if (c.playerEquipment[c.playerWeapon] == -1) { + return 4;// unarmed + } + + switch (c.playerEquipment[c.playerWeapon]) { + case 11235: + return 9; + case 11730: + return 4; + case 6528: + return 7; + } + + if (s.endsWith("greataxe")) { + return 7; + } else if (s.equals("torags hammers")) { + return 5; + } else if (s.equals("guthans warspear")) { + return 5; + } else if (s.equals("veracs flail")) { + return 5; + } else if (s.equals("ahrims staff")) { + return 6; + } else if (s.contains("staff")) { + if (s.contains("zamarok") || s.contains("guthix") + || s.contains("saradomian") || s.contains("slayer") + || s.contains("ancient")) { + return 4; + } else { + return 5; + } + } else if (s.contains("bow")) { + if (s.contains("composite") || s.equals("seercull")) { + return 5; + } else if (s.contains("aril")) { + return 4; + } else if (s.contains("Ogre")) { + return 8; + } else if (s.contains("short") || s.contains("hunt") + || s.contains("sword")) { + return 4; + } else if (s.contains("long") || s.contains("crystal")) { + return 6; + } else if (s.contains("'bow")) { + return 7; + } + + return 5; + } else if (s.contains("dagger")) { + return 4; + } else if (s.contains("godsword") || s.contains("2h")) { + return 6; + } else if (s.contains("longsword")) { + return 5; + } else if (s.contains("sword")) { + return 4; + } else if (s.contains("scimitar")) { + return 4; + } else if (s.contains("mace")) { + return 5; + } else if (s.contains("battleaxe")) { + return 6; + } else if (s.contains("pickaxe")) { + return 5; + } else if (s.contains("thrownaxe")) { + return 5; + } else if (s.contains("axe")) { + return 5; + } else if (s.contains("warhammer")) { + return 6; + } else if (s.contains("2h")) { + return 7; + } else if (s.contains("spear")) { + return 5; + } else if (s.contains("claw")) { + return 4; + } else if (s.contains("halberd")) { + return 7; + } else if (s.equals("granite maul")) { + return 7; + } else if (s.equals("toktz-xil-ak")) { + return 4; + } else if (s.equals("tzhaar-ket-em")) { + return 5; + } else if (s.equals("tzhaar-ket-om")) { + return 7; + } else if (s.equals("toktz-xil-ek")) { + return 4; + } else if (s.equals("toktz-xil-ul")) { + return 4; + } else if (s.equals("toktz-mej-tal")) { + return 6; + } else if (s.contains("whip")) { + return 4; + } else if (s.contains("dart")) { + return 3; + } else if (s.contains("knife")) { + return 3; + } else if (s.contains("javelin")) { + return 6; + } + return 5; + } + + /** + * Weapon stand, walk, run, etc emotes + **/ + + public static void getPlayerAnimIndex(Client c) { + String weaponName = ItemAssistant.getItemName( + c.playerEquipment[Constants.WEAPON]).toLowerCase(); + c.playerStandIndex = 0x328; + c.playerTurnIndex = 0x337; + c.playerWalkIndex = 0x333; + c.playerTurn180Index = 0x334; + c.playerTurn90CWIndex = 0x335; + c.playerTurn90CCWIndex = 0x336; + c.playerRunIndex = 0x338; + + if (weaponName.contains("halberd") || weaponName.contains("guthan")) { + c.playerStandIndex = 809; + c.playerWalkIndex = 1146; + c.playerRunIndex = 1210; + return; + } + if (weaponName.contains("dharok")) { + c.playerStandIndex = 0x811; + c.playerWalkIndex = 0x67F; + c.playerRunIndex = 0x680; + return; + } + if (weaponName.contains("ahrim")) { + c.playerStandIndex = 809; + c.playerWalkIndex = 1146; + c.playerRunIndex = 1210; + return; + } + if (weaponName.contains("verac")) { + c.playerStandIndex = 1832; + c.playerWalkIndex = 1830; + c.playerRunIndex = 1831; + return; + } + if (weaponName.contains("wand") || weaponName.contains("staff")) { + c.playerStandIndex = 809; + c.playerRunIndex = 1210; + c.playerWalkIndex = 1146; + return; + } + if (weaponName.contains("karil")) { + c.playerStandIndex = 2074; + c.playerWalkIndex = 2076; + c.playerRunIndex = 2077; + return; + } + if (weaponName.contains("2h sword")) { + c.playerStandIndex = 2561; + c.playerWalkIndex = 2562; + c.playerRunIndex = 2563; + return; + } + if (weaponName.contains("bow")) { + c.playerStandIndex = 808; + c.playerWalkIndex = 819; + c.playerRunIndex = 824; + return; + } + + switch (c.playerEquipment[c.playerWeapon]) { + case 4151: + c.playerStandIndex = 1832; + c.playerWalkIndex = 1660; + c.playerRunIndex = 1661; + break; + case 6528: + c.playerStandIndex = 0x811; + c.playerWalkIndex = 2064; + c.playerRunIndex = 1664; + break; + case 4153: + c.playerStandIndex = 1662; + c.playerWalkIndex = 1663; + c.playerRunIndex = 1664; + break; + case 11694: + case 11696: + case 11730: + case 11698: + case 11700: + c.playerStandIndex = 4300; + c.playerWalkIndex = 4306; + c.playerRunIndex = 4305; + break; + case 1305: + c.playerStandIndex = 809; + break; + } + } + + /** + * Weapon emotes + **/ + + public static int getWeaponAnimation(Client c) { + String weaponName = ItemAssistant.getItemName( + c.playerEquipment[Constants.WEAPON]).toLowerCase(); + if (c.playerEquipment[c.playerWeapon] <= 0) { + switch (c.fightMode) { + case 0: + return 422; + case 2: + return 423; + case 1: + return 451; + } + } + if (weaponName.contains("knife") || weaponName.contains("dart") + || weaponName.contains("javelin") + || weaponName.contains("thrownaxe")) { + return 806; + } + if (weaponName.contains("halberd")) { + return 440; + } + if (weaponName.contains("dragon dagger")) { + return 402; + } + if (weaponName.endsWith("dagger")) { + return 412; + } + if (weaponName.contains("2h sword") || weaponName.contains("godsword") + || weaponName.contains("aradomin sword")) { + switch (c.fightMode) { + case 4: + return 406; + case 0: + case 2: + case 1: + return 407; + } + } + if (weaponName.contains("sword")) { + switch (c.fightMode) { + case 0: + case 1: + return 412; + case 2: + return 451; + } + } + if (weaponName.contains("karil")) { + return 2075; + } + if (weaponName.contains("bow") && !weaponName.contains("'bow")) { + return 426; + } + if (weaponName.contains("'bow")) { + return 4230; + } + + switch (c.playerEquipment[c.playerWeapon]) { // if you don't want to + // use + // strings + case 6522: + return 2614; + case 4153: // granite maul + return 1665; + case 4726: // guthan + return 2080; + case 4747: // torag + return 0x814; + case 4718: // dharok + return 2067; + case 4710: // ahrim + return 406; + case 4755: // verac + return 2062; + case 4734: // karil + return 2075; + case 4151: + return 1658; + case 6528: + return 2661; + default: + return 451; + } + } + + /** + * Block emotes + */ + public static int getBlockEmote(Client c) { + if (c.playerEquipment[c.playerShield] >= 8844 + && c.playerEquipment[c.playerShield] <= 8850) { + return 4177; + } + switch (c.playerEquipment[c.playerWeapon]) { + case 4755: + return 2063; + + case 4153: + return 1666; + + case 4151: + return 1659; + + case 11694: + case 11698: + case 11700: + case 11696: + case 11730: + return -1; + default: + return 404; + } + } + + /** + * How long it takes to hit your enemy + **/ + public static int getHitDelay(Client c) { + String weaponName = ItemAssistant.getItemName( + c.playerEquipment[Constants.WEAPON]).toLowerCase(); + if (c.usingMagic) { + switch (MagicData.MAGIC_SPELLS[c.spellId][0]) { + case 12891: + return 4; + case 12871: + return 6; + default: + return 4; + } + } else { + + if (weaponName.contains("knife") || weaponName.contains("dart") + || weaponName.contains("javelin") + || weaponName.contains("thrownaxe")) { + return 3; + } + if (weaponName.contains("cross") || weaponName.contains("c'bow")) { + return 4; + } + if (weaponName.contains("bow") && !c.dbowSpec) { + return 4; + } else if (c.dbowSpec) { + return 4; + } + + switch (c.playerEquipment[c.playerWeapon]) { + case 6522: // Toktz-xil-ul + return 3; + + default: + return 2; + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/combat/melee/MeleeMaxHit.java b/2006Redone Server/src/redone/game/content/combat/melee/MeleeMaxHit.java new file mode 100644 index 00000000..e70535a3 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/melee/MeleeMaxHit.java @@ -0,0 +1,52 @@ +package redone.game.content.combat.melee; + +import redone.game.players.Client; + +public class MeleeMaxHit { + + public static int calculateMeleeMaxHit(Client c) { + double maxHit = 0; + int strBonus = c.playerBonus[10]; + int strength = c.playerLevel[2]; + int lvlForXP = c.getLevelForXP(c.playerXP[2]); + if (c.getPrayer().prayerActive[1]) { + strength += (int) (lvlForXP * .05); + } else if (c.getPrayer().prayerActive[6]) { + strength += (int) (lvlForXP * .10); + } else if (c.getPrayer().prayerActive[14]) { + strength += (int) (lvlForXP * .15); + } else if (c.getPrayer().prayerActive[24]) { + strength += (int) (lvlForXP * .18); + } else if (c.getPrayer().prayerActive[25]) { + strength += (int) (lvlForXP * .23); + } + if (c.playerEquipment[c.playerHat] == 2526 + && c.playerEquipment[c.playerChest] == 2520 + && c.playerEquipment[c.playerLegs] == 2522) { + maxHit += maxHit * 10 / 100; + } + maxHit += 1.05D + strBonus * strength * 0.00175D; + maxHit += strength * 0.11D; + if (c.playerEquipment[c.playerWeapon] == 4718 + && c.playerEquipment[c.playerHat] == 4716 + && c.playerEquipment[c.playerChest] == 4720 + && c.playerEquipment[c.playerLegs] == 4722) { + maxHit += (c.getPlayerAssistant().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 2; + } + if (c.specDamage > 1) { + maxHit = (int) (maxHit * c.specDamage); + } + if (maxHit < 0) { + maxHit = 1; + } + if (MeleeData.fullVoidMelee(c)) { + maxHit = (int) (maxHit * 1.10); + } + if (c.playerEquipment[c.playerAmulet] == 11128 + && c.playerEquipment[c.playerWeapon] == 6528) { + maxHit *= 1.20; + } + return (int) Math.floor(maxHit); + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/melee/PlayerKilling.java b/2006Redone Server/src/redone/game/content/combat/melee/PlayerKilling.java new file mode 100644 index 00000000..f0704eda --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/melee/PlayerKilling.java @@ -0,0 +1,71 @@ +package redone.game.content.combat.melee; + +import redone.game.players.Client; + +/** + * Handles adding and removing hosts to the players array list. + */ +public class PlayerKilling { + + /** + * Adds the host of the killed player. + * + * @param client + * Player that saves the host. + * @param host + * Host address of the killed player. + * @return True if the host is added to the players array. + */ + + public static boolean addHostToList(Client client, String host) { + if (client != null) { + return client.lastKilledPlayers.add(host); + } + return false; + } + + /** + * Checks if the host is already on the players array. + * + * @param client + * Player that is adding the killed players host. + * @param host + * Host address of the killed player. + * @return True if the host is on the players array. + */ + + public static boolean hostOnList(Client client, String host) { + if (client != null) { + if (client.lastKilledPlayers.lastIndexOf(host) >= KILL_WAIT_MAX) { + removeHostFromList(client, host); + return false; + } + return client.lastKilledPlayers.contains(host); + } + return false; + } + + /** + * Removes the host from the players array. + * + * @param client + * Player that is removing the host. + * @param host + * Host that is being removed. + * @return True if host is successfully removed. + */ + + public static boolean removeHostFromList(Client client, String host) { + if (client != null) { + return client.lastKilledPlayers.remove(host); + } + return false; + } + + /* + * Amount of kills you have to wait before the host is deleted. + */ + + public static final int KILL_WAIT_MAX = 3; + +} diff --git a/2006Redone Server/src/redone/game/content/combat/npcs/NpcAggressive.java b/2006Redone Server/src/redone/game/content/combat/npcs/NpcAggressive.java new file mode 100644 index 00000000..b9b8830c --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/npcs/NpcAggressive.java @@ -0,0 +1,35 @@ +package redone.game.content.combat.npcs; + +import redone.game.content.minigames.FightCaves; +import redone.game.content.minigames.PestControl; +import redone.game.npcs.NpcHandler; + +public class NpcAggressive { + + public static boolean isAggressive(int i) { + int[] data = { + 1155, 374, 1157, 1158, 1159, 1160, 141, 1459, 1456, 96, 97, 142, + 2550, 2551, 2552, 2553, 2558, 2559, 2560, 2561, 2562, 2563, + 2564, 2565, 2892, 2894, 2881, 2882, 2883, 172, 1593, 144, 112, 84, 3068, 1265, + 50, 1590, 1591, 1592, 53, 54, 55, 178, 1267, 49, 174, 2455, 2456, 2454, + 82, 752, 1608, 1609, 1610, 1827, 2783, 1926, 1931, 2457, 412, 1604, 1612, + 110, 1611, 83, 941, 49, 117, 111, 125, 1154, 107, 1342, 1338, 447, 448, 449, 917 + }; + for (int element : data) { + if (NpcHandler.npcs[i].npcType == element) { + return true; + } + } + if (PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType)) { + return true; + } + if (NpcHandler.npcs[i].inWild() && NpcHandler.npcs[i].MaxHP > 0) { + return true; + } + if (FightCaves.isFightCaveNpc(i)) { + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/npcs/NpcCombat.java b/2006Redone Server/src/redone/game/content/combat/npcs/NpcCombat.java new file mode 100644 index 00000000..bda91294 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/npcs/NpcCombat.java @@ -0,0 +1,673 @@ +package redone.game.content.combat.npcs; + +import redone.Constants; +import redone.game.content.combat.CombatAssistant; +import redone.game.content.combat.melee.MeleeData; +import redone.game.content.minigames.FightCaves; +import redone.game.content.music.sound.CombatSounds; +import redone.game.content.music.sound.SoundList; +import redone.game.npcs.NpcData; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class NpcCombat { + + public static void multiAttackDamage(int i) { + int max = NpcHandler.getMaxHit(i); + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + if (c.isDead || c.heightLevel != NpcHandler.npcs[i].heightLevel) { + continue; + } + if (player.goodDistance(c.absX, c.absY, + NpcHandler.npcs[i].absX, NpcHandler.npcs[i].absY, 15)) { + if (NpcHandler.npcs[i].attackType == 2) { + if (!c.getPrayer().prayerActive[16]) { + if (Misc.random(500) + 200 > Misc.random(c + .getCombatAssistant().mageDef())) { + int dam = Misc.random(max); + c.dealDamage(dam); + c.handleHitMask(dam); + } else { + c.dealDamage(0); + c.handleHitMask(0); + } + } else { + c.dealDamage(0); + c.handleHitMask(0); + } + } else if (NpcHandler.npcs[i].attackType == 1) { + if (!c.getPrayer().prayerActive[17]) { + int dam = Misc.random(max); + if (Misc.random(500) + 200 > Misc.random(c + .getCombatAssistant() + .calculateRangeDefence())) { + c.dealDamage(dam); + c.handleHitMask(dam); + } else { + c.dealDamage(0); + c.handleHitMask(0); + } + } else { + c.dealDamage(0); + c.handleHitMask(0); + } + } + if (NpcHandler.npcs[i].endGfx > 0) { + c.gfx0(NpcHandler.npcs[i].endGfx); + } + } + c.getPlayerAssistant().refreshSkill(3); + } + } + } + + public static void multiAttackGfx(int i, int gfx) { + if (NpcHandler.npcs[i].projectileId < 0) { + return; + } + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + if (c.heightLevel != NpcHandler.npcs[i].heightLevel) { + continue; + } + if (player.goodDistance(c.absX, c.absY, + NpcHandler.npcs[i].absX, NpcHandler.npcs[i].absY, 15)) { + int nX = NpcHandler.npcs[i].getX() + NpcHandler.offset(i); + int nY = NpcHandler.npcs[i].getY() + NpcHandler.offset(i); + int pX = c.getX(); + int pY = c.getY(); + int offX = (nY - pY) * -1; + int offY = (nX - pX) * -1; + c.getPlayerAssistant().createPlayersProjectile(nX, nY, + offX, offY, 50, NpcHandler.getProjectileSpeed(i), + NpcHandler.npcs[i].projectileId, 43, 31, + -c.getId() - 1, 65); + } + } + } + } + + public static void attackPlayer(Client c, int i) { + if (NpcHandler.npcs[i] != null) { + if (NpcHandler.npcs[i].isDead) { + return; + } + if (c.npcCanAttack == false) { + return; + } + if (c.isBotting == true) { + return; + } + if (NpcHandler.npcs[i].inLesserNpc()) { + return; + } + if (c.inDraynorBuilding()) { + if (NpcHandler.npcs[i].npcType == 172 || NpcHandler.npcs[i].npcType == 174) { + return; + } + } + if (NpcHandler.npcs[i].absY == 3228 && c.absY == 3227) { + return; + } + if (NpcHandler.npcs[i].absY == 3224 && c.absY == 3225) { + return; + } + if (NpcHandler.npcs[i].absY == 3226 && c.absY == 3227) { + return; + } + if (NpcHandler.npcs[i].absY == 3228 && c.absY == 3227) { + return; + } + if (NpcHandler.npcs[i].npcType > 2462 && NpcHandler.npcs[i].npcType < 2468) { + if (Misc.random(5) == 0) { + NpcHandler.npcs[i].forceChat("Flee from me, " + c.playerName + "!"); + } else if (Misc.random(5) == 1) { + NpcHandler.npcs[i].forceChat("Begone, " + c.playerName + "!"); + } else if (Misc.random(5) == 2) { + NpcHandler.npcs[i].forceChat("Bwuk"); + } else if (Misc.random(5) == 3) { + NpcHandler.npcs[i].forceChat("Bwuk bwuk bwuk"); + } else if (Misc.random(5) == 4) { + NpcHandler.npcs[i].forceChat("MUAHAHAHAHAAA!"); + } else if (Misc.random(5) == 5) { + NpcHandler.npcs[i].forceChat("Bwaaaaaaauk bwuk bwuk"); + } + } + if (NpcHandler.npcs[i].npcType == 1532 + || NpcHandler.npcs[i].npcType == 1534 + || NpcHandler.npcs[i].npcType == 6145 + || NpcHandler.npcs[i].npcType == 6144 + || NpcHandler.npcs[i].npcType == 6143 + || NpcHandler.npcs[i].npcType == 6142 + || NpcHandler.npcs[i].npcType == 752) { + return; + } + if (NpcHandler.npcs[i].npcType == 1401 && c.isInTut() + || c.tutorialProgress < 36) { + return; + } + if (NpcHandler.npcs[i].npcType == 9 && c.absX == 3180 + && c.absY > 3433 && c.absY < 3447) { + return; + } + if (NpcHandler.npcs[i].npcType == 374 && c.absY == 3372 && c.absX > 2522 && c.absX < 2532) { + return; + } + if (!NpcHandler.npcs[i].inMulti() && NpcHandler.npcs[i].underAttackBy > 0 && NpcHandler.npcs[i].underAttackBy != c.playerId) { + NpcHandler.npcs[i].killerId = 0; + return; + } + if (!NpcHandler.npcs[i].inMulti() + && (c.underAttackBy > 0 || c.underAttackBy2 > 0 + && c.underAttackBy2 != i)) { + NpcHandler.npcs[i].killerId = 0; + return; + } + if (NpcHandler.npcs[i].heightLevel != c.heightLevel) { + NpcHandler.npcs[i].killerId = 0; + return; + } + if (!NpcData.goodDistanceNpc(NpcHandler.npcs[i].npcId, c.getX(), c.getY(), NpcData.distanceRequired(NpcHandler.npcs[i].npcId)) || NpcData.inNpc(NpcHandler.npcs[i].npcId, c.getX(), c.getY())) { + return; + } + NpcHandler.npcs[i].facePlayer(c.playerId); + boolean special = false;//specialCase(c,i); + if (NpcData.checkClip(NpcHandler.npcs[i]) || special) { + if (c.respawnTimer <= 0) { + NpcHandler.npcs[i].facePlayer(c.playerId); + NpcHandler.npcs[i].attackTimer = NpcData.getNpcDelay(i); + NpcHandler.npcs[i].hitDelayTimer = NpcData.getHitDelay(i); + NpcHandler.npcs[i].attackType = 0; + if (Constants.combatSounds + && NpcHandler.npcs[i].npcType < 3177 + && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender() + .sendSound( + CombatSounds + .getNpcAttackSounds(NpcHandler.npcs[i].npcType), + 100, 0); + } + if (special) { + loadSpell2(i); + } else { + loadSpell(c, i); + } + if (NpcHandler.npcs[i].attackType == 3) { + NpcHandler.npcs[i].hitDelayTimer += 2; + } + if (NpcHandler.multiAttacks(i)) { + multiAttackGfx(i, NpcHandler.npcs[i].projectileId); + NpcData.startAnimation(NpcEmotes.getAttackEmote(i), i); + if (Constants.combatSounds + && NpcHandler.npcs[i].npcType < 3177 + && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender() + .sendSound( + CombatSounds + .getNpcAttackSounds(NpcHandler.npcs[i].npcType), + 100, 0); + } + NpcHandler.npcs[i].oldIndex = c.playerId; + return; + } + if (NpcHandler.npcs[i].projectileId > 0) { + int nX = NpcHandler.npcs[i].getX() + + NpcHandler.offset(i); + int nY = NpcHandler.npcs[i].getY() + + NpcHandler.offset(i); + int pX = c.getX(); + int pY = c.getY(); + int offX = (nY - pY) * -1; + int offY = (nX - pX) * -1; + c.getPlayerAssistant().createPlayersProjectile(nX, nY, + offX, offY, 50, + NpcHandler.getProjectileSpeed(i), + NpcHandler.npcs[i].projectileId, 43, 31, + -c.getId() - 1, 65); + } + c.underAttackBy2 = i; + c.singleCombatDelay2 = System.currentTimeMillis(); + NpcHandler.npcs[i].oldIndex = c.playerId; + NpcData.startAnimation(NpcEmotes.getAttackEmote(i), i); + if (Constants.combatSounds + && NpcHandler.npcs[i].npcType < 3177 + && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender() + .sendSound( + CombatSounds + .getNpcAttackSounds(NpcHandler.npcs[i].npcType), + 100, 0); + } + c.getPlayerAssistant().removeAllWindows(); + } + } + } + } + + public static void loadSpell2(int i) { + NpcHandler.npcs[i].attackType = 3; + int random = Misc.random(3); + if (random == 0) { + NpcHandler.npcs[i].projectileId = 393; // red + NpcHandler.npcs[i].endGfx = 430; + } else if (random == 1) { + NpcHandler.npcs[i].projectileId = 394; // green + NpcHandler.npcs[i].endGfx = 429; + } else if (random == 2) { + NpcHandler.npcs[i].projectileId = 395; // white + NpcHandler.npcs[i].endGfx = 431; + } else if (random == 3) { + NpcHandler.npcs[i].projectileId = 396; // blue + NpcHandler.npcs[i].endGfx = 428; + } + } + + public static void loadSpell(Client c, int i) { + if (NpcHandler.npcs[i].npcType > 2462 && NpcHandler.npcs[i].npcType < 2469 || NpcHandler.npcs[i].npcType > 3751 && NpcHandler.npcs[i].npcType < 3762) { + NpcHandler.npcs[i].attackType = 2; + } + if (NpcHandler.npcs[i].npcType > 3761 && NpcHandler.npcs[i].npcType < 3772) { + NpcHandler.npcs[i].attackType = 1; + } + switch (NpcHandler.npcs[i].npcType) { + case 2607: + NpcHandler.npcs[i].attackType = 1; + case 2591: + case 172: + case 174: + NpcHandler.npcs[i].attackType = 2; + break; + case 3068: + if(Misc.random(10) > 7) { + NpcHandler.npcs[i].projectileId = 393; //red + NpcHandler.npcs[i].endGfx = 430; + NpcHandler.npcs[i].attackType = 3; + NpcData.startAnimation(2989, i); + } else { + NpcData.startAnimation(2980, i); + NpcHandler.npcs[i].attackType = 0; + } + break; + case 2892: + NpcHandler.npcs[i].projectileId = 94; + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].endGfx = 95; + break; + case 2894: + NpcHandler.npcs[i].projectileId = 298; + NpcHandler.npcs[i].attackType = 1; + break; + /* + * Better Dragons + */ + case 5363: // Mithril-Dragon + case 53: // Red Dragon + case 54: // Black-Dragon + case 55: // Blue-Dragon + case 941: // Green-Dragon + case 4682: + case 5362: + case 1590: + case 1591: + case 1592: + int random1 = Misc.random(3); + switch (random1) { + case 1: + NpcHandler.npcs[i].projectileId = 393; // red + NpcHandler.npcs[i].endGfx = 430; + NpcHandler.npcs[i].attackType = 3; + break; + default: + NpcHandler.npcs[i].projectileId = -1; // melee + NpcHandler.npcs[i].endGfx = -1; + NpcHandler.npcs[i].attackType = 0; + break; + } + break; + case 134: + if (c.playerLevel[5] > 0) { + c.playerLevel[5]--; + c.getPlayerAssistant().refreshSkill(5); + c.getPlayerAssistant().appendPoison(5); + c.getCombatAssistant().resetPlayerAttack(); + } + break; + + case 3590: + case 50: + case 742: + int random = Misc.random(4); + switch (random) { + case 0: + NpcHandler.npcs[i].projectileId = 393; // red + NpcHandler.npcs[i].endGfx = 430; + NpcHandler.npcs[i].attackType = 3; + break; + case 1: + NpcHandler.npcs[i].projectileId = 394; // green + NpcHandler.npcs[i].endGfx = 429; + NpcHandler.npcs[i].attackType = 3; + break; + case 2: + NpcHandler.npcs[i].projectileId = 395; // white + NpcHandler.npcs[i].endGfx = 431; + NpcHandler.npcs[i].attackType = 3; + break; + case 3: + NpcHandler.npcs[i].projectileId = 396; // blue + NpcHandler.npcs[i].endGfx = 428; + NpcHandler.npcs[i].attackType = 3; + break; + case 4: + NpcHandler.npcs[i].projectileId = -1; // melee + NpcHandler.npcs[i].endGfx = -1; + NpcHandler.npcs[i].attackType = 0; + break; + } + break; + // arma npcs + case 2561: + NpcHandler.npcs[i].attackType = 0; + break; + case 2560: + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 1190; + break; + case 2559: + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 1203; + break; + case 2558: + random = Misc.random(1); + NpcHandler.npcs[i].attackType = 1 + random; + if (NpcHandler.npcs[i].attackType == 1) { + NpcHandler.npcs[i].projectileId = 1197; + } else { + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 1198; + } + break; + // sara npcs + case 2562: // sara + random = Misc.random(1); + if (random == 0) { + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].endGfx = 1224; + NpcHandler.npcs[i].projectileId = -1; + } else if (random == 1) { + NpcHandler.npcs[i].attackType = 0; + } + break; + case 2563: // star + NpcHandler.npcs[i].attackType = 0; + break; + case 2564: // growler + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 1203; + break; + case 2565: // bree + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 9; + break; + // bandos npcs + case 2550: + random = Misc.random(2); + if (random == 0 || random == 1) { + NpcHandler.npcs[i].attackType = 0; + } else { + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].endGfx = 1211; + NpcHandler.npcs[i].projectileId = 288; + } + break; + case 2551: + NpcHandler.npcs[i].attackType = 0; + break; + case 2552: + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 1203; + break; + case 2553: + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 1206; + break; + case 2025: + NpcHandler.npcs[i].attackType = 2; + int r = Misc.random(3); + if (r == 0) { + NpcHandler.npcs[i].gfx100(158); + NpcHandler.npcs[i].projectileId = 159; + NpcHandler.npcs[i].endGfx = 160; + } + if (r == 1) { + NpcHandler.npcs[i].gfx100(161); + NpcHandler.npcs[i].projectileId = 162; + NpcHandler.npcs[i].endGfx = 163; + } + if (r == 2) { + NpcHandler.npcs[i].gfx100(164); + NpcHandler.npcs[i].projectileId = 165; + NpcHandler.npcs[i].endGfx = 166; + } + if (r == 3) { + NpcHandler.npcs[i].gfx100(155); + NpcHandler.npcs[i].projectileId = 156; + } + break; + case 2881:// supreme + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 298; + break; + + case 2882:// prime + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 162; + NpcHandler.npcs[i].endGfx = 477; + break; + + case 2028: + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 27; + break; + + case 3200: + int r2 = Misc.random(1); + if (r2 == 0) { + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].gfx100(550); + NpcHandler.npcs[i].projectileId = 551; + NpcHandler.npcs[i].endGfx = 552; + } else { + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].gfx100(553); + NpcHandler.npcs[i].projectileId = 554; + NpcHandler.npcs[i].endGfx = 555; + } + break; + case 2745: + int r3 = 0; + if (NpcHandler + .goodDistance( + NpcHandler.npcs[i].absX, + NpcHandler.npcs[i].absY, + PlayerHandler.players[NpcHandler.npcs[i].spawnedBy].absX, + PlayerHandler.players[NpcHandler.npcs[i].spawnedBy].absY, + 1)) { + r3 = Misc.random(2); + } else { + r3 = Misc.random(1); + } + if (r3 == 0) { + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].endGfx = 157; + NpcHandler.npcs[i].projectileId = 448; + } else if (r3 == 1) { + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].endGfx = 451; + NpcHandler.npcs[i].projectileId = -1; + } else if (r3 == 2) { + NpcHandler.npcs[i].attackType = 0; + NpcHandler.npcs[i].projectileId = -1; + } + break; + case 2743: + NpcHandler.npcs[i].attackType = 2; + NpcHandler.npcs[i].projectileId = 445; + NpcHandler.npcs[i].endGfx = 446; + break; + + case 2631: + NpcHandler.npcs[i].attackType = 1; + NpcHandler.npcs[i].projectileId = 443; + break; + } + } + + public static void registerNpcHit(int i) { + if (NpcHandler.npcs[i] != null) { + if (PlayerHandler.players[NpcHandler.npcs[i].oldIndex] == null) { + return; + } + if (NpcHandler.npcs[i].isDead) { + return; + } + Client c = (Client) PlayerHandler.players[NpcHandler.npcs[i].oldIndex]; + if (NpcHandler.multiAttacks(i)) { + NpcCombat.multiAttackDamage(i); + return; + } + if (c.playerIndex <= 0 && c.npcIndex <= 0) { + if (c.autoRet == 1 && NpcHandler.npcs[i].npcType != 411) { + c.npcIndex = i; + } + } + if (c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) { + c.startAnimation(c.getCombatAssistant().getBlockEmote()); + } + if (c.respawnTimer <= 0) { + int damage = 0; + if (NpcHandler.npcs[i].attackType == 0) { + damage = Misc.random(NpcHandler.npcs[i].maxHit); + if (10 + Misc.random(c.getCombatAssistant().calcDef()) > Misc + .random(NpcHandler.npcs[i].attack)) { + damage = 0; + } + if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) { + if (damage >= c.playerLevel[Constants.HITPOINTS]) { + damage = c.playerLevel[Constants.HITPOINTS] - 1; + } + } + if (c.getPrayer().prayerActive[18] + && !(NpcHandler.npcs[i].npcType == 2030)) { // protect + // from + // melee) + // { + // // + // protect + // from + // melee + damage = 0; + } else if (c.getPrayer().prayerActive[18] + && NpcHandler.npcs[i].npcType == 2030) { + if (NpcHandler.npcs[i].attackType == 0) { + damage = Misc.random(NpcHandler.npcs[i].maxHit); + } + if (10 + Misc + .random(MeleeData.calculateMeleeDefence(c)) > Misc + .random(NpcHandler.npcs[i].attack)) { + damage = 0; + } + } + if (c.playerLevel[3] - damage < 0) { + damage = c.playerLevel[3]; + } + } + + if (NpcHandler.npcs[i].attackType == 1) { // range + damage = Misc.random(NpcHandler.npcs[i].maxHit); + if (10 + Misc.random(c.getCombatAssistant() + .calculateRangeDefence()) > Misc + .random(NpcHandler.npcs[i].attack)) { + damage = 0; + } + if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) { + if (damage >= c.playerLevel[Constants.HITPOINTS]) { + damage = c.playerLevel[Constants.HITPOINTS] - 1; + } + } + if (c.getPrayer().prayerActive[17]) { // protect from range + damage = 0; + } + if (c.playerLevel[3] - damage < 0) { + damage = c.playerLevel[3]; + } + } + + if (NpcHandler.npcs[i].attackType == 2) { // magic + damage = Misc.random(NpcHandler.npcs[i].maxHit); + boolean magicFailed = false; + if (10 + Misc.random(c.getCombatAssistant().mageDef()) > Misc + .random(NpcHandler.npcs[i].attack)) { + damage = 0; + magicFailed = true; + } + if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) { + if (damage >= c.playerLevel[Constants.HITPOINTS]) { + damage = c.playerLevel[Constants.HITPOINTS] - 1; + } + } + if (c.getPrayer().prayerActive[16]) { // protect from magic + damage = 0; + magicFailed = true; + } + if (c.playerLevel[3] - damage < 0) { + damage = c.playerLevel[3]; + } + if (NpcHandler.npcs[i].endGfx > 0 && (!magicFailed || FightCaves.isFightCaveNpc(i))) { + c.gfx100(NpcHandler.npcs[i].endGfx); + } else { + c.gfx100(85); + c.getActionSender().sendSound(SoundList.MAGE_FAIL, + 100, 0); + } + } + + if (NpcHandler.npcs[i].attackType == 3) { // fire breath + int anti = c.getPlayerAssistant().antiFire(); + switch (anti) { + case 0:// has no shield + damage = Misc.random(45) + 10; + c.getActionSender().sendMessage("You are badly burnt by the dragon fire!"); + break; + case 1:// has a shield + if (c.getItemAssistant().playerHasEquipped(5, 1540)) { + damage = Misc.random(4) + 1; + c.getActionSender().sendMessage("Your shield protects you from the fire."); + } + break; + case 2:// melee + damage = Misc.random(5); + break; + } + } + if (damage > 0) { + CombatAssistant.applyRecoilNPC(c, damage, i); + } + NpcHandler.handleSpecialEffects(c, i, damage); + c.logoutDelay = System.currentTimeMillis(); // logout delay + c.handleHitMask(damage); + c.playerLevel[3] -= damage; + c.getPlayerAssistant().refreshSkill(3); + FightCaves.tzKihEffect(c, i, damage); + c.updateRequired = true; + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/npcs/NpcEmotes.java b/2006Redone Server/src/redone/game/content/combat/npcs/NpcEmotes.java new file mode 100644 index 00000000..8f3202ce --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/npcs/NpcEmotes.java @@ -0,0 +1,182 @@ +package redone.game.content.combat.npcs; + +import redone.game.npcs.NpcHandler; + +/** + * Npc Emotes + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public enum NpcEmotes { + MAN(new int[] {1, 2, 3, 4, 5, 6}, 422, 1834, 836), + GARGOYLE(new int[] {1610, 1611}, 1517, 1519, 1518), + SKELETAL_WYVERN(new int[] {3068}, 2989, 2988, 2987), + BAT(new int[] {412, 78}, 30, 31, 36), + BEAR(new int[] {105, 106}, 41, 42, 44), + HOB_GOBLIN(new int[] {122, 123}, 164, 165, 167), + AHRIM(new int[] {2025}, 729, 404, 2304), + DHAROK(new int[] {2026}, 2067, 404, 2304), + GUTHAN(new int[] {2027}, 422, 404, 2304), + KARIL(new int[] {2028}, 2075, 404, 2304), + TORAG(new int[] {2029}, 0x814, 404, 2304), + VERAC(new int[] {2030}, 2062, 404, 2304), + BABY_DRAGON(new int[] {51, 52, 1589, 3376}, 25, 26, 28), + CHICKEN(new int[] {41}, 55, 56, 57), + KBD_METAL_DRAGON(new int [] {50, 1590, 1591, 1592}, 80, 89, 92), + DRAGON(new int[] {53, 54, 55, 941}, 91, 89, 92), + BASILISK(new int[] {1616, 1617, 4228}, 1546, 1547, 1548), + BLOOD_WORM(new int[] {2031}, 2070, 2072, 2073), + TREE_SPIRIT(new int[] {438, 439, 440, 441, 442, 443}, 94, 95, 97), + ZOMBIE(new int[] {73, 74, 75, 76, 751}, 299, 300, 302), + ROCK_GOLEM(new int[] {413, 414, 415, 416, 417, 418}, 153, 154, 156), + RIVER_TROLL(new int[] {391, 392, 393, 394, 395, 396}, 284, 285, 287), + GOBLIN(new int[] {100, 101, 102, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776}, 309, 312, 313), + COW(new int[] {81, 397, 1766, 1767, 1768}, 59, 60, 62), + BLOODVELD(new int[] {1618, 1619}, 1552, 1550, 1553), + IMP(new int[] {708}, 169, 170, 172), + DARK_WIZARD(new int[] {172, 13}, 711, 1834, 836), + DUCK(new int[] {44, 45}, 7, 8, 9), + SPINOLYP(new int[] {2892, 2894}, 2868, 2864, 2865), + DWARF(new int[] {118, 119}, 99, 100, 102), + DEFILER(new int[] {3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771}, 3920, 3921, 3922), + SPINNER(new int[] {3747, 3748, 3749, 3750, 3751}, 3908, 3909, 3910), + SHIFTER(new int[] {3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741}, 3901, 3902, 3903), + RAVAGER(new int[] {3742, 3743, 3744, 3745, 3746}, 3915, 3916, 3917), + BRAWLER(new int[] {3772, 3773, 3774, 3775, 3776}, 3897, 3895, 3894), + SPLATTER(new int[] {3727, 3728, 3729, 3730, 3731}, 3891, 3890, 3888), + TORCHER(new int[] {3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761}, 3882, 3880, 3881), + KALPHITE_WORKER(new int[] {1153, 1154, 1155, 1156, 1157, 1158, 1161}, 1184, 1186, 1187), + KALPHITE_QUEEN(new int[] {1159}, 1185, 1186, 1187), + KALPHITE_QUEEN_2(new int[] {1160}, 1177, 1179, 1182), + DEMON(new int[] {82, 83, 84, 1472}, 64, 65, 67), + DUST_DEVIL(new int[] {1624}, 1557, 1555, 1558), + CHAOS_ELEMENTAL(new int[] {3200}, 3146, 3148, 3147), + GIANT(new int[] {110, 111, 112, 113, 116, 117}, 128, 129, 131), + DAGGANOTH_PRIME(new int[] {2881}, 2855, 2852, 2856), + DAGGANOTH_SUPREME(new int[] {2882}, 2854, 2852, 2856), + DAGGANOTH_REX(new int[] {2883}, 2851, 2852, 2856), + WHITE_KNIGHT(new int[] {1092, 19}, 406, -1, 843), + KNIGHT_WARRIOR(new int[] {125, 178, 179}, 451, -1, 843), + PORTAL(new int[] {3777, 3778, 3779, 3780}, -1, -1, -1), + DARK_BEAST(new int[] {2783}, 2731, 2732, 2733), + TZHAAR_NPCS(new int[] {2604, 2598, 2591}, 2609, 2606, 2607), + TZHAAR_MEJ(new int[] {2591}, 2612, 2606, 2607), + TZHAAR_KET(new int[] {2610, 2615}, 2612, 2606, 2608), + TZHAAR_XIL(new int[] {2607}, 2611, 2610, 2607), + TZ_KIH(new int[] {2627}, 2621, 2622, 2620), + TZ_KEK(new int[] {2629, 2630, 2736, 2738}, 2625, 2626, 2627), + TOK_XIL(new int[] {2631, 2632}, 2628, 2629, 2630), + TZHAAR_YT(new int[] {2741, 2742, 2746}, 2637, 2635, 2638), + KET_ZEK(new int[] {2743, 2744}, 2644, 2645, 2646), + COCKATRICE(new int[] {1620, 1621}, 1562, 1560, 1563), + GNOME_CHILD(new int[] {160, 161}, 191, 194, 196), + GNOME_GUARD(new int[] {163, 164}, 192, 193, 196), + GNOME_WOMAN(new int[] {168, 169}, 190, 193, 196), + TUROTH(new int[] {1626, 1627, 1628, 1629, 1630, 1631, 1632}, 1595, 1596, 1597), + GHOST(new int[] {103, 104, 491}, 123, 124, 126), + ROCK_CRAB(new int[] {1265, 1267}, 1312, 1313, 1314), + DOG_WOLF(new int[] {96, 97, 99, 1593, 1594, 141, 142, 143}, 75, 76, 78), + SPIDER(new int[] {58, 59, 60, 62, 63, 64, 134, 1009, 2035}, 143, 144, 146), + UNICORN(new int[] {89, 133, 987}, 289, 290, 292), + OGRE(new int[] {114, 115, 374}, 359, 360, 361), + FIEND(new int[] {1633, 1634, 1635, 1636, 3406}, 1582, 1581, 1580), + BANSHEE(new int[] {1612}, 1523, 1525, 1524), + EXPERIMENT_25(new int[] {1677}, 1616, 1617, 1618), + EXPERIMENT_25_2(new int[] {1678}, 1612, 1613, 1614), + EXPERIMENT_51(new int[] {1676}, 1626, 1627, 1628), + ABYSSAL_DEMON(new int[] {1615}, 1537, 1539, 1538), + NECHRYAEL(new int[] {1613}, 1528, 1529, 1530), + SCORPION(new int[] {144, 107, 108}, 246, 247, 248), + SMALL_SPIDER(new int[] {61}, 280, 279, 273), + PIT_SCORPION(new int[] {109}, 270, 271, 273), + CRAWLING_HAND(new int[] {1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657}, 1592, 1591, 1590), + ABBERANT_SPECTRE(new int[] {1604, 1605, 1606, 1607}, 1507, 1509, 1508), + INFERNAL_MAGE(new int[] {1643, 1644, 1645, 1646, 1647}, 429, 430, 2304), + MONKEY_GUARD(new int[] {1455, 1459, 1460}, 1402, 1403, 1404), + RAT(new int[] {86, 87, 88, 224, 446, 748, 950, 978, 2033}, 138, 139, 141), + SMALL_RAT(new int[] {47, 2032}, 2705, 2706, 2707), + DAGGANOTH(new int[] {1338, 1340, 1341, 1342, 2455, 2456}, 1341, 1340, 1342), + SKELETON(new int[] {90, 91, 92, 93}, 260, 261, 263); + + int[] npcId; + int attackAnim, blockAnim, deadAnim; + + private NpcEmotes(int[] npcId, int attackAnim, int blockAnim, int deadAnim) { + this.npcId = npcId; + this.attackAnim = attackAnim; + this.blockAnim = blockAnim; + this.deadAnim = deadAnim; + } + + private int[] getNpcId() { + return npcId; + } + + private int getAttack() { + return attackAnim; + } + + private int getBlock() { + return blockAnim; + } + + private int getDead() { + return deadAnim; + } + + public static int getAttackEmote(int i) { + for (NpcEmotes e : NpcEmotes.values()) { + for (int f = 0; f < e.getNpcId().length; f++) { + if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) { + return e.getAttack(); + } else { + switch (NpcHandler.npcs[i].npcType) { + case 2745: + if (NpcHandler.npcs[i].attackType == 2) { + return 2656; + } else if (NpcHandler.npcs[i].attackType == 1) { + return 2652; + } else if (NpcHandler.npcs[i].attackType == 0) { + return 2655; + } + + } + } + } + } + return 0x326; + } + + public static int getBlockEmote(int i) { + for (NpcEmotes e : NpcEmotes.values()) { + for (int f = 0; f < e.getNpcId().length; f++) { + if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) { + return e.getBlock(); + } else { + switch (NpcHandler.npcs[i].npcType) { + case 2745: + return 2653; + } + } + } + } + return -1; + } + + public static int getDeadEmote(int i) { + for (NpcEmotes e : NpcEmotes.values()) { + for (int f = 0; f < e.getNpcId().length; f++) { + if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) { + return e.getDead(); + } else { + switch (NpcHandler.npcs[i].npcType) { + case 2745: + return 2654; + } + } + } + } + return 2304; + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/combat/prayer/ActivatePrayers.java b/2006Redone Server/src/redone/game/content/combat/prayer/ActivatePrayers.java new file mode 100644 index 00000000..03468f84 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/prayer/ActivatePrayers.java @@ -0,0 +1,351 @@ +package redone.game.content.combat.prayer; + +import redone.Constants; +import redone.game.content.music.sound.SoundList; +import redone.game.players.Client; + +public class ActivatePrayers { + + public static void activatePrayer(Client c, int i) { + if (c.duelRule[7]) { + for (int p = 0; p < c.getPrayer().PRAYER.length; p++) { // reset + // prayer + // glows + c.getPrayer().prayerActive[p] = false; + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[p], + 0); + } + c.getActionSender().sendMessage( + "Prayer has been disabled in this duel!"); + return; + } + if (i == 24 && c.playerLevel[1] < 65) { + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[i], 0); + c.getActionSender().sendMessage( + "You may not use this prayer yet."); + return; + } + if (i == 25 && c.playerLevel[1] < 70) { + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[i], 0); + c.getActionSender().sendMessage( + "You may not use this prayer yet."); + return; + } + int[] defencePrayer = { 0, 5, 13, 24, 25 }; + int[] strengthPrayer = { 1, 6, 14, 24, 25 }; + int[] attackPrayer = { 2, 7, 15, 24, 25 }; + int[] rangePrayer = { 3, 11, 19 }; + int[] magePrayer = { 4, 12, 20 }; + + if (c.playerLevel[5] > 0 || !Constants.PRAYER_POINTS_REQUIRED) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[5]) >= c + .getPrayer().PRAYER_LEVEL_REQUIRED[i] + || !Constants.PRAYER_LEVEL_REQUIRED) { + boolean headIcon = false; + switch (i) { + case 0: + case 5: + case 13: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < defencePrayer.length; j++) { + if (defencePrayer[j] != i) { + c.getPrayer().prayerActive[defencePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[defencePrayer[j]], + 0); + } + } + } + break; + + case 1: + case 6: + case 14: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < strengthPrayer.length; j++) { + if (strengthPrayer[j] != i) { + c.getPrayer().prayerActive[strengthPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[strengthPrayer[j]], + 0); + } + } + for (int j = 0; j < rangePrayer.length; j++) { + if (rangePrayer[j] != i) { + c.getPrayer().prayerActive[rangePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[rangePrayer[j]], + 0); + } + } + for (int j = 0; j < magePrayer.length; j++) { + if (magePrayer[j] != i) { + c.getPrayer().prayerActive[magePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[magePrayer[j]], + 0); + } + } + } + break; + + case 2: + case 7: + case 15: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < attackPrayer.length; j++) { + if (attackPrayer[j] != i) { + c.getPrayer().prayerActive[attackPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[attackPrayer[j]], + 0); + } + } + for (int j = 0; j < rangePrayer.length; j++) { + if (rangePrayer[j] != i) { + c.getPrayer().prayerActive[rangePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[rangePrayer[j]], + 0); + } + } + for (int j = 0; j < magePrayer.length; j++) { + if (magePrayer[j] != i) { + c.getPrayer().prayerActive[magePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[magePrayer[j]], + 0); + } + } + } + break; + + case 3:// range prays + case 11: + case 19: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < attackPrayer.length; j++) { + if (attackPrayer[j] != i) { + c.getPrayer().prayerActive[attackPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[attackPrayer[j]], + 0); + } + } + for (int j = 0; j < strengthPrayer.length; j++) { + if (strengthPrayer[j] != i) { + c.getPrayer().prayerActive[strengthPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[strengthPrayer[j]], + 0); + } + } + for (int j = 0; j < rangePrayer.length; j++) { + if (rangePrayer[j] != i) { + c.getPrayer().prayerActive[rangePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[rangePrayer[j]], + 0); + } + } + for (int j = 0; j < magePrayer.length; j++) { + if (magePrayer[j] != i) { + c.getPrayer().prayerActive[magePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[magePrayer[j]], + 0); + } + } + } + break; + case 4: + case 12: + case 20: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < attackPrayer.length; j++) { + if (attackPrayer[j] != i) { + c.getPrayer().prayerActive[attackPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[attackPrayer[j]], + 0); + } + } + for (int j = 0; j < strengthPrayer.length; j++) { + if (strengthPrayer[j] != i) { + c.getPrayer().prayerActive[strengthPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[strengthPrayer[j]], + 0); + } + } + for (int j = 0; j < rangePrayer.length; j++) { + if (rangePrayer[j] != i) { + c.getPrayer().prayerActive[rangePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[rangePrayer[j]], + 0); + } + } + for (int j = 0; j < magePrayer.length; j++) { + if (magePrayer[j] != i) { + c.getPrayer().prayerActive[magePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[magePrayer[j]], + 0); + } + } + } + break; + case 10: + c.lastProtItem = System.currentTimeMillis(); + break; + + case 16: + case 17: + case 18: + if (System.currentTimeMillis() + - c.getPrayer().stopPrayerDelay < 5000) { + c.getActionSender() + .sendMessage( + "You have been injured and can't use this prayer!"); + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[16], 0); + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[17], 0); + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[18], 0); + return; + } + if (i == 16) { + c.protMageDelay = System.currentTimeMillis(); + } else if (i == 17) { + c.protRangeDelay = System.currentTimeMillis(); + } else if (i == 18) { + c.protMeleeDelay = System.currentTimeMillis(); + } + case 21: + case 22: + case 23: + headIcon = true; + for (int p = 16; p < 24; p++) { + if (i != p && p != 19 && p != 20) { + c.getPrayer().prayerActive[p] = false; + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[p], 0); + } + } + break; + case 24: + case 25: + if (c.getPrayer().prayerActive[i] == false) { + for (int j = 0; j < attackPrayer.length; j++) { + if (attackPrayer[j] != i) { + c.getPrayer().prayerActive[attackPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[attackPrayer[j]], + 0); + } + } + for (int j = 0; j < strengthPrayer.length; j++) { + if (strengthPrayer[j] != i) { + c.getPrayer().prayerActive[strengthPrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[strengthPrayer[j]], + 0); + } + } + for (int j = 0; j < rangePrayer.length; j++) { + if (rangePrayer[j] != i) { + c.getPrayer().prayerActive[rangePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[rangePrayer[j]], + 0); + } + } + for (int j = 0; j < magePrayer.length; j++) { + if (magePrayer[j] != i) { + c.getPrayer().prayerActive[magePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[magePrayer[j]], + 0); + } + } + for (int j = 0; j < defencePrayer.length; j++) { + if (defencePrayer[j] != i) { + c.getPrayer().prayerActive[defencePrayer[j]] = false; + c.getPlayerAssistant() + .sendConfig( + c.getPrayer().PRAYER_GLOW[defencePrayer[j]], + 0); + } + } + } + break; + } + + if (!headIcon) { + if (c.getPrayer().prayerActive[i] == false) { + c.getPrayer().prayerActive[i] = true; + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[i], 1); + } else { + c.getPrayer().prayerActive[i] = false; + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[i], 0); + } + } else { + if (c.getPrayer().prayerActive[i] == false) { + c.getPrayer().prayerActive[i] = true; + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[i], 1); + c.headIcon = c.getPrayer().PRAYER_HEAD_ICONS[i]; + c.getPlayerAssistant().requestUpdates(); + } else { + c.getPrayer().prayerActive[i] = false; + c.getPlayerAssistant().sendConfig( + c.getPrayer().PRAYER_GLOW[i], 0); + c.headIcon = -1; + c.getPlayerAssistant().requestUpdates(); + } + } + } else { + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[i], + 0); + c.getPlayerAssistant().sendFrame126( + "You need a @blu@Prayer level of " + + c.getPrayer().PRAYER_LEVEL_REQUIRED[i] + + " to use " + c.getPrayer().PRAYER_NAME[i] + + ".", 357); + c.getPlayerAssistant() + .sendFrame126("Click here to continue", 358); + c.getPlayerAssistant().sendChatInterface(356); + } + } else { + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[i], 0); + c.getActionSender().sendMessage( + "You have run out of prayer points!"); + c.getActionSender().sendSound(SoundList.NO_PRAY, 100, 0); + } + + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/prayer/PrayerData.java b/2006Redone Server/src/redone/game/content/combat/prayer/PrayerData.java new file mode 100644 index 00000000..22496d94 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/prayer/PrayerData.java @@ -0,0 +1,72 @@ +package redone.game.content.combat.prayer; + +public class PrayerData { + + public int prayerId = -1; + public static double prayerPoint = 1.0; + public long stopPrayerDelay, prayerDelay; + public boolean usingPrayer; + + public final int[] PRAYER_DRAIN_RATE = { 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500 }; + + public final int[] PRAYER_LEVEL_REQUIRED = { 1, 4, 7, 8, 9, 10, 13, 16, 19, + 22, 25, 26, 27, 28, 31, 34, 37, 40, 43, 44, 45, 46, 49, 52, 60, 70 }; + + public final int[] PRAYER = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; + + public final String[] PRAYER_NAME = { "Thick Skin", "Burst of Strength", + "Clarity of Thought", "Sharp Eye", "Mystic Will", "Rock Skin", + "Superhuman Strength", "Improved Reflexes", "Rapid Restore", + "Rapid Heal", "Protect Item", "Hawk Eye", "Mystic Lore", + "Steel Skin", "Ultimate Strength", "Incredible Reflexes", + "Protect from Magic", "Protect from Missiles", + "Protect from Melee", "Eagle Eye", "Mystic Might", "Retribution", + "Redemption", "Smite", "Chivalry", "Piety" }; + + public final int[] PRAYER_GLOW = { 83, 84, 85, 601, 602, 86, 87, 88, 89, + 90, 91, 603, 604, 92, 93, 94, 95, 96, 97, 605, 606, 98, 99, 100, + 607, 608 }; + + public final int[] PRAYER_HEAD_ICONS = { -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2, 1, 0, -1, -1, 3, 5, 4, -1, -1 }; + + public boolean[] prayerActive = { false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, + false, false }; + + /** + * How fast the prayer is drained + */ + + public static final double[] prayerData = { 1, // Thick Skin. + 1, // Burst of Strength. + 1, // Clarity of Thought. + 1, // Sharp Eye. + 1, // Mystic Will. + 2, // Rock Skin. + 2, // SuperHuman Strength. + 2, // Improved Reflexes. + 0.4, // Rapid restore. + 0.6, // Rapid Heal. + 0.6, // Protect Items. + 1.5, // Hawk eye. + 2, // Mystic Lore. + 4, // Steel Skin. + 4, // Ultimate Strength. + 4, // Incredible Reflexes. + 4, // Protect from Magic. + 4, // Protect from Missiles. + 4, // Protect from Melee. + 4, // Eagle Eye. + 4, // Mystic Might. + 1, // Retribution. + 2, // Redemption. + 6, // Smite. + 8, // Chivalry. + 8, // Piety. + }; +} diff --git a/2006Redone Server/src/redone/game/content/combat/prayer/PrayerDrain.java b/2006Redone Server/src/redone/game/content/combat/prayer/PrayerDrain.java new file mode 100644 index 00000000..9779308a --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/prayer/PrayerDrain.java @@ -0,0 +1,49 @@ +package redone.game.content.combat.prayer; + +import redone.game.players.Client; + +public class PrayerDrain { + + public static void handlePrayerDrain(Client c) { + c.getPrayer().usingPrayer = false; + double toRemove = 0.0; + for (int j = 0; j < PrayerData.prayerData.length; j++) { + if (c.getPrayer().prayerActive[j]) { + toRemove += PrayerData.prayerData[j] / 20; + c.getPrayer().usingPrayer = true; + } + } + if (toRemove > 0) { + toRemove /= 1 + 0.035 * c.playerBonus[11]; + } + PrayerData.prayerPoint -= toRemove; + if (PrayerData.prayerPoint <= 0) { + PrayerData.prayerPoint = 1.0 + PrayerData.prayerPoint; + reducePrayerLevel(c); + } + + } + + public static void reducePrayerLevel(Client c) { + if (c.playerLevel[5] - 1 > 0) { + c.playerLevel[5] -= 1; + } else { + c.getActionSender().sendMessage( + "You have run out of prayer points!"); + c.playerLevel[5] = 0; + resetPrayers(c); + c.getPrayer().prayerId = -1; + } + c.getPlayerAssistant().refreshSkill(5); + } + + public static void resetPrayers(Client c) { + for (int i = 0; i < c.getPrayer().prayerActive.length; i++) { + c.getPrayer().prayerActive[i] = false; + c.getPlayerAssistant().sendConfig(c.getPrayer().PRAYER_GLOW[i], 0); + } + c.headIcon = -1; + c.getPlayerAssistant().requestUpdates(); + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/range/DwarfCannon.java b/2006Redone Server/src/redone/game/content/combat/range/DwarfCannon.java new file mode 100644 index 00000000..cbe1c552 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/range/DwarfCannon.java @@ -0,0 +1,527 @@ +package redone.game.content.combat.range; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +/** + * Cannon + * @author Andrew + */ + +public class DwarfCannon { + + public DwarfCannon(Client player) { + this.player = player; + } + + private Client player; + + public final int[] ITEM_PARTS = {6, 8, 10, 12}; + + private final int[] OBJECT_PARTS = {7, 8, 9, 6}; + + private final int ballsID = 2; + + public boolean settingUp = false; + + private int setUpStage = 0; + + private int maxBalls = 30; + + public int myBalls = 0; + + private boolean rotating = false; + + private int rotation = 0; + + private int maxHit = 30; + + private final int maxDistance = 20; + + private final int expRate = 50; + + private int totalRotations = 0; + + private boolean justClicked = false; + + public void placeCannon() { + if (settingUp == true) { + return; + } + if (noSetUpArea()) { + player.getActionSender().sendMessage("You are not allowed to set up a cannon here!"); + return; + } + if (hasCannon()) { + player.getActionSender().sendMessage("You already have a cannon placed!"); + return; + } + if (nearCannon()) { + player.getActionSender().sendMessage("You must be farther away from an existing cannon to set a new one up!"); + return; + } + if (!canSetUp()) { + player.getActionSender().sendMessage("You need all the parts of the cannon to set a cannon up."); + return; + } + for (int i = 0; i < 50; i++) { + if (Server.cannonsX[i] == 0 && Server.cannonsY[i] == 0) { + Server.cannonsX[i] = player.absX; + Server.cannonsY[i] = player.absY; + break; + } + } + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (setUpStage >= 4) { + container.stop(); + setUpStage = 0; + settingUp = false; + return; + } + if (!canSetUp()) { + player.getActionSender().sendMessage("You need all the parts of the cannon to set a cannon up."); + container.stop(); + return; + } + settingUp = true; + player.startAnimation(827); + player.turnPlayerTo(player.absX, player.absY); + player.cannonX = player.absX; + player.cannonY = player.absY; + placeObject(OBJECT_PARTS[setUpStage], player.absX, player.absY); + player.getItemAssistant().deleteItem(ITEM_PARTS[setUpStage], 1); + setUpStage ++; + } + @Override + public void stop() { + /** + * Balls + */ + int cballs = getBalls(); + int amount = cballs - myBalls; + player.getItemAssistant().deleteItem(ballsID, player.getItemAssistant().getItemSlot(ballsID), amount); + myBalls = cballs; + } + }, 2); + } + + public boolean needsCannon() { + return (player.lostCannon == true); + } + + public void loginCheck() { + if (needsCannon()) { + player.getActionSender().sendMessage("@red@You can collect your cannon at home from Nulodion."); + } + } + + private boolean canSetUp() { + if (setUpStage == 0) { + if (player.getItemAssistant().playerHasItem(ITEM_PARTS[0]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[1]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) { + return true; + } + } else if (setUpStage == 1) { + if (player.getItemAssistant().playerHasItem(ITEM_PARTS[1]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) { + return true; + } + } else if (setUpStage == 2) { + if (player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) { + return true; + } + } else if (setUpStage == 3) { + if (player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) { + return true; + } + } + return false; + } + + public boolean hasCannon() { + return (player.cannonX > 0) && (player.cannonY > 0) || (player.cannonX > 0 && player.cannonY > 0); + } + + private boolean myCannon(int x, int y) { + return (player.cannonX == x) && (player.cannonY == y); + } + + public int getBalls() { + int cannonBalls = player.getItemAssistant().getItemAmount(ballsID); + if (cannonBalls >= maxBalls) { + return maxBalls; + } + return cannonBalls; + } + + public boolean nearCannon() { + for(int i = 0; i < Server.cannonsX.length; i++) { + if ((player.absX >= Server.cannonsX[i] - 1) && (player.absX <= Server.cannonsX[i] + 1) && (player.absY >= Server.cannonsY[i] - 2) && (player.absY <= Server.cannonsY[i] + 1)) { + return true; + } + } + return false; + } + + public void loadCannons() { + for(int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] != 0) { + player.getActionSender().checkObjectSpawn(6, Server.cannonsX[i], Server.cannonsY[i], 0, 10); + } + } + } + + public void loadCannon(int x, int y) { + int cballs = getBalls(); + if (!myCannon(x, y)) { + player.getActionSender().sendMessage("You can't load somebody else's cannon!"); + return; + } + if (myBalls <= 29) { + int amount = cballs - myBalls; + player.getItemAssistant().deleteItem(ballsID, player.getItemAssistant().getItemSlot(ballsID), amount); + myBalls = cballs; + if (player.getItemAssistant().playerHasItem(ballsID)) { + player.getActionSender().sendMessage(amount > 1 ? "You load the cannon with " + amount + " cannonballs." : "You load the cannon with 1 cannonball."); + } else { + player.getActionSender().sendMessage("You have no cannonballs to load into the cannon."); + } + } + } + + public void clickCannon(int x, int y) { + if (!myCannon(x, y)) { + player.getActionSender().sendMessage("You can't fire somebody else's cannon!"); + return; + } + if (myBalls == 0) { + player.getActionSender().sendMessage("Your cannon has run out of cannonballs."); + return; + } + if (myBalls >= 1 && rotating == false) { + shoot(); + } else if (myBalls >= 1 && rotating == true) { + player.getActionSender().sendMessage("Your cannon is already shooting."); + } + } + + public void handleDisconnect() { + removeObject(player.cannonX, player.cannonY); + for(int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] == player.cannonX && Server.cannonsY[i] == player.cannonY) { + Server.cannonsX[i] = 0; + Server.cannonsY[i] = 0; + Server.cannonsO[i] = null; + } + } + } + + public void handleDeath() { + if (hasCannon()) { + player.lostCannon = true; + removeObject(player.cannonX, player.cannonY); + for(int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] == player.cannonX && Server.cannonsY[i] == player.cannonY) { + Server.cannonsX[i] = 0; + Server.cannonsY[i] = 0; + Server.cannonsO[i] = null; + } + } + player.cannonX = 0; + player.cannonY = 0; + } + } + + public void shoot() { + if (justClicked == true) { + return; + } + rotating = true; + justClicked = true; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer e) { + totalRotations += 1; + if (totalRotations >= 2) { + justClicked = false; + } + if(rotating == false) { + e.stop(); + } + if (myBalls < 1) { + rotating = false; + e.stop(); + } + if (rotating == true) { + rotation += 1; + rotateCannon(); + shootNpcs(); + } + } + @Override + public void stop() { + + } + }, 2); + } + + private void rotateCannon() { + switch (rotation) { + case 1: //north + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 516, 10, -1); + break; + case 2: //north-east + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 517, 10, -1); + break; + case 3: //east + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 518, 10, -1); + break; + case 4: //south-east + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 519, 10, -1); + break; + case 5: //south + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 520, 10, -1); + break; + case 6: //south-west + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 521, 10, -1); + break; + case 7: //west + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 514, 10, -1); + break; + case 8: //north-west + player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 515, 10, -1); + rotation = 0; + break; + } + } + + public void removeCannon(int x, int y) { + for (int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] == x && Server.cannonsY[i] == y) { + Server.cannonsX[i] = 0; + Server.cannonsY[i] = 0; + break; + } + } + } + + public void pickup(int x, int y) { + if (!myCannon(x, y)) { + player.getActionSender().sendMessage("You can't pick up somebody else's cannon!"); + return; + } + if (rotating == true) { + rotating = false; + } + if (player.getItemAssistant().freeSlots() > 3) { + player.startAnimation(827); + player.getActionSender().sendMessage("You pick up the cannon. It's really heavy."); + removeCannon(player.cannonX, player.cannonY); + player.getItemAssistant().addItem(ITEM_PARTS[0], 1); + player.getItemAssistant().addItem(ITEM_PARTS[1], 1); + player.getItemAssistant().addItem(ITEM_PARTS[2], 1); + player.getItemAssistant().addItem(ITEM_PARTS[3], 1); + } else { + player.getActionSender().sendMessage("You don't have enough free inventory slots to do that."); + } + if (myBalls > 0) { + player.getItemAssistant().addItem(ballsID, myBalls); + myBalls = 0; + } + removeObject(player.cannonX, player.cannonY); + player.cannonX = 0; + player.cannonY = 0; + player.cannonX = 0; + player.cannonY = 0; + } + + public void placeObject(int id, int x, int y) { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + Client a = (Client)PlayerHandler.players[j]; + a.getActionSender().object(id, x, y, 516, 10); + } + } + } + + public void removeObject(int x, int y) { + placeObject(-1, x, y); + } + + public boolean noSetUpArea() { + return (player.absX >= 2024 && player.absX <= 2047 && player.absY >= 2047 && player.absY <= 4542) || player.inBank() || player.inFightCaves() || (player.absX >= 3161 && player.absX <= 3168 && player.absY >= 3486 && player.absY <= 3493); + } + + private int getHit() { + int hits = Misc.random(2); + switch (hits) { + case 0: + return Misc.random(maxHit); + case 1: + return 15+Misc.random(maxHit-15); + case 2: + return 10+Misc.random(maxHit-10); + } + return 0; + } + + public void shootNpcs() { + int damage = getHit(); + Npc target = targetNpc(); + if (target != null) { + if (damage > target.HP) { + damage = target.HP; + } + if (player.inMulti() && target.inMulti()) { + cannonProjectile(target); + target.hitDiff2 = damage; + target.HP -= damage; + target.killerId = player.playerId; + target.facePlayer(player.playerId); + target.hitUpdateRequired2 = true; + target.updateRequired = true; + myBalls -= 1; + player.getPlayerAssistant().addSkillXP(damage * expRate, player.playerRanged); + } + if (!player.inMulti()) { + if (target.underAttackBy > 0 && target.underAttackBy != player.playerId) { + return; + } + if (player.underAttackBy2 > 0 && player.underAttackBy2 != target.npcId) { + return; + } + cannonProjectile(target); + target.hitDiff2 = damage; + target.HP -= damage; + target.killerId = player.playerId; + target.facePlayer(player.playerId); + target.hitUpdateRequired2 = true; + target.updateRequired = true; + myBalls -= 1; + player.getPlayerAssistant().addSkillXP(damage * expRate, player.playerRanged); + } + } + } + + + private Npc targetNpc() { + for (int i = 0; i < NpcHandler.maxNPCs; i++) { + if (NpcHandler.npcs[i] == null) { + continue; + } + Npc npc = NpcHandler.npcs[i]; + int myX = player.cannonX; + int myY = player.cannonY; + int theirX = npc.absX; + int theirY = npc.absY; + if (!npc.isDead && !npc.isDead && npc.HP != 0 && npc.npcType != 1266 && npc.npcType != 1268 && inDistance(theirX, theirY)) { + switch (rotation) { + case 1: + if (theirY > myY && theirX >= myX - 1 && theirX <= myX + 1) { + return npc; + } + break; + case 2: + if (theirX >= myX + 1 && theirY >= myY + 1) { + return npc; + } + break; + case 3: + if (theirX > myX && theirY >= myY - 1 && theirY <= myY + 1) { + return npc; + } + break; + case 4: + if (theirY <= myY - 1 && theirX >= myX + 1) { + return npc; + } + break; + case 5: + if (theirY < myY && theirX >= myX - 1 && theirX <= myX + 1) { + return npc; + } + break; + case 6: + if (theirX <= myX - 1 && theirY <= myY - 1) { + return npc; + } + break; + case 7: + if (theirX < myX && theirY >= myY - 1 && theirY <= myY + 1) { + return npc; + } + break; + case 8: + if (theirX <= myX - 1 && theirY >= myY + 1) { + return npc; + } + break; + } + } + } + return null; + } + + public boolean inDistance(int npcX, int npcY) { + return (npcX >= player.cannonX - maxDistance && npcX <= player.cannonX + maxDistance && npcY >= player.cannonY - maxDistance && npcY <= player.cannonY + maxDistance); + } + + private void cannonProjectile(Npc n) { + int oX = player.cannonX+getShootXPos(); + int oY = player.cannonY+getShootYPos(); + int offX = ((oX - n.absX) * -1); + int offY = ((oY - n.absY) * -1); + player.getPlayerAssistant().createPlayersProjectile(oX, oY, offY, offX, 50, 60, 53, 20, 20, -player.oldNpcIndex + 1, 30); + } + + public int getShootXPos() { + switch(rotation) { + case 1: + return 1; + case 2: + return 2; + case 3: + return 2; + case 4: + return 2; + case 5: + return 1; + case 6: + return 0; + case 7: + return 0; + case 8: + return 0; + } + return 0; + } + + public int getShootYPos() { + switch(rotation) { + case 1: + return 2; + case 2: + return 2; + case 3: + return 1; + case 4: + return 0; + case 5: + return 0; + case 6: + return 0; + case 7: + return 1; + case 8: + return 2; + } + return 0; + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/combat/range/RangeData.java b/2006Redone Server/src/redone/game/content/combat/range/RangeData.java new file mode 100644 index 00000000..27784b63 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/range/RangeData.java @@ -0,0 +1,370 @@ +package redone.game.content.combat.range; + +import redone.game.players.Client; + +public class RangeData { + + public final static int[] BOWS = { 9185, 839, 845, 847, 851, 855, 859, 841, + 843, 849, 853, 857, 861, 4212, 4214, 4215, 11235, 4216, 4217, 4218, + 4219, 4220, 4221, 4222, 4223, 6724, 4734, 4934, 4935, 4936, 4937 }; + public final static int[] ARROWS = { 882, 884, 886, 888, 890, 892, 4740, + 11212, 9140, 9141, 4142, 9143, 9144, 9240, 9241, 9242, 9243, 9244, + 9245, 4150, 4160, 4172 }; + public final static int[] NO_ARROW_DROP = { 4212, 4214, 4215, 4216, 4217, + 4218, 4219, 4220, 4221, 4222, 4223, 4734, 4934, 4935, 4936, 4937 }; + public final static int[] OTHER_RANGE_WEAPONS = { 863, 864, 865, 866, 867, + 868, 869, 806, 807, 808, 809, 810, 811, 825, 826, 827, 828, 829, + 830, 800, 801, 802, 803, 804, 805, 6522 }; + + public static boolean usingDbow(Client c) { + return c.playerEquipment[c.playerWeapon] == 11235; + } + + public static boolean usingCrystalBow(Client c) { + return c.playerEquipment[c.playerWeapon] >= 4212 + && c.playerEquipment[c.playerWeapon] <= 4223; + } + + public static boolean usingBolts(Client c) { + return c.playerEquipment[c.playerArrows] >= 9130 + && c.playerEquipment[c.playerArrows] <= 9145 + || c.playerEquipment[c.playerArrows] >= 9230 + && c.playerEquipment[c.playerArrows] <= 9245; + } + + public static boolean properBolts(Client c) { + return c.playerEquipment[c.playerArrows] >= 9140 + && c.playerEquipment[c.playerArrows] <= 9144 + || c.playerEquipment[c.playerArrows] >= 9240 + && c.playerEquipment[c.playerArrows] <= 9244; + } + + public static boolean usingHally(Client c) { + switch (c.playerEquipment[c.playerWeapon]) { + case 3190: + case 3192: + case 3194: + case 3196: + case 3198: + case 3200: + case 3202: + case 3204: + return true; + + default: + return false; + } + } + + public static int correctBowAndArrows(Client c) { + if (usingBolts(c)) { + return -1; + } + switch (c.playerEquipment[c.playerWeapon]) { + + case 839: + case 841: + return 882; + + case 843: + case 845: + return 884; + + case 847: + case 849: + return 886; + + case 851: + case 853: + return 888; + + case 855: + case 857: + return 890; + + case 859: + case 861: + if (c.playerEquipment[c.playerArrows] == 892) { + return 892; + } else if (c.playerEquipment[c.playerArrows] == 4172) { + return 4172; + } + + case 4734: + case 4935: + case 4936: + case 4937: + return 4740; + + case 11235: + return 11212; + } + return -1; + } + + public static int getRangeStartGFX(Client c) { + switch (c.rangeItemUsed) { + + case 863: + return 220; + case 864: + return 219; + case 865: + return 221; + case 866: // knives + return 223; + case 867: + return 224; + case 868: + return 225; + case 869: + return 222; + + case 806: + return 232; + case 807: + return 233; + case 808: + return 234; + case 809: // darts + return 235; + case 810: + return 236; + case 811: + return 237; + + case 825: + return 206; + case 826: + return 207; + case 827: // javelin + return 208; + case 828: + return 209; + case 829: + return 210; + case 830: + return 211; + + case 800: + return 42; + case 801: + return 43; + case 802: + return 44; // axes + case 803: + return 45; + case 804: + return 46; + case 805: + return 48; + + case 882: + return 19; + + case 884: + return 18; + + case 886: + return 20; + + case 888: + return 21; + + case 890: + return 22; + + case 892: + return 24; + + case 11212: + return 26; + + case 4212: + case 4214: + case 4215: + case 4216: + case 4217: + case 4218: + case 4219: + case 4220: + case 4221: + case 4222: + case 4223: + return 250; + + } + return -1; + } + + public static int getRangeProjectileGFX(Client c) { + if (c.dbowSpec) { + return 672; + } + if (c.bowSpecShot > 0) { + switch (c.rangeItemUsed) { + default: + return 249; + } + } + if (c.playerEquipment[c.playerWeapon] == 9185) { + return 27; + } + switch (c.rangeItemUsed) { + + case 863: + return 213; + case 864: + return 212; + case 865: + return 214; + case 866: // knives + return 216; + case 867: + return 217; + case 868: + return 218; + case 869: + return 215; + + case 806: + return 226; + case 807: + return 227; + case 808: + return 228; + case 809: // darts + return 229; + case 810: + return 230; + case 811: + return 231; + + case 825: + return 200; + case 826: + return 201; + case 827: // javelin + return 202; + case 828: + return 203; + case 829: + return 204; + case 830: + return 205; + + case 6522: // Toktz-xil-ul + return 442; + + case 800: + return 36; + case 801: + return 35; + case 802: + return 37; // axes + case 803: + return 38; + case 804: + return 39; + case 805: + return 40; + + case 882: + return 10; + + case 884: + return 9; + + case 886: + return 11; + + case 888: + return 12; + + case 890: + return 13; + + case 892: + return 15; + + case 11212: + return 17; + + case 4740: // bolt rack + return 27; + + case 4212: + case 4214: + case 4215: + case 4216: + case 4217: + case 4218: + case 4219: + case 4220: + case 4221: + case 4222: + case 4223: + return 249; + + } + return -1; + } + + public static int getProjectileSpeed(Client c) { + if (c.dbowSpec) { + return 100; + } + return 70; + } + + public static int getProjectileShowDelay(Client c) { + switch (c.playerEquipment[c.playerWeapon]) { + case 863: + case 864: + case 865: + case 866: // knives + case 867: + case 868: + case 869: + + case 806: + case 807: + case 808: + case 809: // darts + case 810: + case 811: + + case 825: + case 826: + case 827: // javelin + case 828: + case 829: + case 830: + + case 800: + case 801: + case 802: + case 803: // axes + case 804: + case 805: + + case 4734: + case 9185: + case 4935: + case 4936: + case 4937: + return 15; + + default: + return 5; + } + } + + public static boolean fullVoidRange(Client c) { + return c.playerEquipment[c.playerHat] == 11664 + && c.playerEquipment[c.playerLegs] == 8840 + && c.playerEquipment[c.playerChest] == 8839 + && c.playerEquipment[c.playerHands] == 8842; + } + +} diff --git a/2006Redone Server/src/redone/game/content/combat/range/RangeMaxHit.java b/2006Redone Server/src/redone/game/content/combat/range/RangeMaxHit.java new file mode 100644 index 00000000..9fd3eb34 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/combat/range/RangeMaxHit.java @@ -0,0 +1,101 @@ +package redone.game.content.combat.range; + +import redone.game.players.Client; + +public class RangeMaxHit { + + public static int calculateRangeDefence(Client c) { + int defenceLevel = c.playerLevel[1]; + if (c.getPrayer().prayerActive[0]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05; + } else if (c.getPrayer().prayerActive[5]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1; + } else if (c.getPrayer().prayerActive[13]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15; + } else if (c.getPrayer().prayerActive[24]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2; + } else if (c.getPrayer().prayerActive[25]) { + defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25; + } + return defenceLevel + c.playerBonus[9] + c.playerBonus[9] / 2; + } + + public static int calculateRangeAttack(Client c) { + int rangeLevel = c.playerLevel[4]; + rangeLevel *= c.specAccuracy; + if (RangeData.fullVoidRange(c)) { + rangeLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.1; + } + if (c.getPrayer().prayerActive[3]) { + rangeLevel *= 1.05; + } else if (c.getPrayer().prayerActive[11]) { + rangeLevel *= 1.10; + } else if (c.getPrayer().prayerActive[19]) { + rangeLevel *= 1.15; + } + // dbow spec + if (RangeData.fullVoidRange(c) && c.specAccuracy > 1.15) { + rangeLevel *= 1.75; + } + return (int) (rangeLevel + c.playerBonus[4] * 1.95); + } + + public static int rangeMaxHit(Client c) { + int rangeLevel = c.playerLevel[4]; + int itemUsed = getRangeStr(c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed); + double modifier = 1.00; + if (c.getPrayer().prayerActive[3]) { + modifier *= 1.05; + } else if (c.getPrayer().prayerActive[11]) { + modifier *= 1.10; + } else if (c.getPrayer().prayerActive[19]) { + modifier *= 1.15; + } + if (RangeData.fullVoidRange(c)) { + modifier *= 1.20; + } + double e = Math.floor(rangeLevel * modifier); + if (c.fightMode == 0) { + e = (e + 3.0); + } + double darkbow = 1.0; + if (c.usingSpecial) { + if (c.playerEquipment[3] == 11235) { + if (c.lastArrowUsed == 11212) { + darkbow = 1.5; + } else { + darkbow = 1.3; + } + } + } + double max = (1.3 + e / 10 + itemUsed / 80 + e * itemUsed / 640) * darkbow; + return (int) max; + } + + public static int getRangeStr(int i) { + int str = 0; + int[][] data = { { 877, 10 }, { 9140, 46 }, { 9145, 36 }, { 9141, 64 }, + { 9142, 82 }, { 9143, 100 }, { 9144, 115 }, { 9236, 14 }, + { 9237, 30 }, { 9238, 48 }, { 9239, 66 }, { 9240, 83 }, + { 9241, 85 }, { 9242, 103 }, { 9243, 105 }, { 9244, 117 }, + { 9245, 120 }, { 882, 7 }, { 884, 10 }, { 886, 16 }, + { 888, 22 }, { 890, 31 }, { 892, 49 }, { 4740, 55 }, + { 11212, 60 }, { 806, 1 }, { 807, 3 }, { 808, 4 }, { 809, 7 }, + { 810, 10 }, { 811, 14 }, { 11230, 20 }, { 864, 3 }, + { 863, 4 }, { 865, 7 }, { 866, 10 }, { 867, 14 }, { 868, 24 }, + { 825, 6 }, { 826, 10 }, { 827, 12 }, { 828, 18 }, { 829, 28 }, + { 830, 42 }, { 800, 5 }, { 801, 7 }, { 802, 11 }, { 803, 16 }, + { 804, 23 }, { 805, 36 }, { 9976, 0 }, { 9977, 15 }, + { 4212, 70 }, { 4214, 70 }, { 4215, 70 }, { 4216, 70 }, + { 4217, 70 }, { 4218, 70 }, { 4219, 70 }, { 4220, 70 }, + { 4221, 70 }, { 4222, 70 }, { 4223, 70 }, { 6522, 49 }, + { 10034, 15 }, }; + for (int[] element : data) { + if (i == element[0]) { + str = element[1]; + } + } + return str; + } + +} diff --git a/2006Redone Server/src/redone/game/content/consumables/Beverages.java b/2006Redone Server/src/redone/game/content/consumables/Beverages.java new file mode 100644 index 00000000..6ee33777 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/consumables/Beverages.java @@ -0,0 +1,218 @@ +package redone.game.content.consumables; + +import redone.event.*; +import redone.game.players.Client; +import redone.util.Misc; + +public class Beverages { + + private static final int BEERGLASS = 1919; + //private static final int EMPTYJUG = 1935; + + public static enum beverageData { + BEER(1917, BEERGLASS, 829, true, false, false, false), + BEER1(7740, BEERGLASS, 829, true, false, false, false), + GROG(1915, BEERGLASS, 829, true, false, false, false), + BANDITS_BREW(4627, BEERGLASS, 829, true, false, false, false), + DRAGON_BITTER(1911, BEERGLASS, 829, true, false, false, false), + CIDER(7752,BEERGLASS, 829, true, false, false, false), + MATURE_CIDER(5765, BEERGLASS, 829, true, false, false, false), + MOONLIGHT_MEAD(7750, BEERGLASS, 829, true, false, false, false), + DWARVEN_STOUT(1913, BEERGLASS, 829, true, false, false, false), + GREENMANS_ALE(1909, BEERGLASS, 829, true, false, false, false), + CHEFS_DELIGHT(7754, BEERGLASS, 829, true, false, false, false), + ASGARNIAN_ALE(1905, BEERGLASS, 829, true, false, false, false), + WIZARDS_MIND_BOMB(1907, BEERGLASS, 829, true, false, false, false); + + private int bevId, replacement, bevAnim; + private boolean effect1, effect2, effect3, effect4; + + private beverageData(final int bevId, final int replacement, + final int bevAnim, final boolean effect1, + final boolean effect2, final boolean effect3, + final boolean effect4) { + this.bevId = bevId; + this.replacement = replacement; + this.bevAnim = bevAnim; + this.effect1 = effect1; + this.effect2 = effect2; + this.effect3 = effect3; + this.effect4 = effect4; + } + + public int getBev() { + return bevId; + } + + public int getRep() { + return replacement; + } + + public int getAnim() { + return bevAnim; + } + + public boolean getEffect1() { + return effect1; + } + + public boolean getEffect2() { + return effect2; + } + + public boolean getEffect3() { + return effect3; + } + + public boolean getEffect4() { + return effect4; + } + + private final String getName() { + return Misc.optimizeText(toString().toLowerCase().replaceAll("_", " ")); + } + } + + public static boolean isBeverage(Client c, int beverageId) { + boolean isBeverage = false; + for (final beverageData b : beverageData.values()) { + if (beverageId == b.getBev()) { + isBeverage = true; + } + } + return isBeverage; + } + + private static int drunkTimer = 0; + + private static void resetDrunk(Client c) { + c.playerStandIndex = 0x328; + c.updateRequired = true; + c.appearanceUpdateRequired = true; + drunkTimer = -1; + } + + private static void getBevEffect(final Client c, int bevEffectId) { + switch (bevEffectId) { + case 1: + c.playerStandIndex = 3040; + c.getActionSender().sendMessage("You start to feel dizzy."); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + + if (drunkTimer > 0) { + drunkTimer--; + } + if (drunkTimer == 0) { + container.stop(); + } + } + + public void stop() { + resetDrunk(c); + } + }, 1); + break; + default: + break; + } + c.updateRequired = true; + c.appearanceUpdateRequired = true; + } + + public static void foodEffect(Client c, int id) { + switch (id) { + case 1917: + case 7740://beer + double beerEffectStrength = c.getLevelForXP(c.playerXP[2]) * .04 + c.getLevelForXP(c.playerXP[2]); + double beerEffectAttack = c.getLevelForXP(c.playerXP[0]) * .07; + if (c.playerLevel[2] < beerEffectStrength) { + c.playerLevel[2] = (int) beerEffectStrength; + } + if (c.playerLevel[0] > 0) { + c.playerLevel[0] -= beerEffectAttack; + } + if (c.playerLevel[0] <= 0) { + c.playerLevel[0] = 1; + } + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(2); + break; + case 1913: //dwarven stout + c.playerLevel[c.playerMining] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMining]) + 1; + c.playerLevel[c.playerSmithing] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerSmithing]) + 1; + c.getPlayerAssistant().refreshSkill(c.playerMining); + c.getPlayerAssistant().refreshSkill(c.playerSmithing); + break; + case 1907://wizard's mind bomb + if (c.playerLevel[c.playerMagic] < 50) { + c.playerLevel[c.playerMagic] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMagic]) + 2; + } else { + c.playerLevel[c.playerMagic] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMagic]) + 3; + } + c.playerLevel[c.playerStrength] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerStrength]) - 3; + c.playerLevel[c.playerDefence] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerDefence]) - 3; + c.playerLevel[c.playerAttack] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerAttack]) - 4; + c.getPlayerAssistant().refreshSkill(c.playerDefence); + c.getPlayerAssistant().refreshSkill(c.playerMagic); + c.getPlayerAssistant().refreshSkill(c.playerAttack); + c.getPlayerAssistant().refreshSkill(c.playerStrength); + break; + case 1915://grog + c.playerLevel[2] = c.getPlayerAssistant().getLevelForXP(c.playerXP[2]) + 3; + if (c.playerLevel[0] > 0) { + c.playerLevel[0] = c.getPlayerAssistant().getLevelForXP(c.playerXP[0]) - 2; + } + if (c.playerLevel[0] <= 0) { + c.playerLevel[0] = 1; + } + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(2); + break; + } + } + + public static void drinkBeverage(final Client c, final int beverageId, int slotId) { + for (final beverageData b : beverageData.values()) { + if (beverageId == b.getBev()) { + if (System.currentTimeMillis() - c.potDelay >= 1500) { + if (c.getItemAssistant().playerHasItem(beverageId)) { + if (b.getEffect1()) { + drunkTimer = 30; + getBevEffect(c, 1); + } + if (b.getEffect2()) { + drunkTimer = 45; + getBevEffect(c, 2); + } + if (b.getEffect3()) { + drunkTimer = 60; + getBevEffect(c, 3); + } + if (b.getEffect4()) { + drunkTimer = 75; + getBevEffect(c, 4); + } + foodEffect(c, beverageId); + c.potDelay = System.currentTimeMillis(); + c.foodDelay = c.potDelay; + c.getCombatAssistant().resetPlayerAttack(); + c.attackTimer++; + c.startAnimation(b.getAnim()); + c.getItemAssistant().resetItems(3214); + c.potDelay = System.currentTimeMillis(); + c.getItemAssistant().deleteItem(beverageId, slotId, 1); + c.getItemAssistant().addItem(b.getRep(), 1); + c.forcedChat("Cheers mate!"); + c.getActionSender().sendMessage("You drink the " + b.getName() + "."); + } + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/consumables/Food.java b/2006Redone Server/src/redone/game/content/consumables/Food.java new file mode 100644 index 00000000..26c4842f --- /dev/null +++ b/2006Redone Server/src/redone/game/content/consumables/Food.java @@ -0,0 +1,254 @@ +package redone.game.content.consumables; + +import java.util.HashMap; + +import redone.game.content.music.sound.SoundList; +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.util.Misc; + +public class Food { + + private final Client c; + + public Food(Client c) { + this.c = c; + } + + public static enum FoodToEat { + Easter_Egg(1961, 12, "Easter Egg", 0, "Food", false), Pumpkin(1959, 14, + "Pumpkin", 0, "Food", false), Half_Jug_of_Wine(1989, 7, + "Half Full Wine Jug", 1935, "Drink", false), + //GROG(1915, 3, "Grog", 1919, "Drink", true), + CUP_OF_TEA(1978, 2 + Misc.random(1), "Cup of Tea", 1980, "Drink", true), CUP_OF_TEA2( + 712, 2 + Misc.random(1), "Cup of Tea", 1980, "Drink", true), + //WIZARD_MIND(1907, 0, "Wizard Mind Bomb", 0, "Drink", true), + LEMON(2102, 2,"Lemon", 0, "Food", false), LIME(2120, 2, "Lime", 0, "Food", + false), PINEAPPLE(2114, 2, "Pineapple", 0, "Food", false), CHOCOLATE_BAR( + 1973, 2, "Chocolate Bar", 0, "Food", false), Wine(1993, 11, + "Wine", 1935, "Drink", false), MACKERAL(355, 6, "Mackeral", 0, + "Food", false), MANTA(391, 22, "Manta Ray", 0, "Food", false), SHARK( + 385, 20, "Shark", 0, "Food", false), LOBSTER(379, 12, + "Lobster", 0, "Food", false), KARAMBWAN(3144, 2 + Misc.random(4), "Karambwan", 0, "Food", false), + //BEER(1917, 1, "Beer", 1919, "Drink", true), + //GREENMANS_ALE(1909, 1, "Greenman's Ale", 1919, "Drink", true), + TROUT(333, 7, "Trout", + 0, "Food", false), SALMON(329, 9, "Salmon", 0, "Food", false), SWORDFISH( + 373, 14, "Swordfish", 0, "Food", false), TUNA(361, 10, "Tuna", + 0, "Food", false), + //MOONLIGHT_MEAD(2955, 4, "Moonlight mead", 1919, "Drink", false), + MONKFISH(7946, 16, "Monkfish", 0, + "Food", false), SEA_TURTLE(397, 21, "Sea Turtle", 0, "Food", + false), CABBAGE(1965, 1, "Cabbage", 0, "Food", false), SPINACH( + 1969, 2, "Spinach Roll", 0, "Food", false), CAKE(1891, 4, + "Cake", 1893, "Food", false), CAKE2(1893, 4, "2/3 Cake", 1895, + "Food", false), SLICE_OF_CAKE(1895, 4, "2/3 Cake", 0, "Food", + false), BASS(365, 13, "Bass", 0, "Food", false), COD(339, 7, + "Cod", 0, "Food", false), POTATO(1942, 1, "Potato", 0, "Food", + false), BAKED_POTATO(6701, 4, "Baked Potato", 0, "Food", false), POTATO_WITH_CHEESE( + 6705, 16, "Potato with Cheese", 0, "Food", false), EGG_POTATO( + 7056, 16, "Egg Potato", 0, "Food", false), CHILLI_POTATO(7054, + 14, "Chilli Potato", 0, "Food", false), MUSHROOM_POTATO(7058, + 20, "Mushroom Potato", 0, "Food", false), TUNA_POTATO(7060, 22, + "Tuna Potato", 0, "Food", false), SHRIMPS(315, 3, "Shrimps", 0, + "Food", false), HERRING(347, 5, "Herring", 0, "Food", false), SARDINE( + 325, 4, "Sardine", 0, "Food", false), CHOCOLATE_CAKE(1897, 5, + "Chocolate Cake", 1899, "Food", false), HALF_CHOCOLATE_CAKE( + 1899, 5, "2/3 Chocolate Cake", 1901, "Food", false), CHOCOLATE_SLICE( + 1901, 5, "Chocolate Slice", 0, "Food", false), ANCHOVIES(319, + 2, "Anchovies", 0, "Food", false), PLAIN_PIZZA(2289, 7, + "Plain Pizza", 2291, "Food", false), HALF_PLAIN_PIZZA(2291, 7, + "1/2 Plain pizza", 0, "Food", false), MEAT_PIZZA(2293, 8, + "Meat Pizza", 2295, "Food", false), CHICKEN(2140, 3, "Chicken", + 0, "Food", false), MEAT(2142, 2, "Meat", 0, "Food", false), HALF_MEAT_PIZZA( + 2295, 8, "1/2 Meat Pizza", 0, "Food", false), ANCHOVY_PIZZA( + 2297, 9, "Anchovy Pizza", 2299, "Food", false), HALF_ANCHOVY_PIZZA( + 2299, 9, "1/2 Anchovy Pizza", 0, "Food", false), PINEAPPLE_PIZZA( + 2301, 11, "Pineapple Pizza", 2303, "Food", false), HALF_PINEAPPLE_PIZZA( + 2303, 11, "1/2 Pineapple Pizza", 0, "Food", false), BREAD(2309, + 5, "Bread", 0, "Food", false), APPLE_PIE(2323, 7, "Apple Pie", + 2335, "Food", false), HALF_APPLE_PIE(2335, 7, "Half Apple Pie", + 2313, "Food", false), REDBERRY_PIE(2325, 5, "Redberry Pie", + 2333, "Food", false), HALF_REDBERRY_PIE(2333, 5, + "Half Redberry Pie", 2313, "Food", false), Ugthanki_kebab(1883, + 2, "Ugthanki kebab", 0, "Food", false), + // Kebab(1971, 2, "kebab", 0, "food", false), + SEAWEED(403, 4, "Edible Seaweed", 0, "Food", false), + MEAT_PIE(2327, 6, "Meat Pie", 2331, "Food", false), HALF_MEAT_PIE(2331, + 6, "Half Meat Pie", 2313, "Food", false), SUMMER_PIE(7218, 11, + "Summer Pie", 7220, "Food", false), HALF_SUMMER_PIE(7220, 11, + "Half Summer Pie", 2313, "Food", false), PIKE(351, 8, "Pike", + 0, "Food", false), POTATO_WITH_BUTTER(6703, 14, + "Potato with Butter", 0, "Food", false), + SLICED_BANANA(3162, 2, "Sliced Banana", 0, "Food", false), + BANANA(1963, 2, "Banana", 0, "Food", false), PEACH(6883, 8, "Peach", 0, "Food", + false), ORANGE(2108, 2, "Orange", 0, "Food", false), PINEAPPLE_RINGS( + 2118, 2, "Pineapple Rings", 0, "Food", false), PINEAPPLE_CHUNKS( + 2116, 2, "Pineapple Chunks", 0, "Food", false), EASTER_EGG( + 7928, 1, "Easter Egg", 0, "Food", false), EASTER_EGG2(7929, 1, + "Easter Egg", 0, "Food", false), EASTER_EGG3(7930, 1, + "Easter Egg", 0, "Food", false), EASTER_EGG4(7931, 1, + "Easter Egg", 0, "Food", false), EASTER_EGG5(7932, 1, + "Easter Egg", 0, "Food", false), EASTER_EGG6(7933, 1, + "Easter Egg", 0, "Food", false), PURPLE_SWEETS(10476, 9, + "Purple Sweets", 0, "Food", false), POT_OF_CREAM(2130, 1, + "Pot of cream", 0, "Food", false), + FILED_RATION(7934, 9, "Field Ration", 0, "Food", false), + STEW(2003, 11, "Stew", 1923, "Food", false), + CURRY(2011, 19, "Curry", 1923, "Drink", false), + BANDAGES(4049, 3, "Bandages", 0, "Food", false); + + private int id; + private int heal; + private String name; + private int replace; + private String type; + private boolean foodEffect; + + private FoodToEat(int id, int heal, String name, int replaceWith, + String type, boolean foodEffect) { + this.id = id; + this.heal = heal; + this.name = name; + replace = replaceWith; + this.type = type; + this.foodEffect = foodEffect; + } + + private boolean hasEffect() { + return foodEffect; + } + + private int getId() { + return id; + } + + private String getType() { + return type; + } + + private int getHeal() { + return heal; + } + + public String getName() { + return name; + } + + public int replaceWith() { + return replace; + } + + public static HashMap food = new HashMap(); + + static { + for (FoodToEat f : FoodToEat.values()) { + food.put(f.getId(), f); + } + } + } + + public int random(int r) { + return Misc.random(r); + } + + public void eat(int id, int slot) { + if (c.isDead || c.playerLevel[3] <= 0) { + return; + } + if (c.duelRule[6]) { + c.getActionSender() + .sendMessage("You may not eat in this duel."); + return; + } + if (!RareProtection.eatDupedItem(c, id)) { + return; + } + if (System.currentTimeMillis() - c.foodDelay >= 1800 + && c.playerLevel[3] > 0) { + c.getCombatAssistant().resetPlayerAttack(); + c.attackTimer += 2; + c.startAnimation(829); + c.getItemAssistant().deleteItem(id, slot, 1); + FoodToEat f = FoodToEat.food.get(id); + if (f.hasEffect()) { + foodEffect(id); + } + if (f.replaceWith() > 0) { + c.getItemAssistant().addItem(f.replaceWith(), 1); + } + if (f.getType().equalsIgnoreCase("Food")) { + c.getActionSender().sendMessage( + "You eat the " + f.getName() + "."); + } else if (f.getType().equalsIgnoreCase("Drink")) { + c.getActionSender().sendMessage( + "You drink the " + f.getName() + "."); + } + if (id == 1965) { + c.getActionSender().sendMessage( + "You eat the cabbage. Yuck!"); + } + if (id == 2955) { + c.getActionSender().sendMessage("It tastes like something just died in your mouth."); + } + if (f.getType().equalsIgnoreCase("Food")) { + c.getActionSender().sendSound(SoundList.FOOD_EAT, 100, 0); + } else if (f.getType().equalsIgnoreCase("Drink")) { + c.getActionSender().sendSound(SoundList.DRINK, 100, 0); + } + c.foodDelay = System.currentTimeMillis(); + if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] += f.getHeal(); + c.getActionSender().sendMessage("It heals some health."); + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + } + c.getPlayerAssistant().refreshSkill(3); + } + } + + public void foodEffect(int id) { + switch (id) { + case 1978: + case 712: + c.forcedChat("Aaah, nothing like a nice cuppa tea!"); + break; + case 1907: + if (c.playerLevel[6] < 50) { + c.playerLevel[6] = c.getPlayerAssistant().getLevelForXP( + c.playerXP[6]) + 2; + } else { + c.playerLevel[6] = c.getPlayerAssistant().getLevelForXP( + c.playerXP[6]) + 3; + } + if (c.playerLevel[2] < 4) { + c.playerLevel[2] = 1; + } + if (c.playerLevel[0] < 5) { + c.playerLevel[0] = 1; + } else { + c.playerLevel[0] = c.getPlayerAssistant().getLevelForXP(c.playerXP[0]) - 4; + } + if (c.playerLevel[1] < 4) { + c.playerLevel[1] = 1; + } else { + c.playerLevel[1] = c.getPlayerAssistant().getLevelForXP(c.playerXP[1]) - 3; + } + if (c.playerLevel[2] < 4) { + c.playerLevel[2] = 1; + } else { + c.playerLevel[2] = c.getPlayerAssistant().getLevelForXP(c.playerXP[2]) - 3; + } + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(2); + c.getPlayerAssistant().refreshSkill(6); + break; + } + } + + public boolean isFood(int id) { + return FoodToEat.food.containsKey(id); + } +} diff --git a/2006Redone Server/src/redone/game/content/consumables/Kebabs.java b/2006Redone Server/src/redone/game/content/consumables/Kebabs.java new file mode 100644 index 00000000..f72e9a8b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/consumables/Kebabs.java @@ -0,0 +1,136 @@ +package redone.game.content.consumables; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author darkside1222 + */ +public class Kebabs { + + public static int Kebab = 1971; + float chances = 0.0f; + + /** + * Chances(Percents) + */ + public static float chances(String effect) { + float chances = 0.0f;// PERCENT + if (effect.equalsIgnoreCase("Effect1")) {// Nothing + chances = 8.7f; + } else if (effect.equalsIgnoreCase("Effect2")) {// normal heal + chances = 61.2f; + } else if (effect.equalsIgnoreCase("Effect3")) {// better heal + chances = 21.1f; + } else if (effect.equalsIgnoreCase("Effect4")) {// SUPER heal + chances = 3.6f; + } else if (effect.equalsIgnoreCase("Effect5")) {// Damages you. + chances = 6.3f - 0.9f; + ; + } else { + chances = Float.parseFloat(effect); + } + return chances; // Equals 100% + } + + /** + * Different effects(Healing,lowering,damaging) + */ + public static void effects(Client c) { + float eff1 = chances("effect1"); + float eff2 = chances("effect2"); + float eff3 = chances("effect3"); + float eff4 = chances("effect4"); + float eff5 = chances("effect5"); + + if (Misc.random(100.0f) <= eff1) { // 8.71% + c.getActionSender().sendMessage( + "That kebab didn't seem to do a lot."); + + } else if (Misc.random(100.0f) <= eff2) { // 61.24% heals 10% of HP + c.getActionSender() + .sendMessage("It restores some life points."); + if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] += c.getLevelForXP(c.playerXP[3]) * 0.10; + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + + } + + } else if (Misc.random(100.0f) <= eff3) { // 21.12% + 10-20 HP + c.getActionSender().sendMessage( + "That was a good kebab. You feel a lot better. "); + if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] += Misc.random(20); + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + } + + } else if (Misc.random(100.0f) <= eff4) {// 3.65% + attk,str,def + + // 2-3 + heal 0-300 + c.getActionSender() + .sendMessage( + "Wow, that was an amazing kebab! You feel really invigorated."); + c.playerLevel[1] += 2 + Misc.random(1); // def + c.playerLevel[2] += 2 + Misc.random(1); // str + c.playerLevel[0] += 2 + Misc.random(1); // atk + c.getPlayerAssistant().refreshSkill(1); + c.getPlayerAssistant().refreshSkill(2); + c.getPlayerAssistant().refreshSkill(3); + if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] += Misc.random(30); + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) { + c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]); + } + } + + } else if (Misc.random(100.0f) <= eff5) {// 6.3%. lower STAT + c.getActionSender().sendMessage( + "That tasted very dodgy. You feel very ill."); + c.getActionSender().sendMessage( + "Eating the kebab has done damage to some of your stats."); + for (int j = 0; j < 2; j++) { + c.playerLevel[j] -= 2; // Fix this l0l + c.getPlayerAssistant().refreshSkill(j); + } + } + + } + + /** + * Eatting the kebab + */ + public static void eat(Client c, int slot) { + if (System.currentTimeMillis() - c.foodDelay >= 1500 + && c.playerLevel[3] > 0) { + if (c.playerLevel[3] == c.getLevelForXP(c.playerXP[3])) { // If + // full + // health, + // does + // nothing + // but + // eat. + c.getCombatAssistant().resetPlayerAttack(); + c.getActionSender().sendMessage("You eat the kebab."); + c.attackTimer += 2; + c.startAnimation(829); + c.getItemAssistant().deleteItem(Kebab, slot, 1); + c.getActionSender().sendSound(317, 100, 0); + c.foodDelay = System.currentTimeMillis(); + c.getPlayerAssistant().refreshSkill(3); + return; + } + c.getCombatAssistant().resetPlayerAttack(); + c.getActionSender().sendMessage("You eat the kebab."); + effects(c); + c.attackTimer += 2; + c.startAnimation(829); + c.getItemAssistant().deleteItem(Kebab, slot, 1); + c.getActionSender().sendSound(317, 100, 0); + c.foodDelay = System.currentTimeMillis(); + c.getPlayerAssistant().refreshSkill(3); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/consumables/Potions.java b/2006Redone Server/src/redone/game/content/consumables/Potions.java new file mode 100644 index 00000000..27f4ed13 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/consumables/Potions.java @@ -0,0 +1,473 @@ +package redone.game.content.consumables; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.Item; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class Potions { + + private final Client c; + + public Potions(Client c) { + this.c = c; + } + + public void handlePotion(int itemId, int slot) { + if (c.duelRule[5]) { + c.getActionSender().sendMessage( + "You may not drink potions in this duel."); + return; + } + if (c.isDead || c.playerLevel[3] <= 0) { + return; + } + if (System.currentTimeMillis() - c.potDelay >= 1200) { + c.potDelay = System.currentTimeMillis(); + c.foodDelay = System.currentTimeMillis(); + c.getCombatAssistant().resetPlayerAttack(); + c.attackTimer++; + c.getActionSender().sendMessage( + "You drink some of your " + Item.getItemName(itemId) + "."); + c.startAnimation(829); + final String item = Item.getItemName(itemId); + String m = ""; + if (item.endsWith("(4)")) { + m = "You have 3 doses of potion left."; + } else if (item.endsWith("(3)")) { + m = "You have 2 doses of potion left."; + } else if (item.endsWith("(2)")) { + m = "You have 1 dose of potion left."; + } else if (item.endsWith("(1)")) { + m = "You have finished your potion."; + } + final String m1 = m; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getActionSender().sendMessage(m1); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + switch (itemId) { + case 3040: + drinkStatPotion(itemId, 3042, slot, 6, false); + break; + case 3042: + drinkStatPotion(itemId, 3044, slot, 6, false); + break; + case 3044: + drinkStatPotion(itemId, 3046, slot, 6, false); + break; + case 3046: + drinkStatPotion(itemId, 229, slot, 6, false); + break; + case 2450: + doTheBrewzam(itemId, 189, slot); + break; + case 189: + doTheBrewzam(itemId, 191, slot); + break; + case 191: + doTheBrewzam(itemId, 193, slot); + break; + case 193: + doTheBrewzam(itemId, 229, slot); + break; + case 6685: // brews + doTheBrew(itemId, 6687, slot); + break; + case 6687: + doTheBrew(itemId, 6689, slot); + break; + case 6689: + doTheBrew(itemId, 6691, slot); + break; + case 6691: + doTheBrew(itemId, 229, slot); + break; + case 2436: + drinkStatPotion(itemId, 145, slot, 0, true); // sup attack + break; + case 145: + drinkStatPotion(itemId, 147, slot, 0, true); + break; + case 147: + drinkStatPotion(itemId, 149, slot, 0, true); + break; + case 149: + drinkStatPotion(itemId, 229, slot, 0, true); + break; + case 2440: + drinkStatPotion(itemId, 157, slot, 2, true); // sup str + break; + case 157: + drinkStatPotion(itemId, 159, slot, 2, true); + break; + case 159: + drinkStatPotion(itemId, 161, slot, 2, true); + break; + case 161: + drinkStatPotion(itemId, 229, slot, 2, true); + break; + case 2444: + drinkStatPotion(itemId, 169, slot, 4, false); // range pot + break; + case 169: + drinkStatPotion(itemId, 171, slot, 4, false); + break; + case 171: + drinkStatPotion(itemId, 173, slot, 4, false); + break; + case 173: + drinkStatPotion(itemId, 229, slot, 4, false); + break; + case 2432: + drinkStatPotion(itemId, 133, slot, 1, false); // def pot + break; + case 133: + drinkStatPotion(itemId, 135, slot, 1, false); + break; + case 135: + drinkStatPotion(itemId, 137, slot, 1, false); + break; + case 137: + drinkStatPotion(itemId, 229, slot, 1, false); + break; + case 113: + drinkStatPotion(itemId, 115, slot, 2, false); // str pot + break; + case 115: + drinkStatPotion(itemId, 117, slot, 2, false); + break; + case 117: + drinkStatPotion(itemId, 119, slot, 2, false); + break; + case 119: + drinkStatPotion(itemId, 229, slot, 2, false); + break; + case 2428: + drinkStatPotion(itemId, 121, slot, 0, false); // attack + // pot + break; + case 121: + drinkStatPotion(itemId, 123, slot, 0, false); + break; + case 123: + drinkStatPotion(itemId, 125, slot, 0, false); + break; + case 125: + drinkStatPotion(itemId, 229, slot, 0, false); + break; + case 2442: + drinkStatPotion(itemId, 163, slot, 1, true); // super def + // pot + break; + case 163: + drinkStatPotion(itemId, 165, slot, 1, true); + break; + case 165: + drinkStatPotion(itemId, 167, slot, 1, true); + break; + case 167: + drinkStatPotion(itemId, 229, slot, 1, true); + break; + case 3024: + drinkPrayerPot(itemId, 3026, slot, true); // sup restore + break; + case 3026: + drinkPrayerPot(itemId, 3028, slot, true); + break; + case 3028: + drinkPrayerPot(itemId, 3030, slot, true); + break; + case 3030: + drinkPrayerPot(itemId, 229, slot, true); + break; + case 10925: + drinkPrayerPot(itemId, 10927, slot, true); // sanfew + // serums + curePoison(300000); + break; + case 10927: + drinkPrayerPot(itemId, 10929, slot, true); + curePoison(300000); + break; + case 10929: + drinkPrayerPot(itemId, 10931, slot, true); + curePoison(300000); + break; + case 10931: + drinkPrayerPot(itemId, 229, slot, true); + curePoison(300000); + break; + case 2434: + drinkPrayerPot(itemId, 139, slot, false); // pray pot + break; + case 139: + drinkPrayerPot(itemId, 141, slot, false); + break; + case 141: + drinkPrayerPot(itemId, 143, slot, false); + break; + case 143: + drinkPrayerPot(itemId, 229, slot, false); + break; + case 2446: + drinkAntiPoison(itemId, 175, slot, 30000); // anti poisons + break; + case 175: + drinkAntiPoison(itemId, 177, slot, 30000); + break; + case 177: + drinkAntiPoison(itemId, 179, slot, 30000); + break; + case 179: + drinkAntiPoison(itemId, 229, slot, 30000); + break; + case 2448: + drinkAntiPoison(itemId, 181, slot, 300000); // anti + // poisons + break; + case 181: + drinkAntiPoison(itemId, 183, slot, 300000); + break; + case 183: + drinkAntiPoison(itemId, 185, slot, 300000); + break; + case 185: + drinkAntiPoison(itemId, 229, slot, 300000); + break; + /** Energy Potions **/ + case 3008: + energyPotion(itemId, 3010, slot); + break; + case 3010: + energyPotion(itemId, 3012, slot); + break; + case 3012: + energyPotion(itemId, 3014, slot); + break; + case 3014: + energyPotion(itemId, 229, slot); + break; + /** Super Energy Potions **/ + case 3016: + energyPotion(itemId, 3018, slot); + break; + case 3018: + energyPotion(itemId, 3020, slot); + break; + case 3020: + energyPotion(itemId, 3022, slot); + break; + case 3022: + energyPotion(itemId, 229, slot); + break; + case 2452: + antifirePot(itemId, 2454, slot); + break; + case 2454: + antifirePot(itemId, 2456, slot); + break; + case 2456: + antifirePot(itemId, 2458, slot); + break; + case 2458: + antifirePot(itemId, 229, slot); + break; + } + } + } + + private void energyPotion(int itemId, int replaceItem, int slot) { + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + if (itemId >= 3008 && itemId <= 3014) { + c.playerEnergy += 20; + } else { + c.playerEnergy += 40; + } + if (c.playerEnergy > 100) { + c.playerEnergy = 100; + } + c.getPlayerAssistant().sendFrame126(c.playerEnergy + "%", 149); + } + + public void drinkAntiPoison(int itemId, int replaceItem, int slot, + long delay) { + // c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + curePoison(delay); + } + + public void curePoison(long delay) { + c.poisonDamage = 0; + c.poisonImmune = delay; + c.lastPoisonSip = System.currentTimeMillis(); + } + + public void drinkStatPotion(int itemId, int replaceItem, int slot, + int stat, boolean sup) { + // c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + enchanceStat(stat, sup); + } + + public void drinkPrayerPot(int itemId, int replaceItem, int slot, + boolean rest) { + // c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + c.playerLevel[5] += c.getLevelForXP(c.playerXP[5]) * .33; + if (rest) { + c.playerLevel[5] += 1; + } + if (c.playerLevel[5] > c.getLevelForXP(c.playerXP[5])) { + c.playerLevel[5] = c.getLevelForXP(c.playerXP[5]); + } + c.getPlayerAssistant().refreshSkill(5); + if (rest) { + restoreStats(); + } + } + + public void restoreStats() { + for (int j = 0; j <= 6; j++) { + if (j == 5 || j == 3) { + continue; + } + if (c.playerLevel[j] < c.getLevelForXP(c.playerXP[j])) { + c.playerLevel[j] += c.getLevelForXP(c.playerXP[j]) * .33; + if (c.playerLevel[j] > c.getLevelForXP(c.playerXP[j])) { + c.playerLevel[j] = c.getLevelForXP(c.playerXP[j]); + } + c.getPlayerAssistant().refreshSkill(j); + c.getActionSender().setSkillLevel(j, c.playerLevel[j], + c.playerXP[j]); + } + } + } + + public void doTheBrewzam(int itemId, int replaceItem, int slot) { + // c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + int[] toDecrease = { 1, 3 }; + for (int tD : toDecrease) { + c.playerLevel[tD] -= getBrewStat(tD, .10); + if (c.playerLevel[tD] < 0) { + c.playerLevel[tD] = 1; + } + c.getPlayerAssistant().refreshSkill(tD); + c.getActionSender().setSkillLevel(tD, c.playerLevel[tD], + c.playerXP[tD]); + } + c.playerLevel[0] += getBrewStat(0, .20); + if (c.playerLevel[0] > c.getLevelForXP(c.playerXP[0]) * 1.2 + 1) { + c.playerLevel[0] = (int) (c.getLevelForXP(c.playerXP[0]) * 1.2); + } + c.playerLevel[2] += getBrewStat(2, .12); + if (c.playerLevel[2] > c.getLevelForXP(c.playerXP[2]) * 1.2 + 1) { + c.playerLevel[2] = (int) (c.getLevelForXP(c.playerXP[2]) * 1.2); + } + c.playerLevel[5] += getBrewStat(5, .10); + if (c.playerLevel[5] > c.getLevelForXP(c.playerXP[5]) * 1.2 + 1) { + c.playerLevel[5] = (int) (c.getLevelForXP(c.playerXP[5]) * 1.2); + } + c.getPlayerAssistant().refreshSkill(0); + c.getPlayerAssistant().refreshSkill(2); + c.getPlayerAssistant().refreshSkill(5); + c.hitUpdateRequired = true; + c.hitDiff = 9; + } + + public void doTheBrew(int itemId, int replaceItem, int slot) { + if (c.duelRule[6]) { + c.getActionSender() + .sendMessage("You may not eat in this duel."); + return; + } + // c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.getItemAssistant().resetItems(3214); + int[] toDecrease = { 0, 2, 4, 6 }; + for (int tD : toDecrease) { + c.playerLevel[tD] -= getBrewStat(tD, .10); + if (c.playerLevel[tD] < 0) { + c.playerLevel[tD] = 1; + } + c.getPlayerAssistant().refreshSkill(tD); + c.getActionSender().setSkillLevel(tD, c.playerLevel[tD], + c.playerXP[tD]); + } + c.playerLevel[1] += getBrewStat(1, .20); + if (c.playerLevel[1] > c.getLevelForXP(c.playerXP[1]) * 1.2 + 1) { + c.playerLevel[1] = (int) (c.getLevelForXP(c.playerXP[1]) * 1.2); + } + c.getPlayerAssistant().refreshSkill(1); + + c.playerLevel[3] += getBrewStat(3, .15); + if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]) * 1.17 + 1) { + c.playerLevel[3] = (int) (c.getLevelForXP(c.playerXP[3]) * 1.17); + } + c.getPlayerAssistant().refreshSkill(3); + } + + public void enchanceStat(int skillID, boolean sup) { + c.playerLevel[skillID] += getBoostedStat(skillID, sup); + c.getPlayerAssistant().refreshSkill(skillID); + } + + public void antifirePot(int itemId, int replaceItem, int slot) { + c.startAnimation(829); + c.playerItems[slot] = replaceItem + 1; + c.antiFirePot = true; + c.antiFirePotion(); + c.getActionSender().sendMessage( + "Your immunity against dragon fire has been increased."); + c.getItemAssistant().resetItems(3214); + + } + + public int getBrewStat(int skill, double amount) { + return (int) (c.getLevelForXP(c.playerXP[skill]) * amount); + } + + public int getBoostedStat(int skill, boolean sup) { + int increaseBy; + if (sup) { + increaseBy = (int) (c.getLevelForXP(c.playerXP[skill]) * .20); + } else { + increaseBy = (int) (c.getLevelForXP(c.playerXP[skill]) * .13) + 1; + } + if (c.playerLevel[skill] + increaseBy > c + .getLevelForXP(c.playerXP[skill]) + increaseBy + 1) { + return c.getLevelForXP(c.playerXP[skill]) + increaseBy + - c.playerLevel[skill]; + } + return increaseBy; + } + + public boolean isPotion(int itemId) { + String name = ItemAssistant.getItemName(itemId); + return name.contains("(4)") || name.contains("(3)") + || name.contains("(2)") || name.contains("(1)"); + } + + public boolean potionNames(int itemId) { + String name = ItemAssistant.getItemName(itemId); + return name.endsWith("potion(4)") || name.endsWith("potion(3)") + || name.endsWith("potion(2)") || name.endsWith("potion(1)") + || name.contains("saradomin brew") + || name.contains("zamorak brew"); + } +} diff --git a/2006Redone Server/src/redone/game/content/guilds/Guilds.java b/2006Redone Server/src/redone/game/content/guilds/Guilds.java new file mode 100644 index 00000000..5789db46 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/guilds/Guilds.java @@ -0,0 +1,185 @@ +package redone.game.content.guilds; + +import redone.Constants; +import redone.game.content.quests.QuestAssistant; +import redone.game.globalworldobjects.PassDoor; +import redone.game.objects.impl.Climbing; +import redone.game.objects.impl.UseOther; +import redone.game.players.Client; + +/** + * Guilds Class + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class Guilds { + + private static boolean hasCompletedLegends = false; + + public static void attemptGuild(Client c, int objectId) { + if (!Constants.GUILDS) { + c.getActionSender().sendMessage("Guilds are currently disabled."); + return; + } + if (checkRequirments(c, objectId)) { + c.getActionSender().sendMessage("You pass through the guild."); + movePlayer(c, objectId); + } + } + + public static void movePlayer(Client c, int objectId) { + switch (objectId) { + case 2514: // Range Guild + if (c.absX == 2659 && c.absY == 3438) { + PassDoor.passThroughDoor(c, objectId, 1, 2, 9, -1, 1, 0); + } else if (c.absX == 2658 && c.absY == 3437) { + PassDoor.passThroughDoor(c, objectId, 1, 2, 9, -1, 1, 0); + } else if (c.absX == 2658 && c.absY == 3439) { + PassDoor.passThroughDoor(c, objectId, 1, 2, 9, 1, -1, 0); + } else if (c.absX == 2657 && c.absY == 3438) { + PassDoor.passThroughDoor(c, objectId, 1, 2, 9, 1, -1, 0); + } + break; + case 1805: // Champions Guild + if (c.absY == 3362 && c.absX != 3192 && c.absX != 3190) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } else if (c.absY == 3363 && c.absX != 3192 && c.absX != 3190) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } + break; + case 2641: // Monastery + if (c.heightLevel == 0) { + Climbing.climbUp(c); + } else if (c.heightLevel == 1) { + Climbing.climbDown(c); + } + break; + case 2712: // Cooks Guild + if (c.absY == 3443) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } else if (c.absY == 3444) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } + break; + case 2647: // Crafting Guild + if (c.absY == 3289) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } else if (c.absY == 3288) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } + break; + case 2113: // Mining Guild + UseOther.useDown(c, objectId); + break; + case 1755: // Mining Guild + UseOther.useUp(c, objectId); + break; + case 2025: // Fishing Guild + if (c.absY == 3393) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } else if (c.absY == 3394) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } + break; + case 1600: // Wizards Guild + case 1601: + if (c.absX == 2597) { + c.getPlayerAssistant().movePlayer(c.absX - 1, c.absY, 0); + } else if (c.absX == 2596) { + c.getPlayerAssistant().movePlayer(c.absX + 1, c.absY, 0); + } + break; + case 2624: // Heroes Guild + case 2625: + if (c.absX == 2902) { + c.getPlayerAssistant().movePlayer(c.absX - 1, c.absY, 0); + } else if (c.absX == 2901) { + c.getPlayerAssistant().movePlayer(c.absX + 1, c.absY, 0); + } + break; + case 2392: // Legends Guild + case 2391: + if (c.absY == 3349) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } else if (c.absY == 3350) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } + break; + default: + c.getActionSender().sendMessage( + "You can't access this guild from here."); + break; + } + } + + public static boolean checkRequirments(Client c, int objectId) { + switch (objectId) { + case 1805: // Champions Guild + if (c.questPoints < QuestAssistant.MAXIMUM_QUESTPOINTS) { + c.getDialogueHandler().sendStatement("You need " + QuestAssistant.MAXIMUM_QUESTPOINTS + " quest points to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2392: + case 2391: + if (hasCompletedLegends == false && c.playerRights < 3) { + c.getDialogueHandler().sendStatement("You need to complete Legends Quest to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2641: // Prayer Guild + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[5]) < 31) { + c.getDialogueHandler().sendStatement("You need 31 prayer to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2712: // Cooking Guild + if (c.playerLevel[c.playerCooking] < 32 || c.playerEquipment[c.playerHat] != 1949) { + c.getDialogueHandler().sendStatement("You need 32 cooking and a chefs hat to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2647: // Crafting Guild + if (c.playerLevel[c.playerCrafting] < 40 || c.playerEquipment[c.playerChest] != 1757) { + c.getDialogueHandler().sendStatement("You need 40 Crafting and a Brown Apron to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2113: // Mining Guild + if (c.playerLevel[c.playerMining] < 60) { + c.getDialogueHandler().sendStatement("You need 60 Mining to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2025: // Fishing Guild + if (c.playerLevel[c.playerFishing] < 68) { + c.getDialogueHandler().sendStatement("You need 68 Fishing to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 1600: + case 1601: // Wizards Guild + if (c.playerLevel[c.playerMagic] < 66) { + c.getDialogueHandler().sendStatement("You need 66 Magic to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + case 2514: + if (c.playerLevel[c.playerRanged] < 40) { // Ranging Guild + c.getDialogueHandler().sendStatement("You need 40 Range to enter this guild!"); + c.nextChat = 0; + return false; + } + break; + } + return true; + } +} diff --git a/2006Redone Server/src/redone/game/content/guilds/impl/RangersGuild.java b/2006Redone Server/src/redone/game/content/guilds/impl/RangersGuild.java new file mode 100644 index 00000000..ac3dcf88 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/guilds/impl/RangersGuild.java @@ -0,0 +1,363 @@ +package redone.game.content.guilds.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.combat.range.RangeData; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Rangers Guild + * + * @author Aintaro + * @edit Haile N. + * + */ +public class RangersGuild { + + public final int + ARROWS_REQ = 882, + HIT_CHANCE = 55, + RANGED_LV = 4; + + public final String + MISSED = "Missed!", + BLACK = "Hit Black!", + YELLOW = "Hit Yellow!", + BLUE = "Hit Blue!", + RED = "Hit Red!", + BULLSEYE = "Bulls-Eye"; + + public int + arrowsLeft = 0, + playerScore = 0, + hitChance; + + public boolean isFiringTarget; + + private Client c; + + public RangersGuild(Client c) { + this.c = c; + } + + public void fireAtTarget() { + if(isFiringTarget) { + return; + } + hitChance = Misc.random(HIT_CHANCE)+Misc.random(c.playerLevel[RANGED_LV]); + if (arrowsLeft != 0) { + for (int bowId : RangeData.BOWS) { + if(c.playerEquipment[c.playerWeapon] == bowId) { + c.usingBow = true; + if (c.playerEquipment[c.playerArrows] == ARROWS_REQ && c.usingBow) { + if (isInTargetArea()) { + if (hitChance >= 10) { + c.getPlayerAssistant().removeAllWindows(); + c.startAnimation(426); + isFiringTarget = true; + //c.getPlayerAction().setAction(true); + //c.getPlayerAction().canWalk(false); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (hitChance >= 10 && hitChance <= 20) { + playerScore += 10; + sendConfiguration(80 + Misc.random(10), -60 + Misc.random(90)); + c.getPlayerAssistant().sendFrame126(BLACK, 567); + c.getPlayerAssistant().addSkillXP(5, 4); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } else if (hitChance >= 20 && hitChance < 30) { + playerScore += 20; + sendConfiguration(-70 + Misc.random(10),10 - Misc.random(40)); + c.getPlayerAssistant().sendFrame126(BLUE,567); + c.getPlayerAssistant().addSkillXP(10, 4); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } else if (hitChance >= 30 && hitChance < 50) { + playerScore += 30; + sendConfiguration(-30 - Misc.random(15),10 - Misc.random(25)); + c.getPlayerAssistant().sendFrame126(RED, 567); + c.getPlayerAssistant().addSkillXP(15, 4); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } else if (hitChance >= 50 && hitChance < 75) { + playerScore += 50; + sendConfiguration(5 - Misc.random(20),0 - Misc.random(20)); + c.getPlayerAssistant().sendFrame126(YELLOW, 567); + c.getPlayerAssistant().addSkillXP(15, 4); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } else if (hitChance >= 75) { + playerScore += 100; + sendConfiguration(0, 0); + c.getPlayerAssistant().sendFrame126(BULLSEYE, 567); + c.getPlayerAssistant().addSkillXP(50, 4); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } else { + c.getPlayerAssistant().sendFrame126(MISSED, 567); + sendConfiguration(1200, 1200); + c.getItemAssistant().deleteArrow(); + //c.getPlayerAction().setAction(false); + //c.getPlayerAction().canWalk(true); + } + container.stop(); + } + @Override + public void stop() { + isFiringTarget = false; + } + }, 3); + } + } else { + c.getDialogueHandler().sendStatement("You can't shoot from here."); + } + } else { + c.getDialogueHandler().sendStatement("You need some bronze arrows and a bow to shoot the target."); + c.nextChat = 0; + }}} + } else { + c.getDialogueHandler().sendStatement("You should talk to the competition judge."); + c.nextChat = 0; + } + } + + private void sendConfiguration(int xPos, int yPos) { + switch (arrowsLeft) { + case 1: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(1200, 1200, 538); + c.getPlayerAssistant().sendFrame70(1200, 1200, 557); + c.getPlayerAssistant().sendFrame70(1200, 1200, 559); + c.getPlayerAssistant().sendFrame70(1200, 1200, 560); + c.getPlayerAssistant().sendFrame70(1200, 1200, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 2: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(1200, 1200, 557); + c.getPlayerAssistant().sendFrame70(1200, 1200, 559); + c.getPlayerAssistant().sendFrame70(1200, 1200, 560); + c.getPlayerAssistant().sendFrame70(1200, 1200, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 3: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(1200, 1200, 559); + c.getPlayerAssistant().sendFrame70(1200, 1200, 560); + c.getPlayerAssistant().sendFrame70(1200, 1200, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 4: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(1200, 1200, 560); + c.getPlayerAssistant().sendFrame70(1200, 1200, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 5: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(1200, 1200, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 6: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(0, 0, 561); + c.getPlayerAssistant().sendFrame70(1200, 1200, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 7: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(0, 0, 561); + c.getPlayerAssistant().sendFrame70(0, 0, 562); + c.getPlayerAssistant().sendFrame70(1200, 1200, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 8: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(0, 0, 561); + c.getPlayerAssistant().sendFrame70(0, 0, 562); + c.getPlayerAssistant().sendFrame70(0, 0, 563); + c.getPlayerAssistant().sendFrame70(1200, 1200, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 9: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(0, 0, 561); + c.getPlayerAssistant().sendFrame70(0, 0, 562); + c.getPlayerAssistant().sendFrame70(0, 0, 563); + c.getPlayerAssistant().sendFrame70(0, 0, 564); + c.getPlayerAssistant().sendFrame70(1200, 1200, 565); + c.getPlayerAssistant().sendFrame70(1200, 1200, 566); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + + case 10: + arrowsLeft--; + c.getPlayerAssistant().sendFrame70(0, 0, 538); + c.getPlayerAssistant().sendFrame70(0, 0, 557); + c.getPlayerAssistant().sendFrame70(0, 0, 559); + c.getPlayerAssistant().sendFrame70(0, 0, 560); + c.getPlayerAssistant().sendFrame70(0, 0, 561); + c.getPlayerAssistant().sendFrame70(0, 0, 562); + c.getPlayerAssistant().sendFrame70(0, 0, 563); + c.getPlayerAssistant().sendFrame70(0, 0, 564); + c.getPlayerAssistant().sendFrame70(0, 0, 565); + c.getPlayerAssistant().sendFrame126("" + playerScore, 551); + c.getPlayerAssistant().sendFrame70(xPos, yPos, 536); + c.getPlayerAssistant().showInterface(446); + break; + } + } + + public boolean isInTargetArea() { + if (c.absX >= 2669 && c.absX <= 2674 && c.absY >= 3415 && c.absY <= 3421) { + return true; + } + return false; + } + + public void exchangePoints() { + if (arrowsLeft == 0 && playerScore > 0) { + if(c.getItemAssistant().freeSlots() > 0) { + int ticketsAmt = playerScore / 10; + c.getItemAssistant().addItem(1464, ticketsAmt); + c.getDialogueHandler().sendNpcChat2("Well done. Your score is : " + playerScore + ".", "You have earned " + ticketsAmt + " Archery tickets.", c.talkingNpc, "Tutor"); + playerScore = 0; + c.nextChat = 0; + } else { + c.getDialogueHandler().sendStatement("You need 1 free slot to exchange tickets."); + c.nextChat = 0; + } + } else { + c.getDialogueHandler().sendStatement("You still have " + arrowsLeft + " shots left."); + c.nextChat = 0; + } + } + + public void howAmIDoing() { + if (playerScore == 0) { + c.getDialogueHandler().sendNpcChat2("You haven't started yet. Stand behind the hay bales and", "shoot those arrows at the targets.", c.talkingNpc, "Tutor"); + c.nextChat = 0; + } else { + c.getDialogueHandler().sendNpcChat2("Your score is : " + playerScore, "Your doing very well!", c.talkingNpc, "Tutor"); + c.nextChat = 0; + } + } + + public void buyArrows() { + if (arrowsLeft == 0) { + if (c.getItemAssistant().playerHasItem(995, 200)) { + if (c.getItemAssistant().freeSlots() > 1) { + arrowsLeft = 10; + c.getItemAssistant().deleteItem2(995, 200); + c.getItemAssistant().addItem(ARROWS_REQ, 10); + c.getItemAssistant().addItem(841, 1); + c.getDialogueHandler().sendStatement("The archer hands you 10 bronze arrows and a bow."); + c.nextChat = 0; + } else { + c.getDialogueHandler().sendStatement("You need 2 free slots to receive arrows and a bow."); + } + } else { + c.getDialogueHandler().sendStatement("You need at least 200 gp to buy 10 arrows and a bow."); + c.nextChat = 0; + } + } else { + c.getDialogueHandler().sendStatement("You still have " + arrowsLeft + " shots left."); + c.nextChat = 0; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/Barrows.java b/2006Redone Server/src/redone/game/content/minigames/Barrows.java new file mode 100644 index 00000000..a385e783 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/Barrows.java @@ -0,0 +1,281 @@ +package redone.game.content.minigames; + +import redone.game.content.quests.QuestRewards; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class Barrows { + + public Barrows(Client c) { + this.c = c; + } + + private Client c; + + /** + * Variables used for reward. + */ + public static int Barrows[] = {4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, 4732, 4734, 4736, 4738, 4745, 4747, 4749, 4751, 4753, 4755, 4757, 4759}; + public static int Runes[] = {554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565}; + public static int Pots[] = {121, 123, 125, 127, 119, 2428, 2430, 2434, 2432, 2444}; + /** + * Getting random barrow pieces. + * @return + */ + public int randomBarrows() { + return Barrows[(int)(Math.random()*Barrows.length)]; + } + + /** + * Getting random runes. + * @return + */ + public int randomRunes() { + return Runes[(int) (Math.random()*Runes.length)]; + } + + /** + * Getting random pots. + * @return + */ + public int randomPots() { + return Pots[(int) (Math.random()*Pots.length)]; + } + + /** + * All of the barrow data. + */ + public static int[][] barrowData = { + /** ID Coffin X Y Stair X Y */ + {2026, 6771, 3556, 9716, 6703, 3574, 3297}, /**Dharoks*/ + {2030, 6823, 3575, 9706, 6707, 3557, 3297}, /**Veracs*/ + {2025, 6821, 3557, 9700, 6702, 3565, 3288}, /**Ahrims*/ + {2029, 6772, 3568, 9685, 6706, 3554, 3282}, /**Torags*/ + {2027, 6773, 3537, 9703, 6704, 3577, 3282}, /**Guthans*/ + {2028, 6822, 3549, 9682, 6705, 3566, 3275} /**Karils*/ + }; + + /** + * All of the spade data + */ + public int[][] spadeData = { + /** X Y X1 Y1 toX toY */ + {3553, 3301, 3561, 3294, 3578, 9706}, + {3550, 3287, 3557, 3278, 3568, 9683}, + {3561, 3292, 3568, 3285, 3557, 9703}, + {3570, 3302, 3579, 3293, 3556, 9718}, + {3571, 3285, 3582, 3278, 3534, 9704}, + {3562, 3279, 3569, 3273, 3546, 9684}, + }; + + /** + * Spade digging data + */ + public void spadeDigging() { + if(c.inArea(spadeData[0][0], spadeData[0][1], spadeData[0][2], spadeData[0][3])) { + c.getPlayerAssistant().movePlayer(spadeData[0][4], spadeData[0][5], 3); + } else if(c.inArea(spadeData[1][0], spadeData[1][1], spadeData[1][2], spadeData[1][3])) { + c.getPlayerAssistant().movePlayer(spadeData[1][4], spadeData[1][5], 3); + } else if(c.inArea(spadeData[2][0], spadeData[2][1], spadeData[2][2], spadeData[2][3])) { + c.getPlayerAssistant().movePlayer(spadeData[2][4], spadeData[2][5], 3); + } else if(c.inArea(spadeData[3][0], spadeData[3][1], spadeData[3][2], spadeData[3][3])) { + c.getPlayerAssistant().movePlayer(spadeData[3][4], spadeData[3][5], 3); + } else if(c.inArea(spadeData[4][0], spadeData[4][1], spadeData[4][2], spadeData[4][3])) { + c.getPlayerAssistant().movePlayer(spadeData[4][4], spadeData[4][5], 3); + } else if(c.inArea(spadeData[5][0], spadeData[5][1], spadeData[5][2], spadeData[5][3])) { + c.getPlayerAssistant().movePlayer(spadeData[5][4], spadeData[5][5], 3); + } else if (c.absX == 2999 && c.absY == 3375) { + c.getDialogueHandler().sendDialogues(1007, c.npcType); + } else if (c.absX == 2996 && c.absY == 3377) { + c.getDialogueHandler().sendDialogues(1007, c.npcType); + } else if (c.absX == 3005 && c.absY == 3376) { + c.getDialogueHandler().sendDialogues(1007, c.npcType); + } else if (c.absX == 2999 && c.absY == 3383 && c.pirateTreasure == 4) { + NpcHandler.spawnNpc(c, 1217, c.absX + Misc.random(1), c.absY + Misc.random(1), c.heightLevel, 0, 10, 2, 5, 5, true, true); + c.getDialogueHandler().sendNpcChat1("First moles, now this! Take this, vanda!", c.talkingNpc, "Gardener"); + c.pirateTreasure = 5; + } else if (c.absX == 2999 && c.absY == 3383 && c.pirateTreasure == 5) { + QuestRewards.pirateFinish(c); + } else { + c.getActionSender().sendMessage("You don't find anything..."); + } + } + + /** + * Stair data + */ + public void useStairs() { + if (c.isInBarrows2()) { + switch(c.objectId) { + case 6703: + c.getPlayerAssistant().movePlayer(barrowData[0][5], barrowData[0][6], 0); + break; + case 6707: + c.getPlayerAssistant().movePlayer(barrowData[1][5], barrowData[1][6], 0); + break; + case 6702: + c.getPlayerAssistant().movePlayer(barrowData[2][5], barrowData[2][6], 0); + break; + case 6706: + c.getPlayerAssistant().movePlayer(barrowData[3][5], barrowData[3][6], 0); + break; + case 6704: + c.getPlayerAssistant().movePlayer(barrowData[4][5], barrowData[4][6], 0); + break; + case 6705: + c.getPlayerAssistant().movePlayer(barrowData[5][5], barrowData[5][6], 0); + break; + } + } else { + c.getActionSender().sendMessage("You have to be in barrows to do this!"); + } + } + + + public void checkCoffins() { + if (c.isInBarrows2()) { + if (c.barrowsKillCount < 5) { + c.getActionSender().sendMessage("You still have to kill the following brothers:"); + if (c.barrowsNpcs[2][1] == 0) { + c.getActionSender().sendMessage("- Karils"); + } + if (c.barrowsNpcs[3][1] == 0) { + c.getActionSender().sendMessage("- Guthans"); + } + if (c.barrowsNpcs[1][1] == 0) { + c.getActionSender().sendMessage("- Torags"); + } + if (c.barrowsNpcs[5][1] == 0) { + c.getActionSender().sendMessage("- Ahrims"); + } + if (c.barrowsNpcs[0][1] == 0) { + c.getActionSender().sendMessage("- Veracs"); + } + c.getPlayerAssistant().removeAllWindows(); + } else if (c.barrowsKillCount == 5) { + NpcHandler.spawnNpc(c, 2026, c.getX(), c.getY()-1, 3, 0, 120, 25, 200, 200, true, true); + c.getPlayerAssistant().removeAllWindows(); + } else if (c.barrowsKillCount > 5) { + c.getPlayerAssistant().movePlayer(3551, 9694, 0); + c.getActionSender().sendMessage("You teleport to the chest."); + c.getPlayerAssistant().removeAllWindows(); + } + } else { + c.getActionSender().sendMessage("You have to be in barrows to do this!"); + } + } + + /** + * Grabs the reward based on random chance depending on what your killcount is. + */ + public void reward() { + if (c.isInBarrows2()) { + c.getItemAssistant().addItem(randomRunes(), Misc.random(150) + 100); + c.getItemAssistant().addItem(randomRunes(), Misc.random(150) + 100); + c.getItemAssistant().addItem(randomPots(), 1); + if (c.barrowsKillCount >= 6 && c.barrowsKillCount <= 24) { + if (Misc.random(10) == 1) + c.getItemAssistant().addItem(randomBarrows(), 1); + } else if (c.barrowsKillCount >= 25 && c.barrowsKillCount <= 49) { + if (Misc.random(8) == 1) + c.getItemAssistant().addItem(randomBarrows(), 1); + } else if (c.barrowsKillCount >= 50 && c.barrowsKillCount <= 99) { + if (Misc.random(5) == 1) + c.getItemAssistant().addItem(randomBarrows(), 1); + } else if (c.barrowsKillCount >= 100 && c.barrowsKillCount <= 149) { + if (Misc.random(2) == 1) + c.getItemAssistant().addItem(randomBarrows(), 1); + } else if (c.barrowsKillCount >= 150) { + c.getItemAssistant().addItem(randomBarrows(), 1); + } + } else { + c.getActionSender().sendMessage("You have to be in barrows to do this!"); + } + } + + /** + * Checking if you have killed all of the brothers. + * @return + */ + public boolean checkBarrows() { + if (c.barrowsNpcs[2][1] == 2 || + c.barrowsNpcs[3][1] == 2 || + c.barrowsNpcs[1][1] == 2 || + c.barrowsNpcs[5][1] == 2 || + c.barrowsNpcs[0][1] == 2 || + c.barrowsNpcs[4][1] == 2) { + return true; + } + return false; + } + + /** + * Using the chest. + */ + public void useChest() { + if (c.isInBarrows2()) { + if (!checkBarrows()) { + c.getActionSender().sendMessage("You haven't killed all the brothers!"); + return; + } + if (c.barrowsKillCount == 5) { + if (c.barrowsNpcs[4][1] == 0) { + NpcHandler.spawnNpc(c, 2026, c.getX(), c.getY()-1, 0, 0, 120, 25, 200, 200, true, true); + } + c.barrowsNpcs[4][1] = 1; + } + if (c.barrowsKillCount > 5 && checkBarrows()) { + if (c.getItemAssistant().freeSlots() >= 4) { + reward(); + resetBarrows(); + } else { + c.getActionSender().sendMessage("You need more inventory slots to open the chest."); + } + } + } else { + c.getActionSender().sendMessage("You have to be in barrows to do this!"); + } + } + + public void fixAllBarrows() { + int totalCost = 0; + int cashAmount = c.getItemAssistant().getItemAmount(995); + for (int j = 0; j < c.playerItems.length; j++) { + boolean breakOut = false; + for (int i = 0; i < c.getItemAssistant().brokenBarrows.length; i++) { + if (c.playerItems[j] - 1 == c.getItemAssistant().brokenBarrows[i][1]) { + if (totalCost + 80000 > cashAmount) { + breakOut = true; + c.getActionSender().sendMessage("You have run out of money."); + break; + } else { + totalCost += 80000; + } + c.playerItems[j] = c.getItemAssistant().brokenBarrows[i][0] + 1; + } + } + if (breakOut) + break; + } + if (totalCost > 0) + c.getItemAssistant().deleteItem(995, c.getItemAssistant().getItemSlot(995), + totalCost); + } + + /** + * Resetting the minigame. + */ + public void resetBarrows() { + c.barrowsNpcs[0][1] = 0; + c.barrowsNpcs[1][1] = 0; + c.barrowsNpcs[2][1] = 0; + c.barrowsNpcs[3][1] = 0; + c.barrowsNpcs[4][1] = 0; + c.barrowsNpcs[5][1] = 0; + c.barrowsKillCount = 0; + c.getPlayerAssistant().movePlayer(3565, 3288, 0); + } + + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/minigames/Dueling.java b/2006Redone Server/src/redone/game/content/minigames/Dueling.java new file mode 100644 index 00000000..9dc94d01 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/Dueling.java @@ -0,0 +1,853 @@ +package redone.game.content.minigames; + +import java.util.concurrent.CopyOnWriteArrayList; + +import redone.Constants; +import redone.Server; +import redone.game.content.combat.prayer.PrayerDrain; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.items.GameItem; +import redone.game.items.Item; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.game.players.PlayerSave; +import redone.util.GameLogger; +import redone.util.Misc; + +public class Dueling { + + private final Client player; + + public Dueling(Client Client) { + player = Client; + } + + public CopyOnWriteArrayList otherStakedItems = new CopyOnWriteArrayList(); + public CopyOnWriteArrayList stakedItems = new CopyOnWriteArrayList(); + + public void requestDuel(int id) { + try { + if (id == player.playerId) { + return; + } + if (!CastleWars.deleteCastleWarsItems(player, id)) { + return; + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return; + } + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to do that."); + return; + } + resetDuel(); + resetDuelItems(); + player.duelingWith = id; + Client o = (Client) PlayerHandler.players[id]; + if (o == null) { + return; + } + /*if (player.connectedFrom.equals(o.connectedFrom)) { + player.getActionSender().sendMessage("You can't duel your own IP."); + return; + }*/ + player.duelRequested = true; + if (player.duelStatus == 0 && o.duelStatus == 0 && player.duelRequested + && o.duelRequested && player.duelingWith == o.getId() + && o.duelingWith == player.getId()) { + if (player.goodDistance(player.getX(), player.getY(), o.getX(), o.getY(), 2)) { + player.getDueling().openDuel(); + o.getDueling().openDuel(); + } else { + player.getActionSender() + .sendMessage( + "You need to get closer to your opponent to start the duel."); + } + + } else { + player.getActionSender().sendMessage("Sending duel request..."); + o.getActionSender().sendMessage(player.playerName + ":duelreq:"); + } + } catch (Exception e) { + Misc.println("Error requesting duel."); + } + } + + public void openDuel() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o == null) { + return; + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return; + } + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to do that."); + return; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return; + } + player.duelStatus = 1; + refreshduelRules(); + refreshDuelScreen(); + player.openDuel = true; + o.openDuel = true; + for (int i = 0; i < player.playerEquipment.length; i++) { + sendDuelEquipment(player.playerEquipment[i], player.playerEquipmentN[i], i); + } + player.getPlayerAssistant().sendFrame126("Dueling with: " + o.playerName + " (level-" + o.combatLevel + ")", 6671); + player.getPlayerAssistant().sendFrame126("", 6684); + player.getPlayerAssistant().sendFrame248(6575, 3321); + player.getItemAssistant().resetItems(3322); + } + + public void sendDuelEquipment(int itemId, int amount, int slot) { + synchronized (player) { + if (itemId != 0) { + player.getOutStream().createFrameVarSizeWord(34); + player.getOutStream().writeWord(13824); + player.getOutStream().writeByte(slot); + player.getOutStream().writeWord(itemId + 1); + + if (amount > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord(amount); + } else { + player.getOutStream().writeByte(amount); + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + } + + public void refreshduelRules() { + for (int i = 0; i < player.duelRule.length; i++) { + player.duelRule[i] = false; + } + player.getPlayerAssistant().sendFrame87(286, 0); + player.duelOption = 0; + } + + public void refreshDuelScreen() { + synchronized (player) { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o == null) { + return; + } + if(!player.openDuel && !o.openDuel) { + declineDuel(); + return; + } + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(6669); + player.getOutStream().writeWord(stakedItems.toArray().length); + int current = 0; + for (GameItem item : stakedItems) { + if (item.amount > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2(item.amount); + } else { + player.getOutStream().writeByte(item.amount); + } + if (item.id > Constants.ITEM_LIMIT || item.id < 0) { + item.id = Constants.ITEM_LIMIT; + } + player.getOutStream().writeWordBigEndianA(item.id + 1); + + current++; + } + + if (current < 27) { + for (int i = current; i < 28; i++) { + player.getOutStream().writeByte(1); + player.getOutStream().writeWordBigEndianA(-1); + } + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(6670); + player.getOutStream().writeWord( + o.getDueling().stakedItems.toArray().length); + current = 0; + for (GameItem item : o.getDueling().stakedItems) { + if (item.amount > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2(item.amount); + } else { + player.getOutStream().writeByte(item.amount); + } + if (item.id > Constants.ITEM_LIMIT || item.id < 0) { + item.id = Constants.ITEM_LIMIT; + } + player.getOutStream().writeWordBigEndianA(item.id + 1); + current++; + } + + if (current < 27) { + for (int i = current; i < 28; i++) { + player.getOutStream().writeByte(1); + player.getOutStream().writeWordBigEndianA(-1); + } + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public boolean stakeItem(int itemID, int fromSlot, int amount) { + + for (int i : Constants.ITEM_TRADEABLE) { + if (i == itemID || itemID >= 6864 && itemID <= 6882) { + player.getActionSender().sendMessage( + "You can't stake this item."); + return false; + } + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return false; + } + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to do that."); + return false; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return false; + } + if (!RareProtection.doOtherDupe(player, itemID)) { + return false; + } + if (amount <= 0) { + return false; + } + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if(!player.openDuel && !o.openDuel) { + declineDuel(); + return false; + } + if(!player.getItemAssistant().playerHasItem(itemID, amount)) + return false; + if (amount <= 0) + return false; + if (o == null) { + declineDuel(); + return false; + } + if (o.duelStatus <= 0 || player.duelStatus <= 0) { + declineDuel(); + o.getDueling().declineDuel(); + return false; + } + changeDuelStuff(); + if (!Item.itemStackable[itemID]) { + for (int a = 0; a < amount; a++) { + if (player.getItemAssistant().playerHasItem(itemID, 1)) { + stakedItems.add(new GameItem(itemID, 1)); + player.getItemAssistant().deleteItem(itemID, + player.getItemAssistant().getItemSlot(itemID), 1); + } + } + player.getItemAssistant().resetItems(3214); + player.getItemAssistant().resetItems(3322); + o.getItemAssistant().resetItems(3214); + o.getItemAssistant().resetItems(3322); + refreshDuelScreen(); + o.getDueling().refreshDuelScreen(); + player.getPlayerAssistant().sendFrame126("", 6684); + o.getPlayerAssistant().sendFrame126("", 6684); + } + if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) { + boolean found = false; + for (GameItem item : stakedItems) { + if (item.id == itemID) { + found = true; + item.amount += amount; + player.getItemAssistant().deleteItem(itemID, fromSlot, amount); + break; + } + } + if (!found) { + player.getItemAssistant().deleteItem(itemID, fromSlot, amount); + stakedItems.add(new GameItem(itemID, amount)); + } + } + + player.getItemAssistant().resetItems(3214); + player.getItemAssistant().resetItems(3322); + o.getItemAssistant().resetItems(3214); + o.getItemAssistant().resetItems(3322); + refreshDuelScreen(); + o.getDueling().refreshDuelScreen(); + player.getPlayerAssistant().sendFrame126("", 6684); + o.getPlayerAssistant().sendFrame126("", 6684); + return true; + } + + public boolean fromDuel(int itemID, int fromSlot, int amount) { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o == null) { + declineDuel(); + return false; + } + if(!player.openDuel && !o.openDuel) { + declineDuel(); + return false; + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return false; + } + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to do that."); + return false; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return false; + } + if (o.duelStatus <= 0 || player.duelStatus <= 0) { + declineDuel(); + o.getDueling().declineDuel(); + return false; + } + if (Item.itemStackable[itemID]) { + if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) { + player.getActionSender().sendMessage( + "You have too many rules set to remove that item."); + return false; + } + } + + changeDuelStuff(); + boolean goodSpace = true; + if (!Item.itemStackable[itemID]) { + for (int a = 0; a < amount; a++) { + for (GameItem item : stakedItems) { + if (item.id == itemID) { + if (!item.stackable) { + if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) { + goodSpace = false; + break; + } + stakedItems.remove(item); + player.getItemAssistant().addItem(itemID, 1); + } else { + if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) { + goodSpace = false; + break; + } + if (item.amount > amount) { + item.amount -= amount; + player.getItemAssistant().addItem(itemID, amount); + } else { + if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) { + goodSpace = false; + break; + } + amount = item.amount; + stakedItems.remove(item); + player.getItemAssistant().addItem(itemID, amount); + } + } + break; + } + o.duelStatus = 1; + player.duelStatus = 1; + player.getItemAssistant().resetItems(3214); + player.getItemAssistant().resetItems(3322); + o.getItemAssistant().resetItems(3214); + o.getItemAssistant().resetItems(3322); + player.getDueling().refreshDuelScreen(); + o.getDueling().refreshDuelScreen(); + o.getPlayerAssistant().sendFrame126("", 6684); + } + } + } + + for (GameItem item : stakedItems) { + if (item.id == itemID) { + if (!item.stackable) { + } else { + if (item.amount > amount) { + item.amount -= amount; + player.getItemAssistant().addItem(itemID, amount); + } else { + amount = item.amount; + stakedItems.remove(item); + player.getItemAssistant().addItem(itemID, amount); + } + } + break; + } + } + o.duelStatus = 1; + player.duelStatus = 1; + player.getItemAssistant().resetItems(3214); + player.getItemAssistant().resetItems(3322); + o.getItemAssistant().resetItems(3214); + o.getItemAssistant().resetItems(3322); + player.getDueling().refreshDuelScreen(); + o.getDueling().refreshDuelScreen(); + o.getPlayerAssistant().sendFrame126("", 6684); + if (!goodSpace) { + player.getActionSender().sendMessage( + "You have too many rules set to remove that item."); + return true; + } + return true; + } + + public void confirmDuel() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o == null) { + declineDuel(); + return; + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return; + } + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to confirm a duel."); + return; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return; + } + String itemId = ""; + for (GameItem item : stakedItems) { + if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) { + itemId += ItemAssistant.getItemName(item.id) + " x " + + Misc.format(item.amount) + "\\n"; + } else { + itemId += ItemAssistant.getItemName(item.id) + "\\n"; + } + } + player.getPlayerAssistant().sendFrame126(itemId, 6516); + itemId = ""; + for (GameItem item : o.getDueling().stakedItems) { + if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) { + itemId += ItemAssistant.getItemName(item.id) + " x " + + Misc.format(item.amount) + "\\n"; + } else { + itemId += ItemAssistant.getItemName(item.id) + "\\n"; + } + } + player.getPlayerAssistant().sendFrame126(itemId, 6517); + player.getPlayerAssistant().sendFrame126("", 8242); + for (int i = 8238; i <= 8253; i++) { + player.getPlayerAssistant().sendFrame126("", i); + } + player.getPlayerAssistant().sendFrame126("Hitpoints will be restored.", 8250); + player.getPlayerAssistant().sendFrame126("Boosted stats will be restored.", + 8238); + if (player.duelRule[8]) { + player.getPlayerAssistant().sendFrame126( + "There will be obstacles in the arena.", 8239); + } + player.getPlayerAssistant().sendFrame126("", 8240); + player.getPlayerAssistant().sendFrame126("", 8241); + + String[] rulesOption = { "Players cannot forfeit!", + "Players cannot move.", "Players cannot use range.", + "Players cannot use melee.", "Players cannot use magic.", + "Players cannot drink pots.", "Players cannot eat food.", + "Players cannot use prayer." }; + + int lineNumber = 8242; + for (int i = 0; i < 8; i++) { + if (player.duelRule[i]) { + player.getPlayerAssistant().sendFrame126("" + rulesOption[i], + lineNumber); + lineNumber++; + } + } + player.getPlayerAssistant().sendFrame126("", 6571); + player.getPlayerAssistant().sendFrame248(6412, 197); + // c.getPA().showInterface(6412); + } + + public void startDuel() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to start a duel."); + return; + } + if (player.inTrade || player.isShopping) { + player.getActionSender().sendMessage("You can not stake currently."); + return; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return; + } + if (o == null || o.disconnected) { + duelVictory(); + } + player.headIconHints = 2; + + if (player.duelRule[7]) { + for (int p = 0; p < player.getPrayer().PRAYER.length; p++) { // reset + // prayer + // glows + player.getPrayer().prayerActive[p] = false; + player.getPlayerAssistant().sendConfig(player.getPrayer().PRAYER_GLOW[p], + 0); + } + player.headIcon = -1; + player.getPlayerAssistant().requestUpdates(); + } + if (player.duelRule[11]) { + player.getItemAssistant().removeItem(player.playerEquipment[0], 0); + } + if (player.duelRule[12]) { + player.getItemAssistant().removeItem(player.playerEquipment[1], 1); + } + if (player.duelRule[13]) { + player.getItemAssistant().removeItem(player.playerEquipment[2], 2); + } + if (player.duelRule[14]) { + player.getItemAssistant().removeItem(player.playerEquipment[3], 3); + } + if (player.duelRule[15]) { + player.getItemAssistant().removeItem(player.playerEquipment[4], 4); + } + if (player.duelRule[16]) { + player.getItemAssistant().removeItem(player.playerEquipment[5], 5); + } + if (player.duelRule[17]) { + player.getItemAssistant().removeItem(player.playerEquipment[7], 7); + } + if (player.duelRule[18]) { + player.getItemAssistant().removeItem(player.playerEquipment[9], 9); + } + if (player.duelRule[19]) { + player.getItemAssistant().removeItem(player.playerEquipment[10], 10); + } + if (player.duelRule[20]) { + player.getItemAssistant().removeItem(player.playerEquipment[12], 12); + } + if (player.duelRule[21]) { + player.getItemAssistant().removeItem(player.playerEquipment[13], 13); + } + player.duelStatus = 5; + player.getPlayerAssistant().removeAllWindows(); + player.specAmount = 10; + player.getItemAssistant().addSpecialBar(player.playerEquipment[player.playerWeapon]); + + if (player.duelRule[8]) { + if (player.duelRule[1]) { + player.getPlayerAssistant().movePlayer(player.duelTeleX, player.duelTeleY, 0); + } else { + player.getPlayerAssistant().movePlayer(3366 + Misc.random(12), + 3246 + Misc.random(6), 0); + } + } else { + if (player.duelRule[1]) { + player.getPlayerAssistant().movePlayer(player.duelTeleX, player.duelTeleY, 0); + } else { + player.getPlayerAssistant().movePlayer(3335 + Misc.random(12), + 3246 + Misc.random(6), 0); + } + } + + player.getActionSender().createPlayerHints(10, o.playerId); + player.getActionSender().showOption(3, 0, "Attack", 1); + for (int i = 0; i < 20; i++) { + player.playerLevel[i] = player.getPlayerAssistant().getLevelForXP( + player.playerXP[i]); + player.getPlayerAssistant().refreshSkill(i); + } + for (GameItem item : o.getDueling().stakedItems) { + otherStakedItems.add(new GameItem(item.id, item.amount)); + } + PlayerSave.saveGame(player); + player.getPlayerAssistant().requestUpdates(); + } + + public void duelVictory() { + Client opponent = (Client) PlayerHandler.players[player.duelingWith]; + if (opponent != null) { + player.getPlayerAssistant().sendFrame126("" + opponent.combatLevel, 6839); + player.getPlayerAssistant().sendFrame126(opponent.playerName, 6840); + opponent.duelStatus = 0; + } else { + player.getPlayerAssistant().sendFrame126("", 6839); + player.getPlayerAssistant().sendFrame126("", 6840); + } + PrayerDrain.resetPrayers(player); + for (int i = 0; i < 20; i++) { + player.playerLevel[i] = player.getPlayerAssistant().getLevelForXP( + player.playerXP[i]); + player.getPlayerAssistant().refreshSkill(i); + } + // c.getPacketDispatcher().sendSound(Sound.DUEL_WON, 100, 0); + player.duelStatus = 6; + if (player.isSkulled) { + player.isSkulled = false; + player.skullTimer = 0; + player.headIconPk = -1; + player.getPlayerAssistant().requestUpdates(); + } + player.getPlayerAssistant().refreshSkill(3); + duelRewardInterface(); + player.getPlayerAssistant().showInterface(6733); + player.getActionSender().sendMessage("You have won the duel!"); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "duelingkiller", player.playerName + " killed " + opponent.playerName + " in the duel arena."); + } + player.getPlayerAssistant().movePlayer(Constants.DUELING_RESPAWN_X + Misc.random(5), Constants.DUELING_RESPAWN_Y + Misc.random(5), 0); + player.getPlayerAssistant().requestUpdates(); + player.getActionSender().showOption(3, 0, "Challenge", 3); + player.getActionSender().createPlayerHints(10, -1); + player.duelSpaceReq = 0; + player.openDuel = false; + opponent.openDuel = false; + player.duelingWith = 0; + player.getCombatAssistant().resetPlayerAttack(); + player.duelRequested = false; + PlayerSave.saveGame(player); + if (opponent != null) { + PlayerSave.saveGame(opponent); + } + } + + public void duelRewardInterface() { + synchronized (player) { + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(6822); + player.getOutStream().writeWord(otherStakedItems.toArray().length); + for (GameItem item : otherStakedItems) { + if (item.amount > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2(item.amount); + } else { + player.getOutStream().writeByte(item.amount); + } + if (item.id > Constants.ITEM_LIMIT || item.id < 0) { + item.id = Constants.ITEM_LIMIT; + } + player.getOutStream().writeWordBigEndianA(item.id + 1); + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public void claimStakedItems() { + for (GameItem item : otherStakedItems) { + if (item.id > 0 && item.amount > 0) { + if (Item.itemStackable[item.id]) { + if (!player.getItemAssistant().addItem(item.id, item.amount)) { + Server.itemHandler.createGroundItem(player, item.id, + player.getX(), player.getY(), item.amount, player.getId()); + } + } else { + int amount = item.amount; + for (int a = 1; a <= amount; a++) { + if (!player.getItemAssistant().addItem(item.id, 1)) { + Server.itemHandler.createGroundItem(player, item.id, + player.getX(), player.getY(), 1, player.getId()); + } + } + } + } + } + for (GameItem item : stakedItems) { + if (item.id > 0 && item.amount > 0) { + if (Item.itemStackable[item.id]) { + if (!player.getItemAssistant().addItem(item.id, item.amount)) { + Server.itemHandler.createGroundItem(player, item.id, + player.getX(), player.getY(), item.amount, player.getId()); + } + } else { + int amount = item.amount; + for (int a = 1; a <= amount; a++) { + if (!player.getItemAssistant().addItem(item.id, 1)) { + Server.itemHandler.createGroundItem(player, item.id, + player.getX(), player.getY(), 1, player.getId()); + } + } + } + } + } + resetDuel(); + resetDuelItems(); + PlayerSave.saveGame(player); + player.duelStatus = 0; + } + + public void declineDuel() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to do that."); + return; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return; + } + player.getPlayerAssistant().removeAllWindows(); + player.duelStatus = 0; + player.openDuel = false; + o.openDuel = false; + player.duelingWith = 0; + player.duelSpaceReq = 0; + player.duelRequested = false; + for (GameItem item : stakedItems) { + if (item.amount < 1) { + continue; + } + if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) { + player.getItemAssistant().addItem(item.id, item.amount); + } else { + player.getItemAssistant().addItem(item.id, 1); + } + } + stakedItems.clear(); + for (int i = 0; i < player.duelRule.length; i++) { + player.duelRule[i] = false; + } + } + + public void checkDuelWalk() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (player.duelStatus == 5 && o.duelStatus == 5 && o.duelingArena() && !player.duelingArena()) { + o.getDueling().duelVictory(); + player.getDueling().resetDuel(); + return; + } + } + + public void resetDuel() { + //Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (player.isDead) { + player.lostDuel = true; + } + player.getActionSender().showOption(3, 0, "Challenge", 3); + player.headIconHints = 0; + for (int i = 0; i < player.duelRule.length; i++) { + player.duelRule[i] = false; + } + player.getActionSender().createPlayerHints(10, -1); + player.duelStatus = 0; + player.duelSpaceReq = 0; + //player.openDuel = false; + //o.openDuel = false; + player.duelingWith = 0; + player.getPlayerAssistant().requestUpdates(); + player.getCombatAssistant().resetPlayerAttack(); + player.duelRequested = false; + } + + public void resetDuelItems() { + stakedItems.clear(); + otherStakedItems.clear(); + } + + public void changeDuelStuff() { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o == null) { + return; + } + o.duelStatus = 1; + player.duelStatus = 1; + o.getPlayerAssistant().sendFrame126("", 6684); + player.getPlayerAssistant().sendFrame126("", 6684); + } + + public void selectRule(int i) { // rules + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (!player.inDuelArena()) { + player.getActionSender().sendMessage("You must be in the duel arena to change your rules."); + return; + } + if (player.duelingArena()) { + player.getActionSender().sendMessage("You can't do that in a duel!"); + return; + } + if (o == null) { + return; + } + changeDuelStuff(); + o.duelSlot = player.duelSlot; + if (i >= 11 && player.duelSlot > -1) { + if (player.playerEquipment[player.duelSlot] > 0) { + if (!player.duelRule[i]) { + player.duelSpaceReq++; + } else { + player.duelSpaceReq--; + } + } + if (o.playerEquipment[o.duelSlot] > 0) { + if (!o.duelRule[i]) { + o.duelSpaceReq++; + } else { + o.duelSpaceReq--; + } + } + } + if (i == 16 && (player.getItemAssistant().is2handed(ItemAssistant.getItemName(player.playerEquipment[player.playerWeapon]).toLowerCase(), player.playerEquipment[player.playerWeapon]) + && player.getItemAssistant().freeSlots() == 0) || (o.getItemAssistant().is2handed(ItemAssistant.getItemName(player.playerEquipment[player.playerWeapon]).toLowerCase(), player.playerEquipment[player.playerWeapon]) + && o.getItemAssistant().freeSlots() == 0)) { + player.getActionSender().sendMessage("You or your opponent don't have the required space to set this rule."); + return; + } + + if (i >= 11) { + if (player.getItemAssistant().freeSlots() < player.duelSpaceReq + || o.getItemAssistant().freeSlots() < o.duelSpaceReq) { + player.getActionSender() + .sendMessage( + "You or your opponent don't have the required space to set this rule."); + if (player.playerEquipment[player.duelSlot] > 0) { + player.duelSpaceReq--; + } + if (o.playerEquipment[o.duelSlot] > 0) { + o.duelSpaceReq--; + } + return; + } + } + + if (!player.duelRule[i]) { + player.duelRule[i] = true; + player.duelOption += player.DUEL_RULE_ID[i]; + } else { + player.duelRule[i] = false; + player.duelOption -= player.DUEL_RULE_ID[i]; + } + + player.getPlayerAssistant().sendFrame87(286, player.duelOption); + o.duelOption = player.duelOption; + o.duelRule[i] = player.duelRule[i]; + o.getPlayerAssistant().sendFrame87(286, o.duelOption); + + if (player.duelRule[8]) { + if (player.duelRule[1]) { + player.duelTeleX = 3366 + Misc.random(12); + o.duelTeleX = player.duelTeleX - 1; + player.duelTeleY = 3246 + Misc.random(6); + o.duelTeleY = player.duelTeleY; + } + } else { + if (player.duelRule[1]) { + player.duelTeleX = 3335 + Misc.random(12); + o.duelTeleX = player.duelTeleX - 1; + player.duelTeleY = 3246 + Misc.random(6); + o.duelTeleY = player.duelTeleY; + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/FightCaves.java b/2006Redone Server/src/redone/game/content/minigames/FightCaves.java new file mode 100644 index 00000000..04b5fa8c --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/FightCaves.java @@ -0,0 +1,392 @@ +package redone.game.content.minigames; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class FightCaves { + + public static final int TZ_KIH = 2627, TZ_KEK_SPAWN = 2738, TZ_KEK = 2630, + TOK_XIL = 2631, YT_MEJKOT = 2741, KET_ZEK = 2743, TZTOK_JAD = 2745, YT_HURKOT = 2746; + + /** + * Holds the data for the 63 waves fight cave. + */ + private final int[][] WAVES = { { TZ_KIH }, { TZ_KIH, TZ_KIH }, { TZ_KEK }, + { TZ_KEK, TZ_KIH }, { TZ_KEK, TZ_KIH, TZ_KIH }, { TZ_KEK, TZ_KEK }, + { TOK_XIL }, { TOK_XIL, TZ_KIH }, { TOK_XIL, TZ_KIH, TZ_KIH }, + { TOK_XIL, TZ_KEK }, { TOK_XIL, TZ_KEK, TZ_KIH }, + { TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH }, { TOK_XIL, TZ_KEK, TZ_KEK }, + { TOK_XIL, TOK_XIL }, { YT_MEJKOT }, { YT_MEJKOT, TZ_KIH }, + { YT_MEJKOT, TZ_KIH, TZ_KIH }, { YT_MEJKOT, TZ_KEK }, + { YT_MEJKOT, TZ_KEK, TZ_KIH }, + { YT_MEJKOT, TZ_KEK, TZ_KIH, TZ_KIH }, + { YT_MEJKOT, TZ_KEK, TZ_KEK }, { YT_MEJKOT, TOK_XIL }, + { YT_MEJKOT, TOK_XIL, TZ_KIH }, + { YT_MEJKOT, TOK_XIL, TZ_KIH, TZ_KIH }, + { YT_MEJKOT, TOK_XIL, TZ_KEK }, + { YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH }, + { YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH }, + { YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KEK }, + { YT_MEJKOT, TOK_XIL, TOK_XIL }, { YT_MEJKOT, YT_MEJKOT }, + { KET_ZEK }, { KET_ZEK, TZ_KIH }, { KET_ZEK, TZ_KIH, TZ_KIH }, + { KET_ZEK, TZ_KEK }, { KET_ZEK, TZ_KEK, TZ_KIH }, + { KET_ZEK, TZ_KEK, TZ_KIH, TZ_KIH }, { KET_ZEK, TZ_KEK, TZ_KEK }, + { KET_ZEK, TOK_XIL }, { KET_ZEK, TOK_XIL, TZ_KIH }, + { KET_ZEK, TOK_XIL, TZ_KIH, TZ_KIH }, { KET_ZEK, TOK_XIL, TZ_KEK }, + { KET_ZEK, TOK_XIL, TZ_KEK, TZ_KIH }, + { KET_ZEK, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH }, + { KET_ZEK, TOK_XIL, TZ_KEK, TZ_KEK }, + { KET_ZEK, TOK_XIL, TOK_XIL }, { KET_ZEK, YT_MEJKOT }, + { KET_ZEK, YT_MEJKOT, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TZ_KIH, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TZ_KEK }, + { KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KIH, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KEK }, + { KET_ZEK, YT_MEJKOT, TOK_XIL }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KIH, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KEK }, + { KET_ZEK, YT_MEJKOT, TOK_XIL, TOK_XIL }, + { KET_ZEK, YT_MEJKOT, YT_MEJKOT }, { KET_ZEK, KET_ZEK }, + { TZTOK_JAD } }; + + private static final int[][] JAD_SPAWNS = {{2400, 5090},{2419, 5080}}; + private static final int[][] HEALER_COORDS = {{2390, 5101}, {2391, 5077}, {2411, 5084}, {2398, 5091}}; + private final static int[][] COORDINATES = {{2403, 5094}, {2390, 5096}, {2392, 5077}, {2408, 5080}, {2413, 5108}, {2381, 5106}, {2379, 5072}, {2420, 5082}}; + + /** + * Handles spawning the next fightcave wave. + * + * @param player + * The player. + */ + public void spawnNextWave(Client player) { + if (player != null) { + if (player.waveId >= WAVES.length) { + player.waveId = 0; + return; + } + if (player.waveId < 0) { + player.waveId = 0; + return; + } + int npcAmount = WAVES[player.waveId].length; + int wave = player.waveId +1; + if (player.waveId < 62 && player.waveId > -1) { + for (int j = 0; j < npcAmount; j++) { + int npc = WAVES[player.waveId][j]; + int X = COORDINATES[j][0]; + int Y = COORDINATES[j][1]; + int H = player.heightLevel; + int hp = getHp(npc); + int max = getMax(npc); + int atk = getAtk(npc); + int def = getDef(npc); + NpcHandler.spawnNpc(player, npc, X, Y, H, 0, hp, max, atk, def, true, false); + } + player.getActionSender().sendMessage("You are now on wave @red@" + wave + "@bla@."); + } else if (player.waveId == 62) { + player.getDialogueHandler().sendDialogues(102, 2617); + int a = Misc.random(1); + int npc = WAVES[62][0]; + int X = JAD_SPAWNS[a][0]; + int Y = JAD_SPAWNS[a][1]; + int H = player.heightLevel; + int hp = getHp(npc); + int max = getMax(npc); + int atk = getAtk(npc); + int def = getDef(npc); + NpcHandler.spawnNpc(player, npc, X, Y, H, 0, hp, max, atk, def, true, false); + player.getActionSender().sendMessage("You are now on wave @red@63@bla@."); + } + player.tzhaarToKill = npcAmount; + player.tzhaarKilled = 0; + } + } + + public static void ytMejKotEffect(Client player, int i) { + if(NpcHandler.npcs[i].npcType == YT_MEJKOT) { + if (NpcHandler.npcs[i].hitsToHeal < 2) { + NpcHandler.npcs[i].hitsToHeal += 1; + if (NpcHandler.npcs[i].hitsToHeal == 2) { + NpcHandler.npcs[i].hitsToHeal = 0; + NpcHandler.npcs[i].gfx0(444); + NpcHandler.npcs[i].startAnimation(2639, i); + NpcHandler.npcs[i].HP += 1+Misc.random(7); + if (NpcHandler.npcs[i].HP > getHp(YT_MEJKOT)) + NpcHandler.npcs[i].HP = getHp(YT_MEJKOT); + } + } + } + } + + public static void spawnHealers(Client player, int i, int amount) { + if (player.spawnedHealers < 4) { + int hp = getHp(YT_HURKOT); + int max = getMax(YT_HURKOT); + int atk = getAtk(YT_HURKOT); + int def = getDef(YT_HURKOT); + for (int i1 = 0; i1 < amount; i1++) { + NpcHandler.spawnNpc(player, YT_HURKOT, HEALER_COORDS[i1][0], HEALER_COORDS[i1][1], player.heightLevel, 0, hp, max, atk, def, false, false); + } + player.spawnedHealers = amount; + player.canHealersRespawn = false; + } + } + + /** + * Handles the correct tz-kih effect; prayer is drained by the formula: + * drain = damage + 1 + * + * @param player + * The player + * @param i + * The npcId + * @param damage + * What the npchit + */ + public static void tzKihEffect(Client player, int i, int damage) { + if (NpcHandler.npcs[i].npcType == TZ_KIH) { + if (player != null) { + if (player.playerLevel[5] > 0) { + player.playerLevel[5] -= 1 + damage; + player.getPlayerAssistant().refreshSkill(5); + } + } + } + } + + public static void tzKekEffect(Client player, int i) { + if (NpcHandler.npcs[i].npcType == TZ_KEK) { + + int x = NpcHandler.npcs[i].absX + 2; + int y = NpcHandler.npcs[i].absY + 2; + int x1 = NpcHandler.npcs[i].absX - 2; + int y1 = NpcHandler.npcs[i].absY - 2; + + int hp = getHp(TZ_KEK_SPAWN); + int max = getMax(TZ_KEK_SPAWN); + int atk = getAtk(TZ_KEK_SPAWN); + int def = getDef(TZ_KEK_SPAWN); + + if (player != null) { + if (player.tzKekTimer == 0) { + if (NpcHandler.npcs[i].isDead) { + NpcHandler.spawnNpc(player, TZ_KEK_SPAWN, x, y, + player.heightLevel, 0, hp, max, atk, def, true, + false); + NpcHandler.spawnNpc(player, TZ_KEK_SPAWN, x1, y1, + player.heightLevel, 0, hp, max, atk, def, true, + false); + } + } + } + } + } + + public static int getHp(int npc) { + switch (npc) { + case TZ_KIH: + case TZ_KEK_SPAWN: + return 10; + case TZ_KEK: + return 20; + case TOK_XIL: + return 40; + case YT_MEJKOT: + return 80; + case KET_ZEK: + return 150; + case YT_HURKOT: + return 80; + case TZTOK_JAD: + return 250; + } + return 100; + } + + public static int getMax(int npc) { + switch (npc) { + case TZ_KIH: + case TZ_KEK_SPAWN: + return 4; + case TZ_KEK: + return 7; + case TOK_XIL: + return 13; + case YT_MEJKOT: + return 28; + case KET_ZEK: + return 54; + case TZTOK_JAD: + return 97; + case YT_HURKOT: + return 16; + } + return 5; + } + + public static int getAtk(int npc) { + switch (npc) { + case TZ_KIH: + case TZ_KEK_SPAWN: + return 30; + case TZ_KEK: + return 50; + case TOK_XIL: + return 100; + case YT_MEJKOT: + return 150; + case KET_ZEK: + return 450; + case TZTOK_JAD: + return 650; + case YT_HURKOT: + return 120; + } + return 100; + } + + public static int getDef(int npc) { + switch (npc) { + case TZ_KIH: + case TZ_KEK_SPAWN: + return 30; + case TZ_KEK: + return 50; + case TOK_XIL: + return 100; + case YT_MEJKOT: + return 150; + case KET_ZEK: + return 300; + case TZTOK_JAD: + return 500; + case YT_HURKOT: + return 125; + } + return 100; + } + + private static void killedTzhaar(int i) { + final Client c2 = (Client) PlayerHandler.players[NpcHandler.npcs[i].spawnedBy]; + c2.tzhaarKilled++; + if (c2.tzhaarKilled == c2.tzhaarToKill) { + c2.waveId++; + CycleEventHandler.getSingleton().addEvent(c2, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c2 != null) { + Server.fightCaves.spawnNextWave(c2); + } + container.stop(); + } + @Override + public void stop() { + + } + }, 15); + + } + } + + public static void handleJadDeath(int i) { + Client c = (Client) PlayerHandler.players[NpcHandler.npcs[i].spawnedBy]; + if (c.inFightCaves()) { + c.getItemAssistant().addItem(6570, 1); + c.getItemAssistant().addItem(6529, 8032); + c.getDialogueHandler().sendDialogues(103, 2617); + c.getActionSender().sendMessage("You were victorious!"); + c.getPlayerAssistant().resetTzhaar(); + c.killedJad = true; + c.waveId = 300; + c.setSpecialTarget(null); + } else { + c.getActionSender().sendMessage("You must be in the fight caves to do this."); + } + } + + public static void healJad(Client player, int i) { + if (NpcHandler.npcs[i].npcType == YT_HURKOT && !NpcHandler.npcs[i].isDead) { + if (player.getSpecialTarget() != null) { + if (player.getSpecialTarget().npcType == TZTOK_JAD) { + Npc jad = player.getSpecialTarget(); + NpcHandler.npcs[i].gfx0(444); + NpcHandler.npcs[i].startAnimation(2639, i); + jad.HP += 1+Misc.random(8); + if (jad.HP >= getHp(TZTOK_JAD)) { + jad.HP = getHp(TZTOK_JAD); + if (player.spawnedHealers < 4) + spawnHealers(player, i, 4-player.spawnedHealers); + } + } + } + } + } + + /** + * Checks if a tzhaar npc has been killed, if so then it checks if it needs + * to do the tz-kek effect. If tzKek spawn has been killed twice or didn't + * need to be killed it calls killedTzhaar. + * + * @param i + * The npc. + */ + public static void tzhaarDeathHandler(int i) { + if (isFightCaveNpc(i) && NpcHandler.npcs[i].npcType != FightCaves.TZ_KEK && NpcHandler.npcs[i].npcType != FightCaves.YT_HURKOT) { + killedTzhaar(i); + } + if (NpcHandler.npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) { + int p = NpcHandler.npcs[i].killerId; + if (PlayerHandler.players[p] != null) { + Client c = (Client) PlayerHandler.players[p]; + c.tzKekSpawn += 1; + if (c.tzKekSpawn == 2) { + killedTzhaar(i); + c.tzKekSpawn = 0; + } + } + } + if (NpcHandler.npcs[i].npcType == FightCaves.TZ_KEK) { + int p = NpcHandler.npcs[i].killerId; + if (PlayerHandler.players[p] != null) { + Client c = (Client) PlayerHandler.players[p]; + FightCaves.tzKekEffect(c, i); + } + } + } + + /** + * Checks if something is a fight cave npc. + * + * @param i + * The npc. + * @return Whether or not it is a fight caves npc. + */ + public static boolean isFightCaveNpc(int i) { + switch (NpcHandler.npcs[i].npcType) { + case FightCaves.TZ_KIH: + case FightCaves.TZ_KEK: + case FightCaves.TZ_KEK_SPAWN: + case FightCaves.TOK_XIL: + case FightCaves.YT_MEJKOT: + case FightCaves.KET_ZEK: + case FightCaves.TZTOK_JAD: + case FightCaves.YT_HURKOT: + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/minigames/FightPits.java b/2006Redone Server/src/redone/game/content/minigames/FightPits.java new file mode 100644 index 00000000..2595ad96 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/FightPits.java @@ -0,0 +1,237 @@ +package redone.game.content.minigames; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author ArrowzFtw + */ +public class FightPits { + + /** + * @note States of minigames + */ + private static final String PLAYING = "PLAYING"; + private static final String WAITING = "WAITING"; + /** + * @note Current fight pits champion + */ + private static String pitsChampion = "None"; + /** + * @note Countdown for game to start + */ + private static int gameStartTimer = 80; + /** + * @note Elapsed Game start time + */ + private static int elapsedGameTime = 0; + private static final int END_GAME_TIME = 400; + /* + * @note Game started or not? + */ + private static boolean gameStarted = false; + /** + * @note Stores player and State + */ + private static Map playerMap = Collections + .synchronizedMap(new HashMap()); + + /** + * @note Where to spawn when pits game starts + */ + private static final int MINIGAME_START_POINT_X = 2392; + private static final int MINIGAME_START_POINT_Y = 5139; + /** + * @note Exit game area + */ + private static final int EXIT_GAME_X = 2399; + private static final int EXIT_GAME_Y = 5169; + /** + * @note Exit waiting room + */ + public static final int EXIT_WAITING_X = 2399; + public static final int EXIT_WAITING_Y = 5177; + /** + * @note Waiting room coordinates + */ + private static final int WAITING_ROOM_X = 2399; + private static final int WAITING_ROOM_Y = 5175; + + /** + * @return HashMap Value + */ + public static String getState(Client c) { + return playerMap.get(c); + } + + private static final int TOKKUL_ID = 6529; + + /** + * @note Adds player to waiting room. + */ + public static void addPlayer(Client c) { + playerMap.put(c, WAITING); + c.getPlayerAssistant().movePlayer(WAITING_ROOM_X, WAITING_ROOM_Y, 0); + } + + /** + * @note Starts the game and moves players to arena + */ + private static void enterGame(Client c) { + playerMap.put(c, PLAYING); + int teleportToX = MINIGAME_START_POINT_X + Misc.random(12); + int teleportToY = MINIGAME_START_POINT_Y + Misc.random(12); + c.getPlayerAssistant().movePlayer(teleportToX, teleportToY, 0); + c.inPits = true; + // c.getPA().showOption(3, 0, "Attack", 1); + // c.getPA().showOption(3, 0, "Null", 1); + } + + /** + * @note Removes player from pits if there in waiting or in game + */ + public static void removePlayer(Client c, boolean forceRemove) { + c.inPits = false; + if (forceRemove) { + c.getPlayerAssistant() + .movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0); + playerMap.remove(c); + return; + } + String state = playerMap.get(c); + if (state == null) { + c.getPlayerAssistant() + .movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0); + return; + } + + if (state.equals(PLAYING)) { + if (getListCount(PLAYING) - 1 == 0 && !forceRemove) { + pitsChampion = c.playerName; + c.headIcon = 21; + c.updateRequired = true; + c.getItemAssistant() + .addItem(TOKKUL_ID, 1500 + Misc.random(500)); + + } + c.getPlayerAssistant().movePlayer(EXIT_GAME_X, EXIT_GAME_Y, 0); + } else if (state.equals(WAITING)) { + c.getPlayerAssistant() + .movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0); + c.getPlayerAssistant().walkableInterface(-1); + } + playerMap.remove(c); + + if (state.equals(PLAYING)) { + if (!forceRemove) { + playerMap.put(c, WAITING); + } + } + } + + /** + * @return Players playing fight pits + */ + public static int getListCount(String state) { + int count = 0; + for (String s : playerMap.values()) { + if (state == s) { + count++; + } + } + return count; + } + + /** + * @note Updates players + */ + private static void update() { + for (Client c : playerMap.keySet()) { + String status = playerMap.get(c); + @SuppressWarnings("unused") + boolean updated = status == WAITING ? updateWaitingRoom(c) + : updateGame(c); + } + } + + /** + * @note Updates waiting room interfaces etc. + */ + public static boolean updateWaitingRoom(Client c) { + c.getPlayerAssistant().sendFrame126( + "Next Game Begins In : " + gameStartTimer, 2805); + c.getPlayerAssistant().sendFrame126( + "Champion: JalYt-Ket-" + pitsChampion, 2806); + c.getPlayerAssistant().sendConfig(560, 1); + c.getPlayerAssistant().walkableInterface(2804); + return true; + } + + /** + * @note Updates players in game interfaces etc. + */ + public static boolean updateGame(Client c) { + c.getPlayerAssistant().sendFrame126( + "Foes Remaining: " + getListCount(PLAYING), 2805); + c.getPlayerAssistant().sendFrame126( + "Champion: JalYt-Ket-" + pitsChampion, 2806); + c.getPlayerAssistant().sendConfig(560, 1); + c.getPlayerAssistant().walkableInterface(2804); + return true; + } + + /** + * @note Handles death and respawn rubbish. + */ + public static void handleDeath(Client c) { + removePlayer(c, true); + } + + /* + * @process 600ms Tick + */ + public static void process() { + update(); + if (!gameStarted) { + if (gameStartTimer > 0) { + gameStartTimer--; + } else if (gameStartTimer == 0) { + if (getListCount(WAITING) > 4) { + beginGame(); + } + gameStartTimer = 80; + } + } + if (gameStarted) { + elapsedGameTime++; + if (elapsedGameTime == END_GAME_TIME) { + endGame(); + elapsedGameTime = 0; + gameStarted = false; + gameStartTimer = 80; + } + } + } + + /** + * @note Starts game for the players in waiting room + */ + private static void beginGame() { + for (Client c : playerMap.keySet()) { + enterGame(c); + } + } + + /** + * @note Ends game and returns player to their normal spot. + */ + private static void endGame() { + for (Client c : playerMap.keySet()) { + removePlayer(c, true); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/MageArena.java b/2006Redone Server/src/redone/game/content/minigames/MageArena.java new file mode 100644 index 00000000..e3970b59 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/MageArena.java @@ -0,0 +1,267 @@ +/* + * To change this template, choose Tools | Templates and open the template in + * the editor. + */ + +package redone.game.content.minigames; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author D + */ +public class MageArena { + + private final Client c; + + public MageArena(Client c) { + this.c = c; + } + + private final int telePoints = 0; + private final int enchantPoints = 0; + private final int gravePoints = 0; + private final int alchPoints = 0; + + private final int[] shopItems = { 6908, 6910, 6912, 6914, 6916, 6918, 6920, + 6922, 6924, 6889, 6926, 1391, 4695, 4696, 4698, 4697, 4694, 4699, + 564, 561, 560, 563, 565, 6891 }; + + private final String[] interfaceText = { "Magic Training Arena Shop", + "Telekinetic Pizazz Points", "Enchantment Pizazz Points", + "Graveyard Pizazz Points", "Alchemist Pizazz Points" }; + + public void openShop() { + + for (int i = 0; i < shopItems.length; i++) { + c.getPlayerAssistant().sendFrame34(15948, shopItems[i], i, 100); + } + + for (int i = 15950; i < interfaceText.length; i++) { + c.getPlayerAssistant().sendFrame126(interfaceText[i - 15950], i); + } + + c.getPlayerAssistant().sendFrame126(Integer.toString(telePoints), 15955); + c.getPlayerAssistant().sendFrame126(Integer.toString(enchantPoints), + 15956); + c.getPlayerAssistant().sendFrame126(Integer.toString(gravePoints), 15957); + c.getPlayerAssistant().sendFrame126(Integer.toString(alchPoints), 15958); + c.getPlayerAssistant().showInterface(15944); + } + + public int getTelVal(int itemId) { + + switch (itemId) { + case 6922: + return 175; + case 6918: + return 350; + case 6916: + return 400; + case 6924: + return 450; + case 6920: + return 120; + case 1391: + return 1; + case 6908: + return 30; + case 6910: + return 60; + case 6912: + return 60; + case 6914: + return 150; + case 6889: + return 500; + case 6926: + return 200; + + case 4695: + case 4694: + case 4696: + case 4697: + case 4698: + case 4699: + return 1; + + case 564: + case 561: + return 0; + + case 560: + case 563: + case 565: + return 2; + + default: + return 1; + + } + } + + public int getAlchVal(int itemId) { + + switch (itemId) { + case 6922: + return 225; + case 6918: + return 400; + case 6916: + return 450; + case 6924: + return 500; + case 6920: + return 120; + case 1391: + return 2; + case 6908: + return 30; + case 6910: + return 60; + case 6912: + return 200; + case 6914: + return 240; + case 6889: + return 550; + case 6926: + return 300; + + case 4695: + case 4694: + case 4696: + case 4697: + case 4698: + case 4699: + return 1; + + case 564: + case 561: + return 1; + + case 560: + case 563: + case 565: + return 2; + + default: + return 1; + + } + } + + public int getEnchVal(int itemId) { + + switch (itemId) { + case 6922: + return 1300; + case 6918: + return 3000; + case 6916: + return 4000; + case 6924: + return 5000; + case 6920: + return 1200; + case 1391: + return 20; + case 6908: + return 300; + case 6910: + return 600; + case 6912: + return 1500; + case 6914: + return 2400; + case 6889: + return 6000; + case 6926: + return 2000; + + case 4695: + case 4694: + case 4696: + case 4697: + case 4698: + case 4699: + return 15; + + case 564: + case 561: + return 5; + + case 560: + case 563: + case 565: + return 25; + + default: + return 1; + + } + } + + public int getGraveValue(int itemId) { + + switch (itemId) { + case 6922: + return 175; + case 6918: + return 350; + case 6916: + return 400; + case 6924: + return 450; + case 6920: + return 120; + case 1391: + return 2; + case 6908: + return 30; + case 6910: + return 60; + case 6912: + return 150; + case 6914: + return 240; + case 6889: + return 500; + case 6926: + return 200; + + case 4695: + case 4694: + case 4696: + case 4697: + case 4698: + case 4699: + return 1; + + case 564: + case 561: + return 1; + + case 560: + case 563: + case 565: + return 2; + + default: + return 1; + + } + } + + public void sendMessage(int itemId) { + c.getActionSender().sendMessage( + ItemAssistant.getItemName(itemId) + " costs " + + getGraveValue(itemId) + " Graveyard points, " + + getAlchVal(itemId) + " Alchemy points,"); + c.getActionSender().sendMessage( + "" + getEnchVal(itemId) + " Enchantment points, and " + + getTelVal(itemId) + " Telekinetic points."); + } + +} diff --git a/2006Redone Server/src/redone/game/content/minigames/PestControl.java b/2006Redone Server/src/redone/game/content/minigames/PestControl.java new file mode 100644 index 00000000..7dbace5d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/PestControl.java @@ -0,0 +1,450 @@ +package redone.game.content.minigames; + +import java.util.HashMap; + +import redone.Server; +import redone.game.content.combat.prayer.PrayerDrain; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author Harlan Credits to Sanity + */ + +public class PestControl { + + /** + * /** how long before were put into the game from lobby + */ + private static final int WAIT_TIMER = 60; + /** + * How many players we need to start a game + */ + private final static int PLAYERS_REQUIRED = 1; + /** + * Hashmap for the players in lobby + */ + public static HashMap waitingBoat = new HashMap(); + private static HashMap gamePlayers = new HashMap(); + + private static int gameTimer = -1; + private static int waitTimer = 60; + public static boolean gameStarted = false; + private int properTimer = 0; + public static int KNIGHTS_HEALTH = -1; + + /** + * Array used for storing the portals health + */ + public static int[] portalHealth = { 200, 200, 200, 200 }; + public static int[] portals = { 3777, 3778, 3779, 3780 }; + /** + * array used for storing the npcs used in the minigame + * + * @order npcId, xSpawn, ySpawn, health + */ + + public int shifter = 3732 + Misc.random(9); + public int brawler = 3772 + Misc.random(4); + public int defiler = 3762 + Misc.random(9); + public int ravager = 3742 + Misc.random(4); + public int torcher = 3752 + Misc.random(7); + public int splater = 3727 + Misc.random(4); + + private final int[][] pcNPCData = { { 3777, 2628, 2591 }, // portal + { 3778, 2680, 2588 }, // portal + { 3779, 2669, 2570 }, // portal + { 3780, 2645, 2569 }, // portal + { 3782, 2656, 2592 }, // knight + }; + + private final int[][] voidMonsterData = { + { shifter, 2660 + Misc.random(4), 2592 + Misc.random(4) }, + { brawler, 2663 + Misc.random(4), 2575 + Misc.random(4) }, + { defiler, 2656 + Misc.random(4), 2572 + Misc.random(4) }, + { ravager, 2664 + Misc.random(4), 2574 + Misc.random(4) }, + { torcher, 2656 + Misc.random(4), 2595 + Misc.random(4) }, + { ravager, 2634 + Misc.random(4), 2596 + Misc.random(4) }, + { brawler, 2638 + Misc.random(4), 2588 + Misc.random(4) }, + { shifter, 2637 + Misc.random(4), 2598 + Misc.random(4) }, + { ravager, 2677 + Misc.random(4), 2579 + Misc.random(4) }, + { defiler, 2673 + Misc.random(4), 2584 + Misc.random(4) }, + { defiler, 2673 + Misc.random(4), 2584 + Misc.random(4) }, + { defiler, 2675 + Misc.random(4), 2591 + Misc.random(4) }, + { splater, 2644 + Misc.random(4), 2575 + Misc.random(4) }, + { splater, 2633 + Misc.random(4), 2595 + Misc.random(4) }}; + + public void process() { + try { + if (properTimer > 0) { + properTimer--; + return; + } else { + properTimer = 1; + } + waitBoat(); + if (waitTimer > 0) { + waitTimer--; + } else if (waitTimer == 0) { + startGame(); + } + if (KNIGHTS_HEALTH == 0) { + endGame(false); + } + if (gameStarted && playersInGame() < 1) { + endGame(false); + } + if (gameTimer > 0 && gameStarted) { + gameTimer--; + setGameInterface(); + if (allPortalsDead() || allPortalsDead3()) { + endGame(true); + } + } else if (gameTimer <= 0 && gameStarted) { + endGame(false); + } + } catch (RuntimeException e) { + System.out.println("Failed to set process"); + e.printStackTrace(); + } + } + + /** + * Method we use for removing a player from the pc game + * + * @param player + * The Player. + */ + public static void removePlayerGame(Client player) { + if (gamePlayers.containsKey(player)) { + player.getPlayerAssistant().movePlayer(2657, 2639, 0); + gamePlayers.remove(player); + } + } + + private static void waitBoat() { + for (final Client c : waitingBoat.keySet()) { + if (c != null) { + if (gameStarted && isInPcBoat(c)) { + c.getActionSender().sendMessage("Next Departure: " + (waitTimer + gameTimer) / 60 + " minutes"); + } else { + c.getActionSender().sendMessage("Next Departure: " + waitTimer + " seconds."); + } + } + } + } + + public static void setGameInterface() { + for (final Client player : gamePlayers.keySet()) { + if (player != null) { + if (gameTimer > 60) { + player.getActionSender().sendMessage("Time remaining: " + gameTimer / 60 + " minutes"); + } else if (gameTimer < 60) { + player.getActionSender().sendMessage("Time remaining: " + gameTimer + " seconds"); + } + player.getActionSender().sendMessage("The knights current health is " + KNIGHTS_HEALTH + "."); + player.getActionSender().sendMessage("Your current pc damage is " + player.pcDamage + "."); + } + } + } + + /* + * private void setBoatInterface() { try { for (Client c : + * waitingBoat.keySet()) { if (c != null) { try { if (gameStarted) { + * c.getPlayerAssistant().sendString("Next Departure: " + (waitTimer + + * gameTimer)/60 + " minutes", 21120); } else { + * c.getPlayerAssistant().sendString("Next Departure: " + waitTimer + "", + * 21120); } c.getPlayerAssistant().sendString("Players Ready: " + + * playersInBoat() + "", 21121); c.getPlayerAssistant().sendString("(Need " + * + PLAYERS_REQUIRED + " to 25 players)", 21122); + * c.getPlayerAssistant().sendString("Points: " + c.pcPoints + "", 21123); + * switch (waitTimer) { case 60: c.getPacketDispatcher + * ().sendMessage("Next game will start in: 60 seconds."); break; case 30: + * c. + * getPacketDispatcher().sendMessage("Next game will start in: 30 seconds." + * ); break; } } catch (RuntimeException e) { // TODO Auto-generated catch + * block e.printStackTrace(); } } } } catch (RuntimeException e) { + * System.out.println("Failed to set interfaces"); e.printStackTrace(); } } + */ + + /* + * private void setGameInterface() { for (Client player : + * gamePlayers.keySet()) { if (player != null) { for (int i = 0; i < + * portalHealth.length; i++) { if (portalHealth[i] > 0) { + * player.getPlayerAssistant().sendString("" + portalHealth[i] + "", 21111 + + * i); } else player.getPlayerAssistant().sendString("Dead", 21111 + i); } + * player.getPlayerAssistant().sendString("" + KNIGHTS_HEALTH, 21115); + * player.getPlayerAssistant().sendString("" + player.pcDamage, 21116); if + * (gameTimer > 60) { + * player.getPlayerAssistant().sendString("Time remaining: " + + * (gameTimer/60) + " minutes", 21117); } else { + * player.getPlayerAssistant().sendString("Time remaining: " + gameTimer + + * " seconds", 21117); } } } } + */ + + /*** + * Moving players to arena if there's enough players + */ + private void startGame() { + if (playersInBoat() < PLAYERS_REQUIRED) { + waitTimer = WAIT_TIMER; + return; + } + for (int i = 0; i < portalHealth.length; i++) { + portalHealth[i] = 200; + } + gameStarted = true; + gameTimer = 400; + KNIGHTS_HEALTH = 250; + waitTimer = -1; + spawnNPC(); + setGameInterface(); + for (Client player : waitingBoat.keySet()) { + int team = waitingBoat.get(player); + if (player == null) { + continue; + } + player.getPlayerAssistant().movePlayer(2656 + Misc.random3(3), + 2614 - Misc.random3(4), 0); + player.getDialogueHandler().sendDialogues(599, 3790); + player.getActionSender().sendMessage( + "The Pest Control Game has begun!"); + gamePlayers.put(player, team); + } + + waitingBoat.clear(); + } + + /** + * Checks how many players are in the waiting lobby + * + * @return players waiting + */ + private static int playersInBoat() { + int players = 0; + for (Client player : waitingBoat.keySet()) { + if (player != null) { + players++; + } + if (player == null) { + players--; + } + } + return players; + } + + /** + * Checks how many players are in the game + * + * @return players in the game + */ + private int playersInGame() { + int players = 0; + for (Client player : gamePlayers.keySet()) { + if (player != null) { + players++; + } + if (player == null) { + players--; + } + } + return players; + } + + /** + * Ends the game + * + * @param won + * Did you win? + */ + private void endGame(boolean won) { + for (Client player : gamePlayers.keySet()) { + if (player == null) { + continue; + } + player.getPlayerAssistant().movePlayer(2657, 2639, 0); + if (won && player.pcDamage > 50) { + player.getDialogueHandler().sendDialogues(598, 3790); + int POINT_REWARD = 4; + player.getActionSender().sendMessage( + "You have won the pest control game and have been awarded " + + POINT_REWARD + " Pest Control points."); + player.pcPoints += POINT_REWARD; + player.getItemAssistant().addItem(995, player.combatLevel * 10); + } else if (won) { + player.getDialogueHandler().sendDialogues(596, 3790); + int POINT_REWARD2 = 2; + player.pcPoints += POINT_REWARD2; + player.getActionSender().sendMessage( + "The void knights notice your lack of zeal. You only gain " + + POINT_REWARD2 + " points."); + } else { + player.getDialogueHandler().sendDialogues(597, 3790); + player.getActionSender() + .sendMessage( + "You failed to kill all the portals in 3 minutes and have not been awarded points."); + } + } + cleanUpPlayer(); + cleanUp(); + } + + /** + * Resets the game variables and map + */ + private void cleanUp() { + gameTimer = -1; + KNIGHTS_HEALTH = -1; + waitTimer = WAIT_TIMER; + gameStarted = false; + gamePlayers.clear(); + /* + * Removes the npcs from the game if any left over for whatever reason + */ + for (int[] aPcNPCData : pcNPCData) { + for (int j = 0; j < NpcHandler.npcs.length; j++) { + if (NpcHandler.npcs[j] != null) { + if (NpcHandler.npcs[j].npcType == aPcNPCData[0]) { + NpcHandler.npcs[j] = null; + } + } + } + } + for (int[] aPcNPCData : voidMonsterData) { + for (int j = 0; j < NpcHandler.npcs.length; j++) { + if (NpcHandler.npcs[j] != null) { + if (NpcHandler.npcs[j].npcType == aPcNPCData[0]) { + NpcHandler.npcs[j] = null; + } + } + } + } + } + + /** + * Cleans the player of any damage, loss they may of received + */ + private void cleanUpPlayer() { + for (Client player : gamePlayers.keySet()) { + player.poisonDamage = 0; + PrayerDrain.resetPrayers(player); + for (int i = 0; i < 24; i++) { + player.playerLevel[i] = player.getPlayerAssistant() + .getLevelForXP(player.playerXP[i]); + player.getPlayerAssistant().refreshSkill(i); + } + player.specAmount = 10; + player.pcDamage = 0; + player.getItemAssistant().addSpecialBar( + player.playerEquipment[player.playerWeapon]); + } + } + + /** + * Checks if the portals are dead + * + * @return players dead + */ + private static boolean allPortalsDead() { + int count = 0; + for (int aPortalHealth : portalHealth) { + if (aPortalHealth <= 0) { + count++; + // System.out.println("Portal Health++" + count); + } + } + return count >= 4; + } + + public boolean allPortalsDead3() { + int count = 0; + for (Npc npc : NpcHandler.npcs) { + if (npc != null) { + if (npc.npcType > 3777 && npc.npcType < 3780) { + if (npc.needRespawn) { + count++; + } + } + } + } + return count >= 4; + } + + /** + * Moves a player out of the waiting boat + * + * @param c + * Client c + */ + public static void leaveWaitingBoat(Client c) { + if (waitingBoat.containsKey(c)) { + waitingBoat.remove(c); + c.getPlayerAssistant().movePlayer(2657, 2639, 0); + } + } + + /** + * Moves a player into the hash and into the lobby + * + * @param player + * The player + */ + public static void addToWaitRoom(Client player) { + if (player != null && player.combatLevel > 39) { + waitingBoat.put(player, 1); + player.getActionSender().sendMessage( + "You have joined the Pest Control boat."); + player.getActionSender().sendMessage( + "You currently have " + player.pcPoints + + " Pest Control Points."); + player.getActionSender().sendMessage( + "There are currently " + playersInBoat() + + " players ready in the boat."); + player.getActionSender().sendMessage( + "Players needed: " + PLAYERS_REQUIRED + " to 25 players."); + player.getPlayerAssistant().movePlayer(2661, 2639, 0); + waitBoat(); + } else if (player.combatLevel < 40) { + player.getActionSender().sendMessage("You need 40 combat to play pest control."); + } + } + + /** + * Checks if a player is in the game + * + * @param player + * The player + * @return return + */ + public static boolean isInGame(Client player) { + return gamePlayers.containsKey(player); + } + + /** + * Checks if a player is in the pc boat (lobby) + * + * @param player + * The player + * @return return + */ + public static boolean isInPcBoat(Client player) { + return waitingBoat.containsKey(player); + } + + public static boolean npcIsPCMonster(int npcType) { + return npcType >= 3727 && npcType <= 3776; + } + + private void spawnNPC() { + //npcid, npcx, npcy, heightlevel, walking type, hp, att, def + for (int[] aPcNPCData : pcNPCData) { + Server.npcHandler.spawnNpc2(aPcNPCData[0], aPcNPCData[1], aPcNPCData[2], 0, 0, 200, 0, 0, playersInGame() * 200); + } + for (int[] voidMonsters : voidMonsterData) { + //Server.npcHandler.spawnNpc2(voidMonsters[0], voidMonsters[1], voidMonsters[2], 0, 1, voidMonsters[NpcHandler.getNpcListHP(voidMonsters[0])], NpcHandler.getNpcListCombat(voidMonsters[0])/10, NpcHandler.getNpcListCombat(voidMonsters[0]), playersInGame() * 200); + Server.npcHandler.spawnNpc2(voidMonsters[0], voidMonsters[1], voidMonsters[2], 0, 1, 500, 20, 200, 25); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/TreasureTrails.java b/2006Redone Server/src/redone/game/content/minigames/TreasureTrails.java new file mode 100644 index 00000000..66759160 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/TreasureTrails.java @@ -0,0 +1,108 @@ +package redone.game.content.minigames; + +import redone.game.players.Client; +import redone.util.Misc; + +public class TreasureTrails { + + public static int lowLevelReward[] = { 1077, 1125, 1165, 1195, 1297, 1367, + 853, 7390, 7392, 7394, 7396, 7386, 7388, 1099, 1135, 1065, 851 }; + public static int mediemLevelReward[] = { 1073, 1123, 1161, 1199, 1301, + 1371, 857, 2577, 2579, 2487, 2493, 2499, 2631, 855 }; + public static int highLevelReward[] = { 1079, 1093, 1113, 1127, 1147, 1163, + 1185, 1201, 1275, 1303, 1319, 1333, 1359, 1373, 2491, 2497, 2503, + 861, 859, 2581, 2651, 1079, 1093, 1113, 1127, 1147, 1163, 1185, + 1201, 1275, 1303, 1319, 1333, 1359, 1373, 2491, 2497, 2503, 861, + 859, 2581, 2651, }; + + public static int lowLevelStacks[] = { 995, 380, 561, 886, }; + public static int mediumLevelStacks[] = { 995, 374, 561, 563, 890, }; + public static int highLevelStacks[] = { 995, 386, 561, 563, 560, 892 }; + public static int allStacks[] = { 995, 380, 561, 886, 374, 561, 563, 890, + 386, 561, 563, 560, 892 }; + + public static void addClueReward(Client c, int clueLevel) { + int chanceReward = Misc.random(2); + if (clueLevel == 0) { + switch (chanceReward) { + case 0: + displayReward(c, lowLevelReward[Misc.random(16)], 1, + lowLevelReward[Misc.random(16)], 1, + lowLevelStacks[Misc.random(3)], 1 + Misc.random(150)); + break; + case 1: + displayReward(c, lowLevelReward[Misc.random(16)], 1, + lowLevelStacks[Misc.random(3)], 1 + Misc.random(150), + -1, 1); + break; + case 2: + displayReward(c, lowLevelReward[Misc.random(16)], 1, -1, 1, -1, + 1); + break; + } + } else if (clueLevel == 1) { + switch (chanceReward) { + case 0: + displayReward(c, mediemLevelReward[Misc.random(13)], 1, + mediemLevelReward[Misc.random(13)], 1, + mediumLevelStacks[Misc.random(4)], 1 + Misc.random(200)); + break; + case 1: + displayReward(c, mediemLevelReward[Misc.random(13)], 1, + mediumLevelStacks[Misc.random(4)], + 1 + Misc.random(200), -1, 1); + break; + case 2: + displayReward(c, mediemLevelReward[Misc.random(13)], 1, -1, 1, + -1, 1); + break; + } + } else if (clueLevel == 2) { + switch (chanceReward) { + case 0: + displayReward(c, highLevelReward[Misc.random(52)], 1, + highLevelReward[Misc.random(52)], 1, + highLevelStacks[Misc.random(5)], 1 + Misc.random(350)); + break; + case 1: + displayReward(c, highLevelReward[Misc.random(52)], 1, + highLevelStacks[Misc.random(5)], 1 + Misc.random(350), + -1, 1); + break; + case 2: + displayReward(c, highLevelReward[Misc.random(52)], 1, -1, 1, + -1, 1); + break; + } + } + } + + public static void displayReward(Client c, int item, int amount, int item2, + int amount2, int item3, int amount3) { + int[] items = { item, item2, item3 }; + int[] amounts = { amount, amount2, amount3 }; + c.outStream.createFrameVarSizeWord(53); + c.outStream.writeWord(6963); + c.outStream.writeWord(items.length); + for (int i = 0; i < items.length; i++) { + if (c.playerItemsN[i] > 254) { + c.outStream.writeByte(255); + c.outStream.writeDWord_v2(amounts[i]); + } else { + c.outStream.writeByte(amounts[i]); + } + if (items[i] > 0) { + c.outStream.writeWordBigEndianA(items[i] + 1); + } else { + c.outStream.writeWordBigEndianA(0); + } + } + c.outStream.endFrameVarSizeWord(); + c.flushOutStream(); + c.getItemAssistant().addItem(item, amount); + c.getItemAssistant().addItem(item2, amount2); + c.getItemAssistant().addItem(item3, amount3); + c.getPlayerAssistant().showInterface(6960); + } + +} diff --git a/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWarObjects.java b/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWarObjects.java new file mode 100644 index 00000000..e10e3887 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWarObjects.java @@ -0,0 +1,280 @@ +package redone.game.content.minigames.castlewars; + +import redone.game.players.Client; + +public class CastleWarObjects { + + public static void handleObject(Client c, int id, int x, int y) { + switch (id) { + case 4469: + if (CastleWars.getTeamNumber(c) == 2) { + c.getActionSender().sendMessage( + "You are not allowed in the other teams spawn point."); + break; + } + if (x == 2426) { + if (c.getY() == 3080) { + c.getPlayerAssistant() + .movePlayer(2426, 3081, c.heightLevel); + } else if (c.getY() == 3081) { + c.getPlayerAssistant() + .movePlayer(2426, 3080, c.heightLevel); + } + } else if (x == 2422) { + if (c.getX() == 2422) { + c.getPlayerAssistant() + .movePlayer(2423, 3076, c.heightLevel); + } else if (c.getX() == 2423) { + c.getPlayerAssistant() + .movePlayer(2422, 3076, c.heightLevel); + } + } + break; + case 4470: + if (CastleWars.getTeamNumber(c) == 1) { + c.getActionSender().sendMessage( + "You are not allowed in the other teams spawn point."); + break; + } + if (x == 2373 && y == 3126) { + if (c.getY() == 3126) { + c.getPlayerAssistant().movePlayer(2373, 3127, 1); + } else if (c.getY() == 3127) { + c.getPlayerAssistant().movePlayer(2373, 3126, 1); + } + } else if (x == 2377 && y == 3131) { + if (c.getX() == 2376) { + c.getPlayerAssistant().movePlayer(2377, 3131, 1); + } else if (c.getX() == 2377) { + c.getPlayerAssistant().movePlayer(2376, 3131, 1); + } + } + break; + case 4417: + if (x == 2428 && y == 3081 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2430, 3080, 2); + } + if (x == 2425 && y == 3074 && c.heightLevel == 2) { + c.getPlayerAssistant().movePlayer(2426, 3074, 3); + } + if (x == 2419 && y == 3078 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(2420, 3080, 1); + } + break; + case 4415: + if (x == 2419 && y == 3080 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2419, 3077, 0); + } + if (x == 2430 && y == 3081 && c.heightLevel == 2) { + c.getPlayerAssistant().movePlayer(2427, 3081, 1); + } + if (x == 2425 && y == 3074 && c.heightLevel == 3) { + c.getPlayerAssistant().movePlayer(2425, 3077, 2); + } + if (x == 2374 && y == 3133 && c.heightLevel == 3) { + c.getPlayerAssistant().movePlayer(2374, 3130, 2); + } + if (x == 2369 && y == 3126 && c.heightLevel == 2) { + c.getPlayerAssistant().movePlayer(2372, 3126, 1); + } + if (x == 2380 && y == 3127 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2380, 3130, 0); + } + break; + case 4411: // castle wars jumping stones + if (x == c.getX() && y == c.getY()) { + c.getActionSender().sendMessage("You are standing on the rock you clicked."); + } else if (x > c.getX() && y == c.getY()) { + c.getPlayerAssistant().walkTo(1, 0); + } else if (x < c.getX() && y == c.getY()) { + c.getPlayerAssistant().walkTo(-1, 0); + } else if (y > c.getY() && x == c.getX()) { + c.getPlayerAssistant().walkTo(0, 1); + } else if (y < c.getY() && x == c.getX()) { + c.getPlayerAssistant().walkTo(0, -1); + } else { + c.getActionSender().sendMessage("Can't reach that."); + } + break; + case 4419: + if (x == 2417 && y == 3074 && c.heightLevel == 0) { + if (c.getX() == 2416) { + c.getPlayerAssistant().movePlayer(2417, 3077, 0); + } else { + c.getPlayerAssistant().movePlayer(2416, 3074, 0); + } + } + break; + + case 4911: + if (x == 2421 && y == 3073 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2421, 3074, 0); + } + if (x == 2378 && y == 3134 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2378, 3133, 0); + } + break; + case 1747: + if (x == 2421 && y == 3073 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(2421, 3074, 1); + } + if (x == 2378 && y == 3134 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(2378, 3133, 1); + } + break; + case 4912: + if (x == 2430 && y == 3082 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY() + 6400, 0); + } + if (x == 2369 && y == 3125 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY() + 6400, 0); + } + break; + case 1757: + if (x == 2430 && y == 9482) { + c.getPlayerAssistant().movePlayer(2430, 3081, 0); + } else if (c.absX == 2533) { + c.getPlayerAssistant().movePlayer(2532, 3155, 0); + } else { + c.getPlayerAssistant().movePlayer(2369, 3126, 0); + } + break; + + case 4418: + if (x == 2380 && y == 3127 && c.heightLevel == 0) { + c.getPlayerAssistant().movePlayer(2379, 3127, 1); + } + if (x == 2369 && y == 3126 && c.heightLevel == 1) { + c.getPlayerAssistant().movePlayer(2369, 3127, 2); + } + if (x == 2374 && y == 3131 && c.heightLevel == 2) { + c.getPlayerAssistant().movePlayer(2373, 3133, 3); + } + break; + case 4420: + if (x == 2382 && y == 3131 && c.heightLevel == 0) { + if (c.getX() >= 2383 && c.getX() <= 2385) { + c.getPlayerAssistant().movePlayer(2382, 3130, 0); + } else { + c.getPlayerAssistant().movePlayer(2383, 3133, 0); + } + } + break; + case 4437: + if (x == 2400 && y == 9512) { + c.getPlayerAssistant().movePlayer(2400, 9514, 0); + } else if (x == 2391 && y == 9501) { + c.getPlayerAssistant().movePlayer(2393, 9502, 0); + } else if (x == 2409 && y == 9503) { + c.getPlayerAssistant().movePlayer(2411, 9503, 0); + } else if (x == 2401 && y == 9494) { + c.getPlayerAssistant().movePlayer(2401, 9493, 0); + } + break; + case 1568: + if (x == 2399 && y == 3099) { + c.getPlayerAssistant().movePlayer(2399, 9500, 0); + } else { + c.getPlayerAssistant().movePlayer(2400, 9507, 0); + } + case 6281: + c.getPlayerAssistant().movePlayer(2370, 3132, 2); + break; + case 4472: + c.getPlayerAssistant().movePlayer(2370, 3132, 1); + break; + case 6280: + c.getPlayerAssistant().movePlayer(2429, 3075, 2); + break; + case 4471: + c.getPlayerAssistant().movePlayer(2429, 3075, 1); + break; + case 4406: + CastleWars.removePlayerFromCw(c); + break; + case 4407: + CastleWars.removePlayerFromCw(c); + break; + case 4458: + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.startAnimation(881); + c.getItemAssistant().addItem(4049, 1); + c.getActionSender().sendMessage("You get some bandages"); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4902: // sara flag + case 4377: + switch (CastleWars.getTeamNumber(c)) { + case 1: + CastleWars.returnFlag(c, c.playerEquipment[c.playerWeapon]); + break; + case 2: + CastleWars.captureFlag(c); + break; + } + break; + case 4903: // zammy flag + case 4378: + switch (CastleWars.getTeamNumber(c)) { + case 1: + CastleWars.captureFlag(c); + break; + case 2: + CastleWars.returnFlag(c, c.playerEquipment[c.playerWeapon]); + break; + } + break; + case 4461: // barricades + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage("You get a barricade!"); + c.getItemAssistant().addItem(4053, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4463: // explosive potion! + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage( + "You get an explosive potion!"); + c.getItemAssistant().addItem(4045, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4464: // pickaxe table + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage( + "You get a bronzen pickaxe for mining."); + c.getItemAssistant().addItem(1265, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4459: // tinderbox table + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage("You take a tinderbox!"); + c.getItemAssistant().addItem(590, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4462: + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage("You take some rope!"); + c.getItemAssistant().addItem(954, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4460: + if (System.currentTimeMillis() - c.miscTimer > 1200) { + c.getActionSender().sendMessage("You take a rock!"); + c.getItemAssistant().addItem(4043, 1); + c.miscTimer = System.currentTimeMillis(); + } + break; + case 4900: + case 4901: + CastleWars.pickupFlag(c); + default: + break; + + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWars.java b/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWars.java new file mode 100644 index 00000000..2d9084ca --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/castlewars/CastleWars.java @@ -0,0 +1,857 @@ +package redone.game.content.minigames.castlewars; + +import java.util.HashMap; +import java.util.Iterator; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.util.Misc; + +/** + * @Author Sanity for base + * @Author Satan666 + * @Author Andrew fixing it up + */ + +public class CastleWars { + + /* + * Game timers. + */ + private static final int GAME_TIMER = 200; // 1500 * 600 = 900000ms = 15 + // minutes + private static final int GAME_START_TIMER = 30; + /* + * Hashmap for the waitingroom players + */ + private static HashMap waitingRoom = new HashMap(); + /* + * hashmap for the gameRoom players + */ + private static HashMap gameRoom = new HashMap(); + /* + * The coordinates for the waitingRoom both sara/zammy + */ + private static final int[][] WAIT_ROOM = { { 2377, 9485 }, // sara + { 2421, 9524 } // zammy + }; + /* + * The coordinates for the gameRoom both sara/zammy + */ + private static final int[][] GAME_ROOM = { { 2426, 3076 }, // sara + { 2372, 3131 } // zammy + }; + private static final int[][] FLAG_STANDS = { { 2429, 3074 }, // sara + // {X-Coord, + // Y-Coord) + { 2370, 3133 } // zammy + }; + /* + * Scores for saradomin and zamorak! + */ + private static int[] scores = { 0, 0 }; + /* + * Booleans to check if a team's flag is safe + */ + private static int zammyFlag = 0; + private static int saraFlag = 0; + /* + * Zamorak and saradomin banner/capes item ID's + */ + public static final int SARA_BANNER = 4037; + public static final int ZAMMY_BANNER = 4039; + public static final int SARA_CAPE = 4041; + public static final int ZAMMY_CAPE = 4042; + public static final int SARA_HOOD = 4513; + public static final int ZAMMY_HOOD = 4515; + + public static boolean deleteCastleWarsItems(Client c, int itemId) { + int[] items = { 4049, 4045, 4053, 4042, 4041, 4037, 4039, 4043 }; + for (int item : items) { + int amount = c.getItemAssistant().getItemCount(item); + if (itemId == item && !isInCw(c)) { + c.getItemAssistant().deleteItem(item, amount); + c.getActionSender().sendMessage("You shouldn't have " + ItemAssistant.getItemName(itemId) + " outside of castlewars!"); + return false; + } + } + return true; + } + + + private static final int[][] COLLAPSE_ROCKS = { // collapsing rocks coords + { 2399, 2402, 9511, 9514 }, // north X Y coords sara 0 + { 2390, 2393, 9500, 9503 }, // east X Y coords sara 1 + { 2400, 2403, 9493, 9496 }, // south X Y coords zammy 2 + { 2408, 2411, 9502, 9505 } // west X Y coords zammy 3 + }; + + /* + * + */ + private static int properTimer = 0; + private static int timeRemaining = -1; + private static int gameStartTimer = GAME_START_TIMER; + private static boolean gameStarted = false; + + public static void resetPlayer(Client c) { + c.getPlayerAssistant().movePlayer(2440 + Misc.random(3), 3089 - Misc.random(3), 0); + deleteGameItems(c); + c.getActionSender().sendMessage("Cheating will not be tolerated."); + } + + public static void collapseCave(int cave) { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client teamPlayer = iterator.next(); + if (teamPlayer.absX > COLLAPSE_ROCKS[cave][0] + && teamPlayer.absX < COLLAPSE_ROCKS[cave][1] + && teamPlayer.absY > COLLAPSE_ROCKS[cave][2] + && teamPlayer.absY < COLLAPSE_ROCKS[cave][3]) { + int dmg = teamPlayer.playerLevel[3]; + teamPlayer.handleHitMask(dmg); + teamPlayer.dealDamage(99);// 99 damage? + } + } + } + + /** + * Method we use to add someone to the waitinroom in a different method, + * this will filter out some error messages + * + * @param player + * the player that wants to join + * @param team + * the team! + */ + public static void addToWaitRoom(Client player, int team) { + if (player == null) { + return; + } else if (gameStarted == true) { + player.getActionSender() + .sendMessage( + "There's already a Castle Wars going. Please wait a few minutes before trying again."); + return; + } else if (player.playerEquipment[player.playerHat] > 0 || player.playerEquipment[player.playerCape] > 0 || player.getItemAssistant().playerHasItem(player.playerCape) || player.getItemAssistant().playerHasItem(player.playerHat)) { + player.getActionSender().sendMessage("You may not bring capes or helmets in castle wars."); + return; + } + toWaitingRoom(player, team); + } + + /** + * Method we use to transfer to player from the outside to the waitingroom + * (: + * + * @param player + * the player that wants to join + * @param team + * team he wants to be in - team = 1 (saradomin), team = 2 + * (zamorak), team = 3 (random) + */ + public static void toWaitingRoom(Client player, int team) { + int[] food = { 391, 385, 379, 333, 329, 373, 361, 7946, 397, 1891, 365, + 339, 1942, 6701, 6705, 7056, 7054, 7058, 7060, 315, 347, 325, + 1897, 2289, 2293, 2297, 2301, 2309, 2323, 2325, 2327, 351, + 6703, 1963, 6883, 2108, 2118, 2116, 15272, 1961, 1959, 1989, + 1935, 1915, 1978, 712, 1907, 2120, 2114, 1973, 1993, 355, + 3144, 1917, 1909, 2955, 1969, 6701, 1893, 1895, 1965, 1899, + 1901, 2291, 2295, 2297, 2299, 2301, 2303, 1883, 6883, 2108, 2118, + 2116, 7928, 7929, 7930, 7931, 7932, 7933, 10476, 2130, 2003, 2011, + 4049}; + for (int element : food) { + if (player.getItemAssistant().playerHasItem(element)) { + player.getActionSender().sendMessage("You may not bring your own consumables inside of Castle Wars."); + return; + } + } + if (team == 1) { + if (getSaraPlayers() > getZammyPlayers() && getSaraPlayers() > 0) { + player.getActionSender().sendMessage( + "The saradomin team is full, try again later!"); + return; + } + if (getZammyPlayers() >= getSaraPlayers() || getSaraPlayers() == 0) { + player.getActionSender().sendMessage( + "You have been added to the Saradomin team."); + player.getActionSender().sendMessage( + "Next Game Begins In: " + + (gameStartTimer * 3 + timeRemaining * 3) + + " seconds."); + addCapes(player, SARA_CAPE); + waitingRoom.put(player, team); + player.getPlayerAssistant().movePlayer( + WAIT_ROOM[team - 1][0] + Misc.random(5), + WAIT_ROOM[team - 1][1] + Misc.random(5), 0); + } + } else if (team == 2) { + if (getZammyPlayers() > getSaraPlayers() && getZammyPlayers() > 0) { + player.getActionSender().sendMessage( + "The zamorak team is full, try again later!"); + return; + } + if (getZammyPlayers() <= getSaraPlayers() || getZammyPlayers() == 0) { + player.getActionSender() + .sendMessage( + "Random team: You have been added to the Zamorak team."); + player.getActionSender().sendMessage( + "Next Game Begins In: " + + (gameStartTimer * 3 + timeRemaining * 3) + + " seconds."); + addCapes(player, ZAMMY_CAPE); + waitingRoom.put(player, team); + player.getPlayerAssistant().movePlayer( + WAIT_ROOM[team - 1][0] + Misc.random(5), + WAIT_ROOM[team - 1][1] + Misc.random(5), 0); + } + } else if (team == 3) { + toWaitingRoom(player, getZammyPlayers() > getSaraPlayers() ? 1 : 2); + return; + } + } + + /** + * Method to add score to scoring team + * + * @param player + * the player who scored + * @param banner + * banner id! + */ + public static void returnFlag(Client player, int wearItem) { + if (player == null) { + return; + } + if (wearItem != SARA_BANNER && wearItem != ZAMMY_BANNER) { + return; + } + int team = gameRoom.get(player); + int objectId = -1; + int objectTeam = -1; + switch (team) { + case 1: + if (wearItem == SARA_BANNER) { + setSaraFlag(0); + objectId = 4902; + objectTeam = 0; + player.getActionSender().sendMessage( + "Returned the sara flag!"); + } else { + objectId = 4903; + objectTeam = 1; + setZammyFlag(0); + scores[0]++; // upping the score of a team; team 0 = sara, + // team 1 = zammy + player.getActionSender().sendMessage( + "The team of Saradomin scores 1 point!"); + } + break; + case 2: + if (wearItem == ZAMMY_BANNER) { + setZammyFlag(0); + objectId = 4903; + objectTeam = 1; + player.getActionSender().sendMessage( + "Returned the zammy flag!"); + } else { + objectId = 4902; + objectTeam = 0; + setSaraFlag(0); + scores[1]++; // upping the score of a team; team 0 = sara, + // team 1 = zammy + player.getActionSender().sendMessage( + "The team of Zamorak scores 1 point!"); + zammyFlag = 0; + } + break; + } + changeFlagObject(objectId, objectTeam); + player.getActionSender().createPlayerHints(10, -1); + player.playerEquipment[player.playerWeapon] = -1; + player.playerEquipmentN[player.playerWeapon] = 0; + player.getItemAssistant().updateSlot(3); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + player.getItemAssistant().resetItems(3214); + } + + /** + * Method that will capture a flag when being taken by the enemy team! + * + * @param player + * the player who returned the flag + * @param team + */ + public static void captureFlag(Client player) { + if (player.playerEquipment[player.playerWeapon] > 0) { + player.getActionSender() + .sendMessage( + "Please remove your weapon before attempting to get the flag again!"); + return; + } + int team = gameRoom.get(player); + if (team == 2 && saraFlag == 0) { // sara flag + setSaraFlag(1); + addFlag(player, SARA_BANNER); + createHintIcon(player, 1); + changeFlagObject(4377, 0); + } + if (team == 1 && zammyFlag == 0) { + setZammyFlag(1); + addFlag(player, ZAMMY_BANNER); + createHintIcon(player, 2); + changeFlagObject(4378, 1); + } + } + + /** + * Method that will add the flag to a player's weapon slot + * + * @param player + * the player who's getting the flag + * @param flagId + * the banner id. + */ + public static void addFlag(Client player, int flagId) { + player.playerEquipment[player.playerWeapon] = flagId; + player.playerEquipmentN[player.playerWeapon] = 1; + player.getItemAssistant().updateSlot(player.playerWeapon); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + } + + /** + * Method we use to handle the flag dropping + * + * @param player + * the player who dropped the flag/died + * @param flagId + * the flag item ID + */ + public static void dropFlag(Client player, int flagId) { + int object = -1; + switch (flagId) { + case SARA_BANNER: // sara + setSaraFlag(2); + object = 4900; + createFlagHintIcon(player.getX(), player.getY()); + break; + case ZAMMY_BANNER: // zammy + setZammyFlag(2); + object = 4901; + createFlagHintIcon(player.getX(), player.getY()); + break; + } + + player.playerEquipment[player.playerWeapon] = -1; + player.playerEquipmentN[player.playerWeapon] = 0; + player.getItemAssistant().updateSlot(player.playerWeapon); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + for (Client teamPlayer : gameRoom.keySet()) { + teamPlayer.getActionSender().object(object, player.getX(), + player.getY(), 0, 10); + } + } + + /** + * Method we use to pickup the flag when it was dropped/lost + * + * @param Player + * the player who's picking it up + * @param objectId + * the flag object id. + */ + public static void pickupFlag(Client player) { + switch (player.objectId) { + case 4900: // sara + if (player.playerEquipment[player.playerWeapon] > 0) { + player.getActionSender() + .sendMessage( + "Please remove your weapon before attempting to get the flag again!"); + return; + } + if (saraFlag != 2) { + return; + } + setSaraFlag(1); + addFlag(player, 4037); + break; + case 4901: // zammy + if (player.playerEquipment[player.playerWeapon] > 0) { + player.getActionSender() + .sendMessage( + "Please remove your weapon before attempting to get the flag again!"); + return; + } + if (zammyFlag != 2) { + return; + } + setZammyFlag(1); + addFlag(player, 4039); + break; + } + createHintIcon(player, gameRoom.get(player) == 1 ? 2 : 1); + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client teamPlayer = iterator.next(); + teamPlayer.getActionSender().createObjectHints(player.objectX, + player.objectY, 170, -1); + teamPlayer.getActionSender().object(-1, player.objectX, + player.objectY, 0, 10); + } + return; + } + + /** + * Hint icons appear to your team when a enemy steals flag + * + * @param player + * the player who took the flag + * @param t + * team of the opponent team. (: + */ + public static void createHintIcon(Client player, int t) { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client teamPlayer = iterator.next(); + // System.out.println(teamPlayer.playerName + " => Team => " + + // gameRoom.get(teamPlayer)); + // System.out.println("Desired team = " + t); + teamPlayer.getActionSender().createPlayerHints(10, -1); + if (gameRoom.get(teamPlayer) == t) { + // System.out.println("Created hint icons for playername " + + // teamPlayer.playerName + " and team number: " + t); + teamPlayer.getActionSender().createPlayerHints(10, + player.playerId); + teamPlayer.getPlayerAssistant().requestUpdates(); + } + } + } + + /** + * Hint icons appear to your team when a enemy steals flag + * + * @param player + * the player who took the flag + * @param t + * team of the opponent team. (: + */ + public static void createFlagHintIcon(int x, int y) { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client teamPlayer = iterator.next(); + teamPlayer.getActionSender().createObjectHints(x, y, 170, 2); + } + } + + /** + * This method is used to get the teamNumber of a certain player + * + * @param player + * @return + */ + public static int getTeamNumber(Client player) { + if (player == null) { + return -1; + } + if (gameRoom.containsKey(player)) { + return gameRoom.get(player); + } + return -1; + } + + /** + * The leaving method will be used on click object or log out + * + * @param player + * player who wants to leave + */ + public static void leaveWaitingRoom(Client player) { + if (player == null) { + System.out.println("player is null"); + return; + } + if (waitingRoom.containsKey(player)) { + waitingRoom.remove(player); + player.getActionSender().createPlayerHints(10, -1); + player.getActionSender().sendMessage("You left your team!"); + deleteGameItems(player); + player.getPlayerAssistant().movePlayer(2439 + Misc.random(4), + 3085 + Misc.random(5), 0); + return; + } + player.getPlayerAssistant().movePlayer(2439 + Misc.random(4), + 3085 + Misc.random(5), 0); + // System.out.println("Waiting room map does not contain " + + // player.playerName); + } + + public static void process() { + if (properTimer > 0) { + properTimer--; + return; + } else { + properTimer = 4; + } + if (gameStartTimer > 0) { + gameStartTimer--; + updatePlayers(); + } else if (gameStartTimer == 0) { + startGame(); + } + if (timeRemaining > 0) { + timeRemaining--; + updateInGamePlayers(); + } else if (timeRemaining == 0) { + endGame(); + } + } + + /** + * Method we use to update the player's interface in the waiting room + */ + public static void updatePlayers() { + Iterator iterator = waitingRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client player = iterator.next(); + if (player != null) { + player.getPlayerAssistant().sendFrame126( + "Next Game Begins In: " + + (gameStartTimer * 3 + timeRemaining * 3) + + " seconds.", 6570); + player.getPlayerAssistant().sendFrame126( + "Zamorak Players: " + getZammyPlayers() + ".", 6572); + player.getPlayerAssistant().sendFrame126( + "Saradomin Players: " + getSaraPlayers() + ".", 6664); + player.getPlayerAssistant().walkableInterface(6673); + } + } + } + + /** + * Method we use the update the player's interface in the game room + */ + public static void updateInGamePlayers() { + if (getSaraPlayers() > 0 && getZammyPlayers() > 0) { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client player = iterator.next(); + int config; + if (player == null) { + continue; + } + player.getPlayerAssistant().walkableInterface(11146); + player.getPlayerAssistant().sendFrame126( + "Zamorak = " + scores[1], 11147); + player.getPlayerAssistant().sendFrame126( + scores[0] + " = Saradomin", 11148); + player.getPlayerAssistant().sendFrame126( + timeRemaining * 3 + " secs", 11155); + config = 2097152 * saraFlag; + player.getPlayerAssistant().sendFrame87(378, config); + config = 2097152 * zammyFlag; // flags 0 = safe 1 = taken 2 + // = dropped + player.getPlayerAssistant().sendFrame87(377, config); + } + } + } + + /* + * Method that will start the game when there's enough players. + */ + public static void startGame() { + if (getSaraPlayers() < 1 || getZammyPlayers() < 1) { + gameStartTimer = GAME_START_TIMER; + return; + } + gameStartTimer = -1; + System.out.println("Starting Castle Wars game."); + gameStarted = true; + timeRemaining = GAME_TIMER / 2; + Iterator iterator = waitingRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client player = iterator.next(); + int team = waitingRoom.get(player); + if (player == null) { + continue; + } + player.getPlayerAssistant().walkableInterface(-1); + player.getPlayerAssistant().movePlayer( + GAME_ROOM[team - 1][0] + Misc.random(3), + GAME_ROOM[team - 1][1] - Misc.random(3), 1); + player.getPlayerAssistant().movePlayer( + GAME_ROOM[team - 1][0] + Misc.random(3), + GAME_ROOM[team - 1][1] - Misc.random(3), 1); + gameRoom.put(player, team); + } + waitingRoom.clear(); + } + + /* + * Method we use to end an ongoing cw game. + */ + public static void endGame() { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client player = iterator.next(); + int team = gameRoom.get(player); + if (player == null) { + continue; + } + player.cwGames++; + player.getPlayerAssistant().movePlayer(2440 + Misc.random(3), + 3089 - Misc.random(3), 0); + player.getActionSender().sendMessage( + "Castle Wars: The Castle Wars game has ended!"); + player.getActionSender().sendMessage( + "Castle Wars: Kills: " + player.cwKills + " Deaths: " + + player.cwDeaths + " Games Played: " + + player.cwGames + "."); + player.getActionSender().createPlayerHints(10, -1); + deleteGameItems(player); + player.isDead = false; + for (int i = 0; i < 25; i++) { + player.playerLevel[i] = player + .getLevelForXP(player.playerXP[i]); + player.getPlayerAssistant().refreshSkill(i); + } + if (scores[0] == scores[1]) { + player.getItemAssistant().addItem(4067, 1); + player.getActionSender().sendMessage( + "Tie game! You earn 1 ticket!"); + } else if (team == 1) { + if (scores[0] > scores[1]) { + player.getItemAssistant().addItem(4067, 2); + player.getActionSender() + .sendMessage( + "You won the game. You received 2 Castle Wars Tickets!"); + } else if (scores[0] < scores[1]) { + player.getItemAssistant().addItem(4067, 0); + player.getActionSender().sendMessage( + "You lost the game. You received no tickets!"); + } + } else if (team == 2) { + if (scores[1] > scores[0]) { + player.getItemAssistant().addItem(4067, 2); + player.getActionSender() + .sendMessage( + "You won the game. You received 2 Castle Wars Tickets!"); + } else if (scores[1] < scores[0]) { + player.getItemAssistant().addItem(4067, 0); + player.getActionSender().sendMessage( + "You lost the game. You received no tickets!"); + ; + } + } + } + resetGame(); + } + + /** + * reset the game variables + */ + public static void resetGame() { + changeFlagObject(4902, 0); + changeFlagObject(4903, 1); + setSaraFlag(0); + setZammyFlag(0); + timeRemaining = -1; + System.out.println("Ending Castle Wars game."); + gameStartTimer = GAME_START_TIMER; + gameStarted = false; + gameRoom.clear(); + } + + /** + * Method we use to remove a player from the game + * + * @param player + * the player we want to be removed + */ + public static void removePlayerFromCw(Client player) { + if (player == null) { + System.out.println("Error removing player from castle wars [REASON = null]."); + return; + } + if (gameRoom.containsKey(player)) { + /* + * Logging/leaving with flag + */ + if (player.getItemAssistant().playerHasEquipped(SARA_BANNER)) { + player.getItemAssistant().removeItem(player.playerEquipment[3], + 3); + setSaraFlag(0); // safe flag + } else if (player.getItemAssistant() + .playerHasEquipped(ZAMMY_BANNER)) { + player.getItemAssistant().removeItem(player.playerEquipment[3], + 3); + setZammyFlag(0); // safe flag + } + deleteGameItems(player); + player.getPlayerAssistant().movePlayer(2440, 3089, 0); + player.getActionSender().sendMessage( + "The Casle Wars game has ended for you!"); + player.getActionSender().sendMessage( + "Kills: " + player.cwKills + " Deaths: " + player.cwDeaths + + "."); + player.getActionSender().createPlayerHints(10, -1); + gameRoom.remove(player); + } + if (getZammyPlayers() <= 0 || getSaraPlayers() <= 0) { + endGame(); + } + } + + /** + * Will add a cape to a player's equip + * + * @param player + * the player + * @param capeId + * the capeId + */ + public static void addCapes(Client player, int capeId) { + player.playerEquipment[player.playerCape] = capeId; + player.playerEquipmentN[player.playerCape] = 1; + player.getItemAssistant().updateSlot(player.playerCape); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + } + + /** + * This method will delete all items received in game. Easy to add items to + * the array. (: + * + * @param player + * the player who want the game items deleted from. + */ + + public static void deleteGameItems(Client player) { + switch (player.playerEquipment[3]) { + case 4037: + case 4039: + player.playerEquipment[3] = -1; + player.playerEquipmentN[3] = 0; + player.getItemAssistant().updateSlot(player.playerWeapon); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + System.out.println(player.playerName + " removed weapon:" + + player.playerEquipment[3]); + break; + } + switch (player.playerEquipment[1]) { + case 4042: + case 4041: + player.playerEquipment[1] = -1; + player.playerEquipmentN[1] = 0; + player.getItemAssistant().updateSlot(player.playerCape); + player.appearanceUpdateRequired = true; + player.updateRequired = true; + System.out.println(player.playerName + " removed cape: " + + player.playerEquipment[1]); + break; + } + int[] items = { 4049, 1265, 4045, 4053, 4042, 4041, 4037, 4039, 4043 }; + //4049, 4045, 4053, 4042, 4041, 4037, 4039 + for (int item : items) { + if (player.getItemAssistant().playerHasItem(item)) { + player.getItemAssistant().deleteItem2(item, + player.getItemAssistant().getItemAmount(item)); + } + } + } + + /** + * Methode we use to get the zamorak players + * + * @return the amount of players in the zamorakian team! + */ + public static int getZammyPlayers() { + int players = 0; + Iterator iterator = !waitingRoom.isEmpty() ? waitingRoom + .values().iterator() : gameRoom.values().iterator(); + while (iterator.hasNext()) { + if (iterator.next() == 2) { + players++; + } + } + return players; + } + + /** + * Method we use to get the saradomin players! + * + * @return the amount of players in the saradomin team! + */ + public static int getSaraPlayers() { + int players = 0; + Iterator iterator = !waitingRoom.isEmpty() ? waitingRoom + .values().iterator() : gameRoom.values().iterator(); + while (iterator.hasNext()) { + if (iterator.next() == 1) { + players++; + } + } + return players; + } + + /** + * Method we use for checking if the player is in the gameRoom + * + * @param player + * player who will be checking + * @return + */ + public static boolean isInCw(Player player) { + return gameRoom.containsKey(player); + } + + /** + * Method we use for checking if the player is in the waitingRoom + * + * @param player + * player who will be checking + * @return + */ + public static boolean isInCwWait(Player player) { + return waitingRoom.containsKey(player); + } + + /** + * Method to make sara flag change status 0 = safe, 1 = taken, 2 = dropped + * + * @param status + */ + public static void setSaraFlag(int status) { + saraFlag = status; + } + + /** + * Method to make zammy flag change status 0 = safe, 1 = taken, 2 = dropped + * + * @param status + */ + public static void setZammyFlag(int status) { + zammyFlag = status; + } + + /** + * Method we use for the changing the object of the flag stands when + * capturing/returning flag + * + * @param objectId + * the object + * @param team + * the team of the player + */ + public static void changeFlagObject(int objectId, int team) { + Iterator iterator = gameRoom.keySet().iterator(); + while (iterator.hasNext()) { + Client teamPlayer = iterator.next(); + teamPlayer.getActionSender().object(objectId, + FLAG_STANDS[team][0], FLAG_STANDS[team][1], 0, 10); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/minigames/trawler/GroupMinigame.java b/2006Redone Server/src/redone/game/content/minigames/trawler/GroupMinigame.java new file mode 100644 index 00000000..c4a2cb13 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/trawler/GroupMinigame.java @@ -0,0 +1,9 @@ +package redone.game.content.minigames.trawler; + +public abstract class GroupMinigame { + + public abstract WaitingRoom getWaitingRoom(); + + public abstract String getWaitingRoomMessage(); + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/minigames/trawler/Trawler.java b/2006Redone Server/src/redone/game/content/minigames/trawler/Trawler.java new file mode 100644 index 00000000..fc9e5895 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/trawler/Trawler.java @@ -0,0 +1,879 @@ +package redone.game.content.minigames.trawler; + +import java.util.ArrayList; +import java.util.Random; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.GameItem; +import redone.game.players.Client; +import redone.game.players.Player; + +public class Trawler extends GroupMinigame { + + /* + * + */ + + /* + * The waiting room for the minigame + */ + + public WaitingRoom waiting_room = new TrawlerWaitingRoom(this); + + /* + * The arraylist containing all of the players + */ + + public ArrayList players = new ArrayList(); + + /* + * The arraylist containing all of the players that need to removed Created + * so that an instance wouldn't have to be created every time the updating + * is called simply just call the clear method + */ + + public ArrayList players_to_remove = new ArrayList(); + + /* + * A unique id, which the cycle event handler may use to stop the trawlers + * event + */ + + public static final int CYCLE_ID = 222; + + /* + * Random object + */ + + private final Random random_gen = new Random(); + + /* + * All of the animations needed for the minigame + */ + + final int climb_up = 828; + final int climb_down = 827; + final int swimming_walk = 772; + final int swimming_stand = 773; + final int net_interaction = 832; + final int SWIM_MOVEMENT_ANIMATION = 772; + final int SWIM_STILL_ANIMATION = 773; + + /* + * All of the items needed for the minigame + */ + + final int bailing_bucket_full = 585; + final int bailing_bucket_empty = 583; + final int rope = 954; + final int swamp_paste = 1941; + + /* + * All of the objects needed for the minigame + */ + + final int perfect_wall = 2177; + final int patched_wall = 2168; + final int leaking_wall = 2167; + + /* + * Variables that will be changing as the minigame progresses + */ + + private int water_level = 0; + private boolean net_ripped = false; + public int fish_caught = 0; + private boolean[] wall_status = new boolean[16]; + private boolean isSunk = false; + private int game_time = 10; + private boolean started = false; + boolean in_progress = false; + + /* + * Contains the coordinates for each wall, since all of the objects of the + * same id's and the methods needed to get them + */ + + public enum Wall { + + North_One_Normal(0, 1885, 4826), North_Two_Normal(1, 1886, 4826), North_Three_Normal( + 2, 1887, 4826), North_Four_Normal(3, 1888, 4826), North_Five_Normal( + 4, 1889, 4826), North_Six_Normal(5, 1890, 4826), North_Seven_Normal( + 6, 1891, 4826), North_Eight_Normal(7, 1892, 4826), South_One_Normal( + 8, 1885, 4823), South_Two_Normal(9, 1886, 4823), South_Three_Normal( + 10, 1887, 4823), South_Four_Normal(11, 1888, 4823), South_Five_Normal( + 12, 1889, 4823), South_Six_Normal(13, 1890, 4823), South_Seven_Normal( + 14, 1891, 4823), South_Eight_Normal(15, 1892, 4823), North_One_Sinking( + 0, 2013, 4826), North_Two_Sinking(1, 2014, 4826), North_Three_Sinking( + 2, 2015, 4826), North_Four_Sinking(3, 2016, 4826), North_Five_Sinking( + 4, 2017, 4826), North_Six_Sinking(5, 2018, 4826), North_Seven_Sinking( + 6, 2019, 4826), North_Eight_Sinking(7, 2020, 4826), South_One_Sinking( + 8, 2013, 4823), South_Two_Sinking(9, 2014, 4823), South_Three_Sinking( + 10, 2015, 4823), South_Four_Sinking(11, 2016, 4823), South_Five_Sinking( + 12, 2017, 4823), South_Six_Sinking(13, 2018, 4823), South_Seven_Sinking( + 14, 2019, 4823), South_Eight_Sinking(15, 2020, 4823); + + int index, x, y; + + Wall(int index, int x, int y) { + this.index = index; + this.y = y; + this.x = x; + } + + public static int getIndex(int x, int y) { + for (Wall s : Wall.values()) { + if (s != null) { + if (s.x == x && s.y == y) { + return s.index; + } + } + } + return -1; + } + + public static Wall getWallByIndex(int index, boolean sinking) { + for (Wall w : Wall.values()) { + if (w.index == index) { + if (sinking && w.x < 2000) { + continue; + } else { + return w; + } + } + } + return null; + } + + } + + /* + * Gets the amount of walls that are not broken + */ + + public int getAvaliableWallSize() { + int toReturn = 0; + for (int j = 0; j < wall_status.length; j++) { + if (wall_status[j] == false) { + toReturn++; + } + } + return toReturn; + } + + /* + * Generates the indexes of the walls that are not broken + */ + + public int[] getAvaliableWalls() { + int[] toReturn = new int[getAvaliableWallSize()]; + int index = 0; + for (int j = 0; j < wall_status.length; j++) { + if (wall_status[j] == false) { + toReturn[index] = j; + index++; + } + } + return toReturn; + } + + /* + * Sets a random wall as broken & updates it + */ + + public void breakRandomWall() { + try { + final int[] walls = getAvaliableWalls(); + int random = walls[random_gen.nextInt(walls.length)]; + wall_status[random] = true; + updateWall(random); + } catch (Exception e) {// Exception should never occur + + } + } + + /* + * Removes every wall and resets them back to default + */ + + public void resetWalls() { + for(Wall w : Wall.values()) { + if(w != null) { + Server.objectHandler.removeObject(Server.objectHandler.getObjectByPosition(w.x, w.y)); + Server.objectHandler.createAnObject(perfect_wall, w.x,w.y, w.y == 4826 ? 1 : 3); + } + } + } + + /* + * Updates a wall based on index + */ + + public void updateWall(int index) { + Wall w = Wall.getWallByIndex(index, isSunk); + if (w == null) { + System.out.println("null"); + return; + } + Server.objectHandler.removeObject(Server.objectHandler.getObjectByPosition(w.x, w.y)); + Server.objectHandler.removeObject(Server.objectHandler.getObjectByPosition(w.x + (isSunk ? -128 : 128), w.y)); + if (wall_status[index] == true) { + Server.objectHandler.createAnObject(leaking_wall, w.x, w.y, + w.y == 4826 ? 1 : 3); + if (isSunk) + Server.objectHandler.createAnObject(leaking_wall, w.x - 128, + w.y, w.y == 4826 ? 1 : 3); + else + Server.objectHandler.createAnObject(leaking_wall, w.x + 128, + w.y, w.y == 4826 ? 1 : 3); + } else { + Server.objectHandler.createAnObject(patched_wall, w.x, w.y, + w.y == 4826 ? 1 : 3); + if (isSunk) + Server.objectHandler.createAnObject(patched_wall, w.x - 128, + w.y, w.y == 4826 ? 1 : 3); + else + Server.objectHandler.createAnObject(patched_wall, w.x + 128, + w.y, w.y == 4826 ? 1 : 3); + } + } + + /* + * Updates every play in the game's interface, if the player is null they + * are removed from the game + */ + + public void playerUpdates() { + for (Client p : players) { + if (p != null) { + p.asClient() + .getPlayerAssistant() + .sendFrame126(net_ripped ? "@red@Ripped" : "@gre@Okay", + 11935); + p.getPlayerAssistant().sendFrame126("" + fish_caught, 11937); + p.getPlayerAssistant().sendFrame126(game_time + " mins", 11938); + p.getPlayerAssistant().sendFrame20(391, water_level); + } else { + players_to_remove.add(p); + } + } + if (players_to_remove.size() > 0) { + for (Player p : players_to_remove) { + players.remove(p); + } + players_to_remove.clear(); + } + } + + /* + * Does everything needed when the game starts + */ + + public void onStart() { + resetWalls(); + waiting_room.setActive(false); + water_level = 0; + fish_caught = 0; + net_ripped = false; + isSunk = false; + started = false; + game_time = 10; + in_progress = true; + for (int j = 0; j < wall_status.length; j++) { + wall_status[j] = false; + } + playerUpdates(); + for (Client p : players) { + if (p != null) { + p.getPlayerAssistant().removeAllSidebars(); + p.getPlayerAssistant().sendMapState(2); + p.getPlayerAssistant().showInterface(3281); + p.getPlayerAssistant().sendFrame20(75, 11); + p.getPlayerAssistant().movePlayer(1885, 4825, 1); + p.getPlayerAssistant().sendFrame126("", 11936); + } + } + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + container.stop(); + } + + @Override + public void stop() { + for (Client p : players) { + if (p != null) { + p.getPlayerAssistant().sendSidebars(); + p.getPlayerAssistant().showInterface(5596); + p.getPlayerAssistant().sendMapState(0); + } + } + started = true; + startGameTimer(); + } + }, 25); + } + + /* + * Does everything needed when the game ends + */ + + public void onEndLose() { + for (Client p : players) { + if (p != null) { + p.getPlayerAssistant().movePlayer(1885, 4825, 1); + } + } + } + + /* + * Essentially starts the game + */ + + public void start() { + + CycleEventHandler.getSingleton().stopEvents(CYCLE_ID);// Stops any other + // events using + // the trawler's + // id + onStart(); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (started) { + tick(); + if (end() > 0) { + if (end() == 1) { + setSwimmingAnimations();// Loss + movePlayersLoss(); + players.clear(); + container.stop(); + } else if (end() == 2) { + for (Client p : players) { + if (p != null) { + p.fishingTrawlerReward = playerReward(p); + } + } + movePlayerWin(players); + container.stop(); + } + container.stop(); + } + } + } + + @Override + public void stop() { + waiting_room.reset(); + waiting_room.setActive(true); + in_progress = false; + game_time = 0; + players.clear(); + //System.out.println("should start again now"); + waiting_room.startWaiting(); + } + }, 10); + } + + /* + * Everything that should be done on one tick of the minigame + */ + + public void tick() { + int random; + random = random_gen.nextInt(2) + 1; + for (int j = 0; j < random; j++) { + breakRandomWall(); + } + ripNet(); + increaseWaterLevel(); + switchBoats(); + if (!net_ripped) + increaseFish(); + playerUpdates(); + } + + /* + * Randomly breaks the net + */ + + public void ripNet() { + if (!net_ripped) { + if (random_gen.nextInt(10) > 7) { + net_ripped = true; + } + } + } + + /* + * Adds water depending on the amount of leaks in the ship + */ + + public void increaseWaterLevel() { + int leaks = 16 - getAvaliableWalls().length; + water_level += (leaks / 2) + random_gen.nextInt(leaks * random_gen.nextInt(2) + 1); + } + + /* + * Fixes the holes in the ship + */ + + public void fixHole(Client p, int x, int y) { + if (doAction(p)) { + if (p.getItemAssistant().playerHasItem(swamp_paste)) { + int index = Wall.getIndex(x, y); + if (index >= 0) { + p.getItemAssistant().deleteItem2(swamp_paste, 1); + p.startAnimation(832); + wall_status[index] = false; + updateWall(index); + p.turnPlayerTo(x, y + (y == 4826 ? 1 : -1)); + } + } else { + p.getActionSender().sendMessage("You don't have any swamp paste."); + } + } + } + + /* + * Moves the player to the top of the boat + */ + + public void upLadder(Client p, int obX, int obY) { + if (doAction(p)) { + if (!isSunk) { + p.startAnimation(climb_up); + p.getPlayerAssistant() + .movePlayer(obX == 1884 ? 1885 : 1892, obY, 1); + } else { + p.startAnimation(climb_up); + p.getPlayerAssistant().movePlayer(obX == 2021 ? 2020 : 2013, obY, 1); + } + } + } + + /* + * Moves the player to the top of the boat + */ + + public void downLadder(Client p, int obX, int obY) { + if (doAction(p)) { + if (!isSunk) { + p.startAnimation(climb_down); + p.getPlayerAssistant() + .movePlayer(obX == 1884 ? 1885 : 1892, obY, 0); + } else { + p.startAnimation(climb_down); + p.getPlayerAssistant().movePlayer(obX == 2021 ? 2020 : 2013, obY, 0); + } + } + } + + /* + * Fixes the net on the ship + */ + + public void fixNet(Client p) { + if (doAction(p)) { + if (!net_ripped) { + p.getActionSender().sendMessage("The net is not ripped."); + return; + } + if (!p.getItemAssistant().playerHasItem(rope)) { + p.getActionSender().sendMessage( + "You need a rope before attempting to fix the net!"); + return; + } + p.startAnimation(net_interaction); + if (skillCheck(p.playerLevel[p.playerCrafting], 1, 0)) { + p.getItemAssistant().deleteItem(rope, 1); + net_ripped = false; + playerUpdates(); + p.getActionSender().sendMessage("You successfully fix the net!"); + } else { + p.getItemAssistant().deleteItem(rope, 1); + p.getActionSender().sendMessage("You failed to repair the net!"); + } + } + } + + /* + * Returns true if the player can complete the interaction + */ + + public boolean doAction(Player p) { + if (!players.contains(p)) { + return false; + } + if (System.currentTimeMillis() - p.lastFishingTrawlerInteraction >= 1600) { + p.lastFishingTrawlerInteraction = System.currentTimeMillis(); + return true; + } else { + return false; + } + } + + /* + * Bails water out of the boat + */ + + public void bail(Client p) { + if (doAction(p)) { + if (p.getItemAssistant().playerHasItem(bailing_bucket_empty)) { + p.startAnimation(827); + p.getItemAssistant() + .replaceItem(bailing_bucket_empty, bailing_bucket_full); + water_level -= random_gen.nextInt(3) + 1; + } + } + } + + /* + * Bails water out of the boat + */ + + public void emptyBucket(Client p) { + if (doAction(p)) { + if (p.getItemAssistant().playerHasItem(bailing_bucket_full)) { + p.startAnimation(832); + p.getItemAssistant() + .replaceItem(bailing_bucket_full, bailing_bucket_empty); + } + } + } + + /* + * Adds a random amount of fish to the total fish reaward, based off of the + * amount of players in the game + */ + + public void increaseFish() { + fish_caught += random_gen.nextInt(players.size() + 2); + } + + /* + * If it returns true, the minigame will end + */ + + public int end() { + if (players.size() == 0) { + return 1; + } + if (water_level >= 100) { + return 1; + } + if (game_time == 0) { + return 2; + } + return 0; + } + + /* + * Sets the swimming animations + */ + + public void setSwimmingAnimations() { + for(Client p : players) { + if (p != null) { + p.prevplayerWalkIndex = p.playerWalkIndex; + p.prevPlayerStandIndex = p.playerStandIndex; + p.prevPrevPlayerRunIndex = p.playerRunIndex; + p.prevPlayerTurnIndex = p.playerTurnIndex; + p.prevPlayerTurn180Index = p.playerTurn180Index; + p.prevPlayerTurn90CCWIndex = p.playerTurn90CCWIndex; + p.prevPlayerTurn90CWIndex = p.playerTurn90CWIndex; + p.prevRunning2 = p.isRunning2; + p.isRunning2 = false; + p.playerRunIndex = SWIM_MOVEMENT_ANIMATION; + p.playerStandIndex = SWIM_STILL_ANIMATION; + p.playerWalkIndex = SWIM_MOVEMENT_ANIMATION; + p.playerTurnIndex = SWIM_STILL_ANIMATION; + p.playerTurn90CWIndex = SWIM_STILL_ANIMATION; + p.playerTurn90CCWIndex = SWIM_STILL_ANIMATION; + p.playerTurn180Index = SWIM_STILL_ANIMATION; + p.getPlayerAssistant().requestUpdates(); + p.getPlayerAssistant().closeAllWindows(); + } + } + } + + /* + * Switches boats based on the water level + */ + + public void switchBoats() { + if (water_level > 25 && !isSunk) { + isSunk = true; + for (int j = 0; j < players.size(); j++) { + if (players.get(j) != null) { + players.get(j).stopMovement(); + players.get(j).getPlayerAssistant() + .movePlayer(players.get(j).absX + 128, + players.get(j).absY, + players.get(j).heightLevel); + } + } + } + if (water_level <= 25 && isSunk) { + isSunk = false; + for (int j = 0; j < players.size(); j++) { + if (players.get(j) != null) { + players.get(j).stopMovement(); + players.get(j).getPlayerAssistant(). + movePlayer(players.get(j).absX - 128, + players.get(j).absY, + players.get(j).heightLevel); + } + } + } + } + + /* + * Starts the timer for the game + */ + + public void startGameTimer() { + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (game_time == 0) { + container.stop(); + } else { + game_time--; + waiting_room.messageWaiting("The trawler will return in "+game_time+ (game_time == 1 ? " minute" : " minutes")+"!"); + } + } + + @Override + public void stop() { + waiting_room.reset(); + waiting_room.setActive(true); + in_progress = false; + players.clear(); + waiting_room.startWaiting(); + } + }, 80); + } + + /* + * Slightly increases chance of higher level fish with levels + */ + + public int chanceByLevel(Player p, int fish) { + switch (fish) { + case 381: + if (p.playerLevel[p.playerFishing] >= 81 + && p.playerLevel[p.playerFishing] < 90) { + return 5; + } else if (p.playerLevel[p.playerFishing] >= 90 + && p.playerLevel[p.playerFishing] < 99) { + return 9; + } else if (p.playerLevel[p.playerFishing] == 99) { + return 13; + } + return 0; + case 395: + if (p.playerLevel[p.playerFishing] >= 79 + && p.playerLevel[p.playerFishing] < 85) { + return 8; + } else if (p.playerLevel[p.playerFishing] >= 85 + && p.playerLevel[p.playerFishing] < 95) { + return 13; + } else if (p.playerLevel[p.playerFishing] >= 95) { + return 17; + } + return 0; + } + return 0; + } + + /* + * Loss teleporting + */ + public void movePlayersLoss() { + for (Client p : players) { + if (p != null) { + p.getPlayerAssistant().movePlayer(1952, 4826, 0); + } + } + in_progress = false; + game_time = 0; + players.clear(); + waiting_room.startWaiting(); + } + + /* + * Win teleporting + */ + + public void movePlayerWin(final ArrayList pl) { + for (Client p : pl) { + if (p != null) { + p.getPlayerAssistant().removeAllSidebars(); + p.getPlayerAssistant().sendMapState(2); + p.getPlayerAssistant().showInterface(3281); + p.getPlayerAssistant().sendFrame20(75, 12); + p.getPlayerAssistant().movePlayer(2666, 3161, 0); + //p.getPlayerAssistant().movePlayer(2804, 3421, 0); + } + } + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + container.stop(); + } + + @Override + public void stop() { + for (Client p : pl) { + if (p != null) { + p.getPlayerAssistant().sendSidebars(); + p.getPlayerAssistant().sendMapState(0); + p.getPlayerAssistant().closeAllWindows(); + } + } + in_progress = false; + game_time = 0; + players.clear(); + waiting_room.startWaiting(); + } + }, 25); + } + + /* + * Adds the rewards to each player + */ + + public ArrayList playerReward(Client p) { + ArrayList toReturn = new ArrayList(); + boolean turtles = true; + boolean mantas = true; + boolean lobsters = true; + boolean swordfish = true; + int turt = 0; + int manta = 0; + int lobs = 0; + int swordFish = 0; + int junk = 0; + int done = 0; + while (done != fish_caught) { + done++; + int random = random_gen.nextInt(100); + if (random >= 85 - chanceByLevel(p, 381)) { + if (mantas) { + manta++; + } + } else if (random >= 70 - chanceByLevel(p, 381)) { + if (turtles) { + turt++; + } + } else if (random >= 40) { + if (swordfish) { + swordFish++; + } + } else if (random >= 5) { + if (lobsters) { + lobs++; + } + } else { + junk++; + } + } + int xpToAdd = 0; + if (manta > 0) { + toReturn.add(new GameItem(389, manta)); + if (p.playerLevel[p.playerFishing] >= 81) { + xpToAdd += (manta * 46 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (turt > 0) { + toReturn.add(new GameItem(395, turt)); + if (p.playerLevel[p.playerFishing] >= 79) { + xpToAdd += (manta * 38 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (lobs > 0) { + toReturn.add(new GameItem(377, lobs)); + if (p.playerLevel[p.playerFishing] >= 40) { + xpToAdd += (manta * 90 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (swordFish > 0) { + toReturn.add(new GameItem(371, swordFish)); + if (p.playerLevel[p.playerFishing] >= 50) { + xpToAdd += (manta * 100 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (junk > 0) + toReturn.add(new GameItem(685, junk)); + p.getPlayerAssistant().addSkillXP(xpToAdd, p.playerFishing); + return toReturn; + } + + /* + * Randomly returns true, players craft level increases chance of returning + * true + */ + + public boolean skillCheck(int level, int levelRequired, int itemBonus) { + double chance = 0.0; + double baseChance = Math.pow(10d - levelRequired / 10d, 2d) / 2d; + chance = baseChance + ((level - levelRequired) / 2d) + + (itemBonus / 10d); + return chance >= (new Random().nextDouble() * 100.0); + } + + @Override + public WaitingRoom getWaitingRoom() { + return waiting_room; + } + + @Override + public String getWaitingRoomMessage() { + return null; + } + + public boolean inProgress() { + return in_progress; + } + + public int getGameTime() { + return game_time; + } + + public void resetRewardsInterface(Client c) { + for(int j = 0; j < 45; j++) { + c.getPlayerAssistant().sendFrame34(-1, j, 4640, -1); + } + } + public void showReward(Client c) { + resetRewardsInterface(c); + c.inFishingTrawlerRewardsInterface = true; + c.getPlayerAssistant().showInterface(4564); + for(int j = 0; j < c.fishingTrawlerReward.size(); j++) { + c.getPlayerAssistant().sendFrame34(c.fishingTrawlerReward.get(j).id, j, 4640, c.fishingTrawlerReward.get(j).amount); + } + } + + public void updateRewardSlot(Client c, int slot) { + c.inFishingTrawlerRewardsInterface = true; + c.getPlayerAssistant().sendFrame34(c.fishingTrawlerReward.get(slot).id, slot, 4640, c.fishingTrawlerReward.get(slot).amount); + if(slot != 4 && c.fishingTrawlerReward.size() == 5) { + c.getPlayerAssistant().sendFrame34(c.fishingTrawlerReward.get(4).id, 4, 4640, c.fishingTrawlerReward.get(4).amount); + } + } + + public int getRewardSlot(int j) { + if(j < 4) { + return j; + } else { + return j+1; + } + } + + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/minigames/trawler/TrawlerWaitingRoom.java b/2006Redone Server/src/redone/game/content/minigames/trawler/TrawlerWaitingRoom.java new file mode 100644 index 00000000..e4969bc0 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/trawler/TrawlerWaitingRoom.java @@ -0,0 +1,90 @@ +package redone.game.content.minigames.trawler; + +import redone.game.players.Client; +import redone.game.players.Location; + +public class TrawlerWaitingRoom extends WaitingRoom { + + private Trawler trawler; + private Location boat = new Location(2668,2674,3165,3185); + //private Location boat = new Location(2808, 2811,3415,3425); + + + public TrawlerWaitingRoom(Trawler trawler) { + super(2, 1); + this.trawler = trawler; + } + + @Override + public boolean startGame() { + if(trawler.inProgress()) { + return false; + } + if(waiting.size() < minimumPlayers) { + return false; + } + return true; + } + + @Override + public void onStart() { + trawler.players.clear(); + /*for(Iterator i = waiting.iterator(); i.hasNext();) { + Player p = i.next(); + if(!boat.playerInArea(p)) { + i.remove(); // Allowed with an iterator + } + }*/ + + for(Client p : waiting) { + trawler.players.add(p); + } + + trawler.start(); + waiting.clear(); + } + + @Override + public void onLeave(Client p) { + //p.asClient().getPA().movePlayer(2804, 3421, 0); + p.asClient().getPlayerAssistant().movePlayer(2676, 3170, 0); + } + + @Override + public void onJoin(Client p) { + //p.asClient().getPA().movePlayer(2808, 3421, 1); + p.getPlayerAssistant().movePlayer(2672, 3170, 1); + if(!isActive()) { + p.getActionSender().sendMessage(trawler.getGameTime() == 0 ? "The trawler will be returning in less than a minute!" : "The trawler will return in "+trawler.getGameTime() + (trawler.getGameTime() == 1 ? " minute" : " minutes")+"!"); + } else { + p.getActionSender().sendMessage(getTimeRemaining() == 0 ? "The trawler will be leaving in less than a minute!" : "The trawler will leave in "+ getTimeRemaining() + (getTimeRemaining() == 1 ? " minute" : " minutes")+"!"); + } + } + + public Location getLocation() { + return boat; + } + + @Override + public void onTimeChange() { + for(Client p : waiting) { + if(!isActive()) { + p.getActionSender().sendMessage(trawler.getGameTime() == 0 ? "The trawler will be returning in less than a minute!" : "The trawler will return in "+trawler.getGameTime() + (trawler.getGameTime() == 1 ? " minute" : " minutes")+"!"); + } else { + p.getActionSender().sendMessage(getTimeRemaining() == 0 ? "The trawler will be leaving in less than a minute!" : "The trawler will leave in "+ getTimeRemaining() + (getTimeRemaining() == 1 ? " minute" : " minutes")+"!"); + } + } + } + + @Override + public boolean canStart() { + if(trawler.inProgress()) { + return false; + } + if(waiting.size() < minimumPlayers) { + return false; + } + return true; + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/minigames/trawler/WaitingRoom.java b/2006Redone Server/src/redone/game/content/minigames/trawler/WaitingRoom.java new file mode 100644 index 00000000..5a4bab83 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/minigames/trawler/WaitingRoom.java @@ -0,0 +1,113 @@ +package redone.game.content.minigames.trawler; + +import java.util.ArrayList; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.Location; + +public abstract class WaitingRoom { + + public int minimumPlayers; + public ArrayList waiting = new ArrayList(); + private int wait_time; + private int minutes_remaining; + private boolean active; + + public abstract Location getLocation(); + public abstract boolean startGame(); + public abstract void onStart(); + public abstract void onLeave(Client p); + public abstract void onJoin(Client p); + public abstract void onTimeChange(); + public abstract boolean canStart(); + + public WaitingRoom(int minutes, int minimum) { + this.wait_time = minutes; + this.minimumPlayers = minimum; + this.minutes_remaining = wait_time; + if(!firstStarted){ + startWaiting(); + } else { + return; + } + } + + public void join(Client p) { + if(!waiting.contains(p)) { + onJoin(p); + waiting.add(p); + } + } + + public void leave(Client p) { + if(waiting.contains(p)) { + onLeave(p); + waiting.remove(p); + } + } + + public void reset() { + minutes_remaining = wait_time; + //startWaiting(); + } + public static boolean firstStarted = false; + + public void startWaiting() { + if(isActive()) { + return; + } + setActive(true); + CycleEventHandler.getSingleton().addEvent(100, this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + firstStarted = true; + if(minutes_remaining != 0) { + minutes_remaining--; + onTimeChange(); + } else { + if(startGame()) { + onStart(); + reset(); + setActive(false); + container.stop(); + } else { + messageWaiting("A minimum of "+minimumPlayers+" players are needed to start this minigame!"); + reset(); + startWaiting(); + } + } + } + + @Override + public void stop() { + + } + }, 80); + } + + + public void messageWaiting(String message) { + for(Client p : waiting) { + if(p != null) { + p.getActionSender().sendMessage(message); + } + } + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public int getTimeRemaining() { + return minutes_remaining; + } + + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/music/Music.java b/2006Redone Server/src/redone/game/content/music/Music.java new file mode 100644 index 00000000..206f464e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/music/Music.java @@ -0,0 +1,209 @@ +package redone.game.content.music; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * http://runescape.wikia.com/wiki/Music Good resource song id = 2 absx/64 = 1 + * absy/64 = 0 + */ + +public class Music { + + public static int[][] MUSIC_DATA = { // all the songs added + { 50, 51, 2 }, + { 49, 51, 2 }, // Flour mill place + { 48, 50, 3 }, + { 46, 56, 8 }, + // {51, 60, 9}, + { 46, 50, 12 }, + { 31, 74, 16 },// mime event + // {46, 50, 49}, + { 52, 57, 14 }, { 47, 52, 15 }, { 45, 53, 18 }, { 45, 54, 18 }, + { 47, 50, 35 }, + { 50, 150, 139 },// harmony 2 + { 46, 54, 23 },// goblin village + // {47, 50, 36}, + { 51, 50, 36 }, { 47, 51, 49 }, { 51, 49, 50 }, { 44, 75, 52 }, + { 46, 53, 54 }, { 49, 54, 111 }, { 51, 60, 255 }, // scape sad + { 45, 75, 57 }, { 47, 47, 62 },// Newbie Melody, Tutorial Island + // corrupted + { 47, 48, 62 },// Newbie Melody, Tutorial Island + { 48, 47, 62 },// Newbie Melody, Tutorial Island + { 48, 48, 62 },// Newbie Melody, Tutorial Island + { 48, 148, 144 },// underground, underground + { 49, 48, 62 },// Newbie Melody, Tutorial Island + { 50, 49, 64 }, { 49, 49, 64 }, { 46, 57, 355 }, // troubled + { 43, 75, 52 },// Miracle Dance, Mind Altar + // {51, 48, 69}, // this song is currently corrupt! Do not play! + // {46, 52, 107}, // falador different + { 46, 52, 72 }, // falador + { 50, 50, 76 }, { 48, 49, 358 }, // Vision - wizard's tower + { 46, 49, 92 },// karamja + { 45, 49, 92 },// karamja diff region + { 51, 54, 93 }, // Edgeville + { 46, 55, 96 }, // this song is currently corrupt! Do not play! + // -seems + // fine + // {45, 49, 55}, + { 46, 60, 52 }, { 48, 54, 98 }, { 47, 49, 105 }, // tommorrow + { 50, 52, 106 }, { 51, 51, 123 }, { 50, 53, 125 }, // Varrock But + // Laggyyyy + // {50, 53, 157}, //Varrock + { 46, 51, 127 }, { 48, 53, 141 }, { 41, 75, 52 },// Down to Earth, + // Earth Altar + { 42, 75, 52 },// Zealot, Water Altar + { 48, 51, 151 }, { 51, 52, 157 }, { 51, 53, 157 }, { 52, 50, 47 },// duel + // arena + { 52, 51, 122 }, // Duel Arena Hospital - Shine + { 41, 40, 588 }, // Pest Control - In-game + { 41, 41, 587 }, // Pest Control - Lobby + { 40, 75, 52 },// Quest, Fire Altar + { 55, 51, 380 },// Barrows + { 50, 55, 169 }, { 49, 154, 144 }, // varrock sewers repeated + { 50, 154, 144 }, // Varrock Sewers + { 48, 154, 144 }, // EdgeVille dungeon + { 48, 153, 144 }, // EdgeVilledungeon + { 48, 150, 144 },// draynor sewers + { 48, 151, 144 },// draynor sewers + { 43, 43, 206 }, // monkey madness + { 48, 55, 169 }, // Wilderness North of Edge + { 38, 80, 469 }, // Tzhaar cave + { 49, 57, 43 }, // wilderness 3 carrallanger + { 42, 53, 184 }, { 49, 53, 175 }, { 50, 54, 177 }, { 42, 43, 9 },// anywhere + { 43, 44, 9 },// anywhere again + { 45, 42, 190 },// marooneed - crash island + { 43, 42, 160 },// island life - works + { 44, 49, 172 },// jungle island + { 43, 50, 6 },// jolly r + { 43, 49, 174 },// landlubber + { 43, 50, 327 },// trawler + { 42, 50, 115 },// jungly2 + // {46, 49, 180}, + // {45, 52, 186}, ARRIVAL CORRUPTED + { 42, 54, 7 },// overture + { 54, 54, 357 }, // village canfis center 3496 3489 + // {0, 0, 282}, //Stillness myreque hideout + { 53, 54, 48 }, // morytania path to Paterdomus + { 54, 53, 347 }, // waterlogged south of canfis 3506, 3435 + { 45, 52, 72 }, { 40, 51, 191 },// knightly + { 41, 51, 32 },// baroque + { 40, 52, 152 }, // ballad of enchantment ardounge + { 47, 54, 152 }, // ballad of enchantment edgeville prayer 3051 3490 + { 39, 75, 52 },// Heart and Mind, Body Altar + { 47, 153, 325 },// Cave Background, Dwarven Mines + { 46, 153, 325 },// Cave Background, Dwarven Mines + { 47, 152, 325 },// Cave Background, Dwarven Mines + { 49, 50, 327 }, { 39, 47, 83 },// big chords + { 40, 48, 187 },// magic dance + { 39, 48, 187 },// magic dance watchtower not sure if correct song + { 45, 57, 185 }, // mad eadgar - doesn't play + // {40, 48, 153},//in the manor + { 47, 53, 49 }, // Wander + { 48, 52, 333 }, { 50, 56, 337 }, + // {40, 74, 419}, + { 47, 56, 121 }, { 39, 49, 148 }, // emotion 2524, 3168 + { 39, 50, 17 }, // attack1 2515, 3230 + { 39, 54, 32 }, // voyage 2528, 3497 + { 39, 54, 82 }, // waterfall 2511, 3463 + { 40, 54, 319 }, // theme coal trucks + { 38, 48, 80 }, // Soundscape, Castle Wars + { 37, 148, 28 }, // Attack 5 - Castle Wars, Sara Portal + { 43, 54, 60 }, // Lightwalk - Camelot + { 44, 53, 119 }, // fishing catherby + { 39, 54, 33 }, // gnome village coords = 2478, 3437 + { 38, 53, 329 }, // tree spirits + { 38, 54, 126 }, // Gnome King + { 37, 54, 130 }, // Gnome Ball plays a little bit out of region + // 2402, + // 3488 + { 40, 53, 328 }, // March + // {29, 81, 537},//Dogs of War - Stronghold of Security - Vault of + // War + // {31, 81, 558},//Food for Thought - Stronghold of Security - + // Catacomb + // of Famine + // {33, 82, 559},//Malady - Stronghold of Security - Pit of + // Pestilence + // {36, 81, 560},//Dance of Death - Stronghold of Security - + // Sepulchre + // of Death + { 41, 58, 141 }, // Relleka Rock Crabs + { 41, 53, 60 }, // Lasting - Range guild + { 41, 54, 140 } // Talking forest + }; + + /** + * Checks how many areas we have loaded. + * + * @param c + * Client. + */ + public static void checkMusic(Client c) { + for (int[] aMUSIC_DATA : MUSIC_DATA) { + if (c.getX() / 64 == aMUSIC_DATA[0] + && c.getY() / 64 == aMUSIC_DATA[1]/* + * && player . getPlayList ( + * ) . auto + */) { + if (c.getTemporary("CURRENT_SONG") == null + || (Integer) c.getTemporary("CURRENT_SONG") != aMUSIC_DATA[2]) { + c.getActionSender().sendMessage( + "@gre@Play Music Has Music:@bla@ " + aMUSIC_DATA[0] + + " : " + aMUSIC_DATA[1]); + } + } + } + c.getActionSender().sendMessage( + "@red@Play Music No Music:@bla@ " + c.getX() / 64 + " : " + + c.getY() / 64); + } + + /** + * Checks which song is played in which region. + * + * @param player + * the player. + */ + public static void playMusic(Client player) { + for (int[] aMUSIC_DATA : MUSIC_DATA) { + if (player.getX() / 64 == aMUSIC_DATA[0] + && player.getY() / 64 == aMUSIC_DATA[1]/* + * && player . + * getPlayList ( ) . + * auto + */) { + if (player.getTemporary("CURRENT_SONG") == null + || (Integer) player.getTemporary("CURRENT_SONG") != aMUSIC_DATA[2]) { + player.getPlayList(); + if (player.getPlayList().auto) { + player.addTemporary("CURRENT_SONG", aMUSIC_DATA[2]); + player.getActionSender().sendSong(aMUSIC_DATA[2]); + } + int[] edgeVilleSongs = { 98, 111, 127, 157, 106 }; + int toPlay = Misc.random(4); + if (aMUSIC_DATA[0] == 48 && aMUSIC_DATA[1] == 54) { + aMUSIC_DATA[2] = edgeVilleSongs[toPlay]; + } + int[] karamjaSongs = { 327, 6 }; + int songPlaying = Misc.random(1); + if (aMUSIC_DATA[0] == 43 && aMUSIC_DATA[1] == 50) { + aMUSIC_DATA[2] = karamjaSongs[songPlaying]; + } + int[] waterfall = { 82, 32 }; + int songToPlay = Misc.random(1); + if (aMUSIC_DATA[0] == 39 && aMUSIC_DATA[1] == 54) { + aMUSIC_DATA[2] = waterfall[songToPlay]; + } + /* + * int[] battlefield = {148, 17}; int randomSong = + * Misc.random(1); if (aMUSIC_DATA[0] == 39 && + * aMUSIC_DATA[1] == 50) { aMUSIC_DATA[2] = + * battlefield[randomSong]; } + */ + player.getPlayList().playSong(aMUSIC_DATA[2]); + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/music/PlayList.java b/2006Redone Server/src/redone/game/content/music/PlayList.java new file mode 100644 index 00000000..66acb06d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/music/PlayList.java @@ -0,0 +1,226 @@ +package redone.game.content.music; + +import java.util.HashMap; +import java.util.Map; + +import redone.game.players.Client; + +public class PlayList { + + private final Client player; + + @SuppressWarnings("unused") + private final int[] songs = { 2, 3, 12, 14, 9, 157, 76, 57, 419, 15, 18, + 327, 125, 106, 123, 177, 169, 98, 141, 36, 50, 72, 186, 151, 35, + 180, 105, 127, 62, 175, 54, 96, 8, 34, 1, 69, 537, 558, 559, 560, + 93, 143, 337, 64, 85, 65, 158, 190, 325 }; + + @SuppressWarnings("unused") + private final int[] buttons = { 41, 155, 99, 167, 296, 105, 81, 123, 2, + 170, 83, 59, 73, 63, 29, 24, 53, 71, 251, 28, 25, 66, 33, 171, 130, + 40, 187, 113, 112, 135, 183, 86, 248, 168, 84, 61, 435, 436, 437, + 434, 116, 253, 263, 47, 159, 108, 117, 199, 49 }; + + @SuppressWarnings("unused") + private final int[] configs = { 20, 21, 22, 23, 24, 25, 298, 311, 346, 414, + 464, 598, 662, 721, 906, 1009 }; + + @SuppressWarnings("unused") + private final int[] values = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0 }; + + public boolean[] unlocked = { false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, + false, false, false, false, true, false, false, false, false, + false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false }; + + private final String[] names = { "Autumn Voyage", "Unknown Land", + "Long Way Home", "Witching", "Kingdom", "Medieval", "Harmony", + "Rune Essence", "Pheasant Peasant", "Workshop", "Horizon", "Dream", + "Garden", "Expanse", "Arabian 2", "Adventure", "Crystal Sword", + "Forever", "Barbarianism", "Arabian", "Al Kharid", "Fanfare", + "Arrival", "Start", "Sea Shanty 2", "Attention", "Tomorrow", + "Nightfall", "Newbie Melody", "Spirit", "Scape Soft", + "Inspiration", "Wildwood", "Wonder", "Iban", "Egypt", + "Dogs of War", "Food for Thought", "Malady", "Dance of Death", + "Parade", "Down To Earth", "Faithless", "Book Of Spells", "Vision", + "Miracle Dance", "Quest", "Heart and Mind", "Cave Background", + "Talking Forest" }; + + private boolean loop = false; + + public boolean auto = true; + + public PlayList(Client p) { + player = p; + } + + private static enum Songs { + // action id, songid, ?, song number + AUTUMN_VOYAGE(16208, 2, 4304, 0), UNKNOWN_LAND(17066, 3, 4418, 1), LONG_WAY_HOME( + 17010, 12, 4362, 2), WITCHING(17078, 14, 4430, 3), KINGDOM( + 32243, 9, 8435, 4), MEDIEVAL(17016, 157, 4368, 5), HARMONY( + 16248, 76, 4344, 6), RUNE_ESSENCE(17034, 57, 4386, 7), PHEASANT_PEASANT( + 55108, 419, 14188, 8), WORKSHOP(17081, 15, 4433, 9), HORIZON( + 16250, 18, 4346, 10), DREAM(35014, 327, 8974, 11), GARDEN( + 16240, 125, 4336, 12), EXPANSE(16230, 106, 4326, 13), ARABIAN_2( + 16196, 123, 4292, 14), ADVENTURE(16191, 177, 4287, 15), CRYSTAL_SWORD( + 16220, 169, 4316, 16), FOREVER(16238, 98, 4334, 17), BARBARIANISM( + 19000, 141, 4864, 18), ARABIAN(16195, 36, 4291, 19), AL_KHARID( + 16192, 50, 4288, 20), FANFARE(16233, 72, 4329, 21), ARRIVAL( + 16200, 186, 4296, 22), + // START(151, 23, 2097152, 23), + SEA_SHANTY_2(17041, 35, 4393, 24), ATTENTION(16207, 180, 4303, 25), TOMORROW( + 24153, 105, 6297, 26), NIGHTFALL(17024, 127, 4376, 27), NEWBIE_MELODY( + 17023, 62, 4375, 28), SPIRIT(17046, 175, 4398, 29), SCAPE_SOFT( + 23100, 54, 5988, 30), INSPIRATION(16253, 96, 4349, 31), WILDWOOD( + 27071, 278, 6983, 32), WONDER(17079, 34, 4431, 33), IBAN(16251, + 1, 4347, 34), EGYPT(16228, 69, 4324, 35), PARADE(17027, 93, + 4379, 40), DOWN_TO_EARTH(19015, 143, 4879, 41), FAITHLESS( + 39145, 337, 346, 42), BOOK_OF_SPELLS(16214, 64, 4310, 43), VISION( + 17070, 85, 4422, 44), MIRACLE_DANCE(17019, 65, 4371, 45), QUEST( + 17028, 158, 4380, 46), HEART_AND_MIND(27033, 52, 6945, 47), // was + // 190 + // changed + // to + // 52 + CAVE_BACKGROUND(35012, 325, 8972, 48), TALKING_FOREST(17083, 140, 4435, + 49); + + private int songId; + private int buttonId; + private int childId; + private int arraySlot; + + public int songId() { + return songId; + } + + @SuppressWarnings("unused") + public int configId() { + return songId; + } + + @SuppressWarnings("unused") + public int configNumber() { + return songId; + } + + @SuppressWarnings("unused") + public int arraySlot() { + return arraySlot; + } + + Songs(int buttonId, int songId, int childId, int arraySlot) { + this.buttonId = buttonId; + this.songId = songId; + this.childId = childId; + this.arraySlot = arraySlot; + } + + private static Map songs = new HashMap(); + static { + for (Songs songId : Songs.values()) { + songs.put(songId.songId(), songId); + } + } + + public static Songs get(int id) { + return songs.get(id); + } + + } + + public void fixAllColors() { + for (int i = 0; i < 385; i++) { + if (Songs.get(i) != null) { + player.getActionSender().sendColor(Songs.get(i).childId, + 255 << 10 | 0 << 5 | 0); + if (unlocked[Songs.get(i).arraySlot]) { + updateList(Songs.get(i).childId); + } + } + } + } + + public void playSong(int songID) { + // System.out.println("songId = "+songID); + try { + if (Songs.get(songID) == null) { + // player.sendMessage("This song has not yet been added to the playlist. - Song ID = "+songID); + if (auto) { + player.getPlayerAssistant().sendFrame126("Song Unavailable!", + 4439); + updateList(4439); + } + return; + } + if (!unlocked[Songs.get(songID).arraySlot]) { + player.getActionSender().sendMessage( + "You have unlocked the song " + + names[Songs.get(songID).arraySlot] + "."); + // System.out.println("You have unlocked the song " + + // names[Songs.get(songID).arraySlot]); + unlocked[Songs.get(songID).arraySlot] = true; + updateList(Songs.get(songID).childId); + player.getPlayerAssistant().sendFrame126( + names[Songs.get(songID).arraySlot], 4439); + updateList(4439); + } else { + if (auto) { + player.getPlayerAssistant().sendFrame126( + names[Songs.get(songID).arraySlot], 4439); + updateList(4439); + } + } + } catch (Exception e) { + System.out.println("Exception: " + e); + } + } + + public void updateList(int id) { + player.getActionSender().sendColor(id, 0 << 10 | 255 << 5 | 0); + } + + public void handleButton(int button) { + if (button == 17023) { + return; + } + if (button == 9925) { + loop = !loop; + } else if (button == 6269) { + auto = true; + player.getPlayerAssistant().sendConfig(18, 1); + } else if (button == 6270) { + auto = false; + player.getPlayerAssistant().sendConfig(18, 0); + } else { + // System.out.println("button="+button); + int songId = -1; + for (int i = 0; i < 385; i++) { + if (Songs.get(i) != null) { + if (Songs.get(i).buttonId == button) { + songId = Songs.get(i).songId; + } + } + } + if (songId == -1) { + // player.getPacketDispatcher().sendMessage("That song is unavailable at this time."); + } else if (!unlocked[Songs.get(songId).arraySlot]) { + player.getActionSender().sendMessage( + "You have to unlock that song first!"); + } else { + auto = false; + player.getPlayerAssistant().sendConfig(18, 0); + playSong(songId); + // System.out.println("sending music to ActionSender packet - song id = "+songId); + player.getActionSender().sendSong(songId); + player.getPlayerAssistant().sendFrame126( + names[Songs.get(songId).arraySlot], 4439); + updateList(4439); + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/music/sound/CombatSounds.java b/2006Redone Server/src/redone/game/content/music/sound/CombatSounds.java new file mode 100644 index 00000000..202df0bc --- /dev/null +++ b/2006Redone Server/src/redone/game/content/music/sound/CombatSounds.java @@ -0,0 +1,409 @@ +package redone.game.content.music.sound; + +import redone.Server; +import redone.game.content.combat.magic.MagicData; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * CombatSounds + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class CombatSounds { + + public static int getNpcAttackSounds(int NPCID) { + String npc = GetNpcName(NPCID).toLowerCase(); + if (npc.contains("bat")) { + return 1; + } + if (npc.contains("cow")) { + return 4; + } + if (npc.contains("imp")) { + return 11; + } + if (npc.contains("rat")) { + return 17; + } + if (npc.contains("duck")) { + return 26; + } + if (npc.contains("wolf") || npc.contains("bear")) { + return 28; + } + if (npc.contains("dragon")) { + return 47; + } + if (npc.contains("ghost")) { + return 57; + } + if (npc.contains("goblin")) { + return 88; + } + if (npc.contains("skeleton") || npc.contains("demon") + || npc.contains("ogre") || npc.contains("giant") + || npc.contains("tz-") || npc.contains("jad")) { + return 48; + } + if (npc.contains("zombie")) { + return 1155; + } + if (npc.contains("man") || npc.contains("woman") + || npc.contains("monk")) { + return 417; + } + return Misc.random(6) > 3 ? 398 : 394; + } + + public static int getNpcBlockSound(int NPCID) { + String npc = GetNpcName(NPCID).toLowerCase(); + if (npc.contains("bat")) { + return 7; + } + if (npc.contains("cow")) { + return 5; + } + if (npc.contains("imp")) { + return 11; + } + if (npc.contains("rat")) { + return 16; + } + if (npc.contains("duck")) { + return 24; + } + if (npc.contains("wolf") || npc.contains("bear")) { + return 34; + } + if (npc.contains("dragon")) { + return 45; + } + if (npc.contains("ghost")) { + return 53; + } + if (npc.contains("goblin")) { + return 87; + } + if (npc.contains("skeleton") || npc.contains("demon") + || npc.contains("ogre") || npc.contains("giant") + || npc.contains("tz-") || npc.contains("jad")) { + return 1154; + } + if (npc.contains("zombie")) { + return 1151; + } + if (npc.contains("man") && !npc.contains("woman")) { + return 816; + } + if (npc.contains("monk")) { + return 816; + } + if (!npc.contains("man") && npc.contains("woman")) { + return 818; + } + return 791; + } + + public static int getNpcDeathSounds(int NPCID) { + String npc = GetNpcName(NPCID).toLowerCase(); + if (npc.contains("bat")) { + return 7; + } + if (npc.contains("cow")) { + return 3; + } + if (npc.contains("imp")) { + return 9; + } + if (npc.contains("rat")) { + return 15; + } + if (npc.contains("duck")) { + return 25; + } + if (npc.contains("wolf") || npc.contains("bear")) { + return 35; + } + if (npc.contains("dragon")) { + return 44; + } + if (npc.contains("ghost")) { + return 60; + } + if (npc.contains("goblin")) { + return 125; + } + if (npc.contains("skeleton") || npc.contains("demon") + || npc.contains("ogre") || npc.contains("giant") + || npc.contains("tz-") || npc.contains("jad")) { + return 70; + } + if (npc.contains("zombie")) { + return 1140; + } + return 70; + + } + + public static String GetNpcName(int NpcID) { + return NpcHandler.NpcList[NpcID].npcName; + } + + public static String getItemName(int ItemID) { + return Server.itemHandler.ItemList[ItemID].itemName; + } + + public static int getMagicSound(Client c, int spellId) { + return MagicData.MAGIC_SPELLS[spellId][16]; + } + + public static int getPlayerBlockSounds(Client c) { + + int blockSound = 511; + + if (c.playerEquipment[c.playerChest] == 2499 + || c.playerEquipment[c.playerChest] == 2501 + || c.playerEquipment[c.playerChest] == 2503 + || c.playerEquipment[c.playerChest] == 4746 + || c.playerEquipment[c.playerChest] == 4757 + || c.playerEquipment[c.playerChest] == 10330) {// Dragonhide + // sound + blockSound = 24; + } else if (c.playerEquipment[c.playerChest] == 10551 || // Torso + c.playerEquipment[c.playerChest] == 10438) {// 3rd age + blockSound = 32;// Weird sound + } else if (c.playerEquipment[c.playerChest] == 10338 || // 3rd age + c.playerEquipment[c.playerChest] == 7399 || // Enchanted + c.playerEquipment[c.playerChest] == 6107 || // Ghostly + c.playerEquipment[c.playerChest] == 4091 || // Mystic + c.playerEquipment[c.playerChest] == 4101 || // Mystic + c.playerEquipment[c.playerChest] == 4111 || // Mystic + c.playerEquipment[c.playerChest] == 1035 || // Zamorak + c.playerEquipment[c.playerChest] == 12971) {// Combat + blockSound = 14;// Robe sound + } else if (c.playerEquipment[c.playerShield] == 4224) {// Crystal Shield + blockSound = 30;// Crystal sound + } else if (c.playerEquipment[c.playerChest] == 1101 + || // Chains + c.playerEquipment[c.playerChest] == 1103 + || c.playerEquipment[c.playerChest] == 1105 + || c.playerEquipment[c.playerChest] == 1107 + || c.playerEquipment[c.playerChest] == 1109 + || c.playerEquipment[c.playerChest] == 1111 + || c.playerEquipment[c.playerChest] == 1113 + || c.playerEquipment[c.playerChest] == 1115 + || // Plates + c.playerEquipment[c.playerChest] == 1117 + || c.playerEquipment[c.playerChest] == 1119 + || c.playerEquipment[c.playerChest] == 1121 + || c.playerEquipment[c.playerChest] == 1123 + || c.playerEquipment[c.playerChest] == 1125 + || c.playerEquipment[c.playerChest] == 1127 + || c.playerEquipment[c.playerChest] == 4720 + || // Barrows armour + c.playerEquipment[c.playerChest] == 4728 + || c.playerEquipment[c.playerChest] == 4749 + || c.playerEquipment[c.playerChest] == 4712 + || c.playerEquipment[c.playerChest] == 11720 + || // Godwars armour + c.playerEquipment[c.playerChest] == 11724 + || c.playerEquipment[c.playerChest] == 3140 + || // Dragon + c.playerEquipment[c.playerChest] == 2615 + || // Fancy + c.playerEquipment[c.playerChest] == 2653 + || c.playerEquipment[c.playerChest] == 2661 + || c.playerEquipment[c.playerChest] == 2669 + || c.playerEquipment[c.playerChest] == 2623 + || c.playerEquipment[c.playerChest] == 3841 + || c.playerEquipment[c.playerChest] == 1127) {// Metal armour + // sound + blockSound = 15; + } else { + blockSound = 511; + } + return blockSound; + } + + public static int getWeaponSounds(Client c) { + if (c.playerEquipment[c.playerWeapon] >= 1) { + String wep = getItemName(c.playerEquipment[c.playerWeapon]) + .toLowerCase(); + if (c.playerEquipment[c.playerWeapon] <= 0) { + switch (c.fightMode) { + case 0: + return 416; + case 2: + return 417; + case 1: + return 418; + } + } + + if (c.playerEquipment[c.playerWeapon] == 4718) {// Dharok's + // Greataxe + return 1320; + } + if (c.playerEquipment[c.playerWeapon] == 4734) {// Karil's Crossbow + return 1081; + } + if (c.playerEquipment[c.playerWeapon] == 4747) {// Torag's Hammers + return 1330; + } + if (c.playerEquipment[c.playerWeapon] == 4710) {// Ahrim's Staff + return 2555; + } + if (c.playerEquipment[c.playerWeapon] == 4755) {// Verac's Flail + return 1323; + } + if (c.playerEquipment[c.playerWeapon] == 4726) {// Guthan's + // Warspear + return 2562; + } + + if (c.playerEquipment[c.playerWeapon] == 772 + || c.playerEquipment[c.playerWeapon] == 1379 + || c.playerEquipment[c.playerWeapon] == 1381 + || c.playerEquipment[c.playerWeapon] == 1383 + || c.playerEquipment[c.playerWeapon] == 1385 + || c.playerEquipment[c.playerWeapon] == 1387 + || c.playerEquipment[c.playerWeapon] == 1389 + || c.playerEquipment[c.playerWeapon] == 1391 + || c.playerEquipment[c.playerWeapon] == 1393 + || c.playerEquipment[c.playerWeapon] == 1395 + || c.playerEquipment[c.playerWeapon] == 1397 + || c.playerEquipment[c.playerWeapon] == 1399 + || c.playerEquipment[c.playerWeapon] == 1401 + || c.playerEquipment[c.playerWeapon] == 1403 + || c.playerEquipment[c.playerWeapon] == 1405 + || c.playerEquipment[c.playerWeapon] == 1407 + || c.playerEquipment[c.playerWeapon] == 1409 + || c.playerEquipment[c.playerWeapon] == 9100) { // Staff + // wack + return 394; + } + if (c.playerEquipment[c.playerWeapon] == 839 + || c.playerEquipment[c.playerWeapon] == 841 + || c.playerEquipment[c.playerWeapon] == 843 + || c.playerEquipment[c.playerWeapon] == 845 + || c.playerEquipment[c.playerWeapon] == 847 + || c.playerEquipment[c.playerWeapon] == 849 + || c.playerEquipment[c.playerWeapon] == 851 + || c.playerEquipment[c.playerWeapon] == 853 + || c.playerEquipment[c.playerWeapon] == 855 + || c.playerEquipment[c.playerWeapon] == 857 + || c.playerEquipment[c.playerWeapon] == 859 + || c.playerEquipment[c.playerWeapon] == 861 + || c.playerEquipment[c.playerWeapon] == 4734 + || c.playerEquipment[c.playerWeapon] == 2023 // RuneC'Bow + || c.playerEquipment[c.playerWeapon] == 4212 + || c.playerEquipment[c.playerWeapon] == 4214 + || c.playerEquipment[c.playerWeapon] == 4934 + || c.playerEquipment[c.playerWeapon] == 9104 + || c.playerEquipment[c.playerWeapon] == 9107) { // Bows/Crossbows + return 370; + } + if (c.playerEquipment[c.playerWeapon] == 1363 + || c.playerEquipment[c.playerWeapon] == 1365 + || c.playerEquipment[c.playerWeapon] == 1367 + || c.playerEquipment[c.playerWeapon] == 1369 + || c.playerEquipment[c.playerWeapon] == 1371 + || c.playerEquipment[c.playerWeapon] == 1373 + || c.playerEquipment[c.playerWeapon] == 1375 + || c.playerEquipment[c.playerWeapon] == 1377 + || c.playerEquipment[c.playerWeapon] == 1349 + || c.playerEquipment[c.playerWeapon] == 1351 + || c.playerEquipment[c.playerWeapon] == 1353 + || c.playerEquipment[c.playerWeapon] == 1355 + || c.playerEquipment[c.playerWeapon] == 1357 + || c.playerEquipment[c.playerWeapon] == 1359 + || c.playerEquipment[c.playerWeapon] == 1361 + || c.playerEquipment[c.playerWeapon] == 9109) { // BattleAxes/Axes + return 399; + } + if (c.playerEquipment[c.playerWeapon] == 4718 + || c.playerEquipment[c.playerWeapon] == 7808) { // Dharok + // GreatAxe + return 400; + } + if (c.playerEquipment[c.playerWeapon] == 6609 + || c.playerEquipment[c.playerWeapon] == 1307 + || c.playerEquipment[c.playerWeapon] == 1309 + || c.playerEquipment[c.playerWeapon] == 1311 + || c.playerEquipment[c.playerWeapon] == 1313 + || c.playerEquipment[c.playerWeapon] == 1315 + || c.playerEquipment[c.playerWeapon] == 1317 + || c.playerEquipment[c.playerWeapon] == 1319) { // 2h + return 425; + } + if (wep.contains("scimitar") || wep.contains("longsword")) { + return 396; + } + if (wep.contains("halberd")) { + return 420; + } + if (wep.contains("long")) { + return 396; + } + if (wep.contains("knife")) { + return 368; + } + if (wep.contains("javelin")) { + return 364; + } + + if (c.playerEquipment[c.playerWeapon] == 9110) { + return 401; + } + if (c.playerEquipment[c.playerWeapon] == 4755) { + return 1059; + } + if (c.playerEquipment[c.playerWeapon] == 4153) { + return 1079; + } + if (c.playerEquipment[c.playerWeapon] == 9103) { + return 385; + } + if (c.playerEquipment[c.playerWeapon] == -1) { // fists + return 417; + } + if (c.playerEquipment[c.playerWeapon] == 2745 + || c.playerEquipment[c.playerWeapon] == 2746 + || c.playerEquipment[c.playerWeapon] == 2747 + || c.playerEquipment[c.playerWeapon] == 2748) { // Godswords + return 390; + } + if (c.playerEquipment[c.playerWeapon] == 4151) { + return 1080; + } + } + return 398; + } + + public static int specialSounds(int id) { + if (id == 4151) {// whip + return 1081; + } else if (id == 5698 || id == 1231 || id == 1215) {// dds + return 793; + } else if (id == 1434) {// Mace + return 387; + } else if (id == 3204) {// halberd + return 420; + } else if (id == 4153) { // gmaul + return 1082; + } else if (id == 7158) { // d2h + return 426; + } else if (id == 4587) { // dscim + return 1305; + } else if (id == 1305) { // D Long + return 390; + } else if (id == 861 || id == 11235) { // MSB, Darkbow + return 386; + } else if (id == 1377) { // DBAxe + return 389; + } + return -1; + } +} diff --git a/2006Redone Server/src/redone/game/content/music/sound/SoundList.java b/2006Redone Server/src/redone/game/content/music/sound/SoundList.java new file mode 100644 index 00000000..06ac0c38 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/music/sound/SoundList.java @@ -0,0 +1,111 @@ +package redone.game.content.music.sound; + +import redone.game.players.Client; + +/** + * Sounds + * @author Andrew + */ + +public class SoundList { + + Client c; + + public SoundList(Client c) { + this.c = c; + } + + /** + * Skilling + */ + + public static final int COOK_ITEM = 357; + public static final int MINING_ORE = 1331; + public static final int ANVIL = 468; + public static final int BONE_BURY = 380; + public static final int FIRE_LIGHT = 375, FIRE_SUCCESSFUL = 608, FIRST_ATTEMPT = 2584; + public static final int TREE_CUT_BEGIN = 471, TREE_CUTTING = 472, TREE_EMPTY = 473; + public static final int LEVEL_UP = 67; + public static final int FISHING = 289;// Cast out Net/Cage/Harpoon + public static final int START_FLY_FISHING = 377, FLY_FISHING = 378; + public static final int RUNECRAFTING = 481; + public static final int RAKE_WEEDS = 1323;// farming + public static final int SMELTING_ORE = 469;// smelting ore in furnace + public static final int SMITHING_ANVIL = 468; + public static final int STUNNED = 458;// stunned from thieving + public static final int PESTLE_MOTAR = 373; + public static final int PROSPECTING = 431; + public static final int CUT_GEM = 464; + + /** + * Prayer + */ + + // public static final int RECHARGE_PRAYER = 442; + // public static final int PROTECT_PRAYER = 444; + public static final int PROTECT_MELEE = 433; + public static final int PROTECT_MAGIC = 438; + public static final int PROTECT_RANGE = 444; + public static final int PROT_MAGE = 438; + public static final int NO_PRAY = 435; + public static final int PRAYER_TO_LOW = 447; + + /** + * Magic + */ + + public static final int MAGE_SPLASH = 193, MAGE_FAIL = 941; + public static final int TELEBLOCK_CAST = 1185, TELEBLOCK_HIT = 1183; + public static final int LOW_ALCHEMY = 224, HIGH_ALCHEMY = 223; + public static final int ICE_BLITZ = 1110; + public static final int TELEPORT = 202; + public static final int BLOOD_RUSH = 984, BLOOD_BITZ = 985; + public static final int ANCIENT_BLOOD = 986; + public static final int BLOOD_RUSH_SPLASH = 991; + public static final int WIND_STRIKE = 992; + public static final int SUPERHEAT = 217, SUPERHEAT_FAIL = 218; + public static final int BONES_TO_BANNAS = 227; + + /** + * Combat + */ + + public static final int SHOOT_ARROW = 370; + + /** + * Click item + */ + + public static final int FOOD_EAT = 317, DRINK = 334; + public static final int ITEM_PICKUP = 356, ITEM_DROP = 376; + + /** + * Random Event + */ + + public static final int EXPLODING_ROCK = 429, EXPLODING_ROCK_2 = 432; + public static final int KISS_FROG = 652; + + /** + * Minigame + */ + + public static final int DUEL_WON = 77, DUEL_LOST = 76; + + /** + * Objects + */ + + public static final int DITCH = 2462; + public static final int JUMPING_STONES = 455; + public static final int PICKABLE = 358; + public static final int SLASH_WEB = 237; + public static final int OPEN_DOOR = 326; + public static final int OPEN_GATE = 1328; + + /** + * Items + */ + + public static final int EMPTY = 334; +} diff --git a/2006Redone Server/src/redone/game/content/quests/QuestAssistant.java b/2006Redone Server/src/redone/game/content/quests/QuestAssistant.java new file mode 100644 index 00000000..dacea58c --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/QuestAssistant.java @@ -0,0 +1,281 @@ +package redone.game.content.quests; + +import redone.game.content.quests.impl.KnightsSword; +import redone.game.players.Client; + +/** + * Quest Assistant + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class QuestAssistant { + + public static final int MAXIMUM_QUESTPOINTS = 19; + + public static void sendStages(Client client) { + client.getPlayerAssistant().sendFrame126("QP: " + client.questPoints + " ", 3985); + if (client.pirateTreasure == 0) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 7341); + } else if (client.pirateTreasure == 6) { + client.getPlayerAssistant().sendFrame126("@gre@Pirate's Treasure", 7341); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Pirate's Treasure", 7341); + } + if (client.witchspot == 0) { + client.getPlayerAssistant().sendFrame126("Witch's Potion", 7348); + } else if (client.witchspot == 3) { + client.getPlayerAssistant().sendFrame126("@gre@Witch's Potion", 7348); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Witch's Potion", 7348); + } + if (client.romeojuliet == 0) { + client.getPlayerAssistant().sendFrame126("Romeo and Juliet", 7343); + } else if (client.romeojuliet < 9) { + client.getPlayerAssistant().sendFrame126("@yel@Romeo and Juliet", + 7343); + } else if (client.romeojuliet >= 9) { + client.getPlayerAssistant().sendFrame126("@gre@Romeo and Juliet", + 7343); + } + if (client.vampSlayer == 0) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 7347); + } else if (client.vampSlayer == 5) { + client.getPlayerAssistant().sendFrame126("@gre@Vampyre Slayer", 7347); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Vampyre Slayer", 7347); + } + if (client.doricQuest == 0) { + client.getPlayerAssistant().sendFrame126("Doric's Quest", 7336); + } else if (client.doricQuest == 3) { + client.getPlayerAssistant().sendFrame126("@gre@Doric's Quest", 7336); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Doric's Quest", 7336); + } + if (client.restGhost == 0) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 7337); + } else if (client.restGhost == 5) { + client.getPlayerAssistant().sendFrame126("@gre@Restless Ghost", 7337); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Restless Ghost", 7337); + } + if (client.impsC == 0) { + client.getPlayerAssistant().sendFrame126("Imp Catcher", 7340); + } else if (client.impsC == 1) { + client.getPlayerAssistant().sendFrame126("@yel@Imp Catcher", 7340); + } else if (client.impsC == 2) { + client.getPlayerAssistant().sendFrame126("@gre@Imp Catcher", 7340); + } + if (client.gertCat == 0) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 7360); + } else if (client.gertCat == 7) { + client.getPlayerAssistant().sendFrame126("@gre@Gertrudes Cat", 7360); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Gertrudes Cat", 7360); + } + if (client.sheepShear == 0) { + client.getPlayerAssistant().sendFrame126("Sheep Shearer", 7344); + } else if (client.sheepShear == 2) { + client.getPlayerAssistant().sendFrame126("@gre@Sheep Shearer", 7344); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Sheep Shearer", 7344); + } + if (client.runeMist == 0) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 7335); + } else if (client.runeMist == 4) { + client.getPlayerAssistant().sendFrame126("@gre@Rune Mysteries", 7335); + } else { + client.getPlayerAssistant().sendFrame126("@yel@Rune Mysteries", 7335); + } + if (client.knightS == 0) { + client.getPlayerAssistant().sendFrame126("The Knight's Sword", 7346); + } else if (client.knightS < 9) { + client.getPlayerAssistant().sendFrame126("@yel@The Knight's Sword", 7346); + } else if (client.knightS == 9) { + client.getPlayerAssistant().sendFrame126("@gre@The Knight's Sword", 7346); + } + if (client.cookAss == 0) { + client.getPlayerAssistant().sendFrame126("Cook's Assistant", 7333); + } else if (client.cookAss == 3) { + client.getPlayerAssistant().sendFrame126("@gre@Cook's Assistant", 7333); + } else if (client.cookAss > 0 && client.cookAss < 3) { + client.getPlayerAssistant().sendFrame126("@yel@Cook's Assistant", 7333); + } + } + + public enum Quests { + BLACK_KNIGHT(28164, "Black Knights' Fortress"), + COOKS_ASSISTANT(28165, "Cook's Assistant"), + DEMON_SLAYER(28166, "Demon Slayer"), + DORICS_QUEST(28168, "Doric's Quest"), + DRAGON_SLAYER(28215, "Dragon Slayer"), + ERNEST(28171, "Ernest the Chicken"), + GOBLIN(28170, "Goblin Diplomacy"), + IMP_CATCHER(28172, "Imp Catcher"), + KNIGHTS_SWORD(28178, "The Knight's Sword"), + PIRATES_TREASURE(28173, "Pirates Treasure"), + PRINCE_RESCUE(28174, "Prince Ali Rescue"), + RESTLESS_GHOST(28169, "Restless Ghost"), + ROMEO_JULIET(28175, "Romeo Juliet"), + RUNE_MYSTERIES(28167, "Rune Mysteries"), + SHEEP_SHEARER(28176, "Sheep Shearer"), + SHIELD_OF_ARRAV(28177, "Shield of Arrav"), + VAMPYRE_SLAYER(28179, "Vampyre Slayer"), + WITCHS_POTION(28180, "Witchs Potion"), + BETWEEN_A_ROCK(49228, "Between A Rock"), + CHOMPY(2161, "Big Chompy Bird Hunting"), + BIOHAZARD(28124, "Biohazard"), + CABIN(68102, "Cabin Fever"), + CLOCK(28185, "Clock Tower"), + DEATH(32246, "Death Plateau"), + CREATURE(47097, "Creature of Fenkenstrain"), + DESERT_TREASURE(50052, "Desert Treasure"), + DRUDIC_RITUAL(28187, "Drudic Ritual"), + DWARF_CANNON(28188, "Dwarf Cannon"), + EADGARS_RUSE(33231, "Eadgars Ruse"), + DEVIOUS(61225, "Devious Minds"), + DIGSITE(28186, "Digsite Quest"), + ELEMENTAL(29035, "Elemental Workshop"), + ENAKHRA(63021, "Enakhra's Lamet"), + FAIRY1(27075, "A Fairy Tale Pt. 1"), + FAMILYCREST(28189, "Family Crest"), + FEUD(50036, "The Feud"), + FIGHT_ARENA(28190, "Fight Arena"), + FISHING_CONTEST(28191, "Fishing Contest"), + FORGETTABLE_TABLE(50089, "Forgettable Tale..."), + FREMMY_TRIALS(39131, "The Fremennik Trials"), + GARDEN(57012, "Garden of Tranquillity"), + GHOSTS(47250, "Ghosts Ahoy"), + GIANT_DWARF(53009, "The Giant Dwarf"), + GOLEM(50039, "The Golem"), + GRAND_TREE(28193, "The Grand Tree"), + HAND_IN_THE_SAND(63000, "The Hand in the Sand"), + HAUNTED_MINE(46081, "Haunted Mine"), + HAZEEL(28194, "Hazeel Cult"), + HEROES(28195, "Heroes Quest"), + HOLY(28196, "Holy Grail"), + HORROR(39151, "Horror from the Deep"), + ITCHLARIN(17156, "Itchlarin's Little Helper"), + AID_OF_MYREQUE(72085, "In Aid of the Myreque"), + SEARCH_OF_MYREQUE(46131, "In Search of the Myreque"), + JUNGLE_POTION(28197, "Jungle Potion"), + LEGENDS_QUEST(28198, "Legends Quest"), + LOST_CITY(28199, "Lost City"), + LOST_TRIBE(52077, "The Lost Tribe"), + MAKING_HISTORY(60127, "Making History"), + MONKEY_MADNESS(43124, "Monkey Madness"), + MERLINS_CRYSTAL(28200, "Merlins Crystal"), + MONKS_FRIEND(28201, "Monks Friend"), + MOUNTAIN_DAUGHTER(48101, "Mountain Daughter"), + MOURNINGS_END_1(54150, "Mourning's Ends Part 1"), + MOURNINGS_END_2(23139, "Mourning's Ends Part 2"), + MURDER_MYSTERY(28202, "Murder Mystery"), + NATURE_SPIRIT(31201, "Nature Spirit"), + OBSERVATORY(28203, "Observatory Quest"), + ONE_SMALL_FAVOUR(48057, "One Small Favour"), + PLAGUE_CITY(28204, "Plague City"), + PRIEST_IN_PERIL(31179, "Priest in Peril"), + RAG_AND_BONE_MAN(72252, "Rag and Bone Man"), + RAT_CATCHERS(60139, "Rat Catchers"), + RECIPE(71130, "Recipe for Disaster"), + RECRUITMENT_DRIVE(2156, "Recruitment Drive"), + REGICIDE(33128, "Regicide"), + ROVING_ELVES(47017, "Roving Elves"), + RUM_DEAL(58064, "Rum Deal"), + SCORPION_CATCHER(28205, "Scorpion Catcher"), + SEA_SLUG(28206, "Sea Slug Quest"), + SHADES_OF_MORTON(35009, "Shades of Mort'ton"), + SHADOW_OF_THE_STORM(59248, "Shadow of the Storm"), + SHEEP_HERDER(28207, "Sheep Herder"), + SHILO_VILLAGE(28208, "Shilo Village"), + SOULS_BANE(28250, "A Soul's Bane"), + SPIRITS_OF_THE_ELID(60232, "Spirits of The Elid"), + SWAN_SONG(249, "Swan Song"), + TAI_BWO(6204, "Tai Bwo Wannai Trio"), + TWO_CATS(59131, "A Tail of Two Cats"), + TEARS_OF_GUTHIX(12206, "Tears of Guthix"), + TEMPLE_OF_IKOV(28210, "Temple of Ikov"), + THRONE_OF_MISCELLANIA(25118, "Throne of Miscellania"), + TOURIST_TRAP(28211, "The Tourist Trap"), + TREE_GNOME_VILLAGE(28212, "Tree Gnome Village"), + TRIBAL_TOTEM(28213, "Tribal Totem"), + TROLL_ROMANCE(46082, "Troll Romance"), + TROLL_STRONGHOLD(191, "Troll Stronghold"), + UNDERGROUND_PASS(38199, "Underground Pass"), + WANTED(23136, "Wanted"), + WATCHTOWER(28181, "Watch Tower"), + WATERFALL(28182, "Waterfall Quest"), + WITCH(28183, "Witch's House"), + ZOGRE(52044, "Zogre Flesh Eaters"); + + private final int button; + private final String name; + + private Quests(final int button, final String name) { + this.button = button; + this.name = name; + } + + public int getButton() { + return button; + } + + public String getName() { + return name; + } + + public static Quests forButton(int button) { + for (Quests q : Quests.values()) { + if (q.getButton() == button) { + return q; + } + } + return null; + } + } + + public static void questButtons(Client client, int buttonId) { + switch (buttonId) { + case 28165: + client.getCooksAssistant().showInformation(); + break; + case 28167: + client.getRuneMysteries().showInformation(); + break; + case 28168: + client.getDoricsQuest().showInformation(); + break; + case 28169: + client.getRestlessGhost().showInformation(); + break; + case 28172: + client.getImpCatcher().showInformation(); + break; + case 28173: + client.getPiratesTreasure().showInformation(); + break; + case 28175: + client.getRomeoJuliet().showInformation(); + break; + case 28176: + client.getSheepShearer().showInformation(); + break; + case 28178: + KnightsSword.showInformation(client); + break; + case 28179: + client.getVampyreSlayer().showInformation(); + break; + case 28180: + client.getWitchesPotion().showInformation(); + break; + case 28192: + client.getGertrudesCat().showInformation(); + break; + default: + if (Quests.forButton(buttonId) != null) { + client.getActionSender().sendMessage("The quest " + Quests.forButton(buttonId).getName() + " is currently disabled."); + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/quests/QuestRewards.java b/2006Redone Server/src/redone/game/content/quests/QuestRewards.java new file mode 100644 index 00000000..b8f0c11f --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/QuestRewards.java @@ -0,0 +1,146 @@ +package redone.game.content.quests; + +import redone.game.players.Client; + +/** + * Quest Rewards + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class QuestRewards { + + public static String QUEST_NAME; + + public static void QuestReward(Client client, String questName, String Line1, String Line2, String Line3, String Line4, String Line5, String Line6, int itemID) { + client.getPlayerAssistant().sendFrame126("You have completed " + questName + "!", 12144); + client.getPlayerAssistant().sendFrame126("" + client.questPoints, 12147); + client.getPlayerAssistant().sendFrame126(Line1, 12150); + client.getPlayerAssistant().sendFrame126(Line2, 12151); + client.getPlayerAssistant().sendFrame126(Line3, 12152); + client.getPlayerAssistant().sendFrame126(Line4, 12153); + client.getPlayerAssistant().sendFrame126(Line5, 12154); + client.getPlayerAssistant().sendFrame126(Line6, 12155); + if (itemID > 0) { + client.getPlayerAssistant().sendFrame246(12145, 250, itemID); + } + client.getPlayerAssistant().showInterface(12140); + client.getActionSender().sendMessage("You completed " + questName + "!"); + QuestAssistant.sendStages(client); + client.getActionSender().sendQuickSong(93, 0); + } + + public static void knightsReward(Client client) { + QuestReward(client, "Knight's Sword Quest", "1 Quest Point", "12,725 Smithing XP", "", "", "", "", 0); + QUEST_NAME = "The Knight's Sword"; + client.getPlayerAssistant().addNormalExperienceRate(12725, client.playerSmithing); + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7346); + client.knightS = 9; + client.questPoints ++; + } + + public static void gertFinish(Client client) { + QuestReward(client, "Gertrude's Cat", "1 Quest Point", "1,525 Cooking XP", "A kitten!", "Ability to raise cats", "A choclate cake", "A bowl of stew", 1897); + QUEST_NAME = "Gertrude's Cat"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7360); + client.gertCat = 7; + client.getItemAssistant().addItem(1897, 1); + client.getItemAssistant().addItem(2003, 1); + client.getItemAssistant().addItem(1560, 1); + client.getPlayerAssistant().addNormalExperienceRate(1525, client.playerCooking); + } + + public static void pirateFinish(Client client) { + QuestReward(client, "Pirate's Treasure", "2 Quest Points", "One-Eyed Hector's Treasure", "", "", "", "", 2714); + QUEST_NAME = "Pirate's Treasure"; + client.questPoints += 2; + client.pirateTreasure = 6; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7341); + client.getItemAssistant().addItem(2714, 1); + } + + public static void witchFinish(Client client) { + QuestReward(client, "Witch's Potion", "1 Quest Point", "325 Magic XP", "", "", "", "", 325); + QUEST_NAME = "Witch's Potion"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7348); + client.getPlayerAssistant().addNormalExperienceRate(325, + client.playerMagic); + client.witchspot = 3; + } + + public static void julietFinish(Client client) { + QuestReward(client, "Romeo and Juliet", "5 Quest Points", "", "", "", "", "", 0); + QUEST_NAME = "Romeo and Juliet"; + client.questPoints += 5; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7343); + client.romeojuliet = 9; + } + + public static void restFinish(Client client) { + QuestReward(client, "Restless Ghost", "1 Quest Point", "125 Prayer XP", "", "", "", "", 0); + QUEST_NAME = "Restless Ghost"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7337); + client.restGhost = 5; + client.getPlayerAssistant().addNormalExperienceRate(125, client.playerPrayer); + } + + public static void vampFinish(Client client) { + QuestReward(client, "Vampyre Slayer", "3 Quest Points", "4,825 Attack XP", "", "", "", "", 0); + QUEST_NAME = "Vampyre Slayer"; + client.questPoints += 3; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7347); + client.vampSlayer = 5; + client.getPlayerAssistant().addNormalExperienceRate(4825, client.playerAttack); + } + + public static void runeFinish(Client client) { + QuestReward(client, "Rune Mysteries", "1 Quest Points", "Air Talisman", "", "", "", "", 1438); + QUEST_NAME = "Rune Mysteries"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7335); + client.getItemAssistant().addItem(1438, 1); + client.runeMist = 4; + } + + public static void sheepFinish(Client client) { + QuestReward(client, "Sheep Shearer", "1 Quest Point", "150 Crafting Exp", "60 Coins", "", "", "", 995); + QUEST_NAME = "Sheep Shearer"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7344); + client.sheepShear = 2; + client.getItemAssistant().addItem(995, 60); + client.getPlayerAssistant().addNormalExperienceRate(150, client.playerCrafting); + } + + public static void doricFinish(Client client) { + QuestReward(client, "Doric's Quest", "1 Quest Point", "1,300 Mining XP", "180 Coins", "", "", "", 995); + QUEST_NAME = "Doric's Quest"; + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7336); + client.doricQuest = 3; + client.getPlayerAssistant().addNormalExperienceRate(1300, client.playerMining); + client.getItemAssistant().addItem(995, 180); + } + + public static void impFinish(Client client) { + QuestReward(client, "Imp Catcher", "1 Quest Point", "875 Magic XP", "Amulet of Accuracy", "", "", "", 1478); + QUEST_NAME = "Imp Catcher"; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7340); + client.questPoints++; + client.impsC = 2; + client.getPlayerAssistant().addNormalExperienceRate(875, client.playerMagic); + client.getItemAssistant().addItem(1478, 1); + } + + public static void cookReward(Client client) { + QuestReward(client, "Cook's Assistant", "1 Quest Point", "500 Coins", "300 Cooking XP", "", "", "", 326); + QUEST_NAME = "Cook's Assistant"; + client.getItemAssistant().addItem(995, 500); + client.getPlayerAssistant().addNormalExperienceRate(300, client.playerCooking); + client.questPoints++; + client.getPlayerAssistant().sendFrame126("@gre@" + QUEST_NAME + "", 7333); + client.cookAss = 3; + } +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/CooksAssistant.java b/2006Redone Server/src/redone/game/content/quests/impl/CooksAssistant.java new file mode 100644 index 00000000..f6956497 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/CooksAssistant.java @@ -0,0 +1,68 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + * Cooks Assistant + */ + +public class CooksAssistant { + + Client client; + + public CooksAssistant(Client client) { + this.client = client; + } + + private static final int EGG = 1944; + private static final int MILK = 1927; + private static final int FLOUR = 1933; + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Cook's Assistant", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.cookAss == 0) { + client.getPlayerAssistant().sendFrame126("Cook's Assistant", 8144); + client.getPlayerAssistant().sendFrame126("I can start this quest by speaking to the Cook in the", 8147); + client.getPlayerAssistant().sendFrame126("Lumbridge Castle kitchen.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126("There are no minimum requirements.", 8150); + } else if (client.cookAss == 1) { + client.getPlayerAssistant().sendFrame126("Cook's Assistant", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've talked to the cook.", 8147); + client.getPlayerAssistant().sendFrame126("He wants me to gather the following materials:", 8148); + if (client.getItemAssistant().playerHasItem(EGG, 1)) { + client.getPlayerAssistant().sendFrame126("@str@1 egg", 8149); + } else { + client.getPlayerAssistant().sendFrame126("@red@1 egg", 8149); + } + if (client.getItemAssistant().playerHasItem(MILK, 1)) { + client.getPlayerAssistant().sendFrame126("@str@1 bucket of milk", 8150); + } else { + client.getPlayerAssistant().sendFrame126("@red@1 bucket of milk", 8150); + } + if (client.getItemAssistant().playerHasItem(FLOUR, 1)) { + client.getPlayerAssistant().sendFrame126("@str@1 heap of flour", 8151); + } else { + client.getPlayerAssistant().sendFrame126("@red@1 pot of flour", 8151); + } + } else if (client.cookAss == 2) { + client.getPlayerAssistant().sendFrame126("Cook's Assistant", 8144); + client.getPlayerAssistant().sendFrame126("@str@I talked to the cook.", 8147); + client.getPlayerAssistant().sendFrame126("@str@I gave the cook his items.", 8148); + client.getPlayerAssistant().sendFrame126("I should go speak to the cook.", 8149); + } else if (client.cookAss == 3) { + client.getPlayerAssistant().sendFrame126("Cook's Assistant", 8144); + client.getPlayerAssistant().sendFrame126("@str@I talked to the cook.", 8147); + client.getPlayerAssistant().sendFrame126("@str@I gave him his items.", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", 8150); + client.getPlayerAssistant().sendFrame126("As a reward, I gained 150 Cooking Experience.", 8151); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/DoricsQuest.java b/2006Redone Server/src/redone/game/content/quests/impl/DoricsQuest.java new file mode 100644 index 00000000..ebd56ec5 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/DoricsQuest.java @@ -0,0 +1,78 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Doric's Quest + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class DoricsQuest { + + Client client; + + public DoricsQuest(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Dorics Quest", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.doricQuest == 0) { + client.getPlayerAssistant().sendFrame126("Dorics Quest", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to doric", 8147); + client.getPlayerAssistant().sendFrame126("Northwest of falador.", + 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126( + "Recommended Levels: 15 Mining", 8150); + } else if (client.doricQuest == 1) { + client.getPlayerAssistant().sendFrame126("Dorics Quest", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the doric.", 8147); + client.getPlayerAssistant().sendFrame126( + "He wants me to gather the following materials:", 8148); + if (client.getItemAssistant().playerHasItem(434, 6)) { + client.getPlayerAssistant().sendFrame126("@str@6 Clay", 8149); + } else { + client.getPlayerAssistant().sendFrame126("@red@6 Clay", 8149); + } + if (client.getItemAssistant().playerHasItem(436, 4)) { + client.getPlayerAssistant().sendFrame126("@str@4 Copper", 8150); + } else { + client.getPlayerAssistant().sendFrame126("@red@4 Copper", 8150); + } + if (client.getItemAssistant().playerHasItem(440, 2)) { + client.getPlayerAssistant().sendFrame126("@str@2 Iron ore", 8151); + } else { + client.getPlayerAssistant().sendFrame126("@red@2 Iron ore", 8151); + } + } else if (client.doricQuest == 2) { + client.getPlayerAssistant().sendFrame126("Dorics Quest", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I talked to the doric.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I gave the doric his items.", 8148); + client.getPlayerAssistant().sendFrame126( + "I should go speak to the doric.", 8149); + } else if (client.doricQuest == 3) { + client.getPlayerAssistant().sendFrame126("Dorics Quest", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I talked to the doric.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I gave him his items.", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8150); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 26000 Mining Exp", 8151); + client.getPlayerAssistant().sendFrame126("180 Coins", 8152); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point.", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/GertrudesCat.java b/2006Redone Server/src/redone/game/content/quests/impl/GertrudesCat.java new file mode 100644 index 00000000..73a3353d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/GertrudesCat.java @@ -0,0 +1,100 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Gertrudes Cat + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class GertrudesCat { + + Client client; + + public GertrudesCat(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.gertCat == 0) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Gertrude in", 8147); + client.getPlayerAssistant().sendFrame126("Varrock.", 8148); + client.getPlayerAssistant() + .sendFrame126("Minimum Requirments:", 8149); + client.getPlayerAssistant().sendFrame126("5 Fishing.", 8150); + } else if (client.gertCat == 1) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Gertrude", 8147); + client.getPlayerAssistant().sendFrame126( + "I should speak to Wilough and Shilop.", 8148); + client.getPlayerAssistant().sendFrame126("They are in the varrock square.", 8149); + } else if (client.gertCat == 2) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Wilough and Shilop", 8147); + client.getPlayerAssistant().sendFrame126("@str@I gave them 100 coins", + 8148); + client.getPlayerAssistant().sendFrame126( + "I should try to find Gertrudes Cat.", 8149); + } else if (client.gertCat == 3) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the Gertrudes Cat", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@She seemed mad so I gave her", 8148); + client.getPlayerAssistant().sendFrame126("@str@a bucket of milk", + 8149); + client.getPlayerAssistant().sendFrame126("The cat still seems mad you should give her some,", 8150); + client.getPlayerAssistant().sendFrame126("seasoned salmon.", 8151); + } else if (client.gertCat == 4) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126("@str@The cat is still mad", + 8147); + client.getPlayerAssistant().sendFrame126("@str@So i gave her some", + 8148); + client.getPlayerAssistant() + .sendFrame126("@str@seasoned samon.", 8149); + client.getPlayerAssistant().sendFrame126("I should talk to Gertrudes cat to see how she feels.", 8150); + } else if (client.gertCat == 5) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@The cat seems to be mad", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@because she can't find her kittens.", 8148); + client.getPlayerAssistant().sendFrame126("I should go in the lumberyard and", 8149); + client.getPlayerAssistant().sendFrame126("check it out.", 8150); + } else if (client.gertCat == 6) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126("@str@I gave gertrudes cat", + 8147); + client.getPlayerAssistant().sendFrame126("@str@her kittens", 8148); + client.getPlayerAssistant().sendFrame126( + "@str@and she now seems happy.", 8149); + client.getPlayerAssistant().sendFrame126("I should head back to Gertrude.", 8150); + } else if (client.gertCat == 7) { + client.getPlayerAssistant().sendFrame126("Gertrudes Cat", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I helped gertrude with her", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@Cat so she awarded me.", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8149); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 1525 Cooking exp.", 8150); + client.getPlayerAssistant().sendFrame126( + "A kitten! And the ability to raise cats.", 8150); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point", 8151); + client.getPlayerAssistant().sendFrame126("", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/ImpCatcher.java b/2006Redone Server/src/redone/game/content/quests/impl/ImpCatcher.java new file mode 100644 index 00000000..dd12d79d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/ImpCatcher.java @@ -0,0 +1,69 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Imp Catcher + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class ImpCatcher { + + public Client client; + + public ImpCatcher(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Imp Catcher", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.impsC == 0) { + client.getPlayerAssistant() + .sendFrame126( + "I can start this quest by speaking to Wizard Mizgog who is", + 8147); + client.getPlayerAssistant().sendFrame126("in the Wizard's Tower.", + 8148); + } else if (client.impsC == 1) { + client.getPlayerAssistant() + .sendFrame126( + "@str@I can start this quest by speaking to Wizard Mizgog who is", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@in the Wizard's Tower.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126( + "Wizard Mizgog have asked you to get the following items:", + 8150); + client.getPlayerAssistant().sendFrame126("Red bead", 8151); + client.getPlayerAssistant().sendFrame126("Yellow bead", 8152); + client.getPlayerAssistant().sendFrame126("Black bead", 8153); + client.getPlayerAssistant().sendFrame126("White bead", 8154); + } else if (client.impsC == 2) { + client.getPlayerAssistant() + .sendFrame126( + "@str@I can start this quest by speaking to Wizard Mizgog who is", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@in the Wizard's Tower.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Wizard Mizgog have asked you to get the following items:", + 8150); + client.getPlayerAssistant().sendFrame126("@str@Red bead", 8151); + client.getPlayerAssistant().sendFrame126("@str@Yellow bead", 8152); + client.getPlayerAssistant().sendFrame126("@str@Black bead", 8153); + client.getPlayerAssistant().sendFrame126("@str@White bead", 8154); + client.getPlayerAssistant().sendFrame126("", 8155); + client.getPlayerAssistant().sendFrame126( + "You have completed this quest!", 8156); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/KnightsSword.java b/2006Redone Server/src/redone/game/content/quests/impl/KnightsSword.java new file mode 100644 index 00000000..edc73005 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/KnightsSword.java @@ -0,0 +1,193 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +public class KnightsSword { + + public static void showInformation(Client c) { + for(int i = 8144; i < 8195; i++) { + c.getPlayerAssistant().sendFrame126("", i); + } + c.getPlayerAssistant().sendFrame126("@dre@The Knight's Sword", 8144); + c.getPlayerAssistant().sendFrame126("", 8145); + if(c.knightS == 0) { + c.getPlayerAssistant().sendFrame126("I can start this quest by speaking to the squire", 8147); + c.getPlayerAssistant().sendFrame126("who is in the courtyard of the White Knight's castle", 8148); + c.getPlayerAssistant().sendFrame126("", 8149); + c.getPlayerAssistant().sendFrame126("I will need at least 10 mining to complete this quest", 8150); + } else if(c.knightS == 1) { + c.getPlayerAssistant().sendFrame126("The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("by speaking to Reldo, the librarian in the Varrock Castle", 8149); + } else if (c.knightS == 2) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("Red Berry Pie to get him to be willing to talk to me", 8153); + } else if(c.knightS == 3) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("and find out if he'll make the sword for me.", 8157); + } else if(c.knightS == 4) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + } else if(c.knightS == 5) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me.", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("@str@Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + c.getPlayerAssistant().sendFrame126("The squire thinks Sir Vyvin keeps a picture of the sword in", 8162); + c.getPlayerAssistant().sendFrame126("a cupboard in his room, but I must be very careful not to", 8163); + c.getPlayerAssistant().sendFrame126("get caught.", 8164); + c.getPlayerAssistant().sendFrame126("", 8165); + c.getPlayerAssistant().sendFrame126("", 8166); + c.getPlayerAssistant().sendFrame126("", 8167); + c.getPlayerAssistant().sendFrame126("", 8168); + c.getPlayerAssistant().sendFrame126("", 8169); + } else if(c.knightS == 6) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me.", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("@str@Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + c.getPlayerAssistant().sendFrame126("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162); + c.getPlayerAssistant().sendFrame126("@str@a cupboard in his room, but I must be very careful not to", 8163); + c.getPlayerAssistant().sendFrame126("@str@get caught.", 8164); + c.getPlayerAssistant().sendFrame126("I should bring the picture to Thurgo", 8165); + c.getPlayerAssistant().sendFrame126("", 8166); + c.getPlayerAssistant().sendFrame126("", 8167); + c.getPlayerAssistant().sendFrame126("", 8168); + c.getPlayerAssistant().sendFrame126("", 8169); + } else if(c.knightS == 7) { + c.getPlayerAssistant().sendFrame126("The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("to find a replacement.@str@ He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me.", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry Pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("@str@Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("@str@Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + c.getPlayerAssistant().sendFrame126("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162); + c.getPlayerAssistant().sendFrame126("@str@cupboard in his room, but I must be very careful not to", 8163); + c.getPlayerAssistant().sendFrame126("@str@get caught.", 8164); + c.getPlayerAssistant().sendFrame126("@str@I should bring the picture to Thurgo", 8165); + c.getPlayerAssistant().sendFrame126("", 8166); + c.getPlayerAssistant().sendFrame126("Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167); + c.getPlayerAssistant().sendFrame126("ore for him to make the sword with. He says blurite can be", 8168); + c.getPlayerAssistant().sendFrame126("mined in the cave by his home, but it is guarded by", 8169); + c.getPlayerAssistant().sendFrame126("dangerous monsters. So I should be very careful.", 8170); + } else if(c.knightS == 8) { + c.getPlayerAssistant().sendFrame126("The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("to find a replacement.@str@ He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me.", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("@str@Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("@str@Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + c.getPlayerAssistant().sendFrame126("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162); + c.getPlayerAssistant().sendFrame126("@str@cupboard in his room, but I must be very careful not to", 8163); + c.getPlayerAssistant().sendFrame126("@str@get caught.", 8164); + c.getPlayerAssistant().sendFrame126("@str@I should bring the picture to Thurgo", 8165); + c.getPlayerAssistant().sendFrame126("", 8166); + c.getPlayerAssistant().sendFrame126("@str@Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167); + c.getPlayerAssistant().sendFrame126("@str@ore for him to make the sword with. He says blurite can be", 8168); + c.getPlayerAssistant().sendFrame126("@str@mined in the cave by his home, but it is guarded by", 8169); + c.getPlayerAssistant().sendFrame126("@str@dangerous monsters. So I should be very careful.", 8170); + c.getPlayerAssistant().sendFrame126("", 8171); + c.getPlayerAssistant().sendFrame126("Thurgo made me the sword, I should bring it back to the", 8172); + c.getPlayerAssistant().sendFrame126("knight to get my reward!", 8173); + c.getPlayerAssistant().sendFrame126("", 8174); + } else if(c.knightS == 9) { + c.getPlayerAssistant().sendFrame126("@str@The squire has lost Sir Vyvin's sword and asked me", 8147); + c.getPlayerAssistant().sendFrame126("@str@to find a replacement. He suggested that I start", 8148); + c.getPlayerAssistant().sendFrame126("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149); + c.getPlayerAssistant().sendFrame126("", 8150); + c.getPlayerAssistant().sendFrame126("@str@Reldo told me there may be an Imcando dwarf living near the", 8151); + c.getPlayerAssistant().sendFrame126("@str@Asgarnian peninsula. He said I should bring him some", 8152); + c.getPlayerAssistant().sendFrame126("@str@Red Berry Pie to get him to be willing to talk to me.", 8153); + c.getPlayerAssistant().sendFrame126("", 8154); + c.getPlayerAssistant().sendFrame126("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155); + c.getPlayerAssistant().sendFrame126("@str@Red berry pie. Now that he likes me I should talk to him", 8156); + c.getPlayerAssistant().sendFrame126("@str@and find out if he'll make the sword for me.", 8157); + c.getPlayerAssistant().sendFrame126("", 8158); + c.getPlayerAssistant().sendFrame126("@str@Thurgo says he needs a picture of the sword.", 8159); + c.getPlayerAssistant().sendFrame126("@str@Maybe the squire will have one?", 8160); + c.getPlayerAssistant().sendFrame126("", 8161); + c.getPlayerAssistant().sendFrame126("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162); + c.getPlayerAssistant().sendFrame126("@str@a cupboard in his room, but I must be very careful not to", 8163); + c.getPlayerAssistant().sendFrame126("@str@get caught.", 8164); + c.getPlayerAssistant().sendFrame126("@str@I should bring the picture to Thurgo", 8165); + c.getPlayerAssistant().sendFrame126("", 8166); + c.getPlayerAssistant().sendFrame126("@str@Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167); + c.getPlayerAssistant().sendFrame126("@str@ore for him to make the sword with. He says blurite can be", 8168); + c.getPlayerAssistant().sendFrame126("@str@mined in the cave by his home, but it is guarded by", 8169); + c.getPlayerAssistant().sendFrame126("@str@dangerous monsters. So I should be very careful.", 8170); + c.getPlayerAssistant().sendFrame126("@str@Thurgo made me the sword, I should bring it back to the", 8172); + c.getPlayerAssistant().sendFrame126("@str@knight to get my reward!", 8173); + c.getPlayerAssistant().sendFrame126("", 8173); + c.getPlayerAssistant().sendFrame126("@red@Quest Complete!", 8174); + } + c.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/PiratesTreasure.java b/2006Redone Server/src/redone/game/content/quests/impl/PiratesTreasure.java new file mode 100644 index 00000000..a2ff3f6e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/PiratesTreasure.java @@ -0,0 +1,105 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Pirates Treasure + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class PiratesTreasure { + + Client client; + + public PiratesTreasure(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.pirateTreasure == 0) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Redbeard Frank in", + 8147); + client.getPlayerAssistant().sendFrame126("Port Sarim", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126( + "There are no minimum requirments.", 8150); + } else if (client.pirateTreasure == 1) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "He wants me to get him some rum", 8148); + } else if (client.pirateTreasure == 2) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I found a way to get the rum", 8148); + client.getPlayerAssistant().sendFrame126( + "I should get the rum and return to Redbeard.", 8149); + } else if (client.pirateTreasure == 3) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I found a way to get the rum", 8148); + client.getPlayerAssistant().sendFrame126("@str@I gave him the rum", + 8149); + client.getPlayerAssistant().sendFrame126( + "He told me I need to look at the chest in", 8149); + client.getPlayerAssistant().sendFrame126("The blue moon inn", 8150); + } else if (client.pirateTreasure == 4) { + client.getPlayerAssistant().sendFrame126("Pirate's Treasure", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I found a way to get the rum", 8148); + client.getPlayerAssistant().sendFrame126("@str@I gave him the rum", + 8149); + client.getPlayerAssistant().sendFrame126( + "@str@I looked in the chest", 8149); + client.getPlayerAssistant().sendFrame126( + "I need to go to falador and kill the gardener", 8150); + } else if (client.pirateTreasure == 5) { + client.getPlayerAssistant().sendFrame126( + "@str@I talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I found a way to get the rum", 8148); + client.getPlayerAssistant().sendFrame126("@str@I gave him the rum", + 8149); + client.getPlayerAssistant().sendFrame126( + "@str@I looked in the chest", 8149); + client.getPlayerAssistant().sendFrame126( + "@str@I went to falador and killed the gardener", 8150); + client.getPlayerAssistant().sendFrame126( + "I should find the casket now", 8151); + } else if (client.pirateTreasure == 6) { + client.getPlayerAssistant().sendFrame126( + "@str@I talked to Redbeard.", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I found a way to get the rum", 8148); + client.getPlayerAssistant().sendFrame126("@str@I gave him the rum", + 8149); + client.getPlayerAssistant().sendFrame126( + "@str@I looked in the chest", 8149); + client.getPlayerAssistant().sendFrame126( + "@str@I went to falador and killed the gardener", 8150); + client.getPlayerAssistant().sendFrame126("@str@I found the casket ", + 8181); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8152); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained a casket.", 8153); + client.getPlayerAssistant().sendFrame126("2 Quest Points.", 8153); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/RestlessGhost.java b/2006Redone Server/src/redone/game/content/quests/impl/RestlessGhost.java new file mode 100644 index 00000000..4cbb1c97 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/RestlessGhost.java @@ -0,0 +1,81 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Restless Ghost + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class RestlessGhost { + + Client client; + + public RestlessGhost(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.restGhost == 0) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Father Aereck in", + 8147); + client.getPlayerAssistant().sendFrame126("Lumbridge", 8148); + client.getPlayerAssistant() + .sendFrame126("Minimum Requirments:", 8149); + client.getPlayerAssistant().sendFrame126("None.", 8150); + } else if (client.restGhost == 1) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Father Aereck", 8147); + client.getPlayerAssistant().sendFrame126( + "I should speak to Father Urhey", 8148); + } else if (client.restGhost == 2) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked Father Urhey", 8147); + client.getPlayerAssistant().sendFrame126("@str@He gave me a amulet", + 8148); + client.getPlayerAssistant().sendFrame126( + "I should speak to the ghost", 8149); + } else if (client.restGhost == 3) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the Ghost", 8147); + client.getPlayerAssistant() + .sendFrame126( + "I should travel to the wizards tower and kill the skeleton", + 8148); + client.getPlayerAssistant().sendFrame126( + "I should find the ghosts skull", 8149); + } else if (client.restGhost == 4) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've found the skull", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I killed the skeleton", 8148); + client.getPlayerAssistant().sendFrame126( + "I should travel back to the ghost", 8149); + } else if (client.restGhost == 5) { + client.getPlayerAssistant().sendFrame126("Restless Ghost", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've set the skull in the coffin", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I've freed the ghost.", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8150); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 125 Prayer Exp.", 8151); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point", 8152); + client.getPlayerAssistant().sendFrame126("", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/RomeoJuliet.java b/2006Redone Server/src/redone/game/content/quests/impl/RomeoJuliet.java new file mode 100644 index 00000000..44ab37bb --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/RomeoJuliet.java @@ -0,0 +1,361 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Romeo and Juliet + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class RomeoJuliet { + + Client client; + + public RomeoJuliet(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Romeo & Juliet", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.romeojuliet == 0) { + client.getPlayerAssistant().sendFrame126( + "To start the quest, you should talk with Romeo", 8147); + client.getPlayerAssistant().sendFrame126("found in Varrock Square.", + 8148); + } else if (client.romeojuliet == 1) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126( + "Romeo has asked you to speak to Juliet for him", 8150); + client.getPlayerAssistant().sendFrame126( + "and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("his letters lately.", 8152); + } else if (client.romeojuliet == 2) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant() + .sendFrame126( + "You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126("Could this be for Romeo?", + 8156); + } else if (client.romeojuliet == 4) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "You have spoken to Romeo and given him the message", 8158); + client.getPlayerAssistant().sendFrame126( + "You should try to talk to him again", 8159); + } else if (client.romeojuliet == 5) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Romeo and given him the message", + 8158); + client.getPlayerAssistant().sendFrame126( + "@str@You should try to talk to him again", 8159); + client.getPlayerAssistant().sendFrame126( + "Romeo says you should see a witch called Winelda", 8160); + } else if (client.romeojuliet == 6) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Romeo and given him the message", + 8158); + client.getPlayerAssistant().sendFrame126( + "@str@You should try to talk to him again", 8159); + client.getPlayerAssistant().sendFrame126( + "@str@Romeo says you should see a witch called Winelda", + 8160); + client.getPlayerAssistant().sendFrame126("", 8161); + client.getPlayerAssistant().sendFrame126( + "Winelda needs me to bring her 1 rats tail, 1 bone, and 1", + 8162); + client.getPlayerAssistant().sendFrame126("vial of water", 8163); + } else if (client.romeojuliet == 7) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Romeo and given him the message", + 8158); + client.getPlayerAssistant().sendFrame126( + "@str@You should try to talk to him again", 8159); + client.getPlayerAssistant().sendFrame126( + "@str@Romeo says you should see a witch called Winelda", + 8160); + client.getPlayerAssistant().sendFrame126("", 8161); + client.getPlayerAssistant().sendFrame126( + "@str@Winelda needs me to bring her 1 rats tail, 1 bone", + 8162); + client.getPlayerAssistant().sendFrame126("@str@and 1 vial of water", + 8163); + client.getPlayerAssistant().sendFrame126("", 8164); + client.getPlayerAssistant() + .sendFrame126( + "I brought Winelda 1 rats tail, 1 bone, and 1 vail of water", + 8162); + client.getPlayerAssistant().sendFrame126( + "I should go speak to Juliet", 8163); + } else if (client.romeojuliet == 8) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Romeo and given him the message", + 8158); + client.getPlayerAssistant().sendFrame126( + "@str@You should try to talk to him again", 8159); + client.getPlayerAssistant().sendFrame126( + "@str@Romeo says you should see a witch called Winelda", + 8160); + client.getPlayerAssistant().sendFrame126("", 8161); + client.getPlayerAssistant().sendFrame126( + "@str@Winelda needs me to bring her 1 rats tail, 1 bone", + 8162); + client.getPlayerAssistant().sendFrame126("@str@and 1 vial of water", + 8163); + client.getPlayerAssistant().sendFrame126("", 8164); + client.getPlayerAssistant() + .sendFrame126( + "@str@I brought Winelda 1 rats tail, 1 bone, and 1 vail of water", + 8165); + client.getPlayerAssistant().sendFrame126( + "@str@I should go speak to Juliet and give her the potion", + 8166); + client.getPlayerAssistant().sendFrame126("", 8167); + client.getPlayerAssistant().sendFrame126( + "I should speak to juliet and give her the potion", 8168); + client.getPlayerAssistant().sendFrame126( + "I should go speak to Romeo", 8169); + } else if (client.romeojuliet == 9) { + client.getPlayerAssistant() + .sendFrame126( + "@str@To start the quest, you should talk with Romeo", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@found in Varrock Square.", 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant() + .sendFrame126( + "@str@Romeo has asked you to speak to Juliet for him", + 8150); + client.getPlayerAssistant() + .sendFrame126( + "@str@and return to him, as she hasn't been responding to any", + 8151); + client.getPlayerAssistant().sendFrame126("@str@his letters lately.", + 8152); + client.getPlayerAssistant().sendFrame126("", 8153); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Juliet who's been acting strange", + 8154); + client.getPlayerAssistant().sendFrame126( + "@str@she gave you a message and asked you to leave", 8155); + client.getPlayerAssistant().sendFrame126( + "@str@could this be for Romeo?", 8156); + client.getPlayerAssistant().sendFrame126("", 8157); + client.getPlayerAssistant().sendFrame126( + "@str@You have spoken to Romeo and given him the message", + 8158); + client.getPlayerAssistant().sendFrame126("@str@You should try to talk to him again", 8159); + client.getPlayerAssistant().sendFrame126("@str@Romeo says you should see a witch called Winelda", 8160); + client.getPlayerAssistant().sendFrame126("", 8161); + client.getPlayerAssistant().sendFrame126("@str@Winelda needs me to bring her 1 rats tail, 1 bone", 8162); + client.getPlayerAssistant().sendFrame126("@str@and 1 vial of water",8163); + client.getPlayerAssistant().sendFrame126("", 8164); + client.getPlayerAssistant().sendFrame126("@str@I brought Winelda 1 rats tail, 1 bone, and 1 vail of water",8165); + client.getPlayerAssistant().sendFrame126("@str@I should go speak to Juliet and give her the potion", 8166); + client.getPlayerAssistant().sendFrame126("", 8167); + client.getPlayerAssistant().sendFrame126("@str@I have spoken to Juliet, she drank the potion", 8168); + client.getPlayerAssistant().sendFrame126("@str@I should go speak to Romeo", 8169); + client.getPlayerAssistant().sendFrame126("", 8168); + client.getPlayerAssistant().sendFrame126("I have spoken to Romeo, he's thankful for all of our help", 8169); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", 8170); + client.getPlayerAssistant().sendFrame126("As a reward, I gained 5 quest points.", 8171); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/RuneMysteries.java b/2006Redone Server/src/redone/game/content/quests/impl/RuneMysteries.java new file mode 100644 index 00000000..6769e64e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/RuneMysteries.java @@ -0,0 +1,72 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Rune Mysteries + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class RuneMysteries { + + Client client; + + public RuneMysteries(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.runeMist == 0) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Duke Horiaco", 8147); + client.getPlayerAssistant().sendFrame126( + "who is located on the 2nd floor of the Lumbridge Castle.", + 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + client.getPlayerAssistant().sendFrame126( + "There are no minimum requirments.", 8150); + } else if (client.runeMist == 1) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the duke", 8147); + client.getPlayerAssistant().sendFrame126( + "I should take the talisman to the Head Wizard.", 8148); + } else if (client.runeMist == 2) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Sedridor", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I gave him the talisman", 8148); + client.getPlayerAssistant().sendFrame126( + "I should bring the notes to Aubury.", 8149); + } else if (client.runeMist == 3) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to Aubury.", 8147); + client.getPlayerAssistant().sendFrame126("@str@I gave him the notes", + 8148); + client.getPlayerAssistant().sendFrame126( + "I should go back to the wizard tower", 8149); + } else if (client.runeMist == 4) { + client.getPlayerAssistant().sendFrame126("Rune Mysteries", 8144); + client.getPlayerAssistant().sendFrame126("@str@I talked to Sedridor", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I gave him his items.", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8150); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 1 Quest point", 8151); + client.getPlayerAssistant() + .sendFrame126("And an air talisman.", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/SheepShearer.java b/2006Redone Server/src/redone/game/content/quests/impl/SheepShearer.java new file mode 100644 index 00000000..65ed0702 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/SheepShearer.java @@ -0,0 +1,62 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Sheep Shearer + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class SheepShearer { + + Client client; + + public SheepShearer(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Sheep Shearer", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.sheepShear == 0) { + client.getPlayerAssistant().sendFrame126("Sheep Shearer", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Fred in", 8147); + client.getPlayerAssistant().sendFrame126("Lumbridge.", 8148); + client.getPlayerAssistant() + .sendFrame126("Minimum Requirments:", 8149); + client.getPlayerAssistant().sendFrame126("None.", 8150); + } else if (client.sheepShear == 1) { + client.getPlayerAssistant().sendFrame126("Sheep Shearer", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've talked to fred", + 8147); + client.getPlayerAssistant().sendFrame126( + "I've agreed to get him some wool.", 8148); + if (client.getItemAssistant().playerHasItem(1759, 20)) { + client.getPlayerAssistant() + .sendFrame126("@str@Bal of Wool", 8149); + } else { + client.getPlayerAssistant().sendFrame126("@red@Ball of Wool", + 8149); + } + } else if (client.sheepShear == 2) { + client.getPlayerAssistant().sendFrame126("Sheep Shearer", 8144); + client.getPlayerAssistant().sendFrame126("@str@I gave fred his wool", + 8147); + client.getPlayerAssistant().sendFrame126("@str@So he awarded me.", + 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8149); + client.getPlayerAssistant().sendFrame126("As a reward, 60 coins.", + 8150); + client.getPlayerAssistant().sendFrame126("150 crating exp", 8150); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point", 8151); + client.getPlayerAssistant().sendFrame126("", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/VampyreSlayer.java b/2006Redone Server/src/redone/game/content/quests/impl/VampyreSlayer.java new file mode 100644 index 00000000..eb5bf3c9 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/VampyreSlayer.java @@ -0,0 +1,69 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Vampyre Slayer + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class VampyreSlayer { + + Client client; + + public VampyreSlayer(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.vampSlayer == 0) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126("I can start this quest by speaking to Morgan in", 8147); + client.getPlayerAssistant().sendFrame126("Draynor Village.", 8148); + client.getPlayerAssistant().sendFrame126("Minimum Requirments:", 8149); + client.getPlayerAssistant().sendFrame126("Be able to kill a level 37 monster.", 8150); + } else if (client.vampSlayer == 1) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've talked to the Morgan", 8147); + client.getPlayerAssistant().sendFrame126("I should speak to Doctor Harlow", 8148); + } else if (client.vampSlayer == 2) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've talked to Doctor Harlow", 8147); + client.getPlayerAssistant().sendFrame126("I need to him a beer.", 8148); + client.getPlayerAssistant().sendFrame126("I should speak to the bartender", 8149); + } else if (client.vampSlayer == 3) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the bartender", 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I gave Doctor Harlow the beer", 8148); + client.getPlayerAssistant().sendFrame126( + "@str@Doctor Harlow talked to me and", 8149); + client.getPlayerAssistant().sendFrame126( + "@str@Gave me a stake and hammer.", 8150); + client.getPlayerAssistant().sendFrame126("Get everything you need and go to Draynor Village.", 8151); + client.getPlayerAssistant().sendFrame126("Begin your battle.", 8152); + } else if (client.vampSlayer == 4) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've killed the Vampire", 8147); + client.getPlayerAssistant().sendFrame126("I need to talk to Morgan to complete the quest.", 8148); + } else if (client.vampSlayer == 5) { + client.getPlayerAssistant().sendFrame126("Vampyre Slayer", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've Talked to Morgan", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8150); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 4825 Attack Exp.", 8151); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point", 8152); + client.getPlayerAssistant().sendFrame126("", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/quests/impl/WitchsPotion.java b/2006Redone Server/src/redone/game/content/quests/impl/WitchsPotion.java new file mode 100644 index 00000000..b7c023c5 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/quests/impl/WitchsPotion.java @@ -0,0 +1,61 @@ +package redone.game.content.quests.impl; + +import redone.game.players.Client; + +/** + * Witchs Potion + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class WitchsPotion { + + Client client; + + public WitchsPotion(Client client) { + this.client = client; + } + + public void showInformation() { + for (int i = 8144; i < 8195; i++) { + client.getPlayerAssistant().sendFrame126("", i); + } + client.getPlayerAssistant().sendFrame126("@dre@Witch's Potion", 8144); + client.getPlayerAssistant().sendFrame126("", 8145); + if (client.witchspot == 0) { + client.getPlayerAssistant().sendFrame126("Witch's Potion", 8144); + client.getPlayerAssistant().sendFrame126( + "I can start this quest by speaking to Hetty", 8147); + client.getPlayerAssistant().sendFrame126("Rimmington.", 8148); + client.getPlayerAssistant() + .sendFrame126("Minimum Requirments:", 8149); + client.getPlayerAssistant().sendFrame126("None.", 8150); + } else if (client.witchspot == 1) { + client.getPlayerAssistant().sendFrame126("Witch's Potion", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I've talked to the Hetty", 8147); + client.getPlayerAssistant().sendFrame126( + "I've agreed to get her the ingredients", 8148); + } else if (client.witchspot == 2) { + client.getPlayerAssistant().sendFrame126("Witch's Potion", 8144); + client.getPlayerAssistant().sendFrame126( + "@str@I have all the ingredients", 8147); + client.getPlayerAssistant().sendFrame126("I should talk to hetty.", + 8148); + client.getPlayerAssistant().sendFrame126("", 8149); + } else if (client.witchspot == 3) { + client.getPlayerAssistant().sendFrame126("Witch's Potion", 8144); + client.getPlayerAssistant().sendFrame126("@str@I've Talked to Hetty", + 8147); + client.getPlayerAssistant().sendFrame126( + "@str@I drank from the Cauldron", 8148); + client.getPlayerAssistant().sendFrame126("@red@ QUEST COMPLETE", + 8150); + client.getPlayerAssistant().sendFrame126( + "As a reward, I gained 325 Magic Exp.", 8151); + client.getPlayerAssistant().sendFrame126("And 1 Quest Point", 8152); + client.getPlayerAssistant().sendFrame126("", 8152); + } + client.getPlayerAssistant().showInterface(8134); + } + +} diff --git a/2006Redone Server/src/redone/game/content/random/Balloons.java b/2006Redone Server/src/redone/game/content/random/Balloons.java new file mode 100644 index 00000000..e180c35d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/random/Balloons.java @@ -0,0 +1,54 @@ +package redone.game.content.random; + +import java.awt.Point; +import java.util.Random; + +import redone.Server; +import redone.game.objects.Objects; +import redone.game.players.Client; + +public class Balloons extends Objects { + + static Random r = new Random(); + public static int item, amount; + public static int x, y; + + @SuppressWarnings("static-access") + public Balloons(int id, int x, int y, int height, int face, int type, + int ticks, int item, int amount) { + super(id, x, y, height, face, type, ticks); + this.x = x; + this.y = y; + this.item = item; + this.amount = amount; + } + + public static void popBalloon(Client c, int x, int y) { + PartyRoom.coords.remove(getCoords()); + Balloons empty = remove(x, y); + Server.itemHandler.createGroundItem(c, item, x, y, amount, c.playerId); + item = 0; + amount = 0; + Server.objectHandler.addObject(empty); + Server.objectHandler.placeObject(empty); + c.startAnimation(794); + } + + public static Point getCoords() { + return new Point(x, y); + } + + public static Balloons getBalloon(int item, int amount) { + return new Balloons(115 + r.nextInt(5), 2730 + r.nextInt(13), + 3462 + r.nextInt(13), 0, 0, 10, 0, item, amount); + } + + public static Balloons getEmpty() { + return new Balloons(115 + r.nextInt(5), 2730 + r.nextInt(13), + 3462 + r.nextInt(13), 0, 0, 10, 0, 0, 0); + } + + public static Balloons remove(int x, int y) { + return new Balloons(-1, x, y, 0, 0, 10, 0, 0, 0); + } +} diff --git a/2006Redone Server/src/redone/game/content/random/HolidayDrops.java b/2006Redone Server/src/redone/game/content/random/HolidayDrops.java new file mode 100644 index 00000000..82e7b3ce --- /dev/null +++ b/2006Redone Server/src/redone/game/content/random/HolidayDrops.java @@ -0,0 +1,70 @@ +package redone.game.content.random; + +import redone.Constants; +import redone.game.players.PlayerHandler; + +/** + * Holiday Drops + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public enum HolidayDrops { + EASTER(1961, "Easter", false), HALLOWEEN(1053, "Halloween", true), CHRISTMAS(962, "Christmas", false); + + private final int item;// holiday item + private final String name;// holiday name + private final boolean whichHoliday;// if true, this holiday will be dropped + public final int DROP_DISTANCE = 40;// distance of drops + public int count = 0;// count starts at 0 and ends at 400 can be changed + public final int drops = 7;// this is just for random number of the drops + public static int DROP_AMOUNT = PlayerHandler.playerCount * 5;// players + // online * + // 5 = drop + // amount + public static int dropAmount() { + int amount = DROP_AMOUNT; + if (Constants.SERVER_DEBUG) { + return amount * 60; + } + return amount; + } + + private HolidayDrops(int item, String name, boolean whichHoliday) { + this.item = item; + this.name = name; + this.whichHoliday = whichHoliday; + } + + public int getItem() { + return item; + } + + public String getName() { + return name; + } + + public boolean getHoliday() { + return whichHoliday; + } + + /*private static int addItem() { + int random = 2; + if (Misc.random(random) == 0) { + return 1053; + } else if (Misc.random(random) == 1) { + return 1055; + } else if (Misc.random(random) == 2) { + return 1057; + } + return -1; + }*/ + + public final int[][] COORDS = { { 3214, 3424 }, // Varrock + { 3222, 3218 }, // Lumbridge + { 2964, 3378 }, // Falador + { 3082, 3419 }, // Barb + { 3082, 3249 }, // Draynor + { 3293, 3180 }, // Al Kharid + { 3034, 3246 }, // Rimmington + }; +} diff --git a/2006Redone Server/src/redone/game/content/random/Holidays.java b/2006Redone Server/src/redone/game/content/random/Holidays.java new file mode 100644 index 00000000..7e91b08e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/random/Holidays.java @@ -0,0 +1,90 @@ +package redone.game.content.random; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +/** + * Holiday Drops + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class Holidays { + + public static void startDropping(Client c) { + for (final HolidayDrops holiday : HolidayDrops.values()) { + for (Player player : PlayerHandler.players) { + if (player != null) { + Client p1 = (Client) player; + if (holiday.getHoliday()) { + if (p1.playerRights > 2) { + p1.getActionSender().sendMessage("Currently dropping " + HolidayDrops.dropAmount() + " items."); + } + p1.getActionSender().sendMessage("The " + holiday.getName() + " event has started, goodluck!"); + dropItems(c); + } + } + } + } + } + + public static void dropItems(Client client) { + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + Client p1 = (Client) PlayerHandler.players[j]; + for (HolidayDrops holiday : HolidayDrops.values()) { + if (holiday.count >= HolidayDrops.dropAmount() && holiday.getHoliday()) { + stop(); + p1.getActionSender().sendMessage("The " + holiday.getName() + " event has ended, good luck finding the rest of the items!"); + } else if (holiday.count < HolidayDrops.dropAmount() && holiday.getHoliday()) { + switch (Misc.random(holiday.drops)) { + case 0:// Varrock + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3214 + Misc.random(holiday.DROP_DISTANCE), 3424 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 1:// Lumbridge + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3222 + Misc.random(holiday.DROP_DISTANCE), 3218 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 2:// Falador + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 2964 + Misc.random(holiday.DROP_DISTANCE), 3378 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 3:// Barb Village + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3082 + Misc.random(holiday.DROP_DISTANCE), 3419 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 4:// Draynor + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3082 + Misc.random(holiday.DROP_DISTANCE), 3249 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 5:// Al Kharid + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3293 + Misc.random(holiday.DROP_DISTANCE), 3180 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + case 6:// Rimmington + Server.itemHandler.createGroundItem(p1, holiday.getItem(), 3034 + Misc.random(holiday.DROP_DISTANCE), 3246 - Misc.random(holiday.DROP_DISTANCE), 1, j); + holiday.count++; + break; + } + } + } + } + } + } + @Override + public void stop() { + // TODO Auto-generated method stub + + } + }, 2); + } +} diff --git a/2006Redone Server/src/redone/game/content/random/PartyRoom.java b/2006Redone Server/src/redone/game/content/random/PartyRoom.java new file mode 100644 index 00000000..71d6e946 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/random/PartyRoom.java @@ -0,0 +1,237 @@ +package redone.game.content.random; + +import java.awt.Point; +import java.util.ArrayList; +import java.util.Random; + +import redone.Constants; +import redone.Server; +import redone.game.items.Item; +import redone.game.objects.Objects; +import redone.game.players.Client; + +public class PartyRoom { + + static Random r = new Random(); + static int[] roomItems = new int[50]; + static int[] roomItemsN = new int[50]; + static long lastAnnouncment; + static int announcmentFrequency = 1; // announcment frequency in mins + static ArrayList coords = new ArrayList(); + + public static int getAmount() { + int amount = 0; + for (int roomItem : roomItems) { + if (roomItem > 0) { + amount++; + } + } + return amount; + } + + public static void startTimer(Client c) { + if (System.currentTimeMillis() - lastAnnouncment > 1000 * 60 * announcmentFrequency) { + dropAll(); + lastAnnouncment = System.currentTimeMillis(); + } + } + + public static void dropAll() { + int trys = 0; + int amount = getAmount(); + if (amount < 1) { + return; + } + for (int x = 0; x < roomItems.length; x++) { + if (roomItemsN[x] > 0) { + Balloons b = null; + do { + b = Balloons.getBalloon(roomItems[x], roomItemsN[x]); + trys++; + } while (coords.contains(Balloons.getCoords()) && trys < 100); + Server.objectHandler.addObject(b); + Server.objectHandler.placeObject(b); + } + if (trys > 100) { + break; + } + roomItems[x] = 0; + roomItemsN[x] = 0; + } + trys = 0; + for (int x = 0; x < amount * 2; x++) { + Objects o; + do { + o = Balloons.getEmpty(); + } while (coords.contains(new Point(o.objectX, o.objectY)) + && trys < 100); + if (trys > 100) { + break; + } + Server.objectHandler.addObject(o); + Server.objectHandler.placeObject(o); + } + coords.clear(); + } + + public static int arraySlot(int[] array, int target) { + int spare = -1; + for (int x = 0; x < array.length; x++) { + if (array[x] == target) { + return x; + } else if (spare == -1 && array[x] <= 0) { + spare = x; + } + } + return spare; + } + + public static void open(Client c) { + if (!Constants.PARTY_ROOM_DISABLED) { + updateGlobal(c); + updateDeposit(c); + c.getItemAssistant().resetItems(5064); + c.getPlayerAssistant().sendFrame248(2156, 5063); + } else { + c.getActionSender().sendMessage( + "The partyroom has been disabled."); + } + } + + public static void accept(Client c) { + for (int x = 0; x < c.party.length; x++) { + if (c.partyN[x] > 0) { + if (Item.itemStackable[c.party[x]]) { + int slot = arraySlot(roomItems, c.party[x]); + if (slot < 0) { + c.getActionSender().sendMessage( + "Theres not enough space left in the chest."); + break; + } + if (roomItems[slot] != c.party[x]) { + roomItems[slot] = c.party[x]; + roomItemsN[slot] = c.partyN[x]; + } else { + roomItemsN[slot] += c.partyN[x]; + } + c.party[x] = -1; + c.partyN[x] = 0; + } else { + int left = c.partyN[x]; + for (int y = 0; y < left; y++) { + int slot = arraySlot(roomItems, -2); + if (slot < 0) { + c.getActionSender() + .sendMessage( + "Theres not enough space left in the chest."); + break; + } + roomItems[slot] = c.party[x]; + roomItemsN[slot] = 1; + c.partyN[x]--; + } + if (c.partyN[x] <= 0) { + c.party[x] = -1; + } + } + } + } + updateDeposit(c); + updateGlobal(c); + } + + // public static void updateAll() { + // for (int x = 0; x < PlayerHandler.getPlayers().length; x++) { + // updateGlobal((Client) PlayerHandler.getPlayers()[x]); + // } + // } + + public static void fix(Client c) { + for (int x = 0; x < 8; x++) { + if (c.party[x] < 0) { + c.partyN[x] = 0; + } else if (c.partyN[x] <= 0) { + c.party[x] = 0; + } + } + } + + public static void depositItem(Client c, int id, int amount) { + int slot = arraySlot(c.party, id); + for (int i : Constants.ITEM_TRADEABLE) { + if (i == id) { + c.getActionSender().sendMessage( + "You can't deposit this item."); + return; + } + if (id == 995) { + c.getActionSender().sendMessage("You can't deposit coins!"); + return; + } + } + if (c.getItemAssistant().getItemAmount(id) < amount) { + amount = c.getItemAssistant().getItemAmount(id); + } + if (!c.getItemAssistant().playerHasItem(id, amount)) { + c.getActionSender().sendMessage( + "You don't have that many items!"); + return; + } + if (slot == -1) { + c.getActionSender().sendMessage( + "You cant deposit more than 8 items at once."); + return; + } + c.getItemAssistant().deleteItem2(id, amount); + if (c.party[slot] != id) { + c.party[slot] = id; + c.partyN[slot] = amount; + } else { + c.party[slot] = id; + c.partyN[slot] += amount; + } + updateDeposit(c); + } + + public static void withdrawItem(Client c, int slot) { + if (c.party[slot] >= 0 && c.getItemAssistant().freeSlots() > 0) { + c.getItemAssistant().addItem(c.party[slot], c.partyN[slot]); + c.party[slot] = 0; + c.partyN[slot] = 0; + } + updateDeposit(c); + updateGlobal(c); + } + + public static void updateDeposit(Client c) { + c.getItemAssistant().resetItems(5064); + for (int x = 0; x < 8; x++) { + if (c.partyN[x] <= 0) { + itemOnInterface(c, 2274, x, -1, 0); + } else { + itemOnInterface(c, 2274, x, c.party[x], c.partyN[x]); + } + } + } + + public static void updateGlobal(Client c) { + for (int x = 0; x < roomItems.length; x++) { + if (roomItemsN[x] <= 0) { + itemOnInterface(c, 2273, x, -1, 0); + } else { + itemOnInterface(c, 2273, x, roomItems[x], roomItemsN[x]); + } + } + } + + public static void itemOnInterface(Client c, int frame, int slot, int id, + int amount) { + c.outStream.createFrameVarSizeWord(34); + c.outStream.writeWord(frame); + c.outStream.writeByte(slot); + c.outStream.writeWord(id + 1); + c.outStream.writeByte(255); + c.outStream.writeDWord(amount); + c.outStream.endFrameVarSizeWord(); + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/EvilChicken.java b/2006Redone Server/src/redone/game/content/randomevents/EvilChicken.java new file mode 100644 index 00000000..531fcd83 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/EvilChicken.java @@ -0,0 +1,27 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class EvilChicken { + + // min cmb, maxcmb, npcid, maxhit, attack, defence + private static int[][] chicken = { { 3, 10, 2463, 19, 1, 10, 10 }, + { 11, 20, 2464, 40, 1, 30, 30 }, { 21, 40, 2465, 60, 2, 60, 60 }, + { 41, 60, 2466, 80, 3, 80, 80 }, + { 61, 90, 2467, 105, 4, 100, 100 }, + { 91, 138, 2468, 120, 5, 120, 120 }, }; + + public static void spawnChicken(Client player) { + for (int[] aChicken : chicken) { + if (player.chickenSpawned == false) { + if (player.combatLevel >= aChicken[0] && player.combatLevel <= aChicken[1]) { + NpcHandler.spawnNpc(player, aChicken[2], player.absX + Misc.random(1), player.absY + Misc.random(1), player.heightLevel, 0, aChicken[3], aChicken[4], aChicken[5], aChicken[6], true, false); + player.chickenSpawned = true; + player.randomActions = 0; + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/randomevents/FreakyForester.java b/2006Redone Server/src/redone/game/content/randomevents/FreakyForester.java new file mode 100644 index 00000000..1b40602c --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/FreakyForester.java @@ -0,0 +1,71 @@ +package redone.game.content.randomevents; + +import redone.game.players.Client; +import redone.util.Misc; + +public class FreakyForester { + + public static void teleportToLocation(Client client) { + client.lastX = client.absX; + client.lastY = client.absY; + client.lastH = client.heightLevel; + client.teleportToX = 2602; + client.teleportToY = 4775; + client.heightLevel = 0; + client.getActionSender().sendMessage("Talk to the freaky forester to get out."); + } + + private static String[] pheasant = { "one", "two", "three", "four", }; + + public static String getPheasant(Client client) { + if (client.getPheasent < 0) { + client.getPheasent = Misc.random(3); + } + return pheasant[client.getPheasent] + " tailed"; + } + + public static void leaveArea(Client client) { + if (client.killedPheasant[client.getPheasent]) { + client.getPlayerAssistant().movePlayer(client.lastX, client.lastY, client.lastH); + client.canLeaveArea = true; + client.getActionSender().sendMessage("Congratulations, you've completed the freaky forester event!"); + if (client.recievedReward == false) { + client.getItemAssistant().addItem(6180, 1); + client.getItemAssistant().addItem(6181, 1); + client.getItemAssistant().addItem(6182, 1); + client.recievedReward = true; + } else { + client.getItemAssistant().addItem(995, 500); + client.getActionSender().sendMessage("You have already beat the freaky forester event so you get 500 coins."); + } + int delete = client.getItemAssistant().getItemCount(6178); + client.getItemAssistant().deleteItem2(6178, delete); + client.randomActions = 0; + } else { + RandomEventHandler.failEvent(client); + } + for (int i = 0; i < 4; i++) { + client.killedPheasant[i] = false; + } + client.getPheasent = -1; + client.canLeaveArea = false; + } + + public static void killedPheasant(Client client, int p) { + for (int i = 0; i < 4; i++) { + client.killedPheasant[i] = false; + } + client.killedPheasant[p] = true; + } + + public static boolean hasKilledPheasant(Client client) { + for (int i = 0; i < 4; i++) { + if (client.killedPheasant[i]) { + client.canLeaveArea = true; + return true; + } + } + client.canLeaveArea = false; + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/Frog.java b/2006Redone Server/src/redone/game/content/randomevents/Frog.java new file mode 100644 index 00000000..d075064e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/Frog.java @@ -0,0 +1,50 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Frog Event + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public final class Frog { + + private static final int[][] FROG_DATA = { { 2469, 2470, 2471, 2472, 2473 } }; + + public static void startEvent(Client client) { + spawnFrogs(client); + spawnBasedOnGender(client); + client.ignoreFrog = false; + } + + public static void finishEvent(Client client) {// breaks + if (client.ignoreFrog) { + client.getPlayerAssistant().movePlayer(client.lastX, client.lastY, client.lastH); + } + giveReward(client); + } + + public static void spawnBasedOnGender(Client client) {// ternary + NpcHandler.spawnNpc(client, client.playerAppearance[0] == 1 ? 2474 : 2475, client.absX + Misc.random(1), client.absY + Misc.random(1), 0, 0, 0, 0, 0, 0, false, false); + } + + public static void ignoreFrogs(Client client) { + String type = client.playerMagicBook == 0 ? "modern" : "ancient"; + client.getPlayerAssistant().startTeleport(6861, 5834, 0, type); + spawnFrogs(client); + spawnBasedOnGender(client); + client.ignoreFrog = true; + } + + public static void giveReward(Client client) { + client.getItemAssistant().addItem(6183, 1); + } + + public static void spawnFrogs(Client client) { + for (int[] element : FROG_DATA) { + NpcHandler.spawnNpc(client, element[0], client.absX + Misc.random(1), client.absY + Misc.random(1), 0, 0, 0, 0, 0, 0, false, false); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/GenieLamp.java b/2006Redone Server/src/redone/game/content/randomevents/GenieLamp.java new file mode 100644 index 00000000..e93c9727 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/GenieLamp.java @@ -0,0 +1,105 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author Aintaro + */ + +public class GenieLamp { + + private static final int GENIE_LAMP1 = 7498;// , GENIE_LAMP2 = 6543; + + private static int expAmount; + + public static boolean spawnGenieNpc(Client c) { + if (Misc.random(100) == 1 && !c.inWild()) { + NpcHandler.spawnNpc(c, 409, c.absX, c.absY + 1, 0, 0, 0, 0, 0, 0, + false, false); + return true; + } + return false; + } + + public static void removeGenieNpc(Client c) { + NpcHandler.npcs[c.lastNpcClickIndex].absX = 0; + NpcHandler.npcs[c.lastNpcClickIndex].absY = 0; + } + + public static void rubGenieLamp(Client c, int itemId) { + if (itemId == GENIE_LAMP1) {// || itemId == GENIE_LAMP2) { + c.getActionSender().sendMessage("You rub the lamp..."); + c.getPlayerAssistant().showInterface(2808); + } + } + + private static int[][] genieData = { { 10252, 0 }, { 11000, 1 }, + { 10253, 2 }, { 11001, 3 }, { 10254, 4 }, { 11002, 5 }, + { 10255, 6 }, { 11011, 7 }, { 11013, 8 }, { 11014, 9 }, + { 11010, 10 }, { 11012, 11 }, { 11006, 12 }, { 11009, 13 }, + { 11008, 14 }, { 11004, 15 }, { 11003, 16 }, { 11005, 17 }, + { 47002, 18 }, { 54090, 19 }, { 11007, 20 }, }; + public String statName[] = { "attack", "defence", "strength", "hitpoints", + "range", "prayer", "magic", "cooking", "woodcutting", "fletching", + "fishing", "firemaking", "crafting", "smithing", "mining", + "herblore", "agility", "thieving", "slayer", "farming", + "runecrafting" }; + + private static void whatSkillAreWeLookingFor(Client c, int actionButtonId) { + for (int[] genie : genieData) { + if (genie[0] == actionButtonId) { + if (c.getItemAssistant().playerHasItem(GENIE_LAMP1, 1)) { + c.getItemAssistant().deleteItem(GENIE_LAMP1, 1); + expAmount = 10 * c.playerLevel[genie[1]]; + c.getPlayerAssistant().addSkillXP(expAmount, genie[1]); + // c.getDH().sendStatement( + // "You gained " + expAmount * Config.SERVER_EXP_BONUS + // + " experience."); + c.nextChat = 0; + break; + /* + * } else if + * (c.getItemAssistant().playerHasItem(GENIE_LAMP2, 1)) { + * c.getItemAssistant().deleteItem(GENIE_LAMP2, 1); + * expAmount = 10 * c.playerLevel[genie[1]]; + * c.getPlayerAssistant().addSkillXP(expAmount, genie[1]); + * //c.getDH().sendStatement( //"You gained " + expAmount * + * Config.SERVER_EXP_BONUS // + " experience."); c.nextChat + * = 0; break; + */ + } + } + } + } + + public static boolean genieInterfaceButtons(Client c, int actionButtonId) { + switch (actionButtonId) { + case 10252: + case 10253: + case 10254: + case 10255: + case 11000: + case 11001: + case 11002: + case 11003: + case 11004: + case 11005: + case 11006: + case 11007: + case 47002: + case 54090: + case 11008: + case 11009: + case 11010: + case 11011: + case 11012: + case 11013: + case 11014: + whatSkillAreWeLookingFor(c, actionButtonId); + return true; + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/RandomEventHandler.java b/2006Redone Server/src/redone/game/content/randomevents/RandomEventHandler.java new file mode 100644 index 00000000..a4f5f89d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/RandomEventHandler.java @@ -0,0 +1,77 @@ +package redone.game.content.randomevents; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Eventhandler class + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class RandomEventHandler { + + public static int CALL_RANDOM = 350 + Misc.random(100); + + public static void resetEvent(Client player) { + player.randomActions = 0; + } + + private static int[][] FAIL_COORDS = { { 3333, 3333 }, { 3196, 3193 }, + { 3084, 3549 }, { 2974, 3346 }, { 2781, 3506 }, { 2810, 3508 }, }; + + public static void failEvent(Client player) { + int loc = Misc.random(FAIL_COORDS.length - 1); + player.teleportToX = FAIL_COORDS[loc][0]; + player.teleportToY = FAIL_COORDS[loc][1]; + player.heightLevel = 0; + player.getActionSender().sendMessage("You wake up in a strange location..."); + resetEvent(player); + player.getPlayerAssistant().closeAllWindows(); + } + + public static void callRandom(Client player) { // add all random events here + if (player.inFightCaves() || player.playerEquipment[player.playerWeapon] == 4024 || player.tutorialProgress < 36) { + return; + } + int randomEvent = Misc.random(3); + switch (randomEvent) { + case 0: + SandwhichLady.openSandwhichLady(player); + resetEvent(player); + break; + case 1: + if (player.chickenSpawned == false) { + EvilChicken.spawnChicken(player); + resetEvent(player); + } + break; + case 2: + FreakyForester.teleportToLocation(player); + resetEvent(player); + break; + case 3: + Swarm.spawnSwarm(player); + resetEvent(player); + break; + + default: + System.out.println("Error no random event called for " + player.playerName + "."); + break; + } + } + + public static void addRandom(Client player) { + if (player.randomActions >= CALL_RANDOM) { + callRandom(player); + if (player.playerIsBusy() && !player.hasSandwhichLady) { + player.getPlayerAssistant().closeAllWindows(); + } + } else { + int nextRandom = CALL_RANDOM - player.randomActions; + if (player.playerRights == 3) { + player.getActionSender().sendMessage("Next random will be in " + nextRandom + " more random actions."); + } + player.randomActions += 1; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/RiverTroll.java b/2006Redone Server/src/redone/game/content/randomevents/RiverTroll.java new file mode 100644 index 00000000..99620d8b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/RiverTroll.java @@ -0,0 +1,28 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class RiverTroll { + + public static boolean hasRiverTroll = false; + + private static int[][] riverTroll = { { 3, 10, 391, 19, 1 }, + { 11, 20, 392, 40, 1 }, { 21, 40, 393, 80, 3 }, + { 61, 90, 394, 105, 4 }, { 91, 110, 395, 120, 5 }, + { 111, 138, 396, 150, 7 }, }; + + public static void spawnRiverTroll(Client c) { + for (int[] element : riverTroll) { + if (hasRiverTroll == false) { + if (c.combatLevel >= element[0] && c.combatLevel <= element[1] && hasRiverTroll == false) { + NpcHandler.spawnNpc(c, element[2], c.absX + Misc.random(1), c.absY + Misc.random(1), c.heightLevel, 0, element[3], element[4], c.playerLevel[c.playerAttack] * 2, c.playerLevel[c.playerDefence] * 2, true, false); + c.randomActions = 0; + hasRiverTroll = true; + NpcHandler.npcs[element[2]].forceChat("Fishies be mine! Leave dem fishies!"); + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/randomevents/RockGolem.java b/2006Redone Server/src/redone/game/content/randomevents/RockGolem.java new file mode 100644 index 00000000..d0bf02ac --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/RockGolem.java @@ -0,0 +1,30 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class RockGolem { + + public static int[][] rockGolem = { + {3, 10, 413, 19, 1}, + {11, 20, 414, 40, 1}, + {21, 40, 415, 80, 3}, + {61, 90, 416, 105, 4}, + {91, 110, 417, 120, 5}, + {111, 138, 418, 150, 7}, + }; + + public static void spawnRockGolem(Client c) { + for (int[] aRockGolem : rockGolem) { + if(!c.golemSpawned) { + if (c.combatLevel >= aRockGolem[0] && c.combatLevel <= aRockGolem[1]) { + NpcHandler.spawnNpc(c, aRockGolem[2], c.getX() + Misc.random(1), c.getY() + Misc.random(1), c.heightLevel, 0, aRockGolem[3], aRockGolem[4], aRockGolem[4] * 10, aRockGolem[4] * 10, true, false); + c.golemSpawned = true; + NpcHandler.npcs[aRockGolem[2]].forceChat("Raarrrgghh! Flee human!"); + } + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/SandwhichLady.java b/2006Redone Server/src/redone/game/content/randomevents/SandwhichLady.java new file mode 100644 index 00000000..c3bdd854 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/SandwhichLady.java @@ -0,0 +1,165 @@ +package redone.game.content.randomevents; + +import redone.game.players.Client; +import redone.util.Misc; + +public class SandwhichLady { + + private static int itemType; + + public static void handleOptions(Client player, int actionbuttonId) { + if (player.hasSandwhichLady) { + switch (actionbuttonId) { + case 63013: + if (itemType == 0) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(2323, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63014: + if (itemType == 1) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(1971, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63015: + if (itemType == 2) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(1973, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63009: + if (itemType == 3) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(6961, 10); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63010: + if (itemType == 4) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(6962, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63011: + if (itemType == 5) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(6965, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage( + "You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + + case 63012: + if (itemType == 6) { + player.getPlayerAssistant().closeAllWindows(); + player.getItemAssistant().addItem(2309, 1); + player.getActionSender() + .sendMessage( + "Congratulations, you have completed the random event!"); + } else { + player.getActionSender().sendMessage("You have chosen the wrong item!"); + RandomEventHandler.failEvent(player); + } + player.hasSandwhichLady = false; + break; + } + } else if (player.hasSandwhichLady == false && actionbuttonId > 63008 && actionbuttonId < 63116) { + player.getActionSender().sendMessage("You have improperly opened the sandwhich lady interface."); + } + } + + public static void openSandwhichLady(Client player) { + player.hasSandwhichLady = true; + player.getPlayerAssistant().sendFrame126(" ", 16131); + player.getPlayerAssistant().showInterface(16135); + int randomMessage = Misc.random(6); + switch (randomMessage) { + case 0: + player.getPlayerAssistant().sendFrame126("Please select the pie.", + 16145); + itemType = 0; + break; + case 1: + player.getPlayerAssistant().sendFrame126("Please select the kebab.", + 16145); + itemType = 1; + break; + case 2: + player.getPlayerAssistant().sendFrame126( + "Please select the chocolate.", 16145); + itemType = 2; + break; + case 3: + player.getPlayerAssistant().sendFrame126("Please select the bagel.", + 16145); + itemType = 3; + break; + case 4: + player.getPlayerAssistant().sendFrame126( + "Please select the triangle sandwich.", 16145); + itemType = 4; + break; + case 5: + player.getPlayerAssistant().sendFrame126( + "Please select the square sandwich.", 16145); + itemType = 5; + break; + case 6: + player.getPlayerAssistant().sendFrame126("Please select the bread.", + 16145); + itemType = 6; + break; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/Shade.java b/2006Redone Server/src/redone/game/content/randomevents/Shade.java new file mode 100644 index 00000000..6ccbf36d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/Shade.java @@ -0,0 +1,35 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class Shade { + + private static int[][] shade = { { 3, 10, 425, 19, 1 }, + { 11, 20, 426, 40, 3 }, { 21, 40, 427, 60, 5 }, + { 41, 60, 428, 80, 8 }, { 61, 90, 429, 105, 11 }, + { 91, 138, 430, 120, 13 }, }; + + public static void spawnShade(Client client) { + for (int[] element : shade) { + if (client.shadeSpawned == false) { + if (client.combatLevel >= element[0] + && client.combatLevel <= element[1]) { + NpcHandler + .spawnNpc(client, element[2], + client.absX + Misc.random(1), client.absY + + Misc.random(1), client.heightLevel, + 0, + element[3], // HP + element[4], // maxhit + (int) (NpcHandler.getNpcListCombat(element[3]) * 1.5), // defence + (int) (NpcHandler.getNpcListCombat(element[3]) * 1.5), + true, false); // attack + client.randomActions = 0; + client.shadeSpawned = true; + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/randomevents/Swarm.java b/2006Redone Server/src/redone/game/content/randomevents/Swarm.java new file mode 100644 index 00000000..67115cdd --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/Swarm.java @@ -0,0 +1,65 @@ +package +redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Swarm Event + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class Swarm { + + private static int checkStats(Client client, boolean bot) { + if (bot) { + return client.getPlayerAssistant().getLevelForXP(client.playerXP[client.playerHitpoints]) * 3; + } else { + return client.getPlayerAssistant().getLevelForXP(client.playerXP[client.playerHitpoints]) * 2; + } + } + + /** + * Spawns the swarm. + * + * @param c + */ + public static void spawnSwarm(Client client) { + NpcHandler.spawnNpc(client, // param + 411, // npctype + client.absX + Misc.random(1), // posX + client.absY + Misc.random(1), // posY + client.heightLevel, // height + 0, // walkingtype + 1, // HP + 2, // maxhit + checkStats(client, false), + 3 * client.combatLevel, // defence + true, // attackplayer + false); // headicon + client.autoRet = 0; + } + + /** + * Spawns the swarm. If suspect a botter ... this one is stronger, botter + * has to react faster to survive. + * + * @param c + */ + public static void checkBot(Client client) { + NpcHandler.spawnNpc(client, // param + 411, // npctype + client.absX + Misc.random(1), // posX + client.absY + Misc.random(1), // posY + client.heightLevel, // height + 0, // walkingtype + 1, // HP + 6, // maxhit + checkStats(client, true), // attack + 4 * client.combatLevel, // defence + true, // attackplayer + false); // headicon + client.autoRet = 0; + } +} diff --git a/2006Redone Server/src/redone/game/content/randomevents/TreeSpirit.java b/2006Redone Server/src/redone/game/content/randomevents/TreeSpirit.java new file mode 100644 index 00000000..a3e43519 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/TreeSpirit.java @@ -0,0 +1,35 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class TreeSpirit { + + private static int[][] treeSpirit = { + // combat, combat 2, npcid, hitpoints, levels + { 3, 10, 438, 28, 1 }, { 11, 20, 439, 36, 1 }, + { 21, 40, 440, 57, 3 }, { 61, 90, 441, 90, 4 }, + { 91, 110, 442, 130, 5 }, { 111, 138, 443, 160, 7 }, }; + + private static int checkStats(Client client) { + return client.getPlayerAssistant().getLevelForXP(client.playerXP[client.playerHitpoints]) * 2; + } + + public static void spawnTreeSpirit(Client c) { + for (int[] element : treeSpirit) { + if (c.treeSpiritSpawned == false) { + if (c.combatLevel >= element[0] && c.combatLevel <= element[1]) { + NpcHandler.spawnNpc(c, element[2], c.absX + Misc.random(1), + c.absY + Misc.random(1), c.heightLevel, 0, element[3], + element[4], checkStats(c), c.playerLevel[c.playerDefence] * 2, true, + false); + NpcHandler.npcs[element[2]] + .forceChat("Leave these woods and never return!"); + c.treeSpiritSpawned = true; + c.randomActions = 0; + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/randomevents/Zombie.java b/2006Redone Server/src/redone/game/content/randomevents/Zombie.java new file mode 100644 index 00000000..ddebad19 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/randomevents/Zombie.java @@ -0,0 +1,28 @@ +package redone.game.content.randomevents; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class Zombie { + + private static int[][] zombie = { { 3, 10, 419, 28, 2, 10, 10 }, + { 11, 20, 420, 36, 4, 20, 20 }, { 21, 40, 421, 57, 6, 30, 30 }, + { 61, 90, 422, 90, 8, 40, 40 }, { 91, 110, 423, 130, 10, 50, 50 }, + { 111, 138, 424, 160, 12, 60, 60 } }; + + public static void spawnZombie(Client c) { + for (int[] element : zombie) { + if (c.zombieSpawned == false) { + if (c.combatLevel >= element[0] && c.combatLevel <= element[1]) { + NpcHandler.spawnNpc(c, element[2], c.absX + Misc.random(1), + c.absY + Misc.random(1), c.heightLevel, 0, element[3], + element[4], element[5], element[6], true, false); + c.randomActions = 0; + c.zombieSpawned = true; + NpcHandler.npcs[element[2]].forceChat("Braaaainssss!"); + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/skills/Menus.java b/2006Redone Server/src/redone/game/content/skills/Menus.java new file mode 100644 index 00000000..aa309b4c --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/Menus.java @@ -0,0 +1,39 @@ +package redone.game.content.skills; + +import redone.game.players.Client; + +/** + * Created by IntelliJ IDEA. User: vayken Date: 21/12/11 Time: 13:55 To change + * this template use File | Settings | File Templates. + */ +public class Menus { + + public static void sendSkillMenu(Client player, String type) { + if (type == "silverCrafting") { + display4Item(player, 1716, 1724, 2961, 5525, "Unblessed symbol", "Unholy symbol", "Silver sickle", "Tiara"); + } + player.setStatedInterface(type); + } + + public static void display4Item(Client player, int i1, int i2, int i3, int i4, String s1, String s2, String s3, String s4) { + player.getPlayerAssistant().sendItemOnInterface(8902, 250, i1); + player.getPlayerAssistant().sendItemOnInterface(8903, 150, i2); + player.getPlayerAssistant().sendItemOnInterface(8904, 200, i3); + player.getPlayerAssistant().sendItemOnInterface(8905, 250, i4); + player.getPlayerAssistant().sendFrame126(s1, 8909); + player.getPlayerAssistant().sendFrame126(s2, 8913); + player.getPlayerAssistant().sendFrame126(s3, 8917); + player.getPlayerAssistant().sendFrame126(s4, 8921); + player.getPlayerAssistant().sendChatInterface(8899); + } + + public static String determineAorAn(String nextWord) { + String[] c = {"a", "e", "i", "o", "u", "y"}; + for (String firstLetter : c) { + if (nextWord.toLowerCase().startsWith(firstLetter)) { + return "an"; + } + } + return "a"; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/SkillHandler.java b/2006Redone Server/src/redone/game/content/skills/SkillHandler.java new file mode 100644 index 00000000..fef9ffb6 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/SkillHandler.java @@ -0,0 +1,203 @@ +package redone.game.content.skills; + +import redone.event.CycleEventHandler; +import redone.game.content.skills.cooking.Cooking; +import redone.game.content.skills.core.Fishing; +import redone.game.content.skills.core.Mining; +import redone.game.content.skills.core.Woodcutting; +import redone.game.content.skills.herblore.Herblore; +import redone.game.content.skills.smithing.Smelting; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * Skillhandler + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class SkillHandler { + + public static final int SKILLING_EXP = 1; + public static boolean view190 = false; + private static long lastAction = 0; + public static boolean[] isSkilling = new boolean[25]; + public static long lastSkillingAction; + + public static boolean FISHING = true, AGILITY = true, COOKING = true, + FIREMAKING = true, HERBLORE = true, MINING = true, + RUNECRAFTING = true, THIEVING = true, WOODCUTTING = true, + PRAYER = true, FLETCHING = true, CRAFTING = true, MAGIC = true, + FARMING = false, SLAYER = true, SMITHING = true; + + public static final int WOODCUTTING_EXPERIENCE = SKILLING_EXP, + MINING_EXPERIENCE = SKILLING_EXP, + SMITHING_EXPERIENCE = SKILLING_EXP, + FARMING_EXPERIENCE = SKILLING_EXP, + FIREMAKING_EXPERIENCE = SKILLING_EXP, + HERBLORE_EXPERIENCE = SKILLING_EXP, + FISHING_EXPERIENCE = SKILLING_EXP, + AGILITY_EXPERIENCE = SKILLING_EXP, + PRAYER_EXPERIENCE = SKILLING_EXP, + RUNECRAFTING_EXPERIENCE = SKILLING_EXP, + CRAFTING_EXPERIENCE = SKILLING_EXP, + THIEVING_EXPERIENCE = SKILLING_EXP, + SLAYER_EXPERIENCE = SKILLING_EXP, + COOKING_EXPERIENCE = SKILLING_EXP, + FLETCHING_EXPERIENCE = SKILLING_EXP; + + public static boolean isSkilling(Client c) { + if (c.playerSkilling[10] || c.playerStun || c.playerSkilling[12] + || c.playerIsFletching || c.isFletching || c.playerIsCooking + || c.isMining || c.isWoodcutting || c.isSmithing + || c.isSmelting || c.isSpinning || c.isPotionMaking + || c.isPotCrafting || c.isFiremaking + || c.playerSkilling[c.playerHerblore] == true + || c.playerSkilling[13]) { + return true; + } + return false; + } + + + public static void resetItemOnNpc(Client player) { + if (player.isMining) {// mining + Mining.resetMining(player); + } else if (player.playerIsFletching == true) {// fletching + player.playerIsFletching = false; + } else if (player.playerIsCooking) {// cooking + Cooking.resetCooking(player); + } else if (player.isSmithing) {// smithing + player.isSmithing = false; + } else if (isSkilling[12]) {// crafting + isSkilling[12] = false; + } else if (player.isSmelting) { + player.isSmelting = false; + } else if (player.isCrafting == true) { + player.isCrafting = false; + } else if (player.isPotionMaking) {// herblore + Herblore.resetHerblore(player); + } else if (player.isWoodcutting) {// woodcutting + Woodcutting.stopWoodcutting(player); + } else if (player.isSpinning) {// spinning + player.isSpinning = false; + } else if (player.isPotCrafting == true) {// pot crafting + player.isPotCrafting = false; + } else if (player.playerIsCooking) {// cooking + Cooking.resetCooking(player); + } else if (player.playerSkilling[13]) {// smelting + Smelting.resetSmelting(player); + } + } + + public static void resetSkills(Client c) {// call when walking, dropping, + // picking up, leveling up + if (c.playerSkilling[10]) {// fishing + Fishing.resetFishing(c); + } else if (c.isMining) {// mining + Mining.resetMining(c); + } else if (c.playerIsFletching == true) {// fletching + c.playerIsFletching = false; + } else if (c.playerIsCooking) {// cooking + Cooking.resetCooking(c); + } else if (c.isSmithing) {// smithing + c.isSmithing = false; + } else if (isSkilling[12]) {// crafting + isSkilling[12] = false; + } else if (c.isSmelting) { + c.isSmelting = false; + } else if (c.isCrafting == true) { + c.isCrafting = false; + } else if (c.isPotionMaking) {// herblore + Herblore.resetHerblore(c); + } else if (c.isWoodcutting) {// woodcutting + Woodcutting.stopWoodcutting(c); + } else if (c.isSpinning) {// spinning + c.isSpinning = false; + } else if (c.isPotCrafting == true) {// pot crafting + c.isPotCrafting = false; + } + } + + public static boolean canDoAction(int timer) { + if (System.currentTimeMillis() >= lastAction) { + lastAction = System.currentTimeMillis() + timer; + return true; + } + return false; + } + + public static boolean membersOnly(Client c) { + if (c.membership == false) { + c.getActionSender() + .sendMessage("This is a members only skill."); + return false; + } + return true; + } + + public static boolean noInventorySpace(Client c, String skill) { + if (c.getItemAssistant().freeSlots() == 0) { + c.getActionSender().sendMessage( + "You don't have enough inventory space to continue " + + skill + "!"); + return false; + } + return true; + } + + public static void deleteTime(Client c) { + c.doAmount--; + } + + public static void stopEvents(Client c, int eventId) { + CycleEventHandler.getSingleton().stopEvents(c, eventId); + } + + public static void send1Item(Client c, int itemId) { + c.getPlayerAssistant().sendFrame246(1746, view190 ? 190 : 150, itemId); + c.getPlayerAssistant().sendFrame126( + getLine(c) + "" + ItemAssistant.getItemName(itemId) + "", 2799); + c.getPlayerAssistant().sendChatInterface(4429); + } + + public static boolean playerHasItem(Client c, String itemName, + String skill, int itemID) { + if (!c.getItemAssistant().playerHasItem(itemID, 1)) { + c.getActionSender().sendMessage( + "You dont have any " + itemName + " to continue " + skill + + "!"); + c.getDialogueHandler().sendStatement( + "You dont have any " + itemID + " to continue " + skill + + "!"); + return false; + } + return true; + } + + public static void resetPlayerSkillVariables(Client c) { + for (int i = 0; i < 20; i++) { + if (c.playerSkilling[i]) { + for (int l = 0; l < 15; l++) { + c.playerSkillProp[i][l] = -1; + } + } + } + } + + public static boolean hasRequiredLevel(final Client c, int id, int lvlReq, + String skill, String event) { + if (c.playerLevel[id] < lvlReq) { + c.getActionSender().sendMessage( + "You don't have a high enough " + skill + " level to " + + event + "."); + return false; + } + return true; + } + + public static String getLine(Client c) { + return c.below459 ? "\\n\\n\\n\\n" : "\\n\\n\\n\\n\\n"; + } + + +} diff --git a/2006Redone Server/src/redone/game/content/skills/SkillInterfaces.java b/2006Redone Server/src/redone/game/content/skills/SkillInterfaces.java new file mode 100644 index 00000000..f1464d68 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/SkillInterfaces.java @@ -0,0 +1,2411 @@ +package redone.game.content.skills; + +import redone.game.players.Client; + +public class SkillInterfaces { + + private final Client c; + + public int selected; + + private final int item[] = new int[40]; + + public SkillInterfaces(Client client) { + c = client; + } + + /* + * @param screen + * + * @return Used to call all of the menus, redundant No change needed to the + * method no matter How many menus added + */ + public void menuCompilation(int screen) { + if (selected == 0) { + attackComplex(screen); + } else if (selected == 1) { + strengthComplex(screen); + } else if (selected == 2) { + defenceComplex(screen); + } else if (selected == 3) { + rangedComplex(screen); + } else if (selected == 4) { + prayerComplex(screen); + } else if (selected == 5) { + magicComplex(screen); + } else if (selected == 6) { + runecraftingComplex(screen); + } else if (selected == 7) { + hitpointsComplex(screen); + } else if (selected == 8) { + agilityComplex(screen); + } else if (selected == 9) { + herbloreComplex(screen); + } else if (selected == 10) { + thievingComplex(screen); + } else if (selected == 11) { + craftingComplex(screen); + } else if (selected == 12) { + fletchingComplex(screen); + } else if (selected == 13) { + slayerComplex(screen); + } else if (selected == 14) { + miningComplex(screen); + } else if (selected == 15) { + smithingComplex(screen); + } else if (selected == 16) { + fishingComplex(screen); + } else if (selected == 17) { + cookingComplex(screen); + } else if (selected == 18) { + firemakingComplex(screen); + } else if (selected == 19) { + woodcuttingComplex(screen); + } else if (selected == 20) { + farmingComplex(screen); + } + } + + /** + * @param title + * @param currentTab + * @param write + * [] + * @return Used to shorten the sidebar tab texts, shortens by up to 12x, + * Also includes the title of the menu and the current tab + */ + private void optionTab(String title, String currentTab, String op1, + String op2, String op3, String op4, String op5, String op6, + String op7, String op8, String op9, String op10, String op11, + String op12, String op13) { + if (SkillHandler.isSkilling(c)) { + c.getActionSender().sendMessage( + "You can't open this while skilling!"); + return; + } + c.getPlayerAssistant().sendFrame126(title, 8716); + c.getPlayerAssistant().sendFrame126(currentTab, 8849); + c.getPlayerAssistant().sendFrame126(op1, 8846); + c.getPlayerAssistant().sendFrame126(op2, 8823); + c.getPlayerAssistant().sendFrame126(op3, 8824); + c.getPlayerAssistant().sendFrame126(op4, 8827); + c.getPlayerAssistant().sendFrame126(op5, 8837); + c.getPlayerAssistant().sendFrame126(op6, 8840); + c.getPlayerAssistant().sendFrame126(op7, 8843); + c.getPlayerAssistant().sendFrame126(op8, 8859); + c.getPlayerAssistant().sendFrame126(op9, 8862); + c.getPlayerAssistant().sendFrame126(op10, 8865); + c.getPlayerAssistant().sendFrame126(op11, 15303); + c.getPlayerAssistant().sendFrame126(op12, 15306); + c.getPlayerAssistant().sendFrame126(op13, 15309); + c.getPlayerAssistant().showInterface(8714); + } + + /** + * @param levels + * @param lines + * @param ids + * @param lineCounter + * @return Used to reduce code by 3x. Contains the item on interface, Level + * text, and the item description, along with the line Counter to + * ensure it is placed in the right spot + */ + private void menuLine(final String levels, final String lines, + final int ids, final int lineCounter) { + if (SkillHandler.isSkilling(c)) { + return; + } + c.getPlayerAssistant().sendFrame126(lines, 8760 + lineCounter); + c.getPlayerAssistant().sendFrame126(levels, 8720 + lineCounter); + item[0 + lineCounter] = ids; + writeInterfaceItem(item); + } + + /** + * Clears the menus + */ + private void clearMenu() { + for (int i = 0; i < 39; i++) { + item[i] = 0; + } + for (int i = 8720; i < 8799; i++) { + c.getPlayerAssistant().sendFrame126("", i); + } + } + + /** + * @param id + * [] + * @return Used to place the item on the interface + */ + private void writeInterfaceItem(int id[]) { + synchronized (c) { + c.outStream.createFrameVarSizeWord(53); + c.outStream.writeWord(8847); // 8847 + c.outStream.writeWord(id.length); + for (int element : id) { + c.outStream.writeByte(1); + if (element > 0) { + c.outStream.writeWordBigEndianA(element + 1); + } else { + c.outStream.writeWordBigEndianA(0); + } + } + c.outStream.endFrameVarSizeWord(); + c.flushOutStream(); + } + } + + /** + * Skill ID: 0 + * + * @param screen + * @return + */ + public void attackComplex(int screen) { + if (screen == 1) { + clearMenu(); + String level = "1"; + String type = "Bronze"; + menuLine(level, type + " Dagger", 1205, 0); + menuLine(level, type + " Axe", 1351, 1); + menuLine(level, type + " Mace", 1422, 2); + menuLine(level, type + " Claws", 3095, 3); + menuLine(level, type + " Sword", 1277, 4); + menuLine(level, type + " Longsword", 1291, 5); + menuLine(level, type + " Scimitar", 1321, 6); + menuLine(level, type + " Spear", 1237, 7); + menuLine(level, type + " Warhammer", 1337, 8); + menuLine(level, type + " Battleaxe", 1375, 9); + menuLine(level, type + " Two-Handed Sword", 1307, 10); + menuLine(level, type + " Halberd", 3190, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 2) { + clearMenu(); + String level = "1"; + String type = "Iron"; + menuLine(level, type + " Dagger", 1203, 0); + menuLine(level, type + " Axe", 1349, 1); + menuLine(level, type + " Mace", 1420, 2); + menuLine(level, type + " Claws", 3096, 3); + menuLine(level, type + " Sword", 1279, 4); + menuLine(level, type + " Longsword", 1293, 5); + menuLine(level, type + " Scimitar", 1323, 6); + menuLine(level, type + " Spear", 1239, 7); + menuLine(level, type + " Warhammer", 1335, 8); + menuLine(level, type + " Battleaxe", 1363, 9); + menuLine(level, type + " Two-Handed Sword", 1309, 10); + menuLine(level, type + " Halberd", 3192, 11); + optionTab("Attack", type + "", "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 3) { + clearMenu(); + String level = "5"; + String type = "Steel"; + menuLine(level, type + " Dagger", 1207, 0); + menuLine(level, type + " Axe", 1353, 1); + menuLine(level, type + " Mace", 1424, 2); + menuLine(level, type + " Claws", 3097, 3); + menuLine(level, type + " Sword", 1281, 4); + menuLine(level, type + " Longsword", 1295, 5); + menuLine(level, type + " Scimitar", 1325, 6); + menuLine(level, type + " Spear", 1241, 7); + menuLine(level, type + " Warhammer", 1339, 8); + menuLine(level, type + " Battleaxe", 1365, 9); + menuLine(level, type + " Two-Handed Sword", 1311, 10); + menuLine(level, type + " Halberd", 3194, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 4) { + clearMenu(); + String level = "10"; + String type = "Black"; + menuLine(level, type + " Dagger", 1217, 0); + menuLine(level, type + " Axe", 1361, 1); + menuLine(level, type + " Mace", 1426, 2); + menuLine(level, type + " Claws", 3098, 3); + menuLine(level, type + " Sword", 1283, 4); + menuLine(level, type + " Longsword", 1297, 5); + menuLine(level, type + " Scimitar", 1327, 6); + menuLine(level, type + " Spear", 4580, 7); + menuLine(level, type + " Warhammer", 1341, 8); + menuLine(level, type + " Battleaxe", 1367, 9); + menuLine(level, type + " Two-Handed Sword", 1313, 10); + menuLine(level, type + " Halberd", 3196, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 5) { + clearMenu(); + String level = "10"; + String type = "White"; + menuLine(level, type + " Dagger", 6591, 0); + menuLine(level, type + " Mace", 6601, 1); + menuLine(level, type + " Claws", 6587, 2); + menuLine(level, type + " Sword", 6605, 3); + menuLine(level, type + " Longsword", 6607, 4); + menuLine(level, type + " Scimitar", 6611, 5); + menuLine(level, type + " Warhammer", 6613, 6); + menuLine(level, type + " Battleaxe", 6589, 7); + menuLine(level, type + " Two-Handed Sword", 6609, 8); + menuLine(level, type + " Halberd", 6599, 9); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 6) { + clearMenu(); + String level = "20"; + String type = "Mithril"; + menuLine(level, type + " Dagger", 1209, 0); + menuLine(level, type + " Axe", 1355, 1); + menuLine(level, type + " Mace", 1428, 2); + menuLine(level, type + " Claws", 3099, 3); + menuLine(level, type + " Sword", 1285, 4); + menuLine(level, type + " Longsword", 1299, 5); + menuLine(level, type + " Scimitar", 1329, 6); + menuLine(level, type + " Spear", 1243, 7); + menuLine(level, type + " Warhammer", 1343, 8); + menuLine(level, type + " Battleaxe", 1369, 9); + menuLine(level, type + " Two-Handed Sword", 1315, 10); + menuLine(level, type + " Halberd", 3198, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 7) { + clearMenu(); + String level = "30"; + String type = "Adamant"; + menuLine(level, type + " Dagger", 1211, 0); + menuLine(level, type + " Axe", 1357, 1); + menuLine(level, type + " Mace", 1430, 2); + menuLine(level, type + " Claws", 3100, 3); + menuLine(level, type + " Sword", 1287, 4); + menuLine(level, type + " Longsword", 1301, 5); + menuLine(level, type + " Scimitar", 1331, 6); + menuLine(level, type + " Spear", 1245, 7); + menuLine(level, type + " Warhammer", 1345, 8); + menuLine(level, type + " Battleaxe", 1371, 9); + menuLine(level, type + " Two-Handed Sword", 1317, 10); + menuLine(level, type + " Halberd", 3200, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 8) { + clearMenu(); + String level = "40"; + String type = "Rune"; + menuLine(level, type + " Dagger", 1213, 0); + menuLine(level, type + " Axe", 1359, 1); + menuLine(level, type + " Mace", 1432, 2); + menuLine(level, type + " Claws", 3101, 3); + menuLine(level, type + " Sword", 1289, 4); + menuLine(level, type + " Longsword", 1303, 5); + menuLine(level, type + " Scimitar", 1333, 6); + menuLine(level, type + " Spear", 1247, 7); + menuLine(level, type + " Warhammer", 1347, 8); + menuLine(level, type + " Battleaxe", 1373, 9); + menuLine(level, type + " Two-Handed Sword", 1319, 10); + menuLine(level, type + " Halberd", 3202, 11); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 9) { + clearMenu(); + String level = "60"; + String type = "Dragon"; + menuLine(level, type + " Dagger", 1215, 0); + menuLine(level, type + " Axe", 6739, 1); + menuLine(level, type + " Mace", 1434, 2); + menuLine(level, type + " Longsword", 1305, 3); + menuLine(level, type + " Scimitar", 4587, 4); + menuLine(level, type + " Spear", 1249, 5); + menuLine(level, type + " Battleaxe", 1377, 6); + menuLine(level, type + " Two-Handed Sword", 7158, 7); + menuLine(level, type + " Halberd", 3204, 8); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 10) { + clearMenu(); + String level = "70"; + String type = "Barrows"; + menuLine(level, "Ahrim's Staff(With 70 Magic)", 4710, 0); + menuLine(level, "Dharok's Greataxe(With 70 Strength)", 4718, 1); + menuLine(level, "Guthan's Spear", 4726, 2); + menuLine(level, "Torag's Hammers(With 70 Strength", 4747, 3); + menuLine(level, "Verac's Flail", 4755, 4); + optionTab("Attack", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } else if (screen == 11) { + clearMenu(); + menuLine("50", "Leaf-Bladed Spear(With 55 Slayer)", 4158, 0); + menuLine("50", "Ancient Staff(With 50 Magic)", 4675, 1); + menuLine("60", "TokTz-Xil-Ak(Obsidian Sword)", 6523, 2); + menuLine("60", "TzHaar-Ket-Om(Obsidian Maul)", 6528, 3); + menuLine("60", "TokTz-Xil-Ek(Obsidian Knife)", 6525, 4); + menuLine("60", "TokTz-Mej-Tal(Obsidian Staff)", 6526, 5); + menuLine("60", "TokTz-Ket-Em(Obsidian Mace)", 6527, 6); + menuLine("70", "Abyssal Whip", 4151, 7); + optionTab("Attack", "Special", "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Special", "", ""); + } + } + + /* + * Skill ID: 1 + * + * @param screen + * + * @return + */ + public void strengthComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("5", "Black Halberd(With 10 Attack)", 3196, 0); + menuLine("5", "White Halberd(With 10 Attack)", 6599, 1); + menuLine("10", "Mithril Halberd(With 20 Attack)", 3198, 2); + menuLine("15", "Adamant Halberd(With 30 Attack)", 3200, 3); + menuLine("20", "Rune Halberd(With 40 Attack)", 3202, 4); + menuLine("30", "Dragon Halberd(With 60 Attack)", 3204, 5); + menuLine("50", "Granite Maul(With 50 Attack)", 4153, 6); + menuLine("60", "TzHaar-Ket-Om(Obsidian Maul)", 6528, 7); + menuLine("70", "Dharok's Greataxe(With 70 Attack)", 4718, 8); + menuLine("70", "Torag's Hammers(With 70 Attack)", 4747, 9); + optionTab("Strength", "Weaponry", "Weaponry", "Armor", + "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("50", "Granite Shield(With 50 Defence)", 3122, 0); + optionTab("Strength", "Armor", "Weaponry", "Armor", "", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 2 + * + * @param screen + * + * @return + */ + public void defenceComplex(int screen) { + if (screen == 1) { + clearMenu(); + String level = "1"; + String type = "Bronze"; + menuLine(level, type + " Square Shield", 1173, 0); + menuLine(level, type + " Kiteshield", 1189, 1); + menuLine(level, type + " Medium Helm", 1139, 2); + menuLine(level, type + " Full Helm", 1155, 3); + menuLine(level, type + " Chainbody", 1103, 4); + menuLine(level, type + " Platebody", 1117, 5); + menuLine(level, type + " Plateskirt", 1087, 6); + menuLine(level, type + " Platelegs", 1075, 7); + menuLine(level, type + " Boots", 4119, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 2) { + clearMenu(); + String level = "1"; + String type = "Iron"; + menuLine(level, type + " Square Shield", 1175, 0); + menuLine(level, type + " Kiteshield", 1191, 1); + menuLine(level, type + " Medium Helm", 1137, 2); + menuLine(level, type + " Full Helm", 1153, 3); + menuLine(level, type + " Chainbody", 1101, 4); + menuLine(level, type + " Platebody", 1115, 5); + menuLine(level, type + " Plateskirt", 1081, 6); + menuLine(level, type + " Platelegs", 1067, 7); + menuLine(level, type + " Boots", 4121, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 3) { + clearMenu(); + String level = "5"; + String type = "Steel"; + menuLine(level, type + " Square Shield", 1177, 0); + menuLine(level, type + " Kiteshield", 1193, 1); + menuLine(level, type + " Medium Helm", 1141, 2); + menuLine(level, type + " Full Helm", 1157, 3); + menuLine(level, type + " Chainbody", 1105, 4); + menuLine(level, type + " Platebody", 1119, 5); + menuLine(level, type + " Plateskirt", 1083, 6); + menuLine(level, type + " Platelegs", 1069, 7); + menuLine(level, type + " Boots", 4123, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 4) { + clearMenu(); + String level = "10"; + String type = "Black"; + menuLine(level, type + " Square Shield", 1179, 0); + menuLine(level, type + " Kiteshield", 1195, 1); + menuLine(level, type + " Medium Helm", 1151, 2); + menuLine(level, type + " Full Helm", 1165, 3); + menuLine(level, type + " Chainbody", 1107, 4); + menuLine(level, type + " Platebody", 1125, 5); + menuLine(level, type + " Plateskirt", 1089, 6); + menuLine(level, type + " Platelegs", 1077, 7); + menuLine(level, type + " Boots", 4125, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 5) { + clearMenu(); + String level = "10"; + String type = "White"; + menuLine(level, type + " Square Shield", 6631, 0); + menuLine(level, type + " Kiteshield", 6633, 1); + menuLine(level, type + " Medium Helm", 6621, 2); + menuLine(level, type + " Full Helm", 6623, 3); + menuLine(level, type + " Chainbody", 6615, 4); + menuLine(level, type + " Platebody", 6617, 5); + menuLine(level, type + " Plateskirt", 6627, 6); + menuLine(level, type + " Platelegs", 6625, 7); + menuLine(level, type + " Boots", 6619, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 6) { + clearMenu(); + String level = "20"; + String type = "Mithril"; + menuLine(level, type + " Square Shield", 1181, 0); + menuLine(level, type + " Kiteshield", 1197, 1); + menuLine(level, type + " Medium Helm", 1143, 2); + menuLine(level, type + " Full Helm", 1159, 3); + menuLine(level, type + " Chainbody", 1109, 4); + menuLine(level, type + " Platebody", 1121, 5); + menuLine(level, type + " Plateskirt", 1085, 6); + menuLine(level, type + " Platelegs", 1071, 7); + menuLine(level, type + " Boots", 4127, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 7) { + clearMenu(); + String level = "30"; + String type = "Adamant"; + menuLine(level, type + " Square Shield", 1183, 0); + menuLine(level, type + " Kiteshield", 1199, 1); + menuLine(level, type + " Medium Helm", 1145, 2); + menuLine(level, type + " Full Helm", 1161, 3); + menuLine(level, type + " Chainbody", 1111, 4); + menuLine(level, type + " Platebody", 1123, 5); + menuLine(level, type + " Plateskirt", 1091, 6); + menuLine(level, type + " Platelegs", 1073, 7); + menuLine(level, type + " Boots", 4129, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 8) { + clearMenu(); + String level = "40"; + String type = "Rune"; + menuLine(level, type + " Square Shield", 1185, 0); + menuLine(level, type + " Kiteshield", 1201, 1); + menuLine(level, type + " Medium Helm", 1147, 2); + menuLine(level, type + " Full Helm", 1163, 3); + menuLine(level, type + " Chainbody", 1113, 4); + menuLine(level, type + " Platebody", 1127, 5); + menuLine(level, type + " Plateskirt", 1093, 6); + menuLine(level, type + " Platelegs", 1079, 7); + menuLine(level, type + " Boots", 4131, 8); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 9) { + clearMenu(); + String level = "60"; + String type = "Dragon"; + menuLine(level, type + " Square Shield", 1187, 0); + menuLine(level, type + " Medium Helm", 1149, 1); + menuLine(level, type + " Chainbody", 3140, 2); + menuLine(level, type + " Plateskirt", 4585, 3); + menuLine(level, type + " Platelegs", 4087, 4); + optionTab("Defence", type, "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 10) { + clearMenu(); + String level = "70"; + menuLine(level, "Ahrim's Hood(With 70 Magic)", 4708, 0); + menuLine(level, "Ahrim's Robe Top(With 70 Magic)", 4712, 1); + menuLine(level, "Ahrim's Robeskirt(With 70 Magic)", 4714, 2); + menuLine(level, "Dharok's Helm", 4716, 3); + menuLine(level, "Dharok's Platebody", 4720, 4); + menuLine(level, "Dharok's Platelegs", 4722, 5); + menuLine(level, "Guthan's Helm", 4724, 6); + menuLine(level, "Guthan's Platebody", 4728, 7); + menuLine(level, "Guthan's Chainskirt", 4730, 8); + menuLine(level, "Karil's Coif(With 70 Ranged)", 4732, 9); + menuLine(level, "Karil's Leather Top(With 70 Ranged)", 4736, 10); + menuLine(level, "Karil's Leather Skirt(With 70 Ranged)", 4738, 11); + menuLine(level, "Torag's Helm", 4745, 12); + menuLine(level, "Torag's Platebody", 4749, 13); + menuLine(level, "Torag's Platelegs", 4751, 14); + menuLine(level, "Verac's Helm", 4753, 15); + menuLine(level, "Verac's Brassard", 4757, 16); + menuLine(level, "Verac's Plateskirt", 4759, 17); + optionTab("Defence", "Barrows", "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 11) { + clearMenu(); + menuLine("1", "Skeletal Gloves", 6153, 0); + menuLine("1", "Skeletal Boots", 6147, 1); + menuLine("1", "Elemental Shield", 2890, 2); + menuLine("20", "Enchanted Hat(With 40 Magic)", 7400, 3); + menuLine("20", "Enchanted Robe Top(With 40 Magic)", 7399, 4); + menuLine("20", "Enchanted Robe(With 40 Magic)", 7398, 5); + menuLine("20", "Mystic Hat(With 40 Magic)", 4099, 6); + menuLine("20", "Mystic Robe Top(With 40 Magic)", 4101, 7); + menuLine("20", "Mystic Robe(With 40 Magic)", 4103, 8); + menuLine("20", "Mystic Gloves(With 40 Magic)", 4105, 9); + menuLine("20", "Mystic Boots(With 40 Magic)", 4107, 10); + menuLine("25", "Infinity Hat(With 50 Magic)", 6918, 11); + menuLine("25", "Infinity Ttop(With 50 Magic)", 6916, 12); + menuLine("25", "Infinity Bottom(With 50 Magic)", 6924, 13); + menuLine("25", "Infinity Gloves(With 50 Magic)", 6922, 14); + menuLine("25", "Infinity Boots(With 50 Magic)", 6920, 15); + menuLine("40", "Splitbark Helm(With 40 Magic)", 3385, 16); + menuLine("40", "Splitbark Body(With 40 Magic)", 3387, 17); + menuLine("40", "Splitbark Legs(With 40 Magic)", 3389, 18); + menuLine("40", "Splitbark Gauntlets(With 40 Magic)", 3391, 19); + menuLine("40", "Splitbark Boots(With 40 Magic)", 3393, 20); + menuLine("40", "Skeletal Helm(With 40 Magic)", 6137, 21); + menuLine("40", "Skeletal Top(With 40 Magic)", 6139, 22); + menuLine("40", "Skeletal Bottoms(With 40 Magic)", 6141, 23); + menuLine("44", "Farseer Helm", 3755, 24); + optionTab("Defence", "Magic", "Bronze", "Iron", "Steel", "Black", + "White", "Mithril", "Adamant", "Rune", "Dragon", "Barrows", + "Magic", "Equipment", ""); + } + + else if (screen == 12) { + clearMenu(); + menuLine("1", "Khazard Helmet", 74, 0); + menuLine("1", "Khazard Armour", 75, 1); + menuLine("1", "Anti-Dragonbreath Shield", 1540, 2); + menuLine("1", "Spined Gloves", 6149, 3); + menuLine("1", "Spined Boots", 6143, 4); + menuLine("1", "Rock-Shell Gloves", 6151, 5); + menuLine("1", "Rock-Shell Boots", 6145, 6); + menuLine("5", "Spiny Helmet", 4551, 7); + menuLine("10", "Hard Leather Body", 1131, 8); + menuLine("20", "Studded Body(With 20 Ranged)", 1133, 9); + menuLine("20", "Initiate Helm(With 10 Prayer)", 5574, 10); + menuLine("20", "Initiate Platemail(With 10 Prayer)", 5575, 11); + menuLine("20", "Initiate Platelegs(With 10 Prayer)", 5576, 12); + menuLine("20", "Mirror Shield(with 20 Slayer)", 4156, 13); + menuLine("30", "Snakeskin armour(With 30 Ranged)", 6322, 14); + menuLine("40", "Green Dragonhide Body(With 40 Ranged)", 1135, 15); + menuLine("50", "Blue Dragonhide Body(With 50 Ranged)", 2499, 16); + menuLine("60", "Red Dragonhide Body(With 60 Ranged)", 2501, 17); + menuLine("70", "Black Dragonhide Body(With 70 Ranged)", 2503, 18); + menuLine("40", "Spined Armour(With 40 Ranged)", 6133, 19); + menuLine("40", "Rock-shell Armour", 6129, 20); + menuLine("45", "Berserker Helm", 3751, 21); + menuLine("45", "Warrior Helm", 3753, 22); + menuLine("45", "Archer Helm", 3749, 23); + menuLine("45", "Farseer Helm", 3755, 24); + menuLine("50", "Granite Shield(With 50 Strength)", 3122, 25); + menuLine("60", "TokTz-Ket-Xil(Obsidian Shield)", 6524, 26); + menuLine("70", "Crystal Shield(With 50 Agility)", 4224, 27); + optionTab("Defence", "Equipment", "Bronze", "Iron", "Steel", + "Black", "White", "Mithril", "Adamant", "Rune", "Dragon", + "Barrows", "Magic", "Equipment", ""); + } + } + + /* + * Skill ID: 3 + * + * @param screen + * + * @return + */ + public void rangedComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Standard Bow", 839, 0); + menuLine("5", "Oak Bow", 845, 1); + menuLine("20", "Willow Bow", 847, 2); + menuLine("30", "Maple Bow", 851, 3); + menuLine("30", "Ogre Bow", 2883, 4); + menuLine("30", "Ogre Composite Bow", 4827, 5); + menuLine("40", "Yew Bow", 855, 6); + menuLine("50", "Magic Bow", 859, 7); + menuLine("50", "Seercull", 6724, 8); + menuLine("70", "Crystal Bow(With 50 Agility)", 4212, 9); + optionTab("Ranged", "Bows", "Bows", "Thrown", "Armour", + "Crossbows", "Other", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Bronze Dart", 806, 0); + menuLine("1", "Bronze Javelin", 825, 1); + menuLine("1", "Bronze Throwing Axe", 800, 2); + menuLine("1", "Bronze Throwing Knife", 864, 3); + menuLine("1", "Iron Dart", 807, 4); + menuLine("1", "Iron Javelin", 826, 5); + menuLine("1", "Iron Throwing Axe", 801, 6); + menuLine("1", "Iron Throwing Knife", 863, 7); + menuLine("5", "Steel Dart", 808, 8); + menuLine("5", "Steel Davelin", 827, 9); + menuLine("5", "Steel Throwing Axe", 802, 10); + menuLine("5", "Steel Throwing Knife", 865, 11); + menuLine("10", "Black Dart", 3093, 12); + menuLine("10", "Black Throwing Knife", 869, 13); + menuLine("20", "Mithril Dart", 809, 14); + menuLine("20", "Mithril Javelin", 828, 15); + menuLine("20", "Mithril Throwing Axe", 803, 16); + menuLine("20", "Mithril Throwing Knife", 866, 17); + menuLine("30", "Adamant Dart", 810, 18); + menuLine("30", "Adamant Javelin", 829, 19); + menuLine("30", "Adamant Throwing Axe", 804, 20); + menuLine("30", "Adamant Throwing Knife", 867, 21); + menuLine("40", "Rune Dart", 811, 22); + menuLine("40", "Rune Javelin", 830, 23); + menuLine("40", "Rune Throwing Axe", 805, 24); + menuLine("40", "Rune Throwing Knife", 868, 25); + menuLine("60", "TokTz-Xil-Ul(Obsidian Rings)", 6522, 26); + optionTab("Ranged", "Thrown", "Bows", "Thrown", "Armour", + "Crossbows", "Other", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("1", "Leather Items", 1129, 0); + menuLine("1", "Hardleather Body(With 10 Defence)", 1131, 1); + menuLine("1", "Spined Boots", 6143, 2); + menuLine("1", "Spined Gloves", 6149, 3); + menuLine("1", "Archer Helm(With 45 Defence)", 3749, 4); + menuLine("20", "Studded Leather Body(With 20 Defence)", 1133, 5); + menuLine("20", "Studded Leather Chaps", 1097, 6); + menuLine("20", "Coif", 1169, 7); + menuLine("30", "Snakeskin Body(With 30 Defence)", 6322, 8); + menuLine("30", "Snakeskin Chaps(With 30 Defence)", 6324, 9); + menuLine("30", "Snakeskin Vambraces(With 30 Defence)", 6330, 10); + menuLine("30", "Snakeskin Bandana(With 30 Defence)", 6326, 11); + menuLine("30", "Snakeskin Boots(With 30 Defence)", 6328, 12); + menuLine("40", "Ranger Boots", 2577, 13); + menuLine("40", "Robin Hood Hat", 2581, 14); + menuLine("40", "Green Dragonhide Vambraces", 1065, 15); + menuLine("40", "Green Dragonhide Chaps", 1099, 16); + menuLine("40", "Green Dragonhide Body(With 40 Defence)", 1135, 17); + menuLine("40", "Spined Body(With 40 Defence)", 6133, 18); + menuLine("40", "Spined Chaps(With 40 Defence)", 6135, 19); + menuLine("40", "Spined Helm(With 40 Defence)", 6131, 20); + menuLine("50", "Blue Dragonhide Vambraces", 2487, 21); + menuLine("50", "Blue Dragonhide Chaps", 2493, 22); + menuLine("50", "Blue Dragonhide Body(With 40 Defence)", 2499, 23); + menuLine("60", "Red Dragonhide Vambraces", 2489, 24); + menuLine("60", "Red Dragonhide Chaps", 2495, 25); + menuLine("60", "Red Dragonhide Body(With 40 Defence)", 2501, 26); + menuLine("70", "Black Dragonhdie Vambraces", 2491, 27); + menuLine("70", "Black Dragonhdie Chaps", 2497, 28); + menuLine("70", "Black Dragonhdie Body(With 40 Defence)", 2503, 29); + menuLine("70", "Karil's Coif(With 70 Defence)", 4732, 30); + menuLine("70", "Karil's Leathertop(With 70 Defence)", 4736, 31); + menuLine("70", "Karil's Leatherskirt(With 70 Defence)", 4738, 32); + optionTab("Ranged", "Armour", "Bows", "Thrown", "Armour", + "Crossbows", "Other", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("1", "Crossbow", 837, 0); + menuLine("1", "Pheonix Crossbow", 767, 1); + menuLine("70", "Karil's Crossbow", 4734, 2); + optionTab("Ranged", "Crossbows", "Bows", "Thrown", "Armour", + "Crossbows", "Other", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 5) { + clearMenu(); + menuLine("50", "Broad Arrow(With 55 Slayer)", 4150, 0); + optionTab("Ranged", "Other", "Bows", "Thrown", "Armour", + "Crossbows", "Other", "", "", "", "", "", "", "", + ""); + } + } + + /* + * Skill ID: 4 + * + * @param screen + * + * @return + */ + public void prayerComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("", "You can see what each of these prayers", 3840, 0); + menuLine("", "does by selecting the Prayer icon on", 0, 1); + menuLine("", "your side interface. Move your mouse", 3844, 2); + menuLine("", "over the icon of the prayer you want", 0, 3); + menuLine("", "and a description will be available", 3842, 4); + menuLine("", "", 0, 5); + menuLine("1", "Thick Skin", 1714, 6); + menuLine("4", "Burst of Strength", 1714, 7); + menuLine("7", "Clarity of Thought", 1714, 8); + menuLine("10", "Rock Skin", 1714, 9); + menuLine("13", "Superhuman Strength", 1714, 10); + menuLine("16", "Improved Reflexes", 1714, 11); + menuLine("19", "Rapid Restore", 1714, 12); + menuLine("22", "Rapid Heal", 1714, 13); + menuLine("25", "Protect Item", 1714, 14); + menuLine("28", "Steel Skin", 1714, 15); + menuLine("31", "Ultimate Strength", 1714, 16); + menuLine("34", "Incredible Reflexes", 1714, 17); + menuLine("37", "Protect from Magic", 1714, 18); + menuLine("40", "Protect from Missles", 1714, 19); + menuLine("43", "Protect from Melee", 1714, 20); + menuLine("46", "Retribution", 1714, 21); + menuLine("49", "Redemption", 1714, 22); + menuLine("52", "Smite", 1714, 23); + optionTab("Prayer", "Prayers", "Prayers", "Equipment", + "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("10", "Initiate Helm(With 20 Defence)", 5574, 0); + menuLine("10", "Initiate Platemail(With 20 Defence)", 5575, 1); + menuLine("10", "Initiate Platelegs(With 20 Defence)", 5576, 2); + menuLine("50", "Enchant Unholy And Holy Symbols", 1724, 3); + optionTab("Prayer", "Equipment", "Prayers", "Equipment", + "", "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 5 + * + * @param screen + * + * @return + */ + public void magicComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("", "You can see what each of the spells", 6949, 0); + menuLine("", "does by selecting the spellbook icon on", 0, 1); + menuLine("", "your side interface. To switch to ancient", 0, 2); + menuLine("", "magicks, visit the Dark Mage near the bank", 0, 3); + menuLine("", "in Camelot.", 0, 4); + optionTab("Magic", "Spells", "Spells", "Ancients", "Armour", + "Weapons", "Special", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("", "@cr1@Must have completed Desert Treasure", 6949, 0); + menuLine("", "", 0, 1); + menuLine("50", "Smoke Rush", 0, 2); + menuLine("52", "Shadow Rush", 0, 3); + menuLine("54", "Teleport to Paddewwa", 0, 4); + menuLine("56", "Blood Rush", 0, 5); + menuLine("58", "Ice Rush", 0, 6); + menuLine("60", "Teleport to Senntisten", 0, 7); + menuLine("62", "Smoke Burst", 0, 8); + menuLine("64", "Shadow Burst", 0, 9); + menuLine("66", "Teleport to Kharyrll", 0, 10); + menuLine("68", "Blood Burst", 0, 11); + menuLine("70", "Ice Burst", 0, 12); + menuLine("72", "Teleport to Lassar", 0, 13); + menuLine("74", "Smoke Blitz", 0, 14); + menuLine("76", "Shadow Blitz", 0, 15); + menuLine("78", "Teleport Dareeyak", 0, 16); + menuLine("80", "Blood Blitz", 0, 17); + menuLine("82", "Ice Blitz", 0, 18); + menuLine("84", "Teleport to Carrallangar", 0, 19); + menuLine("86", "Smoke Barrage", 0, 20); + menuLine("88", "Shadow Barrage", 0, 21); + menuLine("90", "Teleport to Annakarl", 0, 22); + menuLine("92", "Blood Barrage", 0, 23); + menuLine("94", "Ice Barrage", 0, 24); + menuLine("96", "Teleport to Ghorrock", 0, 25); + optionTab("Magic", "Ancients", "Spells", "Ancients", "Armour", + "Weapons", "Special", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("1", "Farseer Helm(With 45 Defence)", 3755, 0); + menuLine("1", "Elemental Shield", 2890, 1); + menuLine("1", "Skeletal Gloves", 6153, 2); + menuLine("1", "Skeletal Boots", 6147, 3); + menuLine("20", "Wizard Boots", 2579, 4); + menuLine("40", "Mystic Hat(With 20 Defence)", 4099, 5); + menuLine("40", "Mystic Robe Top(With 20 Defence)", 4101, 6); + menuLine("40", "Mystic Robe Bottom(With 20 Defence)", 4103, 7); + menuLine("40", "Mystic Gloves(With 20 Defence)", 4105, 8); + menuLine("40", "Mystic Boots(With 20 Defence)", 4107, 9); + menuLine("40", "Enchanted Hat(With 20 Defence)", 7400, 10); + menuLine("40", "Enchanted Top(With 20 Defence)", 7399, 11); + menuLine("40", "Enchanted Robe(With 20 Defence)", 7398, 12); + menuLine("40", "Splitbark Helm(With 40 Defence)", 3385, 13); + menuLine("40", "Splitbark Body(With 40 Defence)", 3387, 14); + menuLine("40", "Splitbark Legs(With 40 Defence)", 3389, 15); + menuLine("40", "Splitbark Gauntlets(With 40 Defence)", 3391, 16); + menuLine("40", "Splitbark Boots(With 40 Defence)", 3393, 17); + menuLine("40", "Skeletal Helmet(With 40 Defence)", 6137, 18); + menuLine("40", "Skeletal Top(With 40 Defence)", 6139, 19); + menuLine("40", "Skeletal Bottoms(With 40 Defence)", 6141, 20); + menuLine("50", "Infinity Hat(With 25 Defence)", 6918, 21); + menuLine("50", "Infinity Top(With 25 Defence)", 6916, 22); + menuLine("50", "Infinity Bottom(With 25 Defence)", 6924, 23); + menuLine("50", "Infinity Boots(With 25 Defence)", 6920, 24); + menuLine("50", "Infinity Gloves(with 25 Defence)", 6922, 25); + menuLine("70", "Ahrim's Hood(With 70 Defence)", 4708, 26); + menuLine("70", "Ahrim's Robe Top(With 70 Defence)", 4712, 27); + menuLine("70", "Ahrim's Robeskirt(With 70 Defence)", 4714, 28); + optionTab("Magic", "Armour", "Spells", "Ancients", "Armour", + "Weapons", "Special", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("1", "Staff", 1379, 0); + menuLine("1", "Magic staff", 1389, 1); + menuLine("1", "Staff of Air", 1381, 2); + menuLine("1", "Staff of Earth", 1385, 3); + menuLine("1", "Staff of Fire", 1387, 4); + menuLine("1", "Staff of Water", 1383, 5); + menuLine("30", "Air Battlestaff(With 30 Attack)", 1397, 6); + menuLine("30", "Earth Battlestaff(With 30 Attack)", 1399, 7); + menuLine("30", "Fire Battlestaff(With 30 Attack)", 1393, 8); + menuLine("30", "Water Battlestaff(With 30 Attack)", 1395, 9); + menuLine("30", "Lava Battlestaff(With 30 Attack)", 3053, 10); + menuLine("30", "Mud Battlestaff(With 30 Attack)", 6562, 11); + menuLine("40", "Mystic Air Staff(With 40 Attack)", 1405, 12); + menuLine("40", "Mystic Earth Staff(With 40 Attack)", 1407, 13); + menuLine("40", "Mystic Fire Staff(With 40 Attack)", 1401, 14); + menuLine("40", "Mystic Water Staff(With 40 Attack)", 1403, 15); + menuLine("40", "Mystic Lava Staff(With 40 Attack)", 3054, 16); + menuLine("40", "Mystic Mud Staff(With 40 Attack)", 6563, 17); + menuLine("50", "Slayer's Staff(With 55 Slayer)", 4170, 18); + menuLine("50", "Iban's Staff(With 50 Attack)", 1409, 19); + menuLine("50", "Ancient Staff(With 50 Attack)", 4675, 20); + menuLine("60", "Saradomin Staff", 2415, 21); + menuLine("60", "Guthix Staff", 2416, 22); + menuLine("60", "Zamorak Staff", 2417, 23); + menuLine("60", "TokTz-Mej-Tal(Obsidian Staff)", 6526, 24); + menuLine("70", "Ahrim's Staff(With 70 Attack)", 4710, 25); + optionTab("Magic", "Weapons", "Spells", "Ancients", "Armour", + "Weapons", "Special", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 5) { + clearMenu(); + menuLine("45", "Beginner Wand", 6908, 0); + menuLine("50", "Apprentice Wand", 6910, 1); + menuLine("55", "Teacher Wand", 6912, 2); + menuLine("60", "Master Wand", 6914, 3); + menuLine("60", "Mage's Book", 6889, 4); + optionTab("Magic", "Special", "Spells", "Ancients", "Armour", + "Weapons", "Special", "", "", "", "", "", "", "", + ""); + } + } + + /* + * Skill ID: 6 + * + * @param screen + * + * @return + */ + public void runecraftingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Air runes", 556, 0); + menuLine("2", "Mind runes", 558, 1); + menuLine("5", "Water runes", 555, 2); + menuLine("6", "Mist runes", 4695, 3); + menuLine("9", "Earth runes", 557, 4); + menuLine("10", "Dust runes", 4696, 5); + menuLine("13", "Mud runes", 4698, 6); + menuLine("14", "Fire runes", 554, 7); + menuLine("15", "Smoke runes", 4697, 8); + menuLine("19", "Steam runes", 4694, 9); + menuLine("20", "Body runes", 559, 10); + menuLine("23", "Lava runes", 4699, 11); + menuLine("27", "Cosmic runes", 564, 12); + menuLine("35", "Chaos runes", 562, 13); + menuLine("44", "Nature runes", 561, 14); + menuLine("54", "Law runes", 563, 15); + menuLine("65", "Death runes", 560, 16); + menuLine("77", "Blood runes", 565, 17); + optionTab("RuneCrafting", "Runes", "Runes", "Multiples", + "Equipment", "", "", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("11", "2 Air runes per essence", 556, 0); + menuLine("14", "2 Mind runes per essence", 558, 1); + menuLine("19", "2 Water runes per essence", 555, 2); + menuLine("22", "3 Air runes per essence", 556, 3); + menuLine("26", "2 Earth runes per essence", 557, 4); + menuLine("28", "3 Mind runes per essence", 558, 5); + menuLine("33", "4 Air runes per essence", 556, 6); + menuLine("35", "2 Fire runes per essence", 554, 7); + menuLine("38", "3 Water runes per essence", 555, 8); + menuLine("42", "4 Mind runes per essence", 558, 9); + menuLine("44", "5 Air runes per essence", 556, 10); + menuLine("46", "2 Body runes per essence", 559, 11); + menuLine("52", "3 Earth runes per essence", 557, 12); + menuLine("55", "6 Air runes per essence", 556, 13); + menuLine("56", "5 Mind runes per essence", 558, 14); + menuLine("57", "4 Water runes per essence", 555, 15); + menuLine("59", "2 Cosmic runes per essence", 564, 16); + menuLine("66", "7 Air runes per essence", 556, 17); + menuLine("70", "6 Mind runes per essence", 558, 18); + menuLine("74", "3 Fire runes per essence", 554, 19); + menuLine("76", "2 Chaos runes per essence", 562, 20); + menuLine("77", "5 Water runes per essence", 555, 21); + menuLine("78", "8 Air runes per essence", 556, 22); + menuLine("82", "4 Earth runes per essence", 557, 23); + menuLine("84", "7 Mind runes per essence", 558, 24); + menuLine("88", "9 Air runes per essence", 556, 25); + menuLine("91", "2 Nature runes per essence", 561, 26); + menuLine("92", "3 Body runes per essence", 559, 27); + menuLine("95", "6 Water runes per essence", 555, 28); + menuLine("98", "8 Mind runes per essence", 558, 29); + menuLine("99", "10 Air runes per essence", 556, 30); + optionTab("RuneCrafting", "Multiples", "Runes", "Multiples", + "Equipment", "", "", "", "", "", "", "", "", "", + ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("1", "Small Pouch(3 Essence)", 5509, 0); + menuLine("25", "Medium Pouch(6 Essence)", 5510, 1); + menuLine("50", "Large Pouch(9 Essence)", 5512, 2); + menuLine("75", "Giant Pouch(12 Essence)", 5514, 3); + optionTab("RuneCrafting", "Equipment", "Runes", "Multiples", + "Equipment", "", "", "", "", "", "", "", "", "", + ""); + } + } + + /* + * Skill ID: 7 + * + * @param screen + * + * @return + */ + public void hitpointsComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("", "Hitpoints tell you how healthy your", 4049, 0); + menuLine("", "character is. A character who reaches 0", 0, 1); + menuLine("", "Hitpoints has died, but will reappear at", 0, 2); + menuLine("", "their chosen respawn location", 0, 3); + menuLine("", "", 0, 4); + menuLine("", "If you see any red 'hitsplats' during", 4049, 5); + menuLine("", "combat, the number shown corresponds", 0, 6); + menuLine("", "to the number of Hitpoints lost as a", 0, 7); + menuLine("", "result of that strike.", 0, 8); + menuLine("", "", 0, 9); + menuLine("", "Blue hitsplats mean no damage has", 4049, 10); + menuLine("", "been dealt.", 0, 11); + menuLine("", "", 0, 12); + menuLine("", "Green hitspats are poison damage", 4049, 13); + menuLine("", "", 0, 14); + menuLine("", "Yellow hitsplats are disease damage", 4049, 15); + optionTab("Hitpoints", "Hitpoints", "Hitpoints", "", "", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 8 + * + * @param screen + * + * @return + */ + public void agilityComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Gnome Agility Course", 2150, 0);// swamptoad + menuLine("1", "Gnome Ball", 751, 1);// gnomeball + menuLine("1", "Low-Level Agility Arena Obstacles", 2996, 2);// arena + // ticket + menuLine("20", "Medium-Level Agility Arena Obstacles", 2996, 3);// arena + // ticket + menuLine("25", "Werewolf Skullball Game", 1061, 4);// boots + menuLine("30", "Agility Pyramid", 6970, 5);// boots + menuLine("35", "Barbarian Outpost Agility Course", 1365, 6);// steel + menuLine("40", "High-Level Agility Area Obstacles", 2996, 7); + menuLine("48", "Ape Atoll Agility Course", 4024, 8);// greegree + menuLine("52", "Wilderness Agility Course", 964, 9);// skull + menuLine("60", "Werewolf Agility Course", 6465, 19);// charos + optionTab("Agility", "Courses", "Courses", "Areas", "Shortcuts", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("10", "Moss Giant Island Rope Swing", 6518, 0); + menuLine("12", "Karamja Dungeon Stepping Stones", 6518, 1); + menuLine("15", "Edgeville Dungeon Monkey Bars", 6518, 2); + menuLine("18", "Watchtower Wall Climb", 6521, 3); + menuLine("22", "Karamja Dungeon Pipe Contortion", 6520, 4); + menuLine("30", "South-east Karamja Stepping Stones", 6518, 5); + menuLine("34", "Karamja Dungeon Pipe Contortion", 6520, 6); + menuLine("45", "Isafdar Log Balance", 6519, 7); + menuLine("49", "Yanille Dungeon Contortion", 6520, 8); + menuLine("50", "Rogues' Den(With 50 Thieving)", 6518, 9); + menuLine("67", "Yanille Dungeon Rubble Climb", 6521, 10); + optionTab("Agility", "Areas", "Courses", "Areas", "Shortcuts", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("5", "Falador Agility Shortcut", 6517, 0); + menuLine("8", "River Crossing To Al Kharid", 6515, 1); + menuLine("11", "Falador Wall", 6517, 2); + menuLine("13", "Varrock South Fence Jump", 6514, 3); + menuLine("16", "Yanille Agility Shortcut", 6516, 4); + menuLine("20", "Coal Truck Log Balance", 6515, 5); + menuLine("21", "Varrock Agility Shortcut", 6516, 6); + menuLine("26", "Falador wall Crawl", 6516, 7); + menuLine("28", "Draynor Manor Broken Railing", 6516, 8); + menuLine("29", "Draynor Manor Stones To The Champions' Guild", + 6516, 9); + menuLine("31", "Catherby Cliff", 6515, 10); + menuLine("32", "Ardougne Log Balance Shortcut", 6517, 11); + menuLine("33", "Water Obelisk Island Escape", 6516, 12); + menuLine("36", "Gnome Stronghold Shortcut", 6517, 13); + menuLine("37", "Al Kharid Mining Pit Sliffside Scramble", 6517, 14); + menuLine("39", "Yanille Wall", 6517, 15); + menuLine("40", "Trollheim Easy Cliffside Scramble", 6517, 16); + menuLine("41", "Dwarven Mine Narrow Crevice", 6517, 17); + menuLine("42", "Trollheim Medium Cliffside Scramble", 6516, 18); + menuLine("43", "Trollheim Advanced Cliffside Scramble", 6517, 19); + menuLine("44", "Cosmic Temple Medium Narrow Walkway", 6517, 20); + menuLine("46", "Trollheim Hard Cliffside Scramble", 6516, 21); + menuLine("47", "Log Balance To The Fremennik Province", 6517, 22); + menuLine("48", "Edgeville Dungeon To Varrock Sewers Pipe", 6515, 23); + menuLine("51", "Karamja Crossing, South Of The Volcano", 6516, 24); + menuLine("53", "Port Phasmatys Ectopool Shortcut", 6517, 25); + menuLine("58", "Elven Overpass Easy Cliffside Scramble", 6517, 26); + menuLine("59", "Slayer Tower Medium Spiked Chain Climb", 6517, 27); + menuLine("61", "Slayer Dungon Narrow Crevice", 6517, 28); + menuLine("62", "Trollheim Wilderness Route", 6516, 29); + menuLine("64", "Paterdomus Temple To Morytania Shortcut", 6517, 30); + menuLine("66", "Cosmic Temple Advanced Narrow Walkway", 6517, 31); + menuLine("68", "Elven Overpass Medium Cliffside Scramble", 6517, 32); + menuLine("70", "Taverly Dungeon Pipe Squeeze", 6516, 33); + menuLine("71", "Slayer Tower Advanced Spiked Chain Climb", 6517, 34); + menuLine("74", "Shilo Village Stepping Stone", 6514, 35); + menuLine("80", "Taverly Dungeon Spiked Blade Jump", 6514, 36); + menuLine("81", "Slayer Dungeon Chasm Jump", 6514, 37); + menuLine("85", "Elven Overpass Advanced Cliff Scramble", 6517, 38); + optionTab("Agility", "Shortcuts", "Courses", "Areas", "Shortcuts", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("50", "Crystal Equipment", 4207, 0); + optionTab("Agility", "", "Courses", "Areas", "Shortcuts", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 9 + * + * @param screen + * + * @return + */ + public void herbloreComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("3", "Attack potion", 121, 0); + menuLine("5", "Anti-poison", 175, 1); + menuLine("12", "Strength potion", 115, 2); + menuLine("22", "Stat restore potion", 127, 3); + menuLine("26", "Energy potion", 3010, 4); + menuLine("30", "Defence potion", 133, 5); + menuLine("34", "Agility potion", 3034, 6); + menuLine("38", "Prayer restore potion", 139, 7); + menuLine("45", "Super Attack potion", 145, 8); + menuLine("48", "Super anti-poison", 181, 9); + menuLine("50", "Fishing potion", 151, 10); + menuLine("52", "Super energy potion", 3018, 11); + menuLine("55", "Super Strength potion", 157, 12); + menuLine("60", "Weapon poison", 187, 13); + menuLine("63", "Super restore potion", 3026, 14); + menuLine("66", "Super Defence potion", 163, 15); + menuLine("68", "Antidote+", 5945, 16); + menuLine("69", "Ranging potion", 169, 17); + menuLine("72", "Antifire potion", 2454, 18); + menuLine("73", "Weapon poison+", 5937, 19); + menuLine("76", "Magic potion", 3042, 20); + menuLine("78", "Zamorak brew", 189, 21); + menuLine("79", "Antidote++", 5954, 22); + menuLine("81", "Saradomin brew", 6687, 23); + menuLine("82", "Weapon poison++", 5940, 24); + optionTab("Herblore", "Potions", "Potions", "Herbs", "", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("3", "Guam Leaf", 249, 0); + menuLine("5", "Marrentill", 251, 1); + menuLine("11", "Tarromin", 253, 2); + menuLine("20", "Harralander", 255, 3); + menuLine("25", "Ranarr", 257, 4); + menuLine("30", "Toadflax", 2998, 5); + menuLine("40", "Irit Leaf", 259, 6); + menuLine("48", "Avantoe", 261, 7); + menuLine("54", "Kwuarm", 263, 8); + menuLine("59", "Snapdragon", 3000, 9); + menuLine("65", "Cadantine", 265, 10); + menuLine("67", "Lantadyme", 2481, 11); + menuLine("70", "Dwarf Weed", 267, 12); + menuLine("75", "Torstol", 269, 13); + optionTab("Herblore", "Herbs", "Potions", "Herbs", "", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 10 + * + * @param screen + * + * @return + */ + public void thievingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Man", 3241, 0); + menuLine("10", "Farmer", 3243, 1); + menuLine("15", "Female H.A.M. Follower", 4295, 2); + menuLine("20", "Male H.A.M. Follower", 4297, 3); + menuLine("25", "Warrior", 3245, 4); + menuLine("32", "Rogue", 3247, 5); + menuLine("38", "Master Farmer", 5068, 6); + menuLine("40", "Guard", 3249, 7); + menuLine("45", "Fremennik Citizen", 3686, 8); + menuLine("45", "Beared Pollnivnian Bandit", 6781, 9); + menuLine("53", "Desert Bandit", 4625, 10); + menuLine("55", "Knight", 3251, 11); + menuLine("55", "Pollnivnian Bandit", 6782, 12); + menuLine("65", "Watchman", 3253, 13); + menuLine("65", "Menaphite Thug", 6780, 14); + menuLine("70", "Paladin", 3255, 15); + menuLine("75", "Gnome", 3257, 16); + menuLine("80", "Hero", 3259, 17); + menuLine("85", "Elf", 6105, 18); + optionTab("Thieving", "Pickpocket", "Pickpocket", "Stalls", + "Chests", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("2", "Vegetable stall", 1965, 0); + menuLine("5", "Baker's stall", 2309, 1); + menuLine("5", "Ape Atoll general stall", 1933, 2); + menuLine("5", "Tea stall", 1978, 3); + menuLine("5", "Crafting stall", 1755, 4); + menuLine("5", "Monkey food stall", 1963, 5); + menuLine("15", "Rock cake stall", 2379, 6); + menuLine("20", "Silk stall", 950, 7); + menuLine("22", "Wine stall", 1993, 8); + menuLine("27", "Seed stall", 5318, 9); + menuLine("35", "Fur stall", 958, 10); + menuLine("42", "Fish stall", 333, 11); + menuLine("50", "Silver stall", 2355, 12); + menuLine("65", "Magic stall", 6422, 13); + menuLine("65", "Scimitar stall", 1323, 14); + menuLine("65", "Spice stall", 2007, 15); + menuLine("75", "Gem stall", 1607, 16); + optionTab("Thieving", "Stalls", "Pickpocket", "Stalls", "Chests", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("13", "Ardougne, Rellekka, and the Wilderness", 617, 0); + menuLine("28", "Upstairs in Ardougne and Rellekka", 561, 1); + menuLine("43", "Upstairs in Ardougne", 617, 2); + menuLine("47", "Hemenster", 41, 3); + menuLine("47", "Rellekka", 617, 4); + menuLine("59", "Chaos Druid Tower north of Ardougne", 565, 5); + menuLine("72", "King Lathas's castle in Ardougne", 383, 6); + optionTab("Thieving", "Chests", "Pickpocket", "Stalls", "Chests", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 11 + * + * @param screen + * + * @return + */ + public void craftingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("10", "Cloth", 3224, 0); + menuLine("21", "Vegetable Sack", 5418, 1); + optionTab("Crafting", "Weaving", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Leather Gloves", 1059, 0); + menuLine("7", "Leather Boots", 1061, 1); + menuLine("9", "Leather Cowl", 1167, 2); + menuLine("11", "Leather Vambraces", 1063, 3); + menuLine("14", "Leather Body", 1129, 4); + menuLine("18", "Leather Chaps", 1095, 5); + menuLine("28", "Hard Leather Body", 1131, 6); + menuLine("35", "Broodoo Shield", 6257, 7); + menuLine("38", "Coif", 1169, 8); + menuLine("41", "Studded Body", 1133, 9); + menuLine("44", "Studded Chaps", 1097, 10); + menuLine("45", "Snakeskin Boots", 6328, 11); + menuLine("47", "Snakeskin Vambraces", 6330, 12); + menuLine("48", "Snakeskin Bandana", 6326, 13); + menuLine("51", "Snakeskin Chaps", 6324, 14); + menuLine("53", "Snakeskin Body", 6322, 15); + menuLine("57", "Green Dragonhide Vambraces", 1065, 16); + menuLine("60", "Green Dragonhide Chaps", 1099, 17); + menuLine("63", "Green Dragonhide Body", 1135, 18); + menuLine("66", "Blue Dragonhide Vambraces", 2487, 19); + menuLine("68", "Blue Dragonhide Chaps", 2493, 20); + menuLine("71", "Blue Dragonhide Body", 2499, 21); + menuLine("73", "Red Dragonhide Vambraces", 2489, 22); + menuLine("75", "Red Dragonhide Chaps", 2495, 23); + menuLine("77", "Red Dragonhide Body", 2501, 24); + menuLine("79", "Black Dragonhide Vambraces", 2491, 25); + menuLine("82", "Black Dragonhide Chaps", 2497, 26); + menuLine("84", "Black Dragonhide Body", 2503, 27); + optionTab("Crafting", "Armour", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("1", "Wool", 1759, 0); + menuLine("10", "Flax into Bow Strings", 1777, 1); + optionTab("Crafting", "Spinning", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("1", "Pot", 1931, 0); + menuLine("7", "Pie Dish", 2313, 1); + menuLine("8", "Bowl", 1923, 2); + menuLine("19", "Plant Pot", 5350, 3); + menuLine("25", "Pot Lid", 4440, 4); + optionTab("Crafting", "Pottery", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 5) { + clearMenu(); + menuLine("1", "Beer Glass", 1919, 0); + menuLine("4", "Candle Lantern", 4527, 1); + menuLine("12", "Oil Lamp", 4525, 2); + menuLine("26", "Oil Lantern", 4535, 3); + menuLine("33", "Vial", 229, 4); + menuLine("42", "Fishbowl", 6667, 5); + menuLine("46", "Glass Orb", 567, 6); + menuLine("49", "Bullseye Lantern Lens", 4542, 7); + optionTab("Crafting", "Glass", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 6) { + clearMenu(); + menuLine("1", "Cut Opal", 1609, 0); + menuLine("5", "Gold Ring", 1635, 1); + menuLine("6", "Gold Necklace", 1654, 2); + menuLine("8", "Gold Amulet", 1673, 3); + menuLine("13", "Cut Jade", 1611, 4); + menuLine("16", "Holy Symbol", 1714, 5); + menuLine("16", "Cut Red Topaz", 1613, 6); + menuLine("17", "Unholy Symbol", 1724, 7); + menuLine("20", "Cut Sapphire", 1607, 8); + menuLine("20", "Sapphire Ring", 1637, 9); + menuLine("22", "Sapphire Necklace", 1656, 10); + menuLine("23", "Tiara", 5525, 11); + menuLine("24", "Sapphire Amulet", 1675, 12); + menuLine("27", "Cut Emerald", 1605, 13); + menuLine("27", "Emerald Ring", 1639, 14); + menuLine("29", "Emerald Necklace", 1658, 15); + menuLine("31", "Emerald Amulet", 1677, 16); + menuLine("34", "Cut Ruby", 1603, 17); + menuLine("34", "Ruby Ring", 1641, 18); + menuLine("40", "Ruby Necklace", 1660, 19); + menuLine("43", "Cut Diamond", 1601, 20); + menuLine("43", "Diamond Ring", 1643, 21); + menuLine("50", "Ruby Amulet", 1679, 22); + menuLine("55", "Cut Dragonstone", 1615, 23); + menuLine("55", "Dragonstone Ring", 1645, 24); + menuLine("56", "Diamond Necklace", 1662, 25); + menuLine("67", "Cut Onyx", 6573, 26); + menuLine("67", "Onyx Ring", 6575, 27); + menuLine("70", "Diamond Amulet", 1681, 28); + menuLine("80", "Dragonstone Amulet", 1683, 29); + menuLine("82", "Onyx Necklace", 6577, 30); + menuLine("90", "Onyx Amulet", 6579, 31); + optionTab("Crafting", "Jewellery", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + + else if (screen == 7) { + clearMenu(); + menuLine("54", "Water battlestaff", 1395, 0); + menuLine("58", "Earth battlestaff", 1399, 1); + menuLine("62", "Fire battlestaff", 1393, 2); + menuLine("66", "Air battlestaff", 1397, 3); + optionTab("Crafting", "Weaponry", "Weaving", "Armour", "Spinning", + "Pottery", "Glass", "Jewellery", "Weaponry", "", + "", "", "", "", ""); + } + } + + /* + * Skill ID: 12 + * + * @param screen + * + * @return + */ + public void fletchingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Bronze arrow", 882, 0); + menuLine("5", "Ogre arrow", 2866, 1); + menuLine("7", "Bronze 'brutal' arrow", 4773, 2); + menuLine("15", "Iron arrow", 884, 3); + menuLine("18", "Iron 'brutal' arrow", 4778, 4); + menuLine("30", "Steel arrow", 886, 5); + menuLine("33", "Steel 'brutal' arrow", 4783, 6); + menuLine("38", "Black 'brutal' arrow", 4788, 7); + menuLine("45", "Mithril arrow", 888, 8); + menuLine("49", "Mithril 'brutal' arrow", 4793, 9); + menuLine("60", "Adamant arrow", 890, 10); + menuLine("62", "Adamant 'brutal' arrow", 4798, 11); + menuLine("75", "Rune arrow", 892, 12); + menuLine("77", "Rune 'brutal' arrow", 4803, 13); + optionTab("Fletching", "Arrows", "Arrows", "Bows", "Darts", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("5", "Shortbow", 841, 0); + menuLine("10", "Longbow", 839, 1); + menuLine("20", "Oak Shortbow", 843, 2); + menuLine("25", "Oak Longbow", 845, 3); + menuLine("30", "Ogre Composite Bow(After Zogre Flesh Eaters)", + 4827, 4); + menuLine("35", "Willow Shortbow", 849, 5); + menuLine("40", "Willow Longbow", 847, 6); + menuLine("50", "Maple Shortbow", 853, 7); + menuLine("55", "Maple Longbow", 851, 8); + menuLine("65", "Yew Shortbow", 857, 9); + menuLine("70", "Yew Longbow", 855, 10); + menuLine("80", "Magic Shortbow", 861, 11); + menuLine("85", "Magic Longbow", 859, 12); + optionTab("Fletching", "Bows", "Arrows", "Bows", "Darts", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("1", "Bronze Dart", 806, 0); + menuLine("22", "Iron Dart", 807, 1); + menuLine("37", "Steel Dart", 808, 2); + menuLine("52", "Mithril Dart", 809, 3); + menuLine("67", "Adamant Dart", 810, 4); + menuLine("81", "Rune Dart", 811, 5); + optionTab("Fletching", "Darts", "Arrows", "Bows", "Darts", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 13 + * + * @param screen + * + * @return + */ + public void slayerComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("5", "Crawling Hand", 4133, 0); + menuLine("7", "Cave Bug", 4521, 1); + menuLine("10", "Cave Crawler", 4134, 2); + menuLine("15", "Banshee", 4135, 3); + menuLine("17", "Cave Slime", 4520, 4); + menuLine("20", "Rockslug", 4136, 5); + menuLine("25", "Cockatrice", 4137, 6); + menuLine("30", "Pyrefiend", 4138, 7); + menuLine("40", "Basalisk", 4139, 8); + menuLine("45", "Infernal Mage", 4140, 9); + menuLine("50", "Bloodveld", 4141, 10); + menuLine("52", "Jelly", 4142, 11); + menuLine("55", "Turoth", 4143, 12); + menuLine("60", "Aberrant Spectre", 4144, 13); + menuLine("65", "Dust Devil", 4145, 14); + menuLine("70", "Kurask", 4146, 15); + menuLine("72", "Skeletal Wyvern", 6811, 16); + menuLine("75", "Gargoyle", 4147, 17); + menuLine("80", "Nechrael", 4148, 18); + menuLine("85", "Abyssal Demon", 4149, 19); + menuLine("90", "Dark Beast", 6637, 20); + optionTab("Slayer", "Monsters", "Monsters", "Equipment", "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Enchanted Gem", 4155, 0); + menuLine("1", "Bag Of Salt", 4161, 1); + menuLine("1", "Ice Cooler", 6696, 2); + menuLine("1", "Spiny Helmet (With 5 Defence)", 4551, 3); + menuLine("1", "Rock Hammer", 4162, 4); + menuLine("10", "Facemask", 4164, 5); + menuLine("15", "Earmuffs", 4166, 6); + menuLine("25", "Mirror Shield (With 20 Defence)", 4156, 7); + menuLine("32", "Fishing Explosive", 6660, 8); + menuLine("33", "Harpie Bug Lantern (Not a light source)", 7053, 9); + menuLine("37", "Insulated Boots", 7159, 10); + menuLine("42", "Slayer Gloves", 6708, 11); + menuLine("55", "Leaf-Bladed Spear", 4158, 12); + menuLine("55", "Broad arrows (With 50 Range)", 4150, 13); + menuLine("55", "Slayer's staff(With 50 Magic)", 4170, 14); + menuLine("57", "Fungicide Spray", 7421, 15); + menuLine("60", "Nose Peg", 4168, 16); + optionTab("Slayer", "Equipment", "Monsters", "Equipment", "", "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 14 + * + * @param screen + * + * @return + */ + public void miningComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Rune Essence(After Rune Mysteries)", 1436, 0); + menuLine("1", "Clay", 434, 1); + menuLine("1", "Copper Ore", 436, 2); + menuLine("1", "Tin Ore", 438, 3); + menuLine("10", "Limestone", 3211, 4); + menuLine("10", "Blurite Ore", 668, 5); + menuLine("15", "Iron Ore", 440, 6); + menuLine("20", "Elemental Ore(After Starting Elemental Workshop)", 2892, 7); + menuLine("20", "Silver Ore", 442, 8); + menuLine("30", "Coal", 453, 9); + menuLine("30", "Pure Essence(After Rune Mysteries)", 7936, 10); + menuLine("35", "Sandstone", 6977, 11); + menuLine("40", "Gold Ore", 444, 12); + menuLine("40", "Gem Rocks", 1603, 13); + menuLine("45", "Granite", 6983, 14); + menuLine("55", "Mithril Ore", 447, 15); + menuLine("70", "Adamantite Ore", 449, 16); + menuLine("85", "Runite Ore", 451, 17); + optionTab("Mining", "Ores", "Ores", "Pickaxes", "", "", + "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Bronze Pickaxe", 1265, 0); + menuLine("1", "Iron Pickaxe", 1267, 1); + menuLine("6", "Steel Pickaxe", 1269, 2); + menuLine("21", "Mithril Pickaxe", 1273, 3); + menuLine("31", "Adamant Pickaxe", 1271, 4); + menuLine("41", "Rune Pickaxe", 1275, 5); + optionTab("Mining", "Pickaxes", "Ores", "Pickaxes", "", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("60", "Mining Guild", 447, 0); + optionTab("Mining", "", "Ores", "Pickaxes", "", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 15 + * + * @param screen + * + * @return + */ + public void smithingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Bronze(1 Tin Ore + 1 Copper Ore)", 2349, 0); + menuLine("15", "Iron(50% Chance of Success)", 2351, 1); + menuLine("20", "Elemental Metal(After Elemental Workshop)", 2893, 2); + menuLine("20", "Silver", 2355, 3); + menuLine("30", "Steel(2 Coal + 1 Iron Ore)", 2353, 4); + menuLine("40", "Gold", 2357, 5); + menuLine("50", "Mithril(4 Coal + 1 Mithril Ore)", 2359, 6); + menuLine("70", "Adamant(6 Coal + 1 Adamantite Ore)", 2361, 7); + menuLine("85", "Runite(8 Coal + 1 Runite Ore)", 2363, 8); + optionTab("Smithing", "Smelting", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + String type = "Bronze"; + menuLine("1", type + " Dagger - 1 Bar", 1205, 0); + menuLine("1", type + " Hatchet - 1 Bar", 1351, 1); + menuLine("2", type + " Mace - 1 Bar", 1422, 2); + menuLine("3", type + " Med Helm - 1 Bar", 1139, 3); + menuLine("4", type + " Sword - 1 Bar", 1277, 4); + menuLine("4", type + " Dart Tips - 1 Bar makes 10", 819, 5); + menuLine("4", type + " Wire - 1 Bar", 1794, 6); + menuLine("4", type + " Nails - 1 Bar makes 15", 4819, 7); + menuLine("5", type + " Scimitar - 2 Bars", 1321, 8); + menuLine("5", type + " Spear - 1 Bar + 1 Log", 1237, 9); + menuLine("5", type + " Arrowhead - 1 Bar makes 15", 39, 10); + menuLine("6", type + " Longsword - 2 Bars", 1291, 11); + menuLine("7", type + " Full Helm - 2 Bars", 1155, 12); + menuLine("7", type + " Throwing Knife", 864, 13); + menuLine("8", type + " Square Shield - 2 Bars", 1173, 14); + menuLine("9", type + " Warhammer - 3 Bars", 1337, 15); + menuLine("10", type + " Battleaxe - 3 Bars", 1375, 16); + menuLine("11", type + " Chainbody - 3 Bars", 1103, 17); + menuLine("12", type + " Kiteshield - 3 Bars", 1189, 18); + menuLine("13", type + " Claws(After Death Plateu) - 2 Bars", 3095, + 19); + menuLine("14", type + " Two-Handed Sword - 3 Bars", 1307, 20); + menuLine("16", type + " Platelegs - 3 Bars", 1075, 21); + menuLine("16", type + " Plateskirt - 3 Bars", 1087, 22); + menuLine("18", type + " Platebody - 5 Bars", 1117, 23); + optionTab("Smithing", "Bronze", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 3) { + clearMenu(); + String type = "Iron"; + menuLine("15", type + " Dagger - 1 Bar", 1203, 0); + menuLine("16", type + " Hatchet - 1 Bar", 1349, 1); + menuLine("17", type + " Mace - 1 Bar", 1420, 2); + menuLine("17", type + " Spit - 1 Bar", 7225, 3); + menuLine("18", type + " Med Helm - 1 Bar", 1137, 4); + menuLine("19", type + " Sword - 1 Bar", 1279, 5); + menuLine("19", type + " Dart Tips - 1 Bar makes 10", 820, 6); + menuLine("19", type + " Nails - 1 Bar makes 15", 4819, 7); + menuLine("20", type + " Scimitar - 2 Bars", 1323, 8); + menuLine("20", type + " Spear - 1 Bar + 1 Log", 1239, 9); + menuLine("20", type + " Arrowhead - 1 Bar makes 15", 40, 10); + menuLine("21", type + " Longsword - 2 Bars", 1293, 11); + menuLine("22", type + " Full Helm - 2 Bars", 1153, 12); + menuLine("22", type + " Throwing Knife", 863, 13); + menuLine("23", type + " Square Shield - 2 Bars", 1175, 14); + menuLine("24", type + " Warhammer - 3 Bars", 1335, 15); + menuLine("25", type + " Battleaxe - 3 Bars", 1363, 16); + menuLine("26", type + " Chainbody - 3 Bars", 1101, 17); + menuLine("26", "Oil Lantern Frame - 1 Bar", 4540, 18); + menuLine("27", type + " Kiteshield - 3 Bars", 1191, 19); + menuLine("28", type + " Claws(After Death Plateau) - 2 Bars", 3096, + 20); + menuLine("29", type + " Two-Handed Sword - 3 Bars", 1309, 21); + menuLine("31", type + " Platelegs - 3 Bars", 1067, 22); + menuLine("31", type + " Plateskirt - 3 Bars", 1081, 23); + menuLine("33", type + " Platebody - 5 Bars", 1115, 24); + optionTab("Smithing", "Iron", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } + + else if (screen == 4) { + clearMenu(); + String type = "Steel"; + menuLine("30", type + " Dagger - 1 Bar", 1207, 0); + menuLine("31", type + " Hatchet - 1 Bar", 1353, 1); + menuLine("32", type + " Mace - 1 Bar", 1424, 2); + menuLine("33", type + " Med Helm - 1 Bar", 1141, 3); + menuLine("34", type + " Sword - 1 Bar", 1281, 4); + menuLine("34", type + " Dart Tips - 1 Bar makes 10", 821, 5); + menuLine("34", type + " Nails - 1 Bar makes 15", 1539, 6); + menuLine("35", type + " Scimitar - 2 Bars", 1325, 7); + menuLine("35", type + " Spear - 1 Bar + 1 Log", 1241, 8); + menuLine("35", type + " Arrowhead - 1 Bar makes 15", 41, 9); + menuLine("36", type + " Longsword - 2 Bars", 1295, 10); + menuLine("36", type + " Studs - 1 Bar", 2370, 11); + menuLine("37", type + " Full Helm - 2 Bars", 1157, 12); + menuLine("37", type + " Throwing Knife", 865, 13); + menuLine("38", type + " Square Shield - 2 Bars", 1177, 14); + menuLine("39", type + " Warhammer - 3 Bars", 1339, 15); + menuLine("40", type + " Battleaxe - 3 Bars", 1365, 16); + menuLine("41", type + " Chainbody - 3 Bars", 1105, 17); + menuLine("42", type + " Kiteshield - 3 Bars", 1193, 18); + menuLine("43", type + " Claws(After Death Plateu) - 2 Bars", 3097, + 19); + menuLine("44", type + " Two-Handed Sword - 3 Bars", 1311, 20); + menuLine("46", type + " Platelegs - 3 Bars", 1069, 21); + menuLine("46", type + " Plateskirt - 3 Bars", 1083, 22); + menuLine("48", type + " Platebody - 5 Bars", 1119, 23); + optionTab("Smithing", "Steel", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 5) { + clearMenu(); + String type = "Mithril"; + menuLine("50", type + " Dagger - 1 Bar", 1209, 0); + menuLine("51", type + " Hatchet - 1 Bar", 1355, 1); + menuLine("52", type + " Mace - 1 Bar", 1428, 2); + menuLine("53", type + " Med Helm - 1 Bar", 1143, 3); + menuLine("54", type + " Sword - 1 Bar", 1285, 4); + menuLine("54", type + " Dart Tips - 1 Bar makes 10", 822, 5); + menuLine("54", type + " Nails - 1 Bar makes 15", 4822, 6); + menuLine("55", type + " Scimitar - 2 Bars", 1329, 7); + menuLine("55", type + " Spear - 1 Bar + 1 Log", 1243, 8); + menuLine("55", type + " Arrowhead - 1 Bar makes 15", 42, 9); + menuLine("56", type + " Longsword - 2 Bars", 1299, 10); + menuLine("57", type + " Full Helm - 2 Bars", 1159, 11); + menuLine("57", type + " Throwing Knife", 866, 12); + menuLine("58", type + " Square Shield - 2 Bars", 1181, 13); + menuLine("59", type + " Warhammer - 3 Bars", 1343, 14); + menuLine("60", type + " Battleaxe - 3 Bars", 1369, 15); + menuLine("61", type + " Chainbody - 3 Bars", 1109, 16); + menuLine("62", type + " Kiteshield - 3 Bars", 1197, 17); + menuLine("63", type + " Claws(After Death Plateau) - 2 Bars", 3099, + 18); + menuLine("64", type + " Two-Handed Sword - 3 Bars", 1315, 19); + menuLine("66", type + " Platelegs - 3 Bars", 1071, 20); + menuLine("66", type + " Plateskirt - 3 Bars", 1085, 21); + menuLine("68", type + " Platebody - 5 Bars", 1121, 22); + optionTab("Smithing", "Mithril", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 6) { + clearMenu(); + String type = "Adamant"; + menuLine("70", type + " Dagger - 1 Bar", 1211, 0); + menuLine("71", type + " Hatchet - 1 Bar", 1357, 1); + menuLine("72", type + " Mace - 1 Bar", 1430, 2); + menuLine("73", type + " Med Helm - 1 Bar", 1145, 3); + menuLine("74", type + " Sword - 1 Bar", 1287, 4); + menuLine("74", type + " Dart Tips - 1 Bar makes 10", 823, 5); + menuLine("74", type + " Nails - 1 Bar makes 15", 4823, 6); + menuLine("75", type + " Scimitar - 2 Bars", 1331, 7); + menuLine("75", type + " Spear - 1 Bar + 1 Log", 1245, 8); + menuLine("75", type + " Arrowhead - 1 Bar makes 15", 43, 9); + menuLine("76", type + " Longsword - 2 Bars", 1301, 10); + menuLine("77", type + " Full Helm - 2 Bars", 1161, 11); + menuLine("77", type + " Throwing Knife", 867, 12); + menuLine("78", type + " Square Shield - 2 Bars", 1183, 13); + menuLine("79", type + " Warhammer - 3 Bars", 1343, 14); + menuLine("80", type + " Battleaxe - 3 Bars", 1371, 15); + menuLine("81", type + " Chainbody - 3 Bars", 1111, 16); + menuLine("82", type + " Kiteshield - 3 Bars", 1199, 17); + menuLine("83", type + " Claws(After Death Plateau) - 2 Bars", 3100, + 18); + menuLine("84", type + " Two-Handed Sword - 3 Bars", 1317, 19); + menuLine("86", type + " Platelegs - 3 Bars", 1073, 20); + menuLine("86", type + " Plateskirt - 3 Bars", 1091, 21); + menuLine("88", type + " Platebody - 5 Bars", 1123, 22); + optionTab("Smithing", "Adamantite", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 7) { + clearMenu(); + String type = "Rune"; + menuLine("85", type + " Dagger - 1 Bar", 1213, 0); + menuLine("86", type + " Hatchet - 1 Bar", 1359, 1); + menuLine("87", type + " Mace - 1 Bar", 1432, 2); + menuLine("88", type + " Med Helm - 1 Bar", 1147, 3); + menuLine("89", type + " Sword - 1 Bar", 1289, 4); + menuLine("89", type + " Dart Tips - 1 Bar makes 10", 824, 5); + menuLine("89", type + " Nails - 1 Bar makes 15", 4824, 6); + menuLine("90", type + " Scimitar - 2 Bars", 1333, 7); + menuLine("90", type + " Spear - 1 Bar + 1 Log", 1247, 8); + menuLine("90", type + " Arrowhead - 1 Bar makes 15", 44, 9); + menuLine("91", type + " Longsword - 2 Bars", 1303, 10); + menuLine("92", type + " Full Helm - 2 Bars", 1163, 11); + menuLine("92", type + " Throwing Knife", 868, 12); + menuLine("93", type + " Square Shield - 2 Bars", 1185, 13); + menuLine("94", type + " Warhammer - 3 Bars", 1347, 14); + menuLine("95", type + " Battleaxe - 3 Bars", 1373, 15); + menuLine("96", type + " Chainbody - 3 Bars", 1113, 16); + menuLine("97", type + " Kiteshield - 3 Bars", 1201, 17); + menuLine("98", type + " Claws(After Death Plateau) - 2 Bars", 3101, + 18); + menuLine("99", type + " Two-Handed Sword - 3 Bars", 1319, 19); + menuLine("99", type + " Platelegs - 3 Bars", 1079, 20); + menuLine("99", type + " Plateskirt - 3 Bars", 1093, 21); + menuLine("99", type + " Platebody - 5 Bars", 1127, 22); + optionTab("Smithing", "Runite", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 8) { + clearMenu(); + menuLine("50", "Gold Bowl(After Starting Legends' Quest)", 721, 0); + menuLine("50", "Gold Helmet(After starting Between a Rock)", 4567, 1); + optionTab("Smithing", "Gold", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 9) { + clearMenu(); + menuLine("20", "Elemental Shield(After Elemental Workshop)", 2890, + 0); + optionTab("Smithing", "Elemental", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } else if (screen == 10) { + clearMenu(); + menuLine("60", "Dragon Square Shield", 1187, 0); + optionTab("Smithing", "Other", "Smelting", "Bronze", "Iron", + "Steel", "Mithril", "Adamantite", "Runite", "Gold", + "Elemental", "Other", "", "", ""); + } + } + + /* + * Skill ID: 16 + * + * @param screen + * + * @return + */ + public void fishingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Small Net", 303, 0); + menuLine("5", "Bait Fishing", 307, 1); + menuLine("16", "Big Net Fishing", 305, 2); + menuLine("20", "Fly Fishing Rod", 309, 3); + menuLine("35", "Harpoon", 311, 4); + menuLine("40", "Lobster Pot", 301, 5); + menuLine("65", "Vessel Fishing", 3157, 6); + optionTab("Fishing", "Techniques", "Techniques", "Catches", + "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Shrimp - Net Fishing", 317, 0); + menuLine("5", "Sardine - Sea Bait Fishing", 327, 1); + menuLine("5", "Karambwanji - Net Fishing", 3150, 2); + menuLine("10", "Herring - Sea Bait Fishing", 347, 3); + menuLine("15", "Anchovie - Net Fishing", 321, 4); + menuLine("16", "Mackerel - Big Net Fishing", 353, 5); + menuLine("16", "Oyster - Big Net Fishing", 407, 6); + menuLine("16", "Casket - Big Net Fishing", 405, 7); + menuLine("16", "Seaweed - Big Net Fishing", 401, 8); + menuLine("20", "Trout - Fly Fishing", 335, 9); + menuLine("23", "Cod - Big Net Fishing", 341, 10); + menuLine("25", "Pike - River Bait Fishing", 349, 11); + menuLine("28", "Slimy Eel - River Bait Fishing", 3379, 12); + menuLine("30", "Salmon - Fly Fishing", 331, 13); + menuLine("35", "Tuna - Harpoon Fishing", 359, 14); + menuLine("38", "Cave Eel - River Bait Fishing", 5001, 15); + menuLine("40", "Lobster - Lobster Pot Fishing", 377, 16); + menuLine("46", "Bass - Big Net Fishing", 363, 17); + menuLine("50", "Swordfish - Harpoon Fishing", 371, 18); + menuLine("53", "Lava Eel - Bait Fishing", 2148, 19); + menuLine("62", "Monkfish - Net Fishing", 7944, 20); + menuLine("65", "Karambwan - Vessel Fishing", 3142, 21); + menuLine("76", "Shark - Harpoon Fishing", 383, 22); + menuLine("79", "Sea Turtle - Fishing Trawler", 395, 23); + menuLine("81", "Manta Ray - Fishing Trawler", 389, 24); + optionTab("Fishing", "Catches", "Techniques", "Catches", + "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("68", "Fishing Guild", 385, 0); + optionTab("Fishing", "", "Techniques", "Catches", + "", "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 17 + * + * @param screen + * + * @return + */ + public void cookingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Meat", 2142, 0); + menuLine("1", "Shrimp", 315, 1); + menuLine("1", "Chicken", 2140, 2); + menuLine("1", "Rabbit", 3228, 3); + menuLine("1", "Anchovies", 319, 4); + menuLine("1", "Sardine", 325, 5); + menuLine("1", "Karambwanji", 3151, 6); + menuLine("1", "Karambwan", 3144, 7); + menuLine("1", "Ugthanki Kebab", 1883, 8); + menuLine("5", "Herring", 347, 9); + menuLine("10", "Mackerel", 355, 10); + menuLine("12", "Thin Snail", 3363, 11); + menuLine("15", "Trout", 333, 12); + menuLine("16", "Spider", 6293, 13); + menuLine("16", "Roasted Rabbit", 7223, 14); + menuLine("17", "Lean Snail", 3365, 15); + menuLine("18", "Cod", 339, 16); + menuLine("20", "Pike", 351, 17); + menuLine("22", "Fat Snail", 3367, 18); + menuLine("25", "Salmon", 329, 19); + menuLine("28", "Slimy Eel", 3379, 20); + menuLine("30", "Tuna", 361, 21); + menuLine("30", "Roasted Chompy", 2878, 22); + menuLine("31", "Fishcake", 7530, 23); + menuLine("38", "Cave Eel", 5003, 24); + menuLine("40", "Lobster", 379, 25); + menuLine("41", "Jubbly", 7568, 26); + menuLine("43", "Bass", 365, 27); + menuLine("45", "Swordfish", 373, 28); + menuLine("53", "Lava Eel", 2149, 29); + menuLine("62", "Monkfish", 7946, 30); + menuLine("80", "Shark", 385, 31); + menuLine("82", "Sea Turtle", 397, 32); + menuLine("91", "Manta Ray", 391, 33); + optionTab("Cooking", "Meats", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Bread", 2309, 0); + menuLine("58", "Pitta Bread", 1865, 1); + menuLine("", "To make bread:", 0, 2); + menuLine("", "1.Pick some grain and use a hopper to make flour", 0, + 3); + menuLine("", "2.Use a pot to collect the flour you have made", 0, 4); + menuLine("", "3.Fill a bucket or jug with water from a sink", 0, 5); + menuLine("", "4.Mix the flour and water to make some dough", 0, 6); + menuLine("", "5.Cook the dough by using it with a stove", 0, 7); + optionTab("Cooking", "Bread", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("10", "Redberry Pie", 2325, 0); + menuLine("20", "Meat Pie", 2327, 1); + menuLine("29", "Mud Pie", 7170, 2); + menuLine("30", "Apple Pie", 2323, 3); + menuLine("34", "Garden Pie", 7178, 4); + menuLine("47", "Fish Pie", 7188, 5); + menuLine("70", "Admiral Pie", 7198, 6); + menuLine("85", "Wild Pie", 7208, 7); + menuLine("95", "Summer Pie", 7218, 8); + menuLine("", "To make a pie:", 0, 9); + menuLine("", "1.Mixe flour and water to make pastry dough", 0, 10); + menuLine("", "2.Place the dough in an empty pie dish", 0, 11); + menuLine("", "3.Use our choice of filling with the empty pie", 0, + 12); + menuLine("", "4.Cook the pie by using it with a stove", 0, 13); + optionTab("Cooking", "Pies", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("25", "Stew", 2003, 0); + menuLine("60", "Curry", 2011, 1); + menuLine("", "To make stew:", 0, 2); + menuLine("", "1.Obtain a bowl and fill it with water", 0, 3); + menuLine("", "2.Pick a potato and place it in the bowl.", 0, 4); + menuLine("", "3.Cook some meat and place it in the bowl", 0, 5); + menuLine("", "4.Cook the stew by using it with a stove or fire", 0, + 6); + menuLine("", "To make curry:", 0, 7); + menuLine("", "Make uncooked stew as above.", 0, 8); + menuLine("", "Before cooking, add some spices or curry leaves", 0, + 9); + optionTab("Cooking", "Stews", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 5) { + clearMenu(); + menuLine("35", "Plain Pizza", 2289, 0); + menuLine("45", "Meat Pizza", 2293, 1); + menuLine("55", "Anchovy Pizza", 2297, 2); + menuLine("65", "Pineapple Pizza", 2301, 3); + menuLine("", "To make a pizza:", 0, 4); + menuLine("", "1.Mix flour and water to make a pizza base", 0, 5); + menuLine("", "2.Add a tomato to the pizza", 0, 6); + menuLine("", "3.Add some cheese to the pizza", 0, 7); + menuLine("", "4.Cook the pizza by using it with a stove", 0, 8); + menuLine("", "5.Add your choice of topping to the pizza", 0, 9); + optionTab("Cooking", "Pizzas", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 6) { + clearMenu(); + menuLine("40", "Cake", 1891, 0); + menuLine("50", "Chocolate Cake", 1897, 1); + menuLine("", "To make a cake:", 0, 2); + menuLine("", "1.Mix flour, eggs and milk together in a cake tin", + 0, 3); + menuLine("", "2.Cook the cake by using it with a stove", 0, 4); + menuLine("", "3.Optional:Buy some chocolate and add", 0, 5); + menuLine("", "it to the cake to make a choclate cake", 0, 6); + optionTab("Cooking", "Cakes", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 7) { + clearMenu(); + menuLine("35", "Wine", 1993, 0); + menuLine("", "To make wine:", 0, 1); + menuLine("", "1.Fill a jug with water", 0, 2); + menuLine("", "2.Use grapes with the jug of water", 0, 3); + menuLine("", "3.Wait until the wine ferments", 0, 4); + menuLine("", "4.The wine will ferment while left in your", 0, 5); + menuLine("", "inventory or the bank", 0, 6); + optionTab("Cooking", "Wine", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 8) { + clearMenu(); + menuLine("20", "Nettle Tea", 1978, 0); + menuLine("", "To make nettle tea:", 0, 1); + menuLine("", "1.Fill a bowl with water", 0, 2); + menuLine("", "2.Put some picked nettles into the bowl of water", 0, + 3); + menuLine("", "3.Boil the nettle-water by using it with a range", 0, + 4); + menuLine("", "4.Use the bowl of nettle tea with a cup", 0, 5); + menuLine("", "5.If you take milk, use some milk on the tea", 0, 6); + optionTab("Cooking", "Hot Drinks", "Meats", "Bread", "Pies", + "Stews", "Pizzas", "Cakes", "Wine", "Hot Drinks", + "Brewing", "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 9) { + clearMenu(); + menuLine("14", "Cider(4 Apple Mush)", 5763, 0); + menuLine("19", "Dwarven Stout(4 Hammerstone Hops)", 1913, 1); + menuLine("24", "Asgarnian Ale(4 Asgarnian Hops)", 1905, 2); + menuLine("29", "Greenman's Ale(4 Harralander Leaves)", 1909, 3); + menuLine("34", "Wizard's Mind Bomb(4 Yanillian Hops)", 1907, 4); + menuLine("39", "Dragon Bitter(4 Krandorian Hops)", 1911, 5); + menuLine("44", "Moonlight Mead(4 Bittercap Mushrooms)", 2955, 6); + menuLine("49", "Axeman's Folly(1 Oak Root)", 5751, 7); + menuLine("54", "Chef's Delight(4 Portions of Chocolate Dust)", + 5755, 8); + menuLine("59", "Slayer's Respite(4 Wildblood Hops)", 5759, 9); + optionTab("Cooking", "Brewing", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 10) { + clearMenu(); + menuLine("7", "Baked Potato", 6701, 0); + menuLine("9", "Spicy Sauce(Topping Ingredient)", 7072, 1); + menuLine("11", "Chilli Con Carne(Topping)", 7062, 2); + menuLine("13", "Scrambled Egg(Topping Ingredient)", 7078, 3); + menuLine("23", "Scrambled Egg and Tomato(Topping)", 7064, 4); + menuLine("28", "Sweetcorn", 5988, 5); + menuLine("39", "Baked Potato with Butter", 6703, 6); + menuLine("41", "Baked Potato with Chilli Con Carne", 7054, 7); + menuLine("42", "Fried Onion(Topping Ingredient)", 7084, 8); + menuLine("46", "Fried Mushroom(Topping Ingredient)", 7082, 9); + menuLine("47", "Baked Potato with Butter and Cheese", 6705, 10); + menuLine("51", "Baked Potato with Egg and Tomato", 7056, 11); + menuLine("57", "Fried Mushroom and Onion(Topping)", 7066, 12); + menuLine("64", "Baked Potato with Mushroom and Onion", 7058, 13); + menuLine("67", "Tuna and Sweetcorn(Topping)", 7068, 14); + menuLine("68", "Baked Potato with Tuna and Sweetcorn", 7060, 15); + menuLine("", "To make baked potatoes with toppings:", 0, 16); + menuLine("", "1.Bake the potato on a range", 0, 17); + menuLine("", "2.Add some butter", 0, 18); + menuLine("", "3.If needed, combine topping ingredients", 0, 19); + menuLine("", "by chopping them into a bowl", 0, 20); + menuLine("", "Ingredients for toppings:", 0, 21); + menuLine("", "1.Chilli con carne: Meat & spicy sauce", 0, 22); + menuLine("", "2.Egg and tomato: Scrambled egg & tomato", 0, 23); + menuLine("", "3.Mushroom and onion: Fried mushroom & onion", 0, 24); + menuLine("", "4.Tuna and sweetcorn: Tuna & cooked sweetcorn", 0, 25); + optionTab("Cooking", "Potatoes", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 11) { + clearMenu(); + menuLine("4", "Chocolate Milk", 1977, 0); + menuLine("21", "Cream", 2130, 1); + menuLine("38", "Butter", 6697, 2); + menuLine("48", "Cheese", 1985, 3); + menuLine("", "To make churned dairy products:", 0, 4); + menuLine("", "1.Get a bucket of milk, a pot of cream or butter", 0, + 5); + menuLine("", "2.Use the milk, cream or butter in a churn", 0, 6); + menuLine("", "3.Milk can be churned into cream, ", 0, 7); + menuLine("", "then into butter, then into cheese", 0, 8); + optionTab("Cooking", "Dairy", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 12) { + clearMenu(); + menuLine("6", "Fruit Blast", 2034, 0); + menuLine("8", "Pineapple Punch", 2036, 1); + menuLine("10", "Toad Crunchies", 2217, 2); + menuLine("12", "Spicy Crunchies", 2213, 3); + menuLine("14", "Worm Crunchies", 2237, 4); + menuLine("16", "Chocolate Chip Crunchies", 2239, 5); + menuLine("18", "Wizard Blizzard", 2040, 6); + menuLine("20", "Short Green Guy(SGG)", 2038, 7); + menuLine("25", "Fruit Batta", 2225, 8); + menuLine("26", "Toad Batta", 2221, 9); + menuLine("27", "Worm Batta", 2219, 10); + menuLine("28", "Vegetable Batta", 2227, 11); + menuLine("29", "Cheese and Tomato Batta", 2223, 12); + menuLine("30", "Worm Hole", 2191, 13); + menuLine("32", "Drunk Dragon", 2032, 14); + menuLine("33", "Chocolate Saturday", 2030, 15); + menuLine("35", "Vegetable Ball", 2195, 16); + menuLine("37", "Blurberry Special", 2028, 17); + menuLine("40", "Tangled Toads' Legs", 2187, 18); + menuLine("42", "Chocolate Bomb", 2185, 19); + optionTab("Cooking", "Gnome", "Meats", "Bread", "Pies", "Stews", + "Pizzas", "Cakes", "Wine", "Hot Drinks", "Brewing", + "Potatoes", "Diary", "Gnome", ""); + } + + else if (screen == 13) { + clearMenu(); + menuLine("32", "Chefs' Guild", 1949, 0); + optionTab("Cooking", "", "Meats", "Bread", "Pies", + "Stews", "Pizzas", "Cakes", "Wine", "Hot Drinks", + "Brewing", "Potatoes", "Diary", "Gnome", ""); + } + } + + /* + * Skill ID: 18 + * + * @param screen + * + * @return + */ + public void firemakingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Normal Logs", 1511, 0); + menuLine("1", "Torch", 596, 1); + menuLine("1", "Candle", 36, 2); + menuLine("1", "Achey Logs", 2862, 3); + menuLine("4", "Candle Lantern", 4527, 4); + menuLine("5", "Pyre Logs", 3438, 5); + menuLine("12", "Oil Lamp", 4522, 6); + menuLine("15", "Oak Logs", 1521, 7); + menuLine("20", "Iron Spit", 7225, 8); + menuLine("20", "Oak Pyre Logs", 3440, 9); + menuLine("26", "Oil Lantern", 4535, 10); + menuLine("30", "Willow Logs", 1519, 11); + menuLine("33", "Harpie Bug Lantern", 7051, 12); + menuLine("35", "Teak Logs", 6333, 13); + menuLine("35", "Willow Pyre Logs", 3442, 14); + menuLine("40", "Teak Pyre Logs", 6211, 15); + menuLine("45", "Maple Logs", 1517, 16); + menuLine("49", "Bullseye Lantern", 4546, 17); + menuLine("49", "Sapphire Lantern", 4700, 18); + menuLine("50", "Mahogany Logs", 6332, 19); + menuLine("50", "Maple Pyre Logs", 3444, 20); + menuLine("55", "Mahogany Pyre Logs", 6213, 21); + menuLine("60", "Yew Logs", 1515, 22); + menuLine("65", "Cave Goblin Mining Helmet", 5014, 23); + menuLine("65", "Yew Pyre Logs", 3446, 24); + menuLine("75", "Magic Logs", 1513, 25); + menuLine("80", "Magic Pyre Logs", 3448, 26); + optionTab("Firemaking", "Firemaking", "Firemaking", "Equipment", + "", "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Tinderbox", 590, 0); + optionTab("Firemaking", "Equipment", "Firemaking", "Equipment", + "", "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 19 + * + * @param screen + * + * @return + */ + public void woodcuttingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Normal Tree", 1511, 0); + menuLine("1", "Achey Tree", 2862, 1); + menuLine("10", "Light Jungle", 6281, 2); + menuLine("15", "Oak Tree", 1521, 3); + menuLine("20", "Medium Jungle", 6283, 4); + menuLine("30", "Willow Tree", 1519, 5); + menuLine("35", "Dense Jungle", 6285, 6); + menuLine("35", "Teak Tree", 6333, 7); + menuLine("45", "Maple Tree", 1517, 8); + menuLine("45", "Hollow Tree", 3239, 9); + menuLine("50", "Mahogany Tree", 6332, 10); + menuLine("60", "Yew Tree", 1515, 11); + menuLine("75", "Magic Tree", 1513, 12); + optionTab("Woodcutting", "Trees", "Trees", "Hatchets", "Canoes", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("1", "Bronze Axe", 1351, 0); + menuLine("1", "Iron Axe", 1349, 1); + menuLine("6", "Steel Axe", 1353, 2); + menuLine("6", "Black Axe", 1361, 3); + menuLine("21", "Mithril Axe", 1355, 4); + menuLine("31", "Adamant Axe", 1357, 5); + menuLine("41", "Rune Axe", 1359, 6); + menuLine("61", "Dragon Axe", 6739, 7); + optionTab("Woodcutting", "Hatchets", "Trees", "Hatchets", "Canoes", + "", "", "", "", "", "", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("12", "Log Canoe", 7414, 0); + menuLine("27", "Dugout Canoe", 7414, 1); + menuLine("42", "Stable Dugout Canoe", 7414, 2); + menuLine("57", "Waka Canoe", 7414, 3); + optionTab("Woodcutting", "Canoes", "Trees", "Hatchets", "Canoes", + "", "", "", "", "", "", "", "", "", ""); + } + } + + /* + * Skill ID: 20 + * + * @param screen + * + * @return + */ + public void farmingComplex(int screen) { + if (screen == 1) { + clearMenu(); + menuLine("1", "Potato", 1942, 0); + menuLine("5", "Onion", 1957, 1); + menuLine("7", "Cabbage", 1965, 2); + menuLine("12", "Tomato", 1982, 3); + menuLine("20", "Sweetcorn", 5986, 4); + menuLine("31", "Strawberry", 5504, 5); + menuLine("47", "Watermelon", 5982, 6); + optionTab("Farming", "Allotments", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 2) { + clearMenu(); + menuLine("3", "Barley", 6006, 0); + menuLine("4", "Hammerstone Hop", 5994, 1); + menuLine("8", "Asgarnian Hop", 5996, 2); + menuLine("13", "Jute Plant", 5931, 3); + menuLine("16", "Yanillian Hop", 5998, 4); + menuLine("21", "Krandorian Hop", 6000, 5); + menuLine("28", "Wildblood Hop", 6002, 6); + optionTab("Farming", "Allotments", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 3) { + clearMenu(); + menuLine("15", "Oak Tree", 1521, 0); + menuLine("30", "Willow Tree", 1519, 1); + menuLine("45", "Maple Tree", 1517, 2); + menuLine("60", "Yew Tree", 1515, 3); + menuLine("75", "Magic Tree", 1513, 4); + optionTab("Farming", "Trees", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 4) { + clearMenu(); + menuLine("27", "Apple Tree", 1955, 0); + menuLine("33", "Banana Tree", 1963, 1); + menuLine("39", "Orange Tree", 2108, 2); + menuLine("42", "Curry Tree", 5970, 3); + menuLine("51", "Pineapple Plant", 2114, 4); + menuLine("57", "Papaya Tree", 5972, 5); + menuLine("68", "Palm Tree", 5974, 6); + optionTab("Farming", "Fruit Trees", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 5) { + clearMenu(); + menuLine("10", "Redberry Bush", 1951, 0); + menuLine("22", "Cadavaberry Bush", 753, 1); + menuLine("36", "Dwellberry Bush", 2126, 2); + menuLine("48", "Jangerberry Bush", 247, 3); + menuLine("59", "White Berry Bush", 239, 4); + menuLine("70", "Poison Ivy Bush", 6018, 5); + optionTab("Farming", "Bushes", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 6) { + clearMenu(); + menuLine("2", "Marigold(Protects low level crops from Disease)", + 6010, 0); + menuLine("11", "Rosemary(Protects Cabbages from Disease)", 6014, 1); + menuLine("24", "Nasturtium(Protects Watermelons from Disease)", + 6012, 2); + menuLine("25", "Woad", 1793, 3); + menuLine("26", "Limpwurt", 225, 4); + optionTab("Farming", "Flowers", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 7) { + clearMenu(); + menuLine("9", "Guam", 249, 0); + menuLine("14", "Marrentill", 251, 1); + menuLine("19", "Tarromin", 253, 2); + menuLine("26", "Harralander", 255, 3); + menuLine("32", "Ranarr", 257, 4); + menuLine("38", "Toadflax", 2998, 5); + menuLine("44", "Irit", 259, 6); + menuLine("50", "Avantoe", 261, 7); + menuLine("56", "Kwuarm", 263, 8); + menuLine("62", "Snapdragon", 3000, 9); + menuLine("67", "Cadantine", 265, 10); + menuLine("73", "Lantadyme", 2481, 11); + menuLine("79", "Dwarf Weed", 267, 12); + menuLine("85", "Torstol", 269, 13); + optionTab("Farming", "Herbs", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 8) { + clearMenu(); + menuLine("55", "Cactus", 6016, 0); + menuLine("63", "Belladonna", 5281, 1); + menuLine("72", "Calquat Tree", 5980, 2); + menuLine("83", "Spirit Tree", 6063, 3); + optionTab("Farming", "Special", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + + else if (screen == 9) { + clearMenu(); + menuLine("23", "Able to make and place a scarecrow", 6059, 0); + menuLine("", "", 0, 1); + menuLine("", "Scarecrows help to stop sweetcorn from", 0, 2); + menuLine("", "being attacked by birds, while also", 0, 3); + menuLine("", "helping to prevent disease", 0, 4); + menuLine("", "", 0, 5); + menuLine("", "How to make a scarecrow:", 0, 6); + menuLine("", "", 0, 7); + menuLine("", "1.Fill an empty sack with straw.", 0, 8); + menuLine("", "2.Drive a hay sack onto a bronze spear", 0, 9); + menuLine("", "3.Place a watermelon at the top as a head", 0, 10); + menuLine("", "4.Stand the scarecrow in a flower patch", 0, 11); + optionTab("Farming", "Scarecrows", "Allotments", "Hops", "Trees", + "Fruit Trees", "Bushes", "Flowers", "Herbs", "Special", + "Scarecrows", "", "", "", ""); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/SkillMenu.java b/2006Redone Server/src/redone/game/content/skills/SkillMenu.java new file mode 100644 index 00000000..3f86dc68 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/SkillMenu.java @@ -0,0 +1,112 @@ +package redone.game.content.skills; + +import redone.game.players.Client; + +/** + * @author Sanity + */ + +public class SkillMenu { + + private static final int INTERFACE_ID = 8714; + private static final int LEVEL_LINE = 8720; + private static final int TEXT_LINE = 8760; + private static final int TITLE_LINE = 8716; + private static final int[][] items = { + { 1321, 1323, 1325, 1327, 1329, 1331, 1333, 4153, 4587, 4151, 4718, + 11694, 9747 }, + { 1117, 1115, 1119, 1125, 1121, 6916, 1123, 1127, 3751, 2513, + 10348, 11724, 11720, 4720, 11283, 9753 }, + { 4153, 6528, 9750 }, + { 9768 }, + { 841, 843, 849, 853, 857, 1135, 861, 2499, 11235, 6522, 2501, + 9185, 10330, 4214, 2503, 4734, 9756 }, { 9759 }, + { 4099, 6916, 6889, 7401, 3387, 4675, 10338, 4712 } }; + private static final String[][] LEVELS = { + { "1", "1", "5", "10", "20", "30", "40", "50", "60", "70", "70", + "75", "99" }, + { "1", "1", "5", "10", "20", "25", "30", "40", "45", "60", "65", + "65", "70", "70", "75", "99" }, + { "50", "60", "99" }, + { "99" }, + { "1", "5", "20", "30", "30", "40", "50", "50", "60", "60", "60", + "61", "65", "70", "70", "70", "99" }, { "99" }, + { "20", "25", "25", "40", "40", "50", "65", "70" } }; + + private static final String[][] DESCRIPTION = { + { "Bronze Weapons", "Iron Weapons", "Steel Weapons", + "Black Weapons", "Mithril Weapons", "Adamant Weapons", + "Rune Weapons", "Granite Maul", "Dragon Weapons", + "Abyssal Whip", "Barrows Weapons", "Godswords", + "Cape of Achievement" }, + { "Bronze Armour", "Iron Armour", "Steel Armour", "Black Armour", + "Mithril Armour", "Infinity", "Adamant Armour", + "Rune Armour", "Fremennik Helmets", "Dragon Armour", + "3rd Age Armour", "Bandos", "Armadyl", "Barrows Armour", + "Dragonfire Shield", "Cape of Achievement" }, + { "Granite Items", "Obby Maul", "Cape of Achievement" }, + { "Cape of Achievement" }, + { "Normal Bows", "Oak Bows", "Willow Bows", "Maple Bows", + "Yew Bows", "Green D'hide", "Magic Bows", "Blue D'hide", + "Dark Bow", "Obby Ring", "Red D'hide", "Rune C'bow", + "3rd age Range", "Crystal Bow", "Black D'hide", "Karil's", + "Cape of Achievement" }, + { "Cape of Achievement" }, + { "Mystic ", "Infinity ", "Mage's book", "Enchanted ", + "Splitbark ", "Ancient staff", "3rd age mage", "Ahrims" } }; + + private static final String[] SKILLS = { "Attack", "Defence", "Strength", + "Hitpoints", "Ranged", "Prayer", "Magic" }; + + public static void openInterface(Client c, int skillType) { + removeSidebars(c); + writeItems(c, skillType); + writeText(c, skillType); + c.getPlayerAssistant().showInterface(INTERFACE_ID); + } + + private static void removeSidebars(Client c) { + int[] temp = { 8849, 8846, 8823, 8824, 8827, 8837, 8840, 8843, 8859, + 8862, 8865, 15303, 15306, 15309 }; + for (int element : temp) { + c.getPlayerAssistant().sendFrame126("", element); + } + } + + private static void writeItems(Client c, int skillType) { + synchronized (c) { + c.outStream.createFrameVarSizeWord(53); + c.outStream.writeWord(8847); + c.outStream.writeWord(items[skillType].length); + for (int j = 0; j < items[skillType].length; j++) { + c.outStream.writeByte(1); + if (items[skillType][j] > 0) { + c.outStream.writeWordBigEndianA(items[skillType][j] + 1); + } else { + c.outStream.writeWordBigEndianA(0); + } + } + c.outStream.endFrameVarSizeWord(); + c.flushOutStream(); + } + } + + private static void writeText(Client c, int skillType) { + c.getPlayerAssistant().sendFrame126(SKILLS[skillType], TITLE_LINE); + for (int j = 0; j < LEVELS[skillType].length; j++) { + c.getPlayerAssistant().sendFrame126(LEVELS[skillType][j], + LEVEL_LINE + j); + } + for (int j = 0; j < DESCRIPTION[skillType].length; j++) { + c.getPlayerAssistant().sendFrame126(DESCRIPTION[skillType][j], + TEXT_LINE + j); + } + + for (int j = DESCRIPTION[skillType].length; j < 30; j++) { + c.getPlayerAssistant().sendFrame126("", LEVEL_LINE + j); + } + for (int j = LEVELS[skillType].length; j < 30; j++) { + c.getPlayerAssistant().sendFrame126("", TEXT_LINE + j); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/Agility.java b/2006Redone Server/src/redone/game/content/skills/agility/Agility.java new file mode 100644 index 00000000..004212c9 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/Agility.java @@ -0,0 +1,702 @@ +package redone.game.content.skills.agility; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class Agility { + + /** + * @author Aintaro + */ + + Client c; + + public Agility(Client c) { + this.c = c; + } + + public boolean[] agilityProgress = new boolean[6]; + + public void resetAgilityProgress() { + for (int i = 0; i < 6; i++) { + agilityProgress[i] = false; + } + lapBonus = 0; + } + + public static final int LOG_EMOTE = 762, PIPES_EMOTE = 844, + CLIMB_UP_EMOTE = 828, CLIMB_DOWN_EMOTE = 827, + CLIMB_UP_MONKEY_EMOTE = 3487, WALL_EMOTE = 840; + public int steppingStone, steppingStoneTimer = 0, agilityTimer = -1, + moveHeight = -1, tropicalTreeUpdate = -1, zipLine = -1; + private int moveX, moveY, moveH; + + /** + * sets a specific emote to walk to point x + */ + + private void walkToEmote(int id) { + c.isRunning2 = false; + c.playerWalkIndex = id; + c.getPlayerAssistant().requestUpdates(); // this was needed to make the + // agility work + } + + /** + * resets the player animation + */ + + private void stopEmote() { + c.getCombatAssistant().getPlayerAnimIndex(); + c.getPlayerAction().setAction(false); + c.getPlayerAction().canWalk(true); + c.getPlayerAssistant().requestUpdates(); // this was needed to make the + // agility work + c.isRunning2 = true; + } + + private static void setAnimationBack(Client c) { + c.isRunning2 = true; + c.getPlayerAssistant().sendConfig(173, 1); + c.playerWalkIndex = 0x333; + c.getPlayerAssistant().requestUpdates(); + } + + /** + * walk to point x with s a specific animation + */ + + public void walk(int EndX, int EndY, int Emote, int endingAnimation) { + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + walkToEmote(Emote); + c.getPlayerAssistant().walkTo2(EndX, EndY); + destinationReached(EndX, EndY, endingAnimation); + } + + public static void brimhavenSkippingStone(final Client c) { + if (c.stopPlayerPacket) { + return; + } + if (c.playerLevel[c.playerAgility] < 12) { + c.getDialogueHandler().sendStatement("You need 12 agility to use these stepping stones"); + c.nextChat = 0; + return; + } + c.stopPlayerPacket = true; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.startAnimation(769); + if (c.absX <= 2997) { + container.stop(); + } + } + + @Override + public void stop() { + // c.getPlayerAssistant().addSkillXP(100, c.playerAgility); + } + }, 1); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.absX >= 2648) { + c.teleportToX = c.absX - 2; + c.teleportToY = c.absY - 5; + if (c.absX <= 2997) { + container.stop(); + } + } else if (c.absX <= 2648) { + c.teleportToX = c.absX + 2; + c.teleportToY = c.absY + 5; + if (c.absX >= 2645) { + container.stop(); + } + } + + } + + @Override + public void stop() { + // c.getPlayerAssistant().addSkillXP(300, c.playerAgility); + setAnimationBack(c); + c.stopPlayerPacket = false; + } + }, 3); + } + + /** + * when a player reaches he's point the stopEmote() method gets called this + * method calculates when the player reached he's point + */ + + public void destinationReached(int x2, int y2, final int endingEmote) { + if (x2 >= 0 && y2 >= 0 && x2 != y2) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + if (moveHeight >= 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY(), moveHeight); + moveHeight = -1; + } + stopEmote(); + c.startAnimation(endingEmote); + container.stop(); + } + @Override + public void stop() { + + } + }, x2 + y2); + } else if (x2 == y2) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + if (moveHeight >= 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY(), moveHeight); + moveHeight = -1; + } + stopEmote(); + c.startAnimation(endingEmote); + container.stop(); + } + @Override + public void stop() { + + } + }, x2); + } else if (x2 < 0) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + if (moveHeight >= 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY(), moveHeight); + moveHeight = -1; + + } + stopEmote(); + c.startAnimation(endingEmote); + container.stop(); + } + @Override + public void stop() { + + } + }, -x2 + y2); + } else if (y2 < 0) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + if (moveHeight >= 0) { + c.getPlayerAssistant().movePlayer(c.getX(), c.getY(), moveHeight); + moveHeight = -1; + + } + stopEmote(); + c.startAnimation(endingEmote); + container.stop(); + } + @Override + public void stop() { + + } + }, x2 - y2); + } + } + + /** + * @param objectId + * : the objectId to know how much exp a player receives + */ + + public double getXp(int objectId) { + switch (objectId) { + case GnomeAgility.TREE_OBJECT: + case GnomeAgility.TREE_BRANCH_OBJECT: + return 5; + case GnomeAgility.LOG_OBJECT: + case GnomeAgility.PIPES1_OBJECT: + case GnomeAgility.PIPES2_OBJECT: + case GnomeAgility.NET2_OBJECT: + case GnomeAgility.NET1_OBJECT: + case GnomeAgility.ROPE_OBJECT: + return 7.5; + case PyramidAgility.PYRAMID_WALL_OBJECT: + case BarbarianAgility.BARBARIAN_NET_OBJECT: + return 8; + case WildernessAgility.WILDERNESS_PIPE_OBJECT: + return 12; + case WildernessAgility.WILDERNESS_SWING_ROPE_OBJECT: + case WildernessAgility.WILDERNESS_STEPPING_STONE_OBJECT: + case WildernessAgility.WILDERNESS_LOG_BALANCE_OBJECT: + return 20; + case WildernessAgility.WILDERNESS_ROCKS_OBJECT: + return 0; + case BarbarianAgility.BARBARIAN_LOG_OBJECT: + case BarbarianAgility.BARBARIAN_WALL_OBJECT: + return 14; + case WerewolfAgility.WEREWOLF_PIPES_OBJECT: + return 15; + case WerewolfAgility.WEREWOLF_SKULL_OBJECT: + return 25; + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT1: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT2: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT3: + return 20; + case BarbarianAgility.BARBARIAN_ROPE_SWING_OBJECT: + case BarbarianAgility.BARBARIAN_LEDGE_OBJECT: + return 22; + case WerewolfAgility.WEREWOLF_STEPPING_STONE_OBJECT: + return 50; + case PyramidAgility.PYRAMID_GAP_OBJECT: + case PyramidAgility.PYRAMID_GAP_2: + case PyramidAgility.PYRAMID_GAP_3: + case PyramidAgility.PYRAMID_GAP_4: + case PyramidAgility.PYRAMID_GAP_5: + return 52; + case PyramidAgility.PYRAMID_PLANK_OBJECT: + return 56; + case WerewolfAgility.WEREWOLF_SLING_OBJECT: + return 190; + } + return -1; + } + + /** + * @param objectId + * : the objectId to fit with the right agility level required + */ + + private int getLevelRequired(int objectId) { + switch (objectId) { + case PyramidAgility.PYRAMID_WALL_OBJECT: + case PyramidAgility.PYRAMID_STAIRCE_OBJECT: + case PyramidAgility.PYRAMID_PLANK_OBJECT: + case PyramidAgility.PYRAMID_GAP_OBJECT: + case PyramidAgility.PYRAMID_GAP_2: + case PyramidAgility.PYRAMID_GAP_3: + case PyramidAgility.PYRAMID_GAP_4: + case PyramidAgility.PYRAMID_GAP_5: + case PyramidAgility.LEDGE: + case PyramidAgility.LEDGE_2: + case PyramidAgility.LEDGE_3: + case PyramidAgility.PYRAMID_ROCKS: + return 30; + case BarbarianAgility.BARBARIAN_ROPE_SWING_OBJECT: + case BarbarianAgility.BARBARIAN_LOG_OBJECT: + case BarbarianAgility.BARBARIAN_NET_OBJECT: + case BarbarianAgility.BARBARIAN_LEDGE_OBJECT: + case BarbarianAgility.BARBARIAN_WALL_OBJECT: + return 35; + + case ApeAtollAgility.APE_ATOLL_STEPPING_STONES_OBJECT: + case ApeAtollAgility.APE_ATOLL_TROPICAL_TREE_OBJECT: + case ApeAtollAgility.APE_ATOLL_MONKEYBARS_OBJECT: + case ApeAtollAgility.APE_ATOLL_SKULL_SLOPE_OBJECT: + case ApeAtollAgility.APE_ATOLL_SWINGROPE_OBJECT: + case ApeAtollAgility.APE_ATOLL_BIG_TROPICAL_TREE_OBJECT: + return 50; + + case WildernessAgility.WILDERNESS_PIPE_OBJECT: + case WildernessAgility.WILDERNESS_SWING_ROPE_OBJECT: + case WildernessAgility.WILDERNESS_STEPPING_STONE_OBJECT: + case WildernessAgility.WILDERNESS_ROCKS_OBJECT: + case WildernessAgility.WILDERNESS_LOG_BALANCE_OBJECT: + return 52; + + case WerewolfAgility.WEREWOLF_STEPPING_STONE_OBJECT: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT1: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT2: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT3: + case WerewolfAgility.WEREWOLF_PIPES_OBJECT: + case WerewolfAgility.WEREWOLF_SKULL_OBJECT: + case WerewolfAgility.WEREWOLF_SLING_OBJECT: + return 60; + } + return -1; + } + + /** + * @param objectId + * : the objectId to fit with the right animation played + */ + + public int getAnimation(int objectId) { + switch (objectId) { + case GnomeAgility.LOG_OBJECT: + case WildernessAgility.WILDERNESS_LOG_BALANCE_OBJECT: + case BarbarianAgility.BARBARIAN_LOG_OBJECT: + case GnomeAgility.ROPE_OBJECT: + case 2332: + return LOG_EMOTE; + case 154: + case 4084: + case 9330: + case 9228: + case 5100: + case WildernessAgility.WILDERNESS_PIPE_OBJECT: + case WerewolfAgility.WEREWOLF_PIPES_OBJECT: + return PIPES_EMOTE; + case WildernessAgility.WILDERNESS_SWING_ROPE_OBJECT: + case BarbarianAgility.BARBARIAN_ROPE_SWING_OBJECT: + case WerewolfAgility.WEREWOLF_STEPPING_STONE_OBJECT: + return 3067; + case WildernessAgility.WILDERNESS_STEPPING_STONE_OBJECT: + return 1604; // 2588 + case WildernessAgility.WILDERNESS_ROCKS_OBJECT: + case WerewolfAgility.WEREWOLF_SKULL_OBJECT: + case PyramidAgility.PYRAMID_ROCKS: + return 1148; + case BarbarianAgility.BARBARIAN_LEDGE_OBJECT: + case PyramidAgility.LEDGE: + case PyramidAgility.LEDGE_2: + case PyramidAgility.LEDGE_3: + return 756; + case BarbarianAgility.BARBARIAN_WALL_OBJECT: + case PyramidAgility.PYRAMID_WALL_OBJECT: + return WALL_EMOTE; + case ApeAtollAgility.APE_ATOLL_STEPPING_STONES_OBJECT: + return 3480; + case ApeAtollAgility.APE_ATOLL_MONKEYBARS_OBJECT: + return 3483; + case ApeAtollAgility.APE_ATOLL_SKULL_SLOPE_OBJECT: + return 3485; + case ApeAtollAgility.APE_ATOLL_BIG_TROPICAL_TREE_OBJECT: + return 3494; + case ApeAtollAgility.APE_ATOLL_SWINGROPE_OBJECT: + return 3482; + case WerewolfAgility.WEREWOLF_SLING_OBJECT: + return 744; + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT1: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT2: + case WerewolfAgility.WEREWOLF_HURDLE_OBJECT3: + return 2750; + } + return -1; + } + + /** + * method used for the tropicalTree at ape atoll the problem was that the + * heightlevel was not correct while the heightlevel was not correct we + * could not change heightlevels and use the walkToEmote directly so we need + * to add a little timer to make it work + */ + + public void climbUpTropicalTree(final int moveX, final int moveY, final int moveH) { + c.startAnimation(CLIMB_UP_MONKEY_EMOTE); + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAction().setAction(false); + c.getPlayerAction().canWalk(true); + c.getPlayerAssistant().movePlayer(moveX, moveY, moveH); + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + } + + /** + * climbUp a ladder or anything. small delay before getting teleported to + * destination + */ + + public void climbUp(final int moveX, final int moveY, final int moveH) { + c.startAnimation(CLIMB_UP_EMOTE); + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + stop(); + return; + } + c.getPlayerAction().setAction(false); + c.getPlayerAction().canWalk(true); + c.getPlayerAssistant().movePlayer(moveX, moveY, moveH); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + + /** + * climbDown a ladder or anything. small delay before getting teleported to + * destination + */ + + public void climbDown(final int moveX, final int moveY, final int moveH) { + c.startAnimation(CLIMB_DOWN_EMOTE); + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + stop(); + return; + } + c.getPlayerAction().setAction(false); + c.getPlayerAction().canWalk(true); + c.getPlayerAssistant().movePlayer(moveX, moveY, moveH); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + + /** + * a specific position the player has to stand on before the action is set + * to true + */ + + public boolean hotSpot(int hotX, int hotY) { + if (c.getX() == hotX && c.getY() == hotY) { + return true; + } + return false; + } + + int lapBonus = 0; + + public void lapFinished() { + if (agilityProgress[5]) { + c.getPlayerAssistant().addSkillXP(lapBonus, c.playerAgility); + c.getActionSender().sendMessage("You received some bonus experience for completing the track!"); + resetAgilityProgress(); + } + } + + /** + * 600 ms process for some agility actions + */ + + public void agilityProcess() { + // tropicaltreeupdate timer for the object in ape atoll course + if (tropicalTreeUpdate > 0) { + tropicalTreeUpdate--; + } + if (tropicalTreeUpdate == 0) { + walk(13, + 13, + getAnimation(ApeAtollAgility.APE_ATOLL_BIG_TROPICAL_TREE_OBJECT), + -1); + tropicalTreeUpdate = -1; + } + // zipline timer for the object in werewolve course + if (zipLine > 0) { + zipLine--; + } + if (zipLine == 0) { + walk(0, -39, getAnimation(WerewolfAgility.WEREWOLF_SLING_OBJECT), + 743); + zipLine = -1; + } + + if (steppingStone > 0 && steppingStoneTimer == 0) { + walk(-1, + 0, + getAnimation(WildernessAgility.WILDERNESS_STEPPING_STONE_OBJECT), + -1); + steppingStone--; + steppingStoneTimer = 2; + } + + if (steppingStoneTimer > 0) { + steppingStoneTimer--; + } + + if (hotSpot(3363, 2851)) { + moveX = 3368; + moveY = 2851; + moveH = 1; + walk(1, 0, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3372, 2832)) { + moveX = 3367; + moveY = 2832; + moveH = 1; + walk(-1, 0, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3364, 2832)) { + moveX = 3359; + moveY = 2832; + moveH = 1; + walk(-1, 0, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3357, 2836)) { + moveX = 3357; + moveY = 2841; + moveH = 2; + walk(0, 1, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3357, 2846)) { + moveX = 3357; + moveY = 2849; + moveH = 2; + walk(0, 1, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3359, 2849)) { + moveX = 3366; + moveY = 2849; + moveH = 2; + walk(1, 0, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3372, 2841)) { + moveX = 3372; + moveY = 2836; + moveH = 2; + walk(0, -1, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3366, 2834)) { + moveX = 3363; + moveY = 2834; + moveH = 2; + walk(-1, 0, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3359, 2842)) { + moveX = 3359; + moveY = 2847; + moveH = 3; + walk(0, 1, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + agilityTimer = 2; + } + + if (hotSpot(3370, 2843)) { + moveX = 3370; + moveY = 2840; + moveH = 3; + walk(0, -1, 2753, -1); + c.getPlayerAssistant().addSkillXP(14, c.playerAgility); + } + + if (agilityTimer > 0) { + agilityTimer--; + } + + if (agilityTimer == 0) { + c.getPlayerAssistant().movePlayer(moveX, moveY, moveH); + moveX = -1; + moveY = -1; + moveH = 0; + agilityTimer = -1; + System.out.println("Bam"); + } + + } + + public boolean checkLevel(int objectId) { + if (getLevelRequired(objectId) > c.playerLevel[c.playerAgility]) { + c.getActionSender().sendMessage( + "You need atleast " + getLevelRequired(objectId) + + " agility to do this."); + return true; + } + return false; + } + + static int changeObjectTimer = 10; + static int rndChance; + static int newObjectX, newObjectY; + + public static void Brimhavenprocess() { + if (changeObjectTimer > 0) { + changeObjectTimer--; + } + if (changeObjectTimer == 0) { + rndChance = Misc.random(3); + if (rndChance == 0) { + newObjectX = 2794; + newObjectY = 9579; + } else if (rndChance == 1) { + newObjectX = 2783; + newObjectY = 9579; + } else if (rndChance == 2) { + newObjectX = 2783; + newObjectY = 9568; + } else if (rndChance == 3) { + newObjectX = 2794; + newObjectY = 9568; + } + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + c.getActionSender().createObjectHints(newObjectX, + newObjectY, 130, 2); + System.out.println("Updated"); + } + } + changeObjectTimer = 10; + } + } + + public static double getAgilityRunRestore(Client c) { + return 2260 - c.playerLevel[Constants.AGILITY] * 10; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/AgilityShortcut.java b/2006Redone Server/src/redone/game/content/skills/agility/AgilityShortcut.java new file mode 100644 index 00000000..53caacbd --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/AgilityShortcut.java @@ -0,0 +1,251 @@ +package redone.game.content.skills.agility; + +import redone.game.players.Client; + +/** + * Agility Shortcuts + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class AgilityShortcut { + + private static final int WALK = 1, MOVE = 2, AGILITY = 3; + + private static void handleAgility(Client client, int x, int y, int levelReq, int anim, int walk, String message) { + if (client.playerLevel[client.playerAgility] < levelReq) { + client.getActionSender().sendMessage("You need " + levelReq + " agility to use this shortcut."); + return; + } + switch (walk) { + case 1: + client.getPlayerAssistant().walkTo(x, y); + break; + case 2: + client.getPlayerAssistant().movePlayer(x, y, client.heightLevel); + break; + case 3: + client.getAgility().walk(x, y, anim, -1); + break; + } + if (anim != 0 && anim != -1) { + client.startAnimation(anim); + } + client.getActionSender().sendMessage(message); + } + + public static void processAgilityShortcut(Client client) { + switch (client.objectId) { + case 993: + if (client.absY == 3435) { + handleAgility(client, 2761, 3438, 1, 3067, MOVE, "You jump over the stile."); + } else if (client.absY == 3438) { + handleAgility(client, 2761, 3435, 1, 3067, MOVE, "You jump over the stile."); + } + break; + case 9326: + if (client.absX == 2773) { + handleAgility(client, 2, 0, 81, 3067, WALK, "You jump over the strange floor."); + } else if (client.absX == 2775) { + handleAgility(client, -2, 0, 81, 3067, WALK, "You jump over the strange floor."); + } + break; + case 9321: + if (client.absX == 2735) { + handleAgility(client, -5, 0, 62, 2240, WALK, "You squeeze through the crevice."); + } else if (client.absX == 2730) { + handleAgility(client, 5, 0, 62, 2240, WALK, "You squeeze through the crevice."); + } + break; + case 12127: + if (client.absY == 4403) { + handleAgility(client, 0, -2, 66, 2240, WALK, + "You squeeze past the jutted wall."); + } else if (client.absY == 4401) { + handleAgility(client, 0, 2, 66, 2240, WALK, + "You squeeze past the jutted wall."); + } else if (client.absY == 4404) { + handleAgility(client, 0, -2, 46, 2240, WALK, + "You squeeze past the jutted wall."); + } else if (client.absY == 4402) { + handleAgility(client, 0, 2, 46, 2240, WALK, + "You squeeze past the jutted wall."); + } + break; + case 3933: + if (client.absY == 3232) { + handleAgility(client, 0, 7, 85, 762, WALK, + "You pass through the agility shortcut."); + } else if (client.absY == 3239) { + handleAgility(client, 0, -7, 85, 762, WALK, + "You pass through the agility shortcut."); + } + break; + case 4615: + case 4616: + if (client.absX == 2595) { + handleAgility(client, 2599, client.absY, 1, 3067, MOVE, + "You pass through the agility shortcut."); + } else if (client.absX == 2599) { + handleAgility(client, 2595, client.absY, 1, 3067, MOVE, + "You pass through the agility shortcut."); + } + break; + case 11844: + if (client.absX == 2936) { + handleAgility(client, -2, 0, 5, -1, WALK, + "You pass through the agility shortcut."); + } else if (client.absX == 2934) { + handleAgility(client, 2, 0, 5, -1, WALK, + "You pass through the agility shortcut."); + } + break; + case 5090: + if (client.absX == 2687) {// 2682, 9506 + handleAgility(client, -5, 0, 5, 762, WALK, + "You walk across the log balance."); + } + break; + case 5088: + if (client.absX == 2682) {// 2867, 9506 + handleAgility(client, 5, 0, 5, 762, WALK, + "You walk across the log balance."); + } + break; + case 14922: + if (client.objectX == 2344 && client.objectY == 3651) { + handleAgility(client, 2344, 3655, 1, 762, MOVE, + "You crawl through the hole."); + } else if (client.objectX == 2344 && client.objectY == 3654) { + handleAgility(client, 2344, 3650, 1, 762, MOVE, + "You crawl through the hole."); + } + break; + case 9330: + if (client.objectX == 2601 && client.objectY == 3336) { + handleAgility(client, -4, 0, 33, client.getAgility() + .getAnimation(Agility.PIPES_EMOTE), AGILITY, + "You pass through the agility shortcut."); + } + case 5100: + if (client.absY == 9566) { + handleAgility(client, 2655, 9573, 17, 762, MOVE, + "You pass through the agility shortcut."); + } else if (client.absY == 9573) { + handleAgility(client, 2655, 9573, 17, 762, MOVE, + "You pass through the agility shortcut."); + } + break; + case 9328: + if (client.objectX == 2599 && client.objectY == 3336) { + handleAgility(client, 4, 0, 33, client.getAgility() + .getAnimation(Agility.PIPES_EMOTE), AGILITY, + "You pass through the agility shortcut."); + } + break; + + case 9293: + if (client.absX < client.objectX) { + handleAgility(client, 2892, 9799, 70, client.getAgility() + .getAnimation(Agility.PIPES_EMOTE), MOVE, + "You pass through the agility shortcut."); + } else { + handleAgility(client, 2886, 9799, 70, client.getAgility() + .getAnimation(Agility.PIPES_EMOTE), MOVE, + "You pass through the agility shortcut."); + } + break; + + case 9294: + if (client.absX < client.objectX) { + client.getPlayerAssistant().movePlayer(client.objectX + 1, + client.absY, 0); + handleAgility(client, 2880, 9713, 80, 3067, MOVE, + "You jump over the strange wall."); + } else if (client.absX > client.objectX) { + handleAgility(client, 2878, 9713, 80, 3067, MOVE, + "You jump over the strange wall."); + } + break; + + case 9302: + if (client.absY == 3112) { + handleAgility(client, 2575, 3107, 16, 844, MOVE, + "You pass through the agility shortcut."); + } + break; + + case 9301: + if (client.absY == 3107) { + handleAgility(client, 2575, 3112, 16, 844, MOVE, + "You pass through the agility shortcut."); + } + break; + case 9309: + if (client.absY == 3309) { + handleAgility(client, 2948, 3313, 26, 844, MOVE, + "You pass through the agility shortcut."); + } + break; + case 9310: + if (client.absY == 3313) { + handleAgility(client, 2948, 3309, 26, 844, MOVE, + "You pass through the agility shortcut."); + } + break; + case 2322: + if (client.absX == 2709) { + handleAgility(client, 2704, 3209, 10, 3067, MOVE, + "You pass through the agility shortcut."); + } + break; + case 2323: + if (client.absX == 2705) { + handleAgility(client, 2709, 3205, 10, 3067, MOVE, + "You pass through the agility shortcut."); + } + break; + case 2332: + if (client.absX == 2906) { + handleAgility(client, 4, 0, 1, 762, WALK, + "You pass through the agility shortcut."); + } else if (client.absX == 2910) { + handleAgility(client, -4, 0, 1, 762, WALK, + "You pass through the agility shortcut."); + } + break; + case 3067: + if (client.absX == 2639) { + handleAgility(client, -1, 0, 1, 3067, WALK, + "You pass through the agility shortcut."); + } else if (client.absX == 2638) { + handleAgility(client, -1, 0, 1, 3067, WALK, + "You pass through the agility shortcut."); + } + break; + case 2618: + if (client.absY == 3492) { + handleAgility(client, 0, +2, 1, 3067, WALK, + "You jump over the broken fence."); + } else if (client.absY == 3494) { + handleAgility(client, -0, -2, 1, 3067, WALK, + "You jump over the broken fence."); + } + break; + case 5110: + Agility.brimhavenSkippingStone(client); + break; + case 5111: + Agility.brimhavenSkippingStone(client); + break; + case 2296: + if (client.absX == 2603) { + handleAgility(client, -5, 0, 1, -1, WALK, + "You pass through the agility shortcut."); + } else if (client.absX == 2598) { + handleAgility(client, 5, 0, 1, -1, WALK, + "You pass through the agility shortcut."); + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/ApeAtollAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/ApeAtollAgility.java new file mode 100644 index 00000000..a39d24b8 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/ApeAtollAgility.java @@ -0,0 +1,175 @@ +package redone.game.content.skills.agility; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class ApeAtollAgility { + + private final Client c; + + public ApeAtollAgility(Client c) { + this.c = c; + } + + public static final int APE_ATOLL_STEPPING_STONES_OBJECT = 12568, + APE_ATOLL_TROPICAL_TREE_OBJECT = 12570, + APE_ATOLL_MONKEYBARS_OBJECT = 12573, + APE_ATOLL_SKULL_SLOPE_OBJECT = 12576, + APE_ATOLL_SWINGROPE_OBJECT = 12578, + APE_ATOLL_BIG_TROPICAL_TREE_OBJECT = 12618; + private static int NINJA_MONKEY_NPC = 1480; + + public boolean apeAtollCourse(int objectId) { + switch (objectId) { + case APE_ATOLL_STEPPING_STONES_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2755, 2742)) { + c.getActionSender().sendMessage("You jump the step stone."); + c.getAgility().walk(-2, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } + return true; + + case APE_ATOLL_TROPICAL_TREE_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2753, 2742) && c.heightLevel == 0) { + c.getActionSender().sendMessage( + "You managed to climb up the Tree."); + c.getAgility().climbUpTropicalTree(c.getX(), c.getY(), 2); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[0] == true) { + c.getAgility().agilityProgress[1] = true; + } + } + return true; + + case APE_ATOLL_MONKEYBARS_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2752, 2741)) { + c.getActionSender().sendMessage( + "You swing yourself to the other side"); + c.getAgility().moveHeight = 0; + c.getAgility().walk(-5, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + } + return true; + + case APE_ATOLL_SKULL_SLOPE_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2747, 2741)) { + c.getAgility().walk(-5, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getActionSender().sendMessage("You climb your way up"); + if (c.getAgility().agilityProgress[2] == true) { + c.getAgility().agilityProgress[3] = true; + } + } + return true; + + case APE_ATOLL_SWINGROPE_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2751, 2731)) { + c.getAgility().walk(1, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[3] == true) { + c.getAgility().agilityProgress[4] = true; + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(2756, 2731, 0); + c.getActionSender().sendMessage( + "You swing yourself to the other side"); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + return true; + + case APE_ATOLL_BIG_TROPICAL_TREE_OBJECT: + if (c.npcId2 != NINJA_MONKEY_NPC) { + c.getActionSender().sendMessage( + "You can't do that! You aren't a monkey."); + return false; + } + if (c.getAgility().checkLevel(objectId)) { + return false; + } + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + c.getPlayerAssistant().movePlayer(c.getX(), c.getY() + 1, 1); + c.getAgility().tropicalTreeUpdate = 2; + c.getAgility().moveHeight = 0; + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), + c.playerAgility); + if (c.getAgility().agilityProgress[4] == true) { + c.getAgility().agilityProgress[5] = true; + } + c.getAgility().lapBonus = 2700; + c.getAgility().lapFinished(); + c.getAgility().resetAgilityProgress(); + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/BarbarianAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/BarbarianAgility.java new file mode 100644 index 00000000..f015010d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/BarbarianAgility.java @@ -0,0 +1,154 @@ +package redone.game.content.skills.agility; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class BarbarianAgility { + + private final Client c; + + public BarbarianAgility(Client c) { + this.c = c; + } + + public static final int BARBARIAN_ROPE_SWING_OBJECT = 2282, + BARBARIAN_LOG_OBJECT = 2294, BARBARIAN_NET_OBJECT = 2284, + BARBARIAN_LEDGE_OBJECT = 2302, BARBARIAN_LADDER_OBJECT = 3205, + BARBARIAN_WALL_OBJECT = 1948; // barbarian course objects + + public boolean barbarianCourse(int objectId) { + switch (objectId) { + case BARBARIAN_ROPE_SWING_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2551, 3554)) { + c.getAgility().walk(0, -1, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(2551, 3549, 0); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + return true; + + case BARBARIAN_LOG_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2551, 3546)) { + c.getAgility().walk(-10, 0, c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[0] == true) { + c.getAgility().agilityProgress[1] = true; + } + } else if (c.absX < 2551 && c.absX > 2541) { + c.getPlayerAssistant().movePlayer(2541, 3546, 0); + } + return true; + + case BARBARIAN_NET_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.absX == 2539 && c.absY > 3544 && c.absY < 3547) { + c.getAgility().climbUp(c.getX() - 1, c.getY(), 1); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), + c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + } else { + c.getActionSender().sendMessage("You can't climb the net from here!"); + return false; + } + return true; + + case BARBARIAN_LEDGE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2536, 3547)) { + c.getAgility().walk(-4, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[2] == true) { + c.getAgility().agilityProgress[3] = true; + } + } else if (c.absX < 2536 && c.absX > 2532) { + c.getPlayerAssistant().movePlayer(2532, 3547, 1); + } + return true; + + case BARBARIAN_LADDER_OBJECT: + if (c.playerLevel[c.playerAgility] < 35 && c.objectX != 2776 + && c.objectY != 3121) { + c.getActionSender().sendMessage( + "You need 35 agility to use this ladder."); + return false; + } else if (c.objectX == 2776 && c.objectY == 3121) { + return true; + } + c.getAgility().climbDown(c.getX(), c.getY(), 0); + c.getActionSender().sendMessage("You climb down."); + if (c.getAgility().agilityProgress[3] == true) { + c.getAgility().agilityProgress[4] = true; + } + return true; + + case BARBARIAN_WALL_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(2541, 3553)) { + c.getAgility().walk(2, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[4] == true) { + c.getAgility().agilityProgress[5] = true; + } + if (c.getAgility().agilityProgress[5] == true) { + c.getAgility().lapBonus = 1700 / 30; + c.getAgility().lapFinished(); + c.getAgility().resetAgilityProgress(); + } + return true; + } else if (c.absX == 2540 && c.absY == 3553) { + c.getAgility().walk(3, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } else if (c.absX == 2542 && c.absY == 3553) { + c.getAgility().walk(1, 0, + c.getAgility().getAnimation(objectId), -1); + } else if (c.absX == 2535 && c.absY == 3553 || c.absX == 2538 + && c.absY == 3553) { + c.getAgility().walk(2, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + return true; + } + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/GnomeAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/GnomeAgility.java new file mode 100644 index 00000000..0051bbb1 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/GnomeAgility.java @@ -0,0 +1,125 @@ +package redone.game.content.skills.agility; + +import redone.game.players.Client; + +public class GnomeAgility { + + private final Client c; + + public GnomeAgility(Client c) { + this.c = c; + } + + private static long clickTimer = 0; + + public static final int LOG_OBJECT = 2295, NET1_OBJECT = 2285, + TREE_OBJECT = 2313, ROPE_OBJECT = 2312, TREE_BRANCH_OBJECT = 2314, + NET2_OBJECT = 2286, PIPES1_OBJECT = 154, PIPES2_OBJECT = 4058;// gnome + // course + // objects + + public boolean gnomeCourse(int objectId) { + switch (objectId) { + case LOG_OBJECT: + if (c.getAgility().hotSpot(2474, 3436)) { + c.getAgility().walk(0, -7, c.getAgility().getAnimation(objectId), -1); + } else if (c.absX == 2474 && c.absY > 3429 && c.absY < 3436) { + c.getPlayerAssistant().movePlayer(2474, 3429, 0); + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + return true; + + case NET1_OBJECT: + c.getAgility().climbUp(c.getX(), c.getY() - 2, 1); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[0] == true) { + c.getAgility().agilityProgress[1] = true; + } + return true; + + case TREE_OBJECT: + c.getAgility().climbUp(c.getX(), c.getY() - 3, 2); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + return true; + + case ROPE_OBJECT: + if (c.getAgility().hotSpot(2477, 3420)) { + c.getAgility().walk(6, 0, c.getAgility().getAnimation(objectId), -1); + } else if (c.absY == 3420 && c.absX > 2477 && c.absX < 2483) {// makes + // sure + // they + // don't + // cheat + c.getPlayerAssistant().movePlayer(2483, 3420, 2); + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[2] == true) { + c.getAgility().agilityProgress[3] = true; + } + return true; + + case TREE_BRANCH_OBJECT: + c.getAgility().climbDown(c.getX(), c.getY(), 0); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[3] == true) { + c.getAgility().agilityProgress[4] = true; + } + return true; + + case NET2_OBJECT: + if (System.currentTimeMillis() - clickTimer < 1800) { + return false; + } + if (c.getY() == 3425 && System.currentTimeMillis() - clickTimer > 1800) { + c.getAgility().climbUp(c.getX(), c.getY() + 2, 0); + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + clickTimer = System.currentTimeMillis(); + if (c.getAgility().agilityProgress[4] == true) { + c.getAgility().agilityProgress[5] = true; + } + } + return true; + + case PIPES1_OBJECT: + if (c.getAgility().hotSpot(2484, 3430)) { + c.getAgility().walk(0, 7, c.getAgility().getAnimation(objectId), 748); + if (c.getAgility().agilityProgress[5] == true) { + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().lapBonus = 1400 / 30; + c.getAgility().lapFinished(); + } else { + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + c.getAgility().resetAgilityProgress(); + } else if (c.absY > 3430 && c.absY < 3436 && System.currentTimeMillis() - clickTimer > 1800) { + c.getPlayerAssistant().movePlayer(2484, 3437, 0); + } + return true; + + case PIPES2_OBJECT: + if (c.getAgility().hotSpot(2487, 3430)) { + c.getAgility().walk(0, 7, c.getAgility().getAnimation(objectId), 748); + if (c.getAgility().agilityProgress[5] == true) { + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().lapBonus = 1400 / 30; + c.getAgility().lapFinished(); + } else { + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + c.getAgility().resetAgilityProgress(); + } else if (c.absY > 3430 && c.absY < 3436) { + c.getPlayerAssistant().movePlayer(2487, 3437, 0); + } + return true; + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/PyramidAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/PyramidAgility.java new file mode 100644 index 00000000..23ed1fb4 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/PyramidAgility.java @@ -0,0 +1,362 @@ +package redone.game.content.skills.agility; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class PyramidAgility { + + private final Client c; + + public PyramidAgility(Client c) { + this.c = c; + } + + public static final int PYRAMID_STAIRCE_OBJECT = 10857, + PYRAMID_WALL_OBJECT = 10865, PYRAMID_PLANK_OBJECT = 10868, + PYRAMID_GAP_OBJECT = 10863, PYRAMID_GAP_2 = 10885, + PYRAMID_GAP_3 = 10859, PYRAMID_GAP_4 = 10883, + PYRAMID_GAP_5 = 10862, LEDGE = 10860, LEDGE_2 = 10886, + LEDGE_3 = 10888, PYRAMID_ROCKS = 10852; // pyramid + // course + // objects + + public boolean pyramidCourse(int objectId) { + switch (objectId) { + case PYRAMID_STAIRCE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3357, 2832) + || c.getAgility().hotSpot(3356, 2832) + || c.getAgility().hotSpot(3355, 2830) + || c.getAgility().hotSpot(3359, 2834) + || c.getAgility().hotSpot(3358, 2834) + || c.getAgility().hotSpot(3361, 2836) + || c.getAgility().hotSpot(3360, 2836)) { + if (c.heightLevel == 0) { + c.getAgility().climbUp(c.getX(), c.getY() + 3, 1); + } else if (c.heightLevel == 1) { + c.getAgility().climbUp(c.getX(), c.getY() + 3, 2); + } else if (c.heightLevel == 2) { + c.getAgility().climbUp(c.getX(), c.getY() + 3, 3); + } else { + c.getAgility().climbUp(c.getX(), c.getY() - 8, 0); + c.getActionSender() + .sendMessage( + "Congratulations you completed the pyramid course!"); + } + } + return true; + + case PYRAMID_ROCKS: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.absX == 3349) { + c.getAgility().walk(-6, 0, + c.getAgility().getAnimation(objectId), -1); + c.getActionSender().sendMessage( + "You leave the agility pyramid"); + } else if (c.absX == 3343) { + c.getAgility() + .walk(6, 0, c.getAgility().getAnimation(3043), -1); + c.getActionSender().sendMessage( + "You enter the agility pyramid"); + } + return true; + + case LEDGE: + case LEDGE_2: + case LEDGE_3: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3363, 2851)) { + c.getAgility().walk(5, 0, + c.getAgility().getAnimation(objectId), -1); + } else if (c.getAgility().hotSpot(3364, 2832)) { + c.getAgility().walk(-5, 0, + c.getAgility().getAnimation(objectId), -1); + } else if (c.getAgility().hotSpot(3372, 2841)) { + c.getAgility().walk(0, -5, + c.getAgility().getAnimation(objectId), -1); + } else if (c.getAgility().hotSpot(3359, 2842)) { + c.getAgility().walk(0, 5, + c.getAgility().getAnimation(objectId), -1); + } + return true; + + case PyramidAgility.PYRAMID_WALL_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3354, 2848) + || c.getAgility().hotSpot(3355, 2848)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + if (c.getAgility().hotSpot(3371, 2834) + || c.getAgility().hotSpot(3371, 2833)) { + c.getAgility().walk(-2, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + if (c.getAgility().hotSpot(3359, 2838) + || c.getAgility().hotSpot(3358, 2838)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + return true; + + case PYRAMID_GAP_OBJECT: + case PYRAMID_GAP_2: + case PYRAMID_GAP_3: + case PYRAMID_GAP_4: + case PYRAMID_GAP_5: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3363, 2851)) { + c.getAgility().walk(1, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3368, 2851, 1); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3372, 2832) + || c.getAgility().hotSpot(3372, 2831)) { + c.getAgility().walk(-1, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3367, c.absY, 1);// was + // 2832 + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3364, 2832)) { + c.getAgility().walk(-1, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3359, 2832, 1); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3357, 2836)) { + c.getAgility().walk(0, 5, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3357, 2841, 2); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3357, 2846)) { + c.getAgility().walk(0, 3, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3357, 2849, 2); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3359, 2849) + || c.getAgility().hotSpot(3359, 2850)) { + c.getAgility().walk(5, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3364, c.absY, 2); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3366, 2834)) { + c.getAgility().walk(-1, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3363, 2834, 2); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3359, 2842)) { + c.getAgility().walk(0, 1, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3359, 2847, 3); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3370, 2843)) { + c.getAgility().walk(0, -1, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3370, 2838, 3); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + if (c.getAgility().hotSpot(3372, 2841)) { + c.getAgility().walk(0, -1, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3372, 2836, 2); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + return true; + + case PYRAMID_PLANK_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3375, 2845)) { + c.getAgility().walk(0, -6, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + if (c.getAgility().hotSpot(3370, 2835)) { + c.getAgility().walk(-6, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + } + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/WerewolfAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/WerewolfAgility.java new file mode 100644 index 00000000..97dd51d7 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/WerewolfAgility.java @@ -0,0 +1,188 @@ +package redone.game.content.skills.agility; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class WerewolfAgility { + + private final Client c; + + public WerewolfAgility(Client c) { + this.c = c; + } + + public static final int WEREWOLF_STEPPING_STONE_OBJECT = 5138, + WEREWOLF_HURDLE_OBJECT1 = 5133, WEREWOLF_HURDLE_OBJECT2 = 5134, + WEREWOLF_HURDLE_OBJECT3 = 5135, WEREWOLF_PIPES_OBJECT = 5152, + WEREWOLF_SKULL_OBJECT = 5136, WEREWOLF_SLING_OBJECT = 5141; // werewolf + // course + // objects + + public boolean werewolfCourse(int objectId) { + switch (objectId) { + case WEREWOLF_STEPPING_STONE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3538, 9873)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } else if (c.getAgility().hotSpot(3538, 9875)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } else if (c.getAgility().hotSpot(3538, 9876)) { + c.getAgility().walk(1, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } else if (c.getAgility().hotSpot(3538, 9877)) { + c.getAgility().walk(2, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } else if (c.getAgility().hotSpot(3540, 9877)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } else if (c.getAgility().hotSpot(3540, 9879)) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + } + return true; + + case WEREWOLF_HURDLE_OBJECT1: + case WEREWOLF_HURDLE_OBJECT2: + case WEREWOLF_HURDLE_OBJECT3: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getY() == 9892 || c.getY() == 9895 || c.getY() == 9898) { + c.getAgility().walk(0, 2, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[0] == true) { + c.getAgility().agilityProgress[1] = true; + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(c.getX(), c.getY() + 1, 0); + c.getActionSender().sendMessage("You managed to jump over the hurdle."); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + return true; + + case WEREWOLF_PIPES_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3538, 9904)) { + c.getAgility().walk(0, 6, + c.getAgility().getAnimation(objectId), 748); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + } else if (c.getAgility().hotSpot(3541, 9904)) { + c.getAgility().walk(0, 6, + c.getAgility().getAnimation(objectId), 748); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + } else if (c.getAgility().hotSpot(3544, 9904)) { + c.getAgility().walk(0, 6, + c.getAgility().getAnimation(objectId), 748); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[1] == true) { + c.getAgility().agilityProgress[2] = true; + } + } + return true; + + case WEREWOLF_SKULL_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getX() == 3533) { + c.getAgility().walk(-3, 0, + c.getAgility().getAnimation(objectId), -1); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[2] == true) { + c.getAgility().agilityProgress[3] = true; + } + } + return true; + + case 5139: + if (c.getAgility().hotSpot(3528, 9910)) { + c.getAgility().walk( + 0, + -39, + c.getAgility().getAnimation( + WerewolfAgility.WEREWOLF_SLING_OBJECT), 743); + c.getPlayerAssistant().addSkillXP( + c.getAgility().getXp(objectId), c.playerAgility); + if (c.getAgility().agilityProgress[3] == true) { + c.getAgility().agilityProgress[4] = true; + } + c.getAgility().agilityProgress[5] = true; + c.getAgility().lapBonus = 2350 / 30; + c.getAgility().lapFinished(); + } + return true; + + case WEREWOLF_SLING_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getX() == 3530) { + c.getPlayerAction().setAction(true); + c.getPlayerAction().canWalk(false); + c.getPlayerAssistant().movePlayer(3528, 9910, 0); + c.isRunning2 = true; + // c.getAgility().zipLine = 0; + // c.getAgility().moveHeight = 0; + } + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/agility/WildernessAgility.java b/2006Redone Server/src/redone/game/content/skills/agility/WildernessAgility.java new file mode 100644 index 00000000..d0e69e82 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/agility/WildernessAgility.java @@ -0,0 +1,119 @@ +package redone.game.content.skills.agility; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class WildernessAgility { + + private final Client c; + + public WildernessAgility(Client c) { + this.c = c; + } + + public static final int WILDERNESS_PIPE_OBJECT = 2288, + WILDERNESS_SWING_ROPE_OBJECT = 2283, + WILDERNESS_STEPPING_STONE_OBJECT = 2311, + WILDERNESS_LOG_BALANCE_OBJECT = 2297, + WILDERNESS_ROCKS_OBJECT = 2328; + + public boolean wildernessCourse(final int objectId) { + switch (objectId) { + case WILDERNESS_PIPE_OBJECT: // pipe + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3004, 3937)) { + c.getAgility().walk(0, 13, + c.getAgility().getAnimation(objectId), 748); + } else if (c.absX == 3004 && c.absY > 3937 && c.absY < 3950) { + c.getPlayerAssistant().movePlayer(3004, 3950, 0); + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().resetAgilityProgress(); + c.getAgility().agilityProgress[0] = true; + return true; + case WILDERNESS_SWING_ROPE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3005, 3953)) { + c.getAgility().walk(0, 1, + c.getAgility().getAnimation(objectId), -1); + if (c.getAgility().agilityProgress[0] == true) { + c.getAgility().agilityProgress[1] = true; + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.getPlayerAssistant().movePlayer(3005, 3958, 0); + container.stop(); + } + @Override + public void stop() { + // TODO Auto-generated method stub + + } + }, 1); + } + return true; + case WILDERNESS_STEPPING_STONE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3002, 3960)) { + c.getAgility().walk(-6, 0, + c.getAgility().getAnimation(objectId), -1); + } else if (c.absX > 2996 && c.absX < 3002 && c.absY == 3960) { + c.getPlayerAssistant().movePlayer(2996, 3960, 0); + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().steppingStone = 6; + c.getAgility().steppingStoneTimer = 2; + c.getAgility().steppingStone--; + if (c.getAgility().agilityProgress[2] == true) { + c.getAgility().agilityProgress[3] = true; + } + return true; + + case WILDERNESS_LOG_BALANCE_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + if (c.getAgility().hotSpot(3002, 3945)) { + c.getAgility().walk(-8, 0, + c.getAgility().getAnimation(objectId), -1); + if (c.getAgility().agilityProgress[3] == true) { + c.getAgility().agilityProgress[5] = true; + } + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + } else if (c.absX > 2994 && c.absX < 3002 && c.absY == 3945) { + c.getPlayerAssistant().movePlayer(2994, 3945, 0); + } + return true; + + case WILDERNESS_ROCKS_OBJECT: + if (c.getAgility().checkLevel(objectId)) { + return false; + } + c.getAgility().walk(0, -4, c.getAgility().getAnimation(objectId), -1); + if (c.getAgility().agilityProgress[5] == true) { + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + c.getAgility().lapBonus = 2400 / 30; + c.getAgility().lapFinished(); + } else { + c.getPlayerAssistant().addSkillXP(c.getAgility().getXp(objectId), c.playerAgility); + } + return true; + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/cooking/Cooking.java b/2006Redone Server/src/redone/game/content/skills/cooking/Cooking.java new file mode 100644 index 00000000..caaf62d0 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/cooking/Cooking.java @@ -0,0 +1,310 @@ +package redone.game.content.skills.cooking; + +import java.security.SecureRandom; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class Cooking extends SkillHandler { + + private static SecureRandom cookingRandom = new SecureRandom(); // The + // random + // factor + + private static enum CookingItems { + //raw, cooked, burnt, levelreq, exp, stopburn, stopburn w/gloves, name + SHRIMP(317, 315, 7954, 1, 30, 34, 30, "shrimp"), SARDINE(327, 325, 369, + 1, 40, 38, 38, "sardine"), HERRING(345, 347, 357, 5, 50, 41, + 41, "herring"), TROUT(335, 333, 343, 15, 70, 50, 50, "trout"), TUNA( + 359, 361, 367, 30, 100, 64, 63, "tuna"), ANCHOVIES(321, 319, + 323, 5, 45, 34, 34, "anchovies"), RAW_BEEF(2132, 2142, 2146, 1, + 30, 33, 33, "raw beef"), + RAW_RAT(2134, 2142, 2146, 1, 30, 33, 33, "raw rat meat"), + BURNT_MEAT(2142, 2146, 2146, 1, 1, 100, 100, "cooked meat"), + RAW_CHICKEN(2138, 2140, 2144, 1, 30, 33, 33, "raw chicken"), + RAW_BEAR_MEAT(2136, 2142, 2146, 1, 30, 33, 33, "raw bear meat"), + MACKERAL(353, 355, 357, 10, 60, 45, 45, "mackeral"), + SALMON(331, 329, 343, 25, 90, 58, 55, "salmon"), + UNCOOKED_BERRY_PIE(2321, 2325, 2329, 10, 78, 50, 50, "uncooked pie"), + PIKE( + 349, 351, 343, 20, 80, 59, 59, "pike"), KARAMBWAN(3142, 3144, + 3146, 1, 80, 20, 20, "karambwan"), LOBSTER(377, 379, 381, 40, + 120, 74, 68, "lobster"), SWORDFISH(371, 373, 375, 50, 140, 86, + 81, "swordfish"), MONKFISH(7944, 7946, 7948, 62, 150, 92, 90, + "monkfish"), SHARK(383, 385, 387, 76, 210, 100, 94, "shark"), MANTA_RAY( + 389, 391, 393, 91, 169, 100, 100, "manta ray"), + SEAWEED(401, 1781, 1781, 1, 1, 1, 1, "sea weed"), + CURRY(2009, 2011, 2013, 60, 280, 74, 74, "curry"); + + int rawItem, cookedItem, burntItem, levelReq, xp, stopBurn, + stopBurnGloves; + String name; + + private CookingItems(int rawItem, int cookedItem, int burntItem, + int levelReq, int xp, int stopBurn, int stopBurnGloves, + String name) { + this.rawItem = rawItem; + this.cookedItem = cookedItem; + this.burntItem = burntItem; + this.levelReq = levelReq; + this.xp = xp; + this.stopBurn = stopBurn; + this.name = name; + } + + private int getRawItem() { + return rawItem; + } + + private int getCookedItem() { + return cookedItem; + } + + private int getBurntItem() { + return burntItem; + } + + private int getLevelReq() { + return levelReq; + } + + private int getXp() { + return xp; + } + + private int getStopBurn() { + return stopBurn; + } + + @SuppressWarnings("unused") + // causes bugs + private int getStopBurnGloves() { + return stopBurnGloves; + } + + private String getName() { + return name; + } + } + + public static CookingItems forId(int itemId) { + for (CookingItems item : CookingItems.values()) { + if (itemId == item.getRawItem()) { + return item; + } + } + return null; + } + + public static void makeBreadOptions(Client c, int item) { + if (c.getItemAssistant().playerHasItem(1929) + && c.getItemAssistant().playerHasItem(1933) + && item == c.breadID) { + c.getItemAssistant().deleteItem(1929, 1); + c.getItemAssistant().deleteItem(1933, 1); + c.getItemAssistant().addItem(1925, 1); + c.getItemAssistant().addItem(1931, 1); + c.getItemAssistant().addItem(item, 1); + c.getActionSender().sendMessage( + "You make the water and flour to make some " + + ItemAssistant.getItemName(item) + "."); + } + c.getPlayerAssistant().closeAllWindows(); + } + + public static void pastryCreation(Client c, int itemID1, int itemID2, + int giveItem, String message) { + if (c.getItemAssistant().playerHasItem(itemID1) + && c.getItemAssistant().playerHasItem(itemID2)) { + c.getItemAssistant().deleteItem(itemID1, 1); + c.getItemAssistant().deleteItem(itemID2, 1); + c.getItemAssistant().addItem(giveItem, 1); + if (message.equalsIgnoreCase("")) { + c.getActionSender().sendMessage( + "You mix the two ingredients and get an " + + ItemAssistant.getItemName(giveItem) + "."); + } else { + c.getActionSender().sendMessage(message); + } + } + } + + public static void cookingAddon(Client c, int itemID1, int itemID2, + int giveItem, int requiredLevel, int expGained) { + if (c.playerLevel[7] >= requiredLevel) { + if (c.getItemAssistant().playerHasItem(itemID1) + && c.getItemAssistant().playerHasItem(itemID2)) { + c.getItemAssistant().deleteItem(itemID1, 1); + c.getItemAssistant().deleteItem(itemID2, 1); + c.getItemAssistant().addItem(giveItem, 1); + c.getPlayerAssistant().addSkillXP(expGained, 7); + c.getActionSender().sendMessage( + "You create a " + ItemAssistant.getItemName(giveItem) + + "."); + } + } else { + c.getActionSender().sendMessage( + "You don't have the required level to make an " + + ItemAssistant.getItemName(giveItem)); + } + } + + private static void setCooking(Client c) { + c.playerIsCooking = true; + c.stopPlayerSkill = true; + } + + public static void resetCooking(Client c) { + c.playerIsCooking = false; + c.stopPlayerSkill = false; + } + + private static void viewCookInterface(Client c, int item) { + c.getPlayerAssistant().sendChatInterface(1743); + c.getPlayerAssistant().sendFrame246(13716, view190 ? 190 : 170, item); + c.getPlayerAssistant().sendFrame126(getLine(c) + "" + ItemAssistant.getItemName(item) + "", 13717); + } + + public static String getLine(Client c) { + return c.below459 ? "\\n\\n\\n\\n" : "\\n\\n\\n\\n\\n"; + } + + public static boolean startCooking(Client c, int itemId, int objectId) { + CookingItems item = forId(itemId); + if (item != null) { + if (c.playerLevel[c.playerCooking] < item.getLevelReq()) { + c.getPlayerAssistant().removeAllWindows(); + c.getDialogueHandler().sendStatement( + "You need a Cooking level of " + item.getLevelReq() + + " to cook this."); + c.nextChat = 0; + return false; + } + if (c.playerIsCooking) { + c.getPlayerAssistant().removeAllWindows(); + return false; + } + if (!COOKING) { + c.getActionSender().sendMessage( + "This skill is currently disabled."); + return false; + } + // save the id of the item and object for the cooking interface. + c.cookingItem = itemId; + c.cookingObject = objectId; + viewCookInterface(c, item.getRawItem()); + return true; + } + return false; + } + + private static boolean getSuccess(Client c, int burnBonus, int levelReq, + int stopBurn) { + if (c.playerLevel[c.playerCooking] >= stopBurn) { + return true; + } + double burn_chance = 55.0 - burnBonus; + double cook_level = c.playerLevel[c.playerCooking]; + double lev_needed = levelReq; + double burn_stop = stopBurn; + double multi_a = burn_stop - lev_needed; + double burn_dec = burn_chance / multi_a; + double multi_b = cook_level - lev_needed; + burn_chance -= multi_b * burn_dec; + double randNum = cookingRandom.nextDouble() * 100.0; + return burn_chance <= randNum; + } + + public static void cookItem(final Client c, final int itemId, + final int amount, final int objectId) { + final CookingItems item = forId(itemId); + + if (item != null) { + setCooking(c); + RandomEventHandler.addRandom(c); + c.getPlayerAssistant().removeAllWindows(); + c.doAmount = amount; + if (c.doAmount > c.getItemAssistant().getItemAmount(itemId)) { + c.doAmount = c.getItemAssistant().getItemAmount(itemId); + } + if (objectId > 0) { + c.startAnimation(objectId == 2732 ? 897 : 896); + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!c.playerIsCooking) { + resetCooking(c); + container.stop(); + return; + } + if (!c.getItemAssistant().playerHasItem(item.getRawItem(), + 1)) { + c.getActionSender().sendMessage( + "You have run out of " + item.getName() + + " to cook."); + resetCooking(c); + container.stop(); + return; + } + + // if (c.playerEquipment[c.playerHands] != 775) + boolean burn = !getSuccess(c, 3, item.getLevelReq(), + item.getStopBurn()); + /* + * else burn = !getSuccess(c, 3, item.getLevelReq(), item + * .getStopBurnGloves()); + */ + c.getItemAssistant().deleteItem(item.getRawItem(), + c.getItemAssistant().getItemSlot(itemId), 1); + if (!burn) { + c.getActionSender().sendMessage( + "You successfully cook the " + + item.getName().toLowerCase() + "."); + if (Constants.SOUND) { + c.getActionSender().sendSound( + SoundList.COOK_ITEM, 100, 0); + } + c.getPlayerAssistant().addSkillXP(item.getXp(), + c.playerCooking); + c.getItemAssistant().addItem(item.getCookedItem(), 1); + } else { + c.getActionSender().sendMessage( + "Oops! You accidentally burnt the " + + item.getName().toLowerCase() + "!"); + c.getItemAssistant().addItem(item.getBurntItem(), 1); + } + c.doAmount--; + if (c.disconnected) { + container.stop(); + return; + } + if (objectId < 0) { + container.stop(); + return; + } + if (c.doAmount > 0) { + if (objectId > 0) { + c.startAnimation(objectId == 2732 ? 897 : 896); + } + } else if (c.doAmount == 0) { + resetCooking(c); + container.stop(); + } + } + + @Override + public void stop() { + + } + }, 4); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/cooking/CookingTutorialIsland.java b/2006Redone Server/src/redone/game/content/skills/cooking/CookingTutorialIsland.java new file mode 100644 index 00000000..ceeddc42 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/cooking/CookingTutorialIsland.java @@ -0,0 +1,183 @@ +package redone.game.content.skills.cooking; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.util.Misc; + +public class CookingTutorialIsland extends SkillHandler { + + public static void cookThisFood(Client p, int i, int object) { + switch (i) { + case 317: + cookFish(p, i, 30, 1, 323, 315, object); + break; + default: + p.getActionSender().sendMessage("Nothing interesting happens."); + break; + } + } + + private static void cookFish(Client c, int itemID, int xpRecieved, + int levelRequired, int burntFish, int cookedFish, int object) { + if (!COOKING) { + c.getActionSender().sendMessage( + "Cooking is currently disabled."); + return; + } + if (!hasRequiredLevel(c, 7, levelRequired, "cooking", "cook this")) { + return; + } + int chance = c.playerLevel[7]; + if (c.playerEquipment[c.playerHands] == 775) { + chance = c.playerLevel[7] + 8; + } + if (chance <= 0) { + chance = Misc.random(5); + } + c.playerSkillProp[7][0] = itemID; + c.playerSkillProp[7][1] = xpRecieved; + c.playerSkillProp[7][2] = levelRequired; + c.playerSkillProp[7][3] = burntFish; + c.playerSkillProp[7][4] = cookedFish; + c.playerSkillProp[7][5] = object; + c.playerSkillProp[7][6] = chance; + c.stopPlayerSkill = false; + int item = c.getItemAssistant().getItemAmount(c.playerSkillProp[7][0]); + if (item == 1) { + c.doAmount = 1; + cookTutFish(c); + return; + } + viewCookInterface(c, itemID); + } + + public static void getAmount(Client c, int amount) { + int item = c.getItemAssistant().getItemAmount(c.playerSkillProp[7][0]); + if (amount > item) { + amount = item; + } + c.doAmount = amount; + cookTutFish(c); + } + + public static void resetCooking(Client c) { + c.playerSkilling[7] = false; + c.stopPlayerSkill = false; + for (int i = 0; i < 6; i++) { + c.playerSkillProp[7][i] = -1; + } + } + + private static void viewCookInterface(Client c, int item) { + c.getPlayerAssistant().sendChatInterface(1743); + c.getPlayerAssistant().sendFrame246(13716, 190, item); + c.getPlayerAssistant().sendFrame126( + "" + ItemAssistant.getItemName(item) + "", 13717); + } + + private static void cookTutFish(final Client c) { + if (c.playerSkilling[7]) { + return; + } + if (c.tutorialProgress == 6) { + c.playerSkilling[7] = true; + c.stopPlayerSkill = true; + c.getPlayerAssistant().removeAllWindows(); + if (c.playerSkillProp[7][5] > 0) { + // c.startAnimation(c.playerSkillProp[7][5] == 2732 ? 897 : + // 896); + c.startAnimation(c.playerSkillProp[7][5] == 2732 ? 897 + : c.playerSkillProp[7][5] == 12269 ? 897 : 896); + if (Constants.SOUND) { + c.getActionSender().sendSound(SoundList.COOK_ITEM, 100, + 0); + } + + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.getItemAssistant().deleteItem( + c.playerSkillProp[7][0], + c.getItemAssistant().getItemSlot( + c.playerSkillProp[7][0]), 1); + if (c.Cookstage1 == 1) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "You have just burned your first shrimp. This is normal. As you", + "get more experience in Cooking, you will burn stuff less often.", + "Let's try cooking without burning it this time. First catch some", + "more shrimp then use them on a fire.", + "Burning your shrimp."); + c.getActionSender().chatbox(6179); + c.Cookstage1 = 0; + c.getItemAssistant() + .addItem(c.playerSkillProp[7][3], 1); + } else { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "If you'd like a recap on anything you've learnt so far, speak to", + "the Survival Expert. You can now move on to the next", + "instructor. Click on the gate shown and follow the path.", + "Remember, you can move the camera with the arrow keys.", + "Well done, you've just cooked your first RuneScape meal"); + c.getActionSender().chatbox(6179); + c.getActionSender().createArrow(3089, 3092, + c.getH(), 2); + c.getPlayerAssistant().addSkillXP( + c.playerSkillProp[7][1], 7); + c.getItemAssistant() + .addItem(c.playerSkillProp[7][4], 1); + c.tutorialProgress = 7; + } + deleteTime(c); + if (!c.getItemAssistant().playerHasItem( + c.playerSkillProp[7][0], 1) + || c.doAmount <= 0) { + container.stop(); + } + if (!c.stopPlayerSkill) { + container.stop(); + } + } + + @Override + public void stop() { + resetCooking(c); + } + }, 4); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.playerSkillProp[7][5] > 0) { + // c.getPlayerAssistant().sendSound(357, 100, 1); // + // cook sound + c.startAnimation(c.playerSkillProp[7][5] == 2732 ? 897 + : 896); + } + if (!c.stopPlayerSkill) { + container.stop(); + } + } + + @Override + public void stop() { + + } + }, 4); + return; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/cooking/Potatoes.java b/2006Redone Server/src/redone/game/content/skills/cooking/Potatoes.java new file mode 100644 index 00000000..1ee6682b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/cooking/Potatoes.java @@ -0,0 +1,118 @@ +package redone.game.content.skills.cooking; + +import java.util.HashMap; +import java.util.Map; + +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.players.Client; + +public class Potatoes extends SkillHandler { + + Client c; + + public Potatoes(Client c) { + this.c = c; + } + + public enum PotatoMaking { + // first item, new item, xp, level required + // BUTTERED(6701, 6703, 6697, 95, 39), + CHILLI(7062, 7054, 165, 41), CHEESE(1985, 6705, 199, 47), EGG(7064, + 7056, 195, 51), MUSHROOM(7066, 7058, 27, 64), TUNA(7068, 7060, + 309, 68); + + /** + * Seperate integers for the id's. + */ + private int newPotatoID, ingredient, XP, levelReq; + + /** + * @param ingredient + * @param newPotatoID + * @param XP + * @param levelReq + */ + private PotatoMaking(int ingredient, int newPotatoID, int XP, + int levelReq) { + // this.potatoID = potatoID; + this.ingredient = ingredient; + this.newPotatoID = newPotatoID; + this.levelReq = levelReq; + this.XP = XP; + } + + public int getNewPotatoID() { + return newPotatoID; + } + + public int getIngredient() { + return ingredient; + } + + public int getReq() { + return levelReq; + } + + public int getXP() { + return XP; + } + + private static final Map potato = new HashMap(); + + public static PotatoMaking forId(int id) { + return potato.get(id); + } + + static { + for (PotatoMaking p : PotatoMaking.values()) { + potato.put(p.getIngredient(), p); + } + } + } + + /** + * Id used with one or the other + * + * @param id1 + * @param id2 + */ + public void handlePotato(int id1, int id2) { + makePotato(id1 == 6703 ? id2 : id1); + } + + /** + * Creating the actual item and replacing the id's + * + * @param id + * @return + */ + public boolean makePotato(int id) { + PotatoMaking potato = PotatoMaking.forId(id); + if (potato == null) { + return false; + } + if (!COOKING) { + c.getActionSender().sendMessage( + "This skill is currently disabled."); + return false; + } + if (c.getItemAssistant().playerHasItem(potato.getIngredient(), 1)) { + if (c.playerLevel[c.playerCooking] >= potato.getReq()) { + c.getItemAssistant().deleteItem(potato.getIngredient(), 1); + c.getItemAssistant().deleteItem(6703, 1); + c.getActionSender().sendMessage("You put the topping on."); + c.getItemAssistant().addItem(potato.getNewPotatoID(), 1); + c.getPlayerAssistant().addSkillXP( + potato.getXP() * COOKING_EXPERIENCE, c.playerCooking); + RandomEventHandler.addRandom(c); + } else { + c.getActionSender().sendMessage( + "You need a cooking level of " + potato.getReq() + + " to make this potato."); + } + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/core/Fishing.java b/2006Redone Server/src/redone/game/content/skills/core/Fishing.java new file mode 100644 index 00000000..2b2a1c19 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/core/Fishing.java @@ -0,0 +1,558 @@ +package redone.game.content.skills.core; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.randomevents.RiverTroll; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.game.players.antimacro.AntiBotting; +import redone.util.Misc; + + +public class Fishing extends SkillHandler { + + public static void randomEvents(Client client) { + if (Misc.random(350) == 5) { + RiverTroll.spawnRiverTroll(client); + } + if (Misc.random(350) == 0 && RiverTroll.hasRiverTroll == false) { + AntiBotting.botCheckInterface(client); + } + if (RiverTroll.hasRiverTroll == false) { + RandomEventHandler.addRandom(client); + } + } + + /** + * Resets the Event according to the ID. id = 10 (According to skill.) + */ + protected static int eventId = 10; + + public static int[][] data = { + // dataid, levelreq, item needed, bait, item recieved, exp, + // animation, + // secondfish, levelreq, secondexp + { 1, 1, 303, -1, 317, 10, 621, 321, 15, 40 }, // SHRIMP + ANCHOVIES + { 2, 5, 307, 313, 327, 20, 622, 345, 10, 30 }, // SARDINE + HERRING + { 3, 16, 305, -1, 353, 20, 620, -1, -1, -1 }, // MACKEREL + { 4, 20, 309, 314, 335, 50, 622, 331, 30, 70 }, // TROUT + { 5, 23, 305, -1, 341, 45, 619, 363, 46, 100 }, // BASS + COD + { 6, 25, 307, 313, 349, 60, 622, -1, -1, -1 }, // PIKE + { 7, 35, 311, -1, 359, 80, 618, 371, 50, 100 }, // TUNA + SWORDIE + { 8, 40, 301, -1, 377, 90, 619, -1, -1, -1 }, // LOBSTER + { 9, 62, 303, -1, 7944, 120, 621, -1, -1, -1 }, // Monkfish + { 10, 76, 311, -1, 383, 110, 618, -1, -1, -1 } // Shark + }; + + private static String[][] messages = { { "You cast out your net." }, // SHRIMP + // + + // ANCHOVIES + { "You cast out your line." }, // SARDINE + HERRING + { "You start harpooning fish." }, // TUNA + SWORDIE + { "You attempt to catch a lobster." }, // LOBSTER + }; + + private static void attemptdata(final Client c, final int npcId) { + if (!FISHING) { + c.getActionSender().sendMessage(c.disabled()); + return; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't fish right now!"); + return; + } + if (c.playerSkillProp[10][4] > 0) { + c.playerSkilling[10] = false; + return; + } + if (!noInventorySpace(c, "fishing")) { + return; + } + resetFishing(c); + for (int i = 0; i < data.length; i++) { + if (npcId == data[i][0]) { + if (c.playerLevel[c.playerFishing] < data[i][1]) { + c.getDialogueHandler().sendStatement( + "You need a fishing level of at least " + + data[i][1] + + " in order to fish at this spot."); + return; + } + if (!hasFishingEquipment(c, data[i][2])) { + return; + } + if (data[i][3] > 0) { + if (!c.getItemAssistant().playerHasItem(data[i][3])) { + c.getDialogueHandler().sendStatement( + "You need more " + + ItemAssistant.getItemName(data[i][3]) + .toLowerCase().toLowerCase() + + " in order to fish at this spot."); + return; + } + } + c.playerSkillProp[10][0] = data[i][6]; // ANIM + c.playerSkillProp[10][1] = data[i][4]; // FISH + c.playerSkillProp[10][2] = data[i][5]; // XP + c.playerSkillProp[10][3] = data[i][3]; // BAIT + c.playerSkillProp[10][4] = data[i][2]; // EQUIP + c.playerSkillProp[10][5] = data[i][7]; // sFish + c.playerSkillProp[10][6] = data[i][8]; // sLvl + c.playerSkillProp[10][7] = data[i][4]; // FISH + c.playerSkillProp[10][8] = data[i][9]; // sXP + c.playerSkillProp[10][9] = Misc.random(1) == 0 ? 7 : 5; + c.playerSkillProp[10][10] = data[i][0]; // INDEX + + if (c.playerSkilling[10]) { + return; + } + c.playerSkilling[10] = true; + if (c.tutorialProgress == 6) { // if tutorial prog = 6 + c.startAnimation(c.playerSkillProp[10][0]); + c.stopPlayerSkill = true; + c.getActionSender().drawHeadicon(0, 0, 0, 0); // deletes + // headicon + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "This should only take a few seconds.", + "As you gain Fishing experience you'll find that there are many", + "types of fish and many ways to catch them.", + "", "Please wait"); + c.getActionSender().chatbox(6179); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + + if (c.playerSkillProp[10][5] > 0) { + if (c.playerLevel[c.playerFishing] >= c.playerSkillProp[10][6]) { + c.playerSkillProp[10][1] = c.playerSkillProp[10][Misc + .random(1) == 0 ? 7 : 5]; + } + } + + if (!c.stopPlayerSkill) { + container.stop(); + } + if (!c.playerSkilling[10]) { + container.stop(); + } + + if (c.playerSkillProp[10][1] > 0) { + c.startAnimation(c.playerSkillProp[10][0]); + } + + } + + @Override + public void stop() { + resetFishing(c); + } + }, 5); + CycleEventHandler.getSingleton().addEvent(c, + new CycleEvent() { + + @Override + public void execute( + CycleEventContainer container) { + if (c.playerSkillProp[10][5] > 0) { + if (c.playerLevel[c.playerFishing] >= c.playerSkillProp[10][6]) { + c.playerSkillProp[10][1] = c.playerSkillProp[10][Misc + .random(1) == 0 ? 7 : 5]; + } + } + if (c.playerSkillProp[10][2] > 0) { + c.getPlayerAssistant().addSkillXP( + c.playerSkillProp[10][2], + c.playerFishing); + } + if (c.playerSkillProp[10][1] > 0) { + c.getItemAssistant().addItem(c.playerSkillProp[10][1], 1); + c.startAnimation(c.playerSkillProp[10][0]); + c.getDialogueHandler().sendDialogues(3019, -1); + container.stop(); + } + if (!noInventorySpace(c, "fishing")) { + container.stop(); + } + if (!c.stopPlayerSkill) { + container.stop(); + } + if (!c.playerSkilling[10]) { + container.stop(); + } + } + + @Override + public void stop() { + resetFishing(c); + } + }, getTimer(c, npcId) + 5 + playerFishingLevel(c)); + return; + } + + // end of tutorial island fishing + + c.getActionSender().sendMessage("" + messages(c)); + // c.getPA().sendSound(379, 100, 1); // fishing + c.startAnimation(c.playerSkillProp[10][0]); + c.stopPlayerSkill = true; + CycleEventHandler.getSingleton().addEvent(eventId, c, + new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.playerSkillProp[10][3] > 0) { + + if (!c.getItemAssistant().playerHasItem( + c.playerSkillProp[10][3])) { + c.getActionSender() + .sendMessage( + "You don't have any " + + ItemAssistant + .getItemName(c.playerSkillProp[10][3]) + + " left!"); + c.getActionSender() + .sendMessage( + "You need " + + ItemAssistant + .getItemName(c.playerSkillProp[10][3]) + + " to fish here."); + resetFishing(c); + container.stop(); + } + } + if (c.playerSkillProp[10][5] > 0) { + if (c.playerLevel[c.playerFishing] >= c.playerSkillProp[10][6]) { + c.playerSkillProp[10][1] = c.playerSkillProp[10][Misc + .random(1) == 0 ? 7 : 5]; + } + } + if (!hasFishingEquipment(c, + c.playerSkillProp[10][4])) { + resetFishing(c); + container.stop(); + } + if (!noInventorySpace(c, "fishing")) { + resetFishing(c); + container.stop(); + } + if (!c.stopPlayerSkill) { + container.stop(); + } + if (!c.playerSkilling[10]) { + resetFishing(c); + container.stop(); + } + if (c.playerSkillProp[10][1] > 0) { + c.startAnimation(c.playerSkillProp[10][0]); + // c.getPA().sendSound(379, 100, 1); // + // fishing + } + + } + + @Override + public void stop() { + } + }, 5); + CycleEventHandler.getSingleton().addEvent(eventId, c, + new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.playerSkillProp[10][5] > 0) { + if (c.playerLevel[c.playerFishing] >= c.playerSkillProp[10][6]) { + c.playerSkillProp[10][1] = c.playerSkillProp[10][Misc + .random(1) == 0 ? 7 : 5]; + } + } + if (c.playerSkillProp[10][1] > 0) { + c.getActionSender() + .sendMessage( + "You catch " + + (c.playerSkillProp[10][1] == 321 + || c.playerSkillProp[10][1] == 317 + || c.playerSkillProp[10][1] == 7944 ? "some " + : "a ") + + ItemAssistant + .getItemName( + c.playerSkillProp[10][1]) + .toLowerCase() + .replace( + "raw ", + "") + + "."); + } + if (c.playerSkillProp[10][1] > 0) { + randomEvents(c); + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't get any items, until you confirm you are not a bot."); + c.getActionSender().sendMessage("If you need to relog you can do so."); + container.stop(); + } + if (c.playerSkillProp[10][1] > 0) { + c.getItemAssistant().deleteItem(c.playerSkillProp[10][3], c.getItemAssistant().getItemSlot(c.playerSkillProp[10][3]), 1); + c.getItemAssistant().addItem(c.playerSkillProp[10][1], 1); + c.startAnimation(c.playerSkillProp[10][0]); + } + if (c.playerSkillProp[10][5] > 0 + && c.playerLevel[c.playerFishing] >= c.playerSkillProp[10][6]) { + c.getPlayerAssistant().addSkillXP( + c.playerSkillProp[10][8], + c.playerFishing); + } else if (c.playerSkillProp[10][7] > 0) { + c.getPlayerAssistant().addSkillXP( + c.playerSkillProp[10][2], + c.playerFishing); + } + if (c.playerSkillProp[10][3] > 0) { + if (!c.getItemAssistant().playerHasItem( + c.playerSkillProp[10][3])) { + c.getDialogueHandler() + .sendStatement( + "You have run out of " + + ItemAssistant + .getItemName( + c.playerSkillProp[10][3]) + .toLowerCase() + .toLowerCase() + + "."); + // c.getPacketDispatcher().sendMessage("You don't have any "+ + // ItemAssistant.getItemName(c.playerSkillProp[10][3]) + // +" left!"); + // c.getPacketDispatcher().sendMessage("You need "+ + // ItemAssistant.getItemName(c.playerSkillProp[10][3]) + // +" to fish here."); + container.stop(); + } + } + if (!hasFishingEquipment(c, + c.playerSkillProp[10][4])) { + resetFishing(c); + container.stop(); + } + if (!noInventorySpace(c, "fishing")) { + resetFishing(c); + container.stop(); + } + if (!c.stopPlayerSkill) { + container.stop(); + } + if (!c.playerSkilling[10]) { + resetFishing(c); + container.stop(); + } + } + + @Override + public void stop() { + } + }, getTimer(c, npcId) + 5 + playerFishingLevel(c)); + } + } + } + + public static boolean hasFishingEquipment(Client c, int equipment) { + if (!c.getItemAssistant().playerHasItem(equipment)) { + if (equipment == 311) { + if (!c.getItemAssistant().playerHasItem(311) + && !c.getItemAssistant().playerHasItem(10129) + && c.playerEquipment[3] != 10129) { + c.getActionSender().sendMessage( + "You need a " + + ItemAssistant.getItemName(equipment) + .toLowerCase() + " to fish here."); + resetFishing(c); + return false; + } + } else { + resetFishing(c); + c.getActionSender().sendMessage( + "You need a " + ItemAssistant.getItemName(equipment) + + " to fish here."); + return false; + } + } + return true; + } + + public static void resetFishing(Client c) { + c.startAnimation(65535); + c.stopPlayerSkill = false; + c.playerSkilling[10] = false; + c.fishingWhirlPool = false; + stopEvents(c, eventId); + for (int i = 0; i < 11; i++) { + c.playerSkillProp[10][i] = -1; + } + } + + public static String messages(Client c) { + if (c.playerSkillProp[10][10] == 1 || c.playerSkillProp[10][10] == 9) { + // etc + return messages[0][0]; + } + + if (c.playerSkillProp[10][10] == 2 || c.playerSkillProp[10][10] == 3 + || c.playerSkillProp[10][10] == 4 + || c.playerSkillProp[10][10] == 5 + || c.playerSkillProp[10][10] == 6) { + return messages[1][0]; + } + + if (c.playerSkillProp[10][10] == 7 || c.playerSkillProp[10][10] == 10) { + return messages[2][0]; + } + + if (c.playerSkillProp[10][10] == 8) { + return messages[3][0]; + } + + return null; + } + + private static int playerFishingLevel(Client c) { + return 10 - (int) Math.floor(c.playerLevel[c.playerFishing] / 10); + } + + private final static int getTimer(Client c, int npcId) { + switch (npcId) { + case 1: + return 2; + case 2: + return 3; + case 3: + return 4; + case 4: + return 4; + case 5: + return 4; + case 6: + return 5; + case 7: + return 5; + case 8: + return 5; + case 9: + return 8; + case 10: + return 12; + case 11: + return 13; + case 12: + return 13; + default: + return -1; + } + } + + public static void fishingNPC(Client c, int i, int l) { + switch (i) { + case 1: + switch (l) { + case 319: + case 329: + case 323: + case 325: + case 326: + case 327: + case 330: + case 332: + case 404: + case 316: // NET + BAIT + Fishing.attemptdata(c, 1); + break; + case 334: + case 313: // NET + HARPOON + Fishing.attemptdata(c, 3); + break; + case 322: // NET + HARPOON + Fishing.attemptdata(c, 5); + break; + + case 309: // LURE + case 310: + case 403: + case 311: + case 314: + case 315: + case 317: + case 318: + case 328: + case 331: + Fishing.attemptdata(c, 4); + break; + case 1191: + Fishing.attemptdata(c, 9); + break; + case 312: + case 321: + case 405: + case 324: // CAGE + HARPOON + Fishing.attemptdata(c, 8); + break; + } + break; + case 2: + switch (l) { + case 326: + case 327: + case 330: + case 332: + case 404: + case 316: // BAIT + NET + Fishing.attemptdata(c, 2); + break; + case 319: + case 323: + case 325: // BAIT + NET + Fishing.attemptdata(c, 9); + break; + case 310: + case 311: + case 314: + case 315: + case 317: + case 318: + case 328: + case 329: + case 331: + case 403: + case 309: // BAIT + LURE + Fishing.attemptdata(c, 6); + break; + case 312: + case 321: + case 405: + case 1191: + case 324:// SWORDIES+TUNA-CAGE+HARPOON + Fishing.attemptdata(c, 7); + break; + case 313: + case 322: + case 334: // NET+HARPOON + Fishing.attemptdata(c, 10); + break; + } + break; + } + } + + public static boolean fishingNPC(Client c, int npc) { + for (int i = 308; i < 335; i++) { + if (npc == i) { + return true; + } + if (npc == 1191) { + return true; + } + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/core/Mining.java b/2006Redone Server/src/redone/game/content/skills/core/Mining.java new file mode 100644 index 00000000..edbc1c6d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/core/Mining.java @@ -0,0 +1,380 @@ +package redone.game.content.skills.core; + +import redone.event.*; +import redone.game.items.ItemAssistant; +import redone.game.objects.Object; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.world.clip.Region; + +public class Mining { + + public final int[][] Pick_Settings = { + {1265, 1, 1, 625}, //Bronze + {1267, 1, 2, 626}, //Iron + {1269, 6, 3, 627}, //Steel + {1271, 31, 5, 629}, //Addy + {1273, 21, 4, 628}, //Mithril + {1275, 41, 6, 624}, //Rune + + }; + + public final int[][] Rock_Settings = { + {2091, 1, 18, 3, 436}, //Copper + {2095, 1, 18, 3, 438}, //Tin + {2093, 15, 35, 7, 440}, //Iron + {2097, 30, 50, 38, 453}, //Coal + {2103, 55, 80, 155, 447}, //Mithril + {2105, 70, 95, 315, 449}, //Addy + {2107, 85, 125, 970, 451}, //Rune + {2090, 1, 18, 3, 436}, //Copper + {2094, 1, 18, 3, 438}, //Tin + {2092, 15, 35, 7, 440}, //Iron + {2096, 30, 50, 38, 453}, //Coal + {2102, 55, 80, 155, 447}, //Mithril + {2104, 70, 95, 315, 449}, //Addy + {2106, 85, 125, 970, 451}, //Rune + {2100, 20, 40, 78, 442}, //Silver + {2101, 20, 40, 78, 442}, //Silver + {2098, 40, 65, 78, 444}, //Gold + {2099, 40, 65, 78, 444}, //Gold + {3042, 1, 18, 3, 436}, //Copper + {3043, 1, 18, 3, 438}, //Tin + }; + + public int getRandomAdd() { + int random = 0; + for (int i = 0; i < Rock_Settings.length; i++) { + if (Rock_Settings[i][3] == 3) { + random = Misc.random(3); + } else if (Rock_Settings[i][3] == 7) { + random = Misc.random(7); + } else if (Rock_Settings[i][3] == 38) { + random = Misc.random(38); + } else if (Rock_Settings[i][3] == 78) { + random = Misc.random(78); + } else if (Rock_Settings[i][3] == 155) { + random = Misc.random(155); + } else if (Rock_Settings[i][3] == 315) { + random = Misc.random(315); + } else if (Rock_Settings[i][3] == 970) { + random = Misc.random(970); + } + } + return random; + } + + int a = -1; + + public void repeatAnimation(final Client c) { + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.isMining) { + c.startAnimation(Pick_Settings[a][3]); + } else { + container.stop(); + } + } + + @Override + public void stop() { + c.startAnimation(65535); + c.isMining = false; + } + }, 3); + } + + public void startMining(final Client player, final int objectNumber, final int objectX, final int objectY, final int type) { + if (player.isMining) + return; + if (player.miningRock) + return; + int miningLevel = player.playerLevel[player.playerMining]; + a = -1; + player.turnPlayerTo(objectX, objectY); + if (Rock_Settings[objectNumber][1] > miningLevel) { + player.getActionSender().sendMessage("You need a Mining level of " + Rock_Settings[objectNumber][1] + " to mine this rock."); + return; + } + for (int i = 0; i < Pick_Settings.length; i++) { + if (player.getItemAssistant().playerHasItem(Pick_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Pick_Settings[i][0]) { + if (Pick_Settings[i][1] <= miningLevel) { + a = i; + } + } + } + if (a == -1) { + player.getActionSender().sendMessage("You need a pickaxe to mine this rock."); + return; + } + if (player.getItemAssistant().freeSlots() < 1) { + player.getActionSender().sendMessage("You do not have enough inventory slots to do that."); + return; + } + player.startAnimation(Pick_Settings[a][3]); + player.isMining = true; + repeatAnimation(player); + player.rockX = objectX; + player.rockY = objectY; + player.miningRock = true; + if (player.tutorialProgress == 17 || player.tutorialProgress == 18) { + player.getActionSender().chatbox(6180); + player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to mine the rock.", "This should only take a few seconds.", "", "Please wait"); + player.getActionSender().chatbox(6179); + } else { + player.getActionSender().sendMessage("You swing your pick at the rock."); + } + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!player.isMining) { + container.stop(); + player.startAnimation(65535); + return; + } + if (player.isMining) { + player.getItemAssistant().addItem(Rock_Settings[objectNumber][4], 1); + player.getPlayerAssistant().addSkillXP(Rock_Settings[objectNumber][2], player.playerMining); + player.getActionSender().sendMessage("You manage to mine some " + ItemAssistant.getItemName(Rock_Settings[objectNumber][4]).toLowerCase() + "."); + } + if (player.tutorialProgress == 17) { + if (objectNumber == 18) { + player.getDialogueHandler().sendStatement("You should mine tin first."); + resetMining(player); + return; + } + if (player.getItemAssistant().playerHasItem(438)) { + player.getActionSender().createArrow(3086, 9501, player.getH(), 2); + player.getDialogueHandler().chatboxText(player, "Now you have some tin ore you must need some copper ore, then", "you'll have all you need to create a bronze bar. As you did before", "riger click on the copper rock and select 'mine'.", "", "Mining"); + player.tutorialProgress = 18; + } + } else if (player.tutorialProgress == 18) { + if (objectNumber == 19) { + player.getDialogueHandler().sendStatement("You have already mined this type of ore, now try the other."); + resetMining(player); + return; + } + if (player.getItemAssistant().playerHasItem(436)) { + player.getActionSender().createArrow(3078, 9495, 0, 2); + player.getDialogueHandler().sendDialogues(3061, -1); + } + } + if (player.getItemAssistant().freeSlots() < 1) { + player.getActionSender().sendMessage("You have ran out of inventory slots."); + container.stop(); + } + mineRock(Rock_Settings[objectNumber][3] + getRandomAdd(), objectX, objectY, type, Rock_Settings[objectNumber][0]); + player.isMining = false; + container.stop(); + } + @Override + public void stop() { + player.getPlayerAssistant().removeAllWindows(); + player.startAnimation(65535); + player.isMining = false; + player.rockX = 0; + player.rockY = 0; + player.miningRock = false; + return; + } + }, getTimer(objectNumber, a, miningLevel)); + } + + public static void resetMining(Client c) { + c.getPlayerAssistant().removeAllWindows(); + c.startAnimation(65535); + c.isMining = false; + c.rockX = 0; + c.rockY = 0; + c.miningRock = false; + } + + public int getTimer(int b, int c, int level) { + double timer = (int)((Rock_Settings[b][1] * 2) + 20 + Misc.random(20))-((Pick_Settings[c][2] * (Pick_Settings[c][2] * 0.75)) + level); + if (timer < 2.0) { + return 2; + } else { + return (int)timer; + } + } + + public void mineRock(int respawnTime, int x, int y, int type, int i) { + new Object(452, x, y, 0, type, 10, i, respawnTime); + Region.addObject(452, x, y, 0, 10, type, false); + for (int t = 0; t < PlayerHandler.players.length; t++) { + if (PlayerHandler.players[t] != null) { + if (PlayerHandler.players[t].rockX == x && PlayerHandler.players[t].rockY == y) { + PlayerHandler.players[t].isMining = false; + PlayerHandler.players[t].startAnimation(65535); + PlayerHandler.players[t].rockX = 0; + PlayerHandler.players[t].rockY = 0; + } + } + } + } + + public static void prospectRock(final Client c, final String itemName) { + if (c.tutorialProgress == 15 || c.tutorialProgress == 16) { + c.getPlayerAssistant().removeAllWindows(); + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "Please wait.", + "Your character is now attempting to prospect the rock. This should", + "only take a few seconds.", "", ""); + c.getActionSender().chatbox(6179); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.tutorialProgress == 15) { + c.getActionSender().sendMessage( + "This rock contains " + + itemName.toLowerCase() + "."); + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "", + "So now you know there's tin in the grey rocks. Try prospecting", + "the brown ones next.", "", + "It's tin"); + c.getActionSender().createArrow(3086, 9501, + c.getH(), 2); + c.getActionSender().chatbox(6179); + c.tutorialProgress = 16; + container.stop(); + return; + } else if (c.tutorialProgress == 16) { + c.getActionSender().sendMessage( + "This rock contains " + + itemName.toLowerCase() + "."); + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "Talk to the Mining Instructor to find out about these types of", + "ore and how you can mine them. He'll even give you the", + "required tools.", "", + "It's copper"); + c.getActionSender().createArrow(1, 5); + c.getActionSender().chatbox(6179); + container.stop(); + return; + } + c.getActionSender().sendMessage( + "This rock contains " + + itemName.toLowerCase() + "."); + stop(); + } + + @Override + public void stop() { + + } + + }, 3); + return; + } + c.getActionSender().sendMessage("You examine the rock for ores..."); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getActionSender().sendMessage("This rock contains " + itemName + "."); + container.stop(); + } + @Override + public void stop() { + + } + }, 3); + } + + public static void prospectNothing(final Client c) { + c.getActionSender().sendMessage("You examine the rock for ores..."); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getActionSender().sendMessage("There is no ore left in this rock."); + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + } + + public static enum rockData { + ESSENCE(new int[] { 2491 }, 1, 5, 3, 1, new int[] { 1436 }), + CLAY(new int[] { 2108, 2109, 11189, 11190, 11191, 9713, 9711, 14905, 14904 }, 1, 5, 1, 5, new int[] { 434 }), + COPPER(new int[] { 3042, 2091, 2090, 9708, 9709, 9710, 11960, 14906, 14907 }, 1, 18, 1, 8, new int[] { 436 }), + TIN(new int[] { 2094, 2095, 3043, 9716, 9714, 11958, 11957, 11959, 11933, 11934, 11935, 14903, 14902 }, 1, 18, 1, 8, new int[] { 438 }), + BLURITE(new int[] { 10574, 10583, 2110 }, 10, 20, 1, 8, new int[] { 668 }), + IRON(new int[] { 2093, 2092, 9717, 9718, 9719, 11962, 11956, 11954, 14856, 14857, 14858, 14914, 14913 }, 15, 35, 2, 5, new int[] { 440 }), + SILVER(new int[] { 2101, 11186, 11187, 11188, 2100 }, 20, 40, 3, 20, new int[] { 442 }), + COAL(new int[] { 2096, 2097, 11963, 11964, 14850, 14851, 14852, 11930, 11931 }, 30, 50, 4, 25, new int[] { 453 }), + GOLD(new int[] { 2099, 2098, 11183, 11184, 11185, 9720, 9722 }, 40, 65, 6, 33, new int[] { 444 }), + MITHRIL(new int[] { 2103, 2102, 14853, 14854, 14855 }, 55, 80, 8, 50, new int[] { 447 }), + ADAMANT(new int[] { 2104, 2105, 14862, 14863, 14864 }, 70, 95, 10, 83, new int[] { 449 }), + RUNE(new int[] { 14859, 14860, 2106, 2107 }, 85, 125, 20, 166, new int[] { 451 }), + GRANITE(new int[] { 10947 }, 45, 75, 10, 10, new int[] { 6979, 6981, 6983 }), + SANDSTONE(new int[] { 10946 }, 35, 60, 5, 5, new int[] { 6971, 6973, 6975, 6977 }), + GEM(new int[] {2111}, 40, 65, 6, 120, new int[] {1}); + + private final int levelReq, mineTimer, respawnTimer, xp; + private final int[] oreIds; + private final int[] objectId; + + private rockData(final int[] objectId, final int levelReq, final int xp, final int mineTimer, final int respawnTimer, final int... oreIds) { + this.objectId = objectId; + this.levelReq = levelReq; + this.xp = xp; + this.mineTimer = mineTimer; + this.respawnTimer = respawnTimer; + this.oreIds = oreIds; + } + + public int getObject(final int object) { + for (int element : objectId) { + if (object == element) { + return element; + } + } + return -1; + } + + public int getLevel() { + return levelReq; + } + + public int getXp() { + return xp; + } + + public int getTimer() { + return mineTimer; + } + + public int getResapwn() { + return respawnTimer; + } + + public int[] getOreIds() { + return oreIds; + } + } + + public static boolean rockExists(Client c, int rockExist) { + boolean rockExists = false; + for (final rockData a : rockData.values()) { + if (rockExist == a.getObject(rockExist)) { + rockExists = true; + } + } + return rockExists; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/core/Prayer.java b/2006Redone Server/src/redone/game/content/skills/core/Prayer.java new file mode 100644 index 00000000..ffef00b6 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/core/Prayer.java @@ -0,0 +1,94 @@ +package redone.game.content.skills.core; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.content.randomevents.Shade; +import redone.game.content.randomevents.Zombie; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Class Prayer Handles Prayer + * @author 2012 23:56 29/12/2010 + */ + +public class Prayer { + + private static int[][] data = { { 526, 5 }, // NPC BONES + { 528, 5 }, // BURNT BONES + { 530, 5 }, // BAT BONES + { 2859, 5 }, // WOLF BONES + { 3179, 5 }, // MONKEY BONES + { 3180, 5 }, // MONKEY BONES + { 3181, 5 }, // MONKEY BONES + { 3182, 5 }, // MONKEY BONES + { 3183, 5 }, // MONKEY BONES + { 3185, 5 }, // MONKEY BONES + { 3186, 5 }, // MONKEY BONES + { 3187, 5 }, // MONKEY BONES + { 532, 15 }, // BIG BONES + { 534, 30 }, // BABY DRAGON BONES + { 536, 72 }, // DRAGON BONES + { 2530, 5 }, // PLAYER BONES + { 3123, 25 }, // SHAIKAHAN BONES + { 3125, 23 }, // JOGRE BONES + { 3127, 25 }, // BURNT JOGRE BONES + { 4812, 82 }, // ZOGRE BONES + { 4830, 84 }, // FAYGR BONES + { 4832, 96 }, // RAURG BONES + { 4834, 140 }, // OURG BONES + { 6729, 125 }, // DAGANNOTH BONES + { 6812, 50 }, // WYVERN BONES + }; + + public static boolean playerBones(Client c, int item) { + for (int[] element : data) { + if (item == element[0]) { + return true; + } + } + return false; + } + + private static void handleBones(final Client c, int i, int slot) { + if (Misc.random(300) == 4 && c.shadeSpawned == false) { + Zombie.spawnZombie(c); + } else if (Misc.random(300) == 2 && c.zombieSpawned == false) { + Shade.spawnShade(c); + } + for (final int[] element : data) { + if (i == element[0]) { + if (!SkillHandler.PRAYER) { + c.getActionSender().sendMessage("This skill is currently disabled."); + } + if (System.currentTimeMillis() - c.buryDelay > 800) { + c.getItemAssistant().deleteItem(element[0], slot, 1); + c.getPlayerAssistant().addSkillXP(element[1], 5); + c.buryDelay = System.currentTimeMillis(); + c.startAnimation(827); + c.getActionSender().sendSound(SoundList.BONE_BURY, 100, 0); + c.getActionSender().sendMessage("You dig a hole in the ground..."); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getActionSender().sendMessage("You bury the " + ItemAssistant.getItemName(element[0]).toLowerCase() + "."); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + } + } + } + + public static void buryBones(Client c, int i, int slot) { + handleBones(c, i, slot); + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/core/Woodcutting.java b/2006Redone Server/src/redone/game/content/skills/core/Woodcutting.java new file mode 100644 index 00000000..9b73bed2 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/core/Woodcutting.java @@ -0,0 +1,380 @@ +package redone.game.content.skills.core; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.randomevents.TreeSpirit; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.objects.Object; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.game.players.antimacro.AntiBotting; +import redone.util.Misc; + +/** + * Woodcutting + */ + +public class Woodcutting { + + public final static int[][] Axe_Settings = { + {1351, 1, 1, 879}, + {1349, 1, 2, 877}, + {1353, 6, 3, 875}, + {1361, 6, 4, 873}, + {1355, 21, 5, 871}, + {1357, 31, 6, 869}, + {1359, 41, 7, 867}, + {6739, 61, 8, 2846}, + {13661, 41, 8, 10251} + }; + + public final static int[][] Tree_Settings = { + { 1276, 1342, 1, 25, 1511, 45, 100 }, + { 1278, 1342, 1, 25, 1511, 45, 100 }, + { 1286, 1342, 1, 25, 1511, 45, 100 }, + { 1281, 1356, 15, 38, 1521, 11, 20 }, + { 1308, 7399, 30, 68, 1519, 11, 8 }, + { 5552, 7399, 30, 68, 1519, 11, 8 }, + { 1307, 1343, 45, 100, 1517, 48, 8 }, + { 1309, 7402, 60, 175, 1515, 79, 5 }, + { 1306, 7401, 75, 250, 1513, 150, 3 }, + { 5551, 7399, 30, 68, 1519, 11, 8 }, + { 5553, 7399, 30, 68, 1519, 11, 8 }, + { 3033, 1342, 1, 25, 1511, 45, 100 }, + { 3037, 1356, 15, 38, 1521, 11, 20 }, + { 1282, 1342, 1, 25, 1511, 45, 100 }, + { 1383, 1342, 1, 25, 1511, 45, 100 }, + { 2023, 3371, 1, 25, 2862, 45, 100 }, + { 1319, 1341, 1, 25, 1511, 45, 100 }, + { 1318, 1341, 1, 25, 1511, 45, 100 }, + { 1315, 1341, 1, 25, 1511, 45, 100 }, + { 1316, 1341, 1, 25, 1511, 45, 100 }, + { 1332, 1341, 1, 25, 1511, 45, 100 }, + { 1292, 1341, 36, 1, 771, 45, 100 } + }; + + public static int[][] FIX_AXE = { { 492, 508, 1351 }, { 492, 510, 1349 }, + { 492, 512, 1353 }, { 492, 514, 1361 }, { 492, 516, 1355 }, + { 492, 518, 1357 }, { 492, 520, 1359 }, }; + + private static int a = -1; + + public static void repeatAnimation(final Client player) { + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.isWoodcutting) { + player.startAnimation(Axe_Settings[a][3]); + player.getActionSender().sendSound(SoundList.TREE_CUTTING, 100, 0); + } else { + container.stop(); + } + } + + @Override + public void stop() { + stopWoodcutting(player); + } + }, 3); + } + + public static void handleCanoe(final Client player, final int objectId) { + if (player.playerLevel[player.playerWoodcutting] < 12) { + player.getActionSender().sendMessage("You need a woodcutting level of at least 12 to use the canoe station."); + return; + } + for (int axes[] : Axe_Settings) { + int type = axes[0]; + int level = axes[1]; + int anim = axes[3]; + if (player.playerLevel[player.playerWoodcutting] >= level && player.getItemAssistant().playerHasItem(type) || player.playerLevel[player.playerWoodcutting] >= level && player.playerEquipment[player.playerWeapon] == type) { + player.turnPlayerTo(player.objectX, player.objectY); + player.startAnimation(anim); + player.getActionSender().sendMessage("You swing your axe at the station."); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + addFallenTree(player, objectId); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getPlayerAssistant().handleCanoe(); + container.stop(); + } + + @Override + public void stop() { + + } + + }, 1); + player.getActionSender().sendMessage("You cut down the canoe. Please wait..."); + container.stop(); + } + + @Override + public void stop() { + + } + }, 4); + } + } + } + + public void fixAxe(final Client player) { + for (int fix[] : FIX_AXE) { + int axeHandle = fix[0]; + int axeHead = fix[1]; + final int fixedAxe = fix[2]; + if (player.getItemAssistant().playerHasItem(axeHandle) && player.getItemAssistant().playerHasItem(axeHead)) { + player.isWoodcutting = true; + player.getItemAssistant().deleteItem(axeHandle, 1); + player.getItemAssistant().deleteItem(axeHead, 1); + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().sendMessage("Your axe handle and axe head have been taken."); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getItemAssistant().addItem(fixedAxe, 1); + player.getActionSender().sendMessage("Your axe has been fixed."); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + } + } + + public static void addFallenTree(Client player, int canoe) { + if (canoe == player.objectId) { + for (Player players : PlayerHandler.players) { + if (players != null) { + new Object(1296, player.objectX, player.objectY, 0, 0, 10, canoe, 20 + Misc.random(40)); + } + } + } + } + + public boolean hasAxe(Client player) { + for (int i = 0; i < Axe_Settings.length; i++) { + if (player.getItemAssistant().playerHasItem(Axe_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Axe_Settings[i][0]) { + return true; + } + } + return false; + } + + public static void startWoodcutting(final Client player, final int j, final int x, final int y, final int type) { + if (player.isWoodcutting || player.isFletching || player.isFiremaking || player.playerIsFletching) { + return; + } + if (player.absX == 2717 && player.absY == 3461) { + player.getActionSender().sendMessage("You can't cut the tree from here!"); + return; + } + if (!SkillHandler.WOODCUTTING) { + player.getActionSender().sendMessage("This skill is currently disabled."); + return; + } + int wcLevel = player.playerLevel[8]; + a = -1; + player.turnPlayerTo(x, y); + if (Tree_Settings[j][2] > wcLevel) { + player.getActionSender().sendMessage("You need a Woodcutting level of " + Tree_Settings[j][2] + " to cut this tree."); + return; + } + for (int i = 0; i < Axe_Settings.length; i++) { + if (player.getItemAssistant().playerHasItem(Axe_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Axe_Settings[i][0]) { + if (Axe_Settings[i][1] <= wcLevel) { + a = i; + } + } + } + if (a == -1) { + player.getActionSender().sendMessage("You need an axe to cut this tree."); + return; + } + if (player.getItemAssistant().freeSlots() < 1) { + player.getActionSender().sendMessage("You do not have enough inventory slots to do that."); + return; + } + if (Misc.goodDistance(player.objectX, player.objectY, player.absX, player.absY, 3)) { + if (player.isWoodcutting == true) { + player.getActionSender().sendMessage("You are already woodcutting!"); + return; + } + player.startAnimation(Axe_Settings[a][3]); + player.isWoodcutting = true; + player.getActionSender().sendSound(SoundList.TREE_CUT_BEGIN, 100, 0); + repeatAnimation(player); + player.treeX = x; + player.treeY = y; + if (player.tutorialProgress == 3) { + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + if (player.playerAppearance[0] == 0) { + player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to cut down the tree. Sit back", "for a moment while he does all the hard work.", "", "Please wait"); + } else { + player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to cut down the tree. Sit back", "for a moment while she does all the hard work.", "", "Please wait"); + } + player.getActionSender().chatbox(6179); + } else { + player.getActionSender().sendMessage("You swing your axe at the tree."); + } + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (!player.isWoodcutting) { + container.stop(); + return; + } + if (player.disconnected) { + container.stop(); + return; + } + if (player.isWoodcutting) { + player.startAnimation(Axe_Settings[a][3]); + } + if (player.getItemAssistant().freeSlots() < 1) { + player.getActionSender().sendMessage("You have ran out of inventory slots."); + container.stop(); + } + int XP = Tree_Settings[j][3]; + if (player.isWoodcutting) { + player.getItemAssistant().addItem(Tree_Settings[j][4], 1); + player.getPlayerAssistant().addSkillXP(XP, 8); + player.getActionSender().sendMessage("You manage to get some " + ItemAssistant.getItemName(Tree_Settings[j][4]).toLowerCase() + " from the tree."); + } + if (player.tutorialProgress == 3) { + player.getDialogueHandler().sendDialogues(3014, 0); + } + if (player.isWoodcutting) { + birdNests(player); + } + if (player.isWoodcutting && player.tutorialProgress >= 36 && player.treeSpiritSpawned == false && Misc.random(300) == 10) { + AntiBotting.botCheckInterface(player); + } + if (player.isWoodcutting && player.tutorialProgress >= 36 && player.treeSpiritSpawned == false) { + RandomEventHandler.addRandom(player); + } + if (player.isWoodcutting && Misc.random(350) == 69 && player.tutorialProgress >= 36) { + TreeSpirit.spawnTreeSpirit(player); + } + if (player.playerIsFletching || player.isFiremaking) { + container.stop(); + } + if (Misc.random(100) <= Tree_Settings[j][6]) { + cutDownTree(Tree_Settings[j][5], x, y, type, Tree_Settings[j][1], Tree_Settings[j][0]); + player.getActionSender().sendSound(SoundList.TREE_EMPTY, 100, 0); + container.stop(); + } + } + @Override + public void stop() { + player.startAnimation(65535); + player.isWoodcutting = false; + player.treeX = 0; + player.treeY = 0; + } + }, getTimer(j, a, wcLevel)); + } + } + + public static void stopWoodcutting(Client player) { + player.startAnimation(65535); + player.isWoodcutting = false; + player.treeX = 0; + player.treeY = 0; + } + + public static int getTimer(int b, int c, int level) { + double timer = (int)((Tree_Settings[b][2] * 2) + 20 + Misc.random(20))-((Axe_Settings[c][2] * (Axe_Settings[c][2] * 0.75)) + level); + if (timer < 3.0) { + return 3; + } else { + return (int)timer; + } + } + + public static void birdNests(Client player) { + if (Misc.random(200) == 69 && player.tutorialProgress >= 36) { + player.getActionSender().sendMessage("A birds nest falls from the branches."); + dropNest(player); + } + } + + public static void dropNest(Client player) { + Server.itemHandler.createGroundItem(player, 5070 + Misc.random(4), player.getX(), player.getY(), 1, player.getId()); + } + + public static boolean playerTrees(Client player, int tree) { + boolean trees2 = false; + for (int i = 0; i < trees.length; i++) { + for (int i1 = 0; i1 < 6; i1++) { + if (tree == trees[i1][i]) { + trees2 = true; + } + } + } + return trees2; + } + + public static int[][] trees = { + { // NORMAL + 1276, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1286, 1287, + 1288, 1289, 1290, 1291, 1301, 1303, 1304, 1305, 1318, 1319, + 1315, 1316, 1330, 1331, 1332, 1333, 1383, 1384, 2409, 2447, + 2448, 3033, 3034, 3035, 3036, 3879, 3881, 3883, 3893, 3885, + 3886, 3887, 3888, 3892, 3889, 3890, 3891, 3928, 3967, 3968, + 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4060, 5004, 5005, + 5045, 5902, 5903, 5904, 8973, 8974, 10041, 10081, 10082, + 10664, 11112, 11510, 12559, 12560, 12732, 12895, 12896, + 13412, 13411, 13419, 13843, 13844, 13845, 13847, 13848, + 13849, 13850, 14308, 14309, 14513, 14514, 14515, 14521, + 14564, 14565, 14566, 14593, 14594, 14595, 14600, 14635, + 14636, 14637, 14642, 14664, 14665, 14666, 14693, 14694, + 14695, 14696, 14701, 14738, 14796, 14797, 14798, 14799, + 14800, 14801, 14802, 14803, 14804, 14805, 14806, 14807, + 15489, 15776, 15777, 16264, 16265, 19165, 19166, 19167, + 23381, + + }, + { // OAK + 1281, 3037, 8462, 8463, 8464, 8465, 8466, 8467, 10083, 13413, + 13420, }, + { // WILLOW + 1308, 5551, 5552, 5553, 8481, 8482, 8483, 8484, 8485, 8486, 8487, + 8488, 8496, 8497, 8498, 8499, 8500, 8501, 13414, 13421, }, + { // MAPLE + 1307, 4674, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, + 8444, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, + 13415, 13423, }, { // YEW + 1309, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, + 8513, 13416, 13422, }, { // MAGIC + 1306, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, + 8406, 8407, 8408, 8409, 13417, 13424, } }; + + public static void cutDownTree(int respawnTime, int x, int y, int type, int i, int j) { + new Object(i, x, y, 0, type, 10, j, respawnTime); + for (int t = 0; t < PlayerHandler.players.length; t++) { + if (PlayerHandler.players[t] != null) { + if (PlayerHandler.players[t].treeX == x && PlayerHandler.players[t].treeY == y) { + PlayerHandler.players[t].isWoodcutting = false; + PlayerHandler.players[t].startAnimation(65535); + PlayerHandler.players[t].treeX = 0; + PlayerHandler.players[t].treeY = 0; + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/CraftingData.java b/2006Redone Server/src/redone/game/content/skills/crafting/CraftingData.java new file mode 100644 index 00000000..86b9a4fe --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/CraftingData.java @@ -0,0 +1,367 @@ +package redone.game.content.skills.crafting; + +import redone.game.content.skills.SkillHandler; + +public class CraftingData extends SkillHandler { + + public static enum tanningData { + + SOFT_LEATHER(new int[][] { { 57225, 1 }, { 57217, 5 }, { 57201, 28 } }, + 1739, 1741, 1, new int[] { 14777, 14785, 14769 }, + "Soft leather"), HARD_LEATHER(new int[][] { { 57226, 1 }, + { 57218, 5 }, { 57202, 28 } }, 1739, 1743, 3, new int[] { + 14778, 14786, 14770 }, "Hard leather"), SNAKESKIN(new int[][] { + { 57227, 1 }, { 57219, 5 }, { 57203, 28 } }, 6287, 6289, 15, + new int[] { 14779, 14787, 14771 }, "Snakeskin"), SNAKESKIN2( + new int[][] { { 57228, 1 }, { 57220, 5 }, { 57204, 28 } }, + 6287, 6289, 20, new int[] { 14780, 14788, 14772 }, "Snakeskin"), GREEN_DRAGON_LEATHER( + new int[][] { { 57229, 1 }, { 57221, 5 }, { 57205, 28 } }, + 1753, 1745, 20, new int[] { 14781, 14789, 14773 }, + "Green d'hide"), BLUE_DRAGON_LEATHER(new int[][] { + { 57230, 1 }, { 57222, 5 }, { 57206, 28 } }, 1751, 2505, 20, + new int[] { 14782, 14790, 14774 }, "Blue d'hide"), RED_DRAGON_LEATHER( + new int[][] { { 57231, 1 }, { 57223, 5 }, { 57207, 28 } }, + 1749, 2507, 20, new int[] { 14783, 14791, 14775 }, "Red d'hide"), BLACK_DRAGON_LEATHER( + new int[][] { { 57232, 1 }, { 57224, 5 }, { 57208, 28 } }, + 1747, 2509, 20, new int[] { 14784, 14792, 14776 }, + "Black d'hide"); + + private final int[][] buttonId; + private final int hideId, leatherId, price; + private final int[] frameId; + private final String name; + + private tanningData(final int[][] buttonId, final int hideId, + final int leatherId, final int price, final int[] frameId, + final String name) { + this.buttonId = buttonId; + this.hideId = hideId; + this.leatherId = leatherId; + this.price = price; + this.frameId = frameId; + this.name = name; + } + + public int getButtonId(final int button) { + for (int[] element : buttonId) { + if (button == element[0]) { + return element[0]; + } + } + return -1; + } + + public int getAmount(final int button) { + for (int[] element : buttonId) { + if (button == element[0]) { + return element[1]; + } + } + return -1; + } + + public int getHideId() { + return hideId; + } + + public int getLeatherId() { + return leatherId; + } + + public int getPrice() { + return price; + } + + public int getNameFrame() { + return frameId[0]; + } + + public int getCostFrame() { + return frameId[1]; + } + + public int getItemFrame() { + return frameId[2]; + } + + public String getName() { + return name; + } + } + + public static enum leatherDialogueData { + + GREEN_LEATHER(1745, 1065, 1135, 1099), BLUE_LEATHER(2505, 2487, 2499, + 2493), RED_LEATHER(2507, 2489, 2501, 2495), BLACK_LEATHER(2509, + 2491, 2503, 2497); + + private final int leather, vambraces, chaps, body; + + private leatherDialogueData(final int leather, final int vambraces, + final int chaps, final int body) { + this.leather = leather; + this.vambraces = vambraces; + this.chaps = chaps; + this.body = body; + } + + public int getLeather() { + return leather; + } + + public int getVamb() { + return vambraces; + } + + public int getChaps() { + return chaps; + } + + public int getBody() { + return body; + } + } + + public enum Leather { + + LEATHER_GLOVES(1733, 1741, 1059, 1, 1, 13.75), LEATHER_BOOTS(1733, + 1741, 1061, 1, 7, 16.25); + + public int item1, leatherId, product, amountOfLeather, level; + public double xp; + + public static Leather forId(int itemUsed, int usedWith) { + for (Leather Data : Leather.values()) { + if (Data.item1 == itemUsed && Data.leatherId == usedWith + || Data.leatherId == itemUsed && Data.item1 == usedWith) { + return Data; + } + } + return null; + } + + private Leather(int item1, int leatherId, int product, + int amountOfLeather, int level, double xp) { + this.leatherId = leatherId; + this.product = product; + this.amountOfLeather = amountOfLeather; + this.level = level; + this.xp = xp; + } + + public int needle() { + return item1; + } + + public int getLeather() { + return leatherId; + } + + public int getProduct() { + return product; + } + + public int amountOfLeather4Product() { + return amountOfLeather; + } + + public int getLevel() { + return level; + } + + public double getXp() { + return xp; + } + } + + public static enum leatherData { + + LEATHER_BODY(new int[][] { { 33187, 1 }, { 33186, 5 }, { 33185, 10 } }, + 1741, 1129, 14, 25, 1), LEATHER_GLOVES(new int[][] { + { 33190, 1 }, { 33189, 5 }, { 33188, 10 } }, 1741, 1059, 1, + 13.8, 1), LEATHER_BOOTS(new int[][] { { 33193, 1 }, + { 33192, 5 }, { 33191, 10 } }, 1741, 1061, 7, 16.25, 1), LEATHER_VAMBRACES( + new int[][] { { 33196, 1 }, { 33195, 5 }, { 33194, 10 } }, 1741, + 1063, 11, 22, 1), LEATHER_CHAPS(new int[][] { { 33199, 1 }, + { 33198, 5 }, { 33197, 10 } }, 1741, 1095, 18, 27, 1), LEATHER_COIF( + new int[][] { { 33202, 1 }, { 33201, 5 }, { 33200, 10 } }, + 1741, 1169, 38, 37, 1), LEATHER_COWL(new int[][] { + { 33205, 1 }, { 33204, 5 }, { 33203, 10 } }, 1741, 1167, 9, + 18.5, 1), HARD_LEATHER_BODY(new int[][] { { 10239, 1 }, + { 10238, 5 }, { 6212, 28 } }, 1743, 1131, 28, 35, 1), SNAKESKIN_BODY( + new int[][] { { 34245, 1 }, { 34244, 5 }, { 34243, 10 }, + { 34242, 28 } }, 6289, 6322, 53, 55, 15), SNAKESKIN_CHAPS( + new int[][] { { 34249, 1 }, { 34248, 5 }, { 34247, 10 }, + { 34246, 28 } }, 6289, 6324, 51, 50, 12), SNAKESKIN_BANDANA( + new int[][] { { 34253, 1 }, { 34252, 5 }, { 34251, 10 }, + { 34250, 28 } }, 6289, 6326, 48, 45, 5), SNAKESKIN_BOOTS( + new int[][] { { 35001, 1 }, { 35000, 5 }, { 34255, 10 }, + { 34254, 28 } }, 6289, 6328, 45, 30, 6), SNAKESKIN_VAMBRACES( + new int[][] { { 35005, 1 }, { 35004, 5 }, { 35003, 10 }, + { 35002, 28 } }, 6289, 6330, 47, 35, 8), GREEN_DHIDE_VAMBRACES( + new int[][] { { 34185, 1 }, { 34184, 5 }, { 34183, 10 }, + { 34182, 28 } }, 1745, 1065, 57, 62, 1), GREEN_DHIDE_BODY( + new int[][] { { 34189, 1 }, { 34188, 5 }, { 34187, 10 }, + { 34186, 28 } }, 1745, 1135, 63, 186, 3), GREEN_DHIDE_CHAPS( + new int[][] { { 34193, 1 }, { 34192, 5 }, { 34191, 10 }, + { 34190, 28 } }, 1745, 1099, 60, 124, 2), BLUE_DHIDE_VAMBRACES( + new int[][] { { 34185, 1 }, { 34184, 5 }, { 34183, 10 }, + { 34182, 28 } }, 2505, 2487, 66, 70, 1), BLUE_DHIDE_BODY( + new int[][] { { 34189, 1 }, { 34188, 5 }, { 34187, 10 }, + { 34186, 28 } }, 2505, 2499, 71, 210, 3), BLUE_DHIDE_CHAPS( + new int[][] { { 34193, 1 }, { 34192, 5 }, { 34191, 10 }, + { 34190, 28 } }, 2505, 2493, 68, 140, 2), RED_DHIDE_VAMBRACES( + new int[][] { { 34185, 1 }, { 34184, 5 }, { 34183, 10 }, + { 34182, 28 } }, 2507, 2489, 73, 78, 1), RED_DHIDE_BODY( + new int[][] { { 34189, 1 }, { 34188, 5 }, { 34187, 10 }, + { 34186, 28 } }, 2507, 2501, 77, 234, 3), RED_DHIDE_CHAPS( + new int[][] { { 34193, 1 }, { 34192, 5 }, { 34191, 10 }, + { 34190, 28 } }, 2507, 2495, 75, 156, 2), BLACK_DHIDE_VAMBRACES( + new int[][] { { 34185, 1 }, { 34184, 5 }, { 34183, 10 }, + { 34182, 28 } }, 2509, 2491, 79, 86, 1), BLACK_DHIDE_BODY( + new int[][] { { 34189, 1 }, { 34188, 5 }, { 34187, 10 }, + { 34186, 28 } }, 2509, 2503, 84, 258, 3), BLACK_DHIDE_CHAPS( + new int[][] { { 34193, 1 }, { 34192, 5 }, { 34191, 10 }, + { 34190, 28 } }, 2509, 2497, 82, 172, 2); + + private final int[][] buttonId; + private final int leather, product, level, amount; + private final double xp; + + private leatherData(final int[][] buttonId, final int leather, + final int product, final int level, final double xp, + final int amount) { + this.buttonId = buttonId; + this.leather = leather; + this.product = product; + this.level = level; + this.xp = xp; + this.amount = amount; + } + + public int getButtonId(final int button) { + for (int[] element : buttonId) { + if (button == element[0]) { + return element[0]; + } + } + return -1; + } + + public int getAmount(final int button) { + for (int[] element : buttonId) { + if (button == element[0]) { + return element[1]; + } + } + return -1; + } + + public int getLeather() { + return leather; + } + + public int getProduct() { + return product; + } + + public int getLevel() { + return level; + } + + public double getXP() { + return xp; + } + + public int getHideAmount() { + return amount; + } + } + + public static enum cutGemData { + + SAPPHIRE(1623, 1607, 20, 50, 888), EMERALD(1621, 1605, 27, 67, 889), RUBY( + 1619, 1603, 34, 85, 887), DIAMOND(1617, 1601, 43, 107.5, 886), DRAGONSTONE( + 1631, 1615, 55, 137.5, 885), ONYX(6571, 6573, 67, 168, 885), /** + * + * Need correct animation ID + **/ + OPAL(1625, 1609, 1, 12, 890), JADE(1627, 1611, 13, 20, 891), RED_TOPAZ( + 1629, 1613, 16, 25, 892); + + private final int uncut, cut, level, animation; + private final double xp; + + private cutGemData(final int uncut, final int cut, final int level, + final double xp, final int animation) { + this.uncut = uncut; + this.cut = cut; + this.level = level; + this.xp = xp; + this.animation = animation; + } + + public int getUncut() { + return uncut; + } + + public int getCut() { + return cut; + } + + public int getLevel() { + return level; + } + + public double getXP() { + return xp; + } + + public int getAnimation() { + return animation; + } + } + + public static enum jewelryData { + + RINGS(new int[][] { { 2357, 1635, 5, 15 }, { 1607, 1637, 20, 40 }, + { 1605, 1639, 27, 55 }, { 1603, 1641, 34, 70 }, + { 1601, 1643, 43, 85 }, { 1615, 1645, 55, 100 }, + { 6573, 6575, 67, 115 } }), NECKLACE(new int[][] { + { 2357, 1654, 6, 20 }, { 1607, 1656, 22, 55 }, + { 1605, 1658, 29, 60 }, { 1603, 1660, 40, 75 }, + { 1601, 1662, 56, 90 }, { 1615, 1664, 72, 105 }, + { 6573, 6577, 82, 120 } }), AMULETS(new int[][] { + { 2357, 1673, 8, 30 }, { 1607, 1675, 24, 65 }, + { 1605, 1677, 31, 70 }, { 1603, 1679, 50, 85 }, + { 1601, 1681, 70, 100 }, { 1615, 1683, 80, 150 }, + { 6573, 6579, 90, 165 } }); + + public int[][] item; + + private jewelryData(final int[][] item) { + this.item = item; + } + } + + public static enum amuletData { + GOLD(1673, 1692), SAPPHIRE(1675, 1694), EMERALD(1677, 1696), RUBY(1679, + 1698), DIAMOND(1681, 1700), DRAGONSTONE(1683, 1702), ONYX(6579, + 6851); + + private final int amuletId, product; + + private amuletData(final int amuletId, final int product) { + this.amuletId = amuletId; + this.product = product; + } + + public int getAmuletId() { + return amuletId; + } + + public int getProduct() { + return product; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/GemCutting.java b/2006Redone Server/src/redone/game/content/skills/crafting/GemCutting.java new file mode 100644 index 00000000..96c12ce1 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/GemCutting.java @@ -0,0 +1,76 @@ +package redone.game.content.skills.crafting; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.util.Misc; + +public class GemCutting extends CraftingData { + + public static boolean cutGem(final Client c, final int itemUsed, + final int usedWith) { + /* + * if (c.isCrafting == true) { return false; } + */ + final int itemId = itemUsed == 1755 ? usedWith : itemUsed; + for (final cutGemData g : cutGemData.values()) { + if (itemId == g.getUncut()) { + if (c.playerLevel[12] < g.getLevel()) { + c.getActionSender().sendMessage( + "You need a crafting level of " + g.getLevel() + + " to cut this gem."); + return false; + } + if (!c.getItemAssistant().playerHasItem(itemId)) { + return false; + } + if (!CRAFTING) { + c.getActionSender().sendMessage( + "This skill is currently disabled."); + return false; + } + c.isCrafting = true; + c.startAnimation(g.getAnimation()); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (Misc.random(2) == 0 && itemUsed > 1624 && itemUsed < 1630 || usedWith > 1624 && usedWith < 1630 && Misc.random(2) == 0) { + c.getActionSender().sendMessage("You fail to cut the gem."); + c.getItemAssistant().addItem(1633, 1); + c.getItemAssistant().deleteItem2(itemId, 1); + c.getPlayerAssistant().addSkillXP(1, 12); + } + if (c.isCrafting == true) { + if (c.getItemAssistant().playerHasItem(itemId)) { + c.getItemAssistant().deleteItem(itemId, 1); + c.getItemAssistant().addItem(g.getCut(), 1); + c.getPlayerAssistant().addSkillXP((int) g.getXP(), 12); + c.getItemAssistant(); + c.getActionSender().sendMessage( + "You cut the " + + ItemAssistant.getItemName( + itemId).toLowerCase() + + "."); + c.startAnimation(g.getAnimation()); + c.getActionSender().sendSound( + SoundList.CUT_GEM, 100, 0); + } else { + container.stop(); + } + } else { + container.stop(); + } + } + @Override + public void stop() { + + } + }, 4); + } + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/GlassBlowing.java b/2006Redone Server/src/redone/game/content/skills/crafting/GlassBlowing.java new file mode 100644 index 00000000..df4f1548 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/GlassBlowing.java @@ -0,0 +1,123 @@ +package redone.game.content.skills.crafting; + +import redone.Constants; +import redone.event.*; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Arrowz flame + */ +public class GlassBlowing { + + private Client c; + + public GlassBlowing(Client c) { + this.c = c; + } + + public int[][] data = { + {44210, 229, 33, 35}, + {48108, 567, 46 ,53}, + {48112, 1919, 1, 18}, + {48116, 4527, 4, 19}, + {48120, 4522, 12, 25}, + {24059, 6667, 42, 42}, + {48124, 4542, 49, 55} + }; + + private boolean started; + + public boolean getStarted() { + return started; + } + + public void setStarted(boolean started) { + this.started = started; + } + + public void showInterface() { + if(!started) { + c.getPlayerAssistant().showInterface(11462); + } + } + + + public void ItemOnItem(int id, int id2) { + if(id == 1785 && id2 == 1775) { + showInterface(); + } else if(id2 == 1785 && id == 1775) { + showInterface(); + } + } + + public void handleActionButtin(int buttonId) { + for(int i = 0; i < data.length; i++) { + if(data[i][0] == buttonId) { + makeItem(data[i][1], 1, i); + c.getPlayerAssistant().closeAllWindows(); + break; + } + + if(data[i][0] == buttonId+1) { + makeItem(data[i][1], 5, i); + c.getPlayerAssistant().closeAllWindows(); + break; + } + + if(data[i][0] == buttonId+2) { + makeItem(data[i][1], 10, i); + c.getPlayerAssistant().closeAllWindows(); + break; + } + + if(data[i][0] == buttonId+3) { + makeItem(data[i][1], 28, i); + c.getPlayerAssistant().closeAllWindows(); + break; + } + } + + } + + public void makeItem(final int id, final int amount, final int slot) { + if(c.playerLevel[Constants.CRAFTING] < data[slot][2]) { + c.getActionSender().sendMessage("You need a crafting level of "+data[slot][2]+" make a "+ItemAssistant.getItemName(id)+""); + return; + } + if(!started) { + + started = true; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + int made = 0; + @Override + public void execute(CycleEventContainer container) { + if(!started) { + container.stop(); + } + if(c.getItemAssistant().playerHasItem(1775)) { + if(c.getItemAssistant().playerHasItem(1785)) { + c.getItemAssistant().deleteItem(1775, 1); + c.getItemAssistant().addItem(id, 1); + c.getPlayerAssistant().addSkillXP(data[slot][3], Constants.CRAFTING); + c.startAnimation(884); + made++; + if(made >= amount) { + container.stop(); + } + } else { + container.stop(); + } + } else { + container.stop(); + } + } + + public void stop() { + started = false; + } + + },2); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/JewelryMaking.java b/2006Redone Server/src/redone/game/content/skills/crafting/JewelryMaking.java new file mode 100644 index 00000000..f15407dc --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/JewelryMaking.java @@ -0,0 +1,194 @@ +package redone.game.content.skills.crafting; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class JewelryMaking { + + private final static int[][] RINGS = { // Ring, Gem, Level, XP + { 1635, -1, 5, 15 }, { 1637, 1607, 20, 40 }, { 1639, 1605, 27, 55 }, + { 1641, 1603, 34, 70 }, { 1643, 1601, 43, 85 }, + { 1645, 1615, 55, 100 }, { 6575, 6573, 67, 115 } }; + private final static int[][] NECKLACES = { { 1654, -1, 6, 20 }, + { 1656, 1607, 22, 55 }, { 1658, 1605, 29, 60 }, + { 1660, 1603, 40, 75 }, { 1662, 1601, 56, 90 }, + { 1664, 1615, 72, 105 }, { 6577, 6573, 82, 120 } }; + private static int[][] AMULETS = { { 1673, -1, 8, 30 }, + { 1675, 1607, 24, 65 }, { 1677, 1605, 31, 70 }, + { 1679, 1603, 50, 85 }, { 1681, 1601, 70, 100 }, + { 1683, 1615, 80, 150 }, { 6579, 6573, 90, 165 } }; + + private final static int[][] MOULD_INTERFACE_IDS = { + /* Rings */ + { 1635, 1637, 1639, 1641, 1643, 1645, 6575 }, + /* Neclece */ + { 1654, 1656, 1658, 1660, 1662, 1664, 6577 }, + /* amulet */ + { 1673, 1675, 1677, 1679, 1681, 1683, 6579 } + + }; + + public static void mouldInterface(Client c) { + c.getPlayerAssistant().showInterface(4161); + /* Rings */ + if (c.getItemAssistant().playerHasItem(1592, 1)) { + for (int i = 0; i < MOULD_INTERFACE_IDS[0].length; i++) { + c.getPlayerAssistant().sendFrame34(MOULD_INTERFACE_IDS[0][i], + i, 4233, 1); + } + c.getPlayerAssistant().sendFrame34(1643, 4, 4233, 1); + c.getPlayerAssistant().sendFrame126("", 4230); + c.getPlayerAssistant().sendFrame246(4229, 0, -1); + } else { + c.getPlayerAssistant().sendFrame246(4229, 120, 1592); + for (int i = 0; i < MOULD_INTERFACE_IDS[0].length; i++) { + c.getPlayerAssistant().sendFrame34(-1, i, 4233, 1); + } + c.getPlayerAssistant().sendFrame126( + "You need a ring mould to craft rings.", 4230); + } + /* Necklace */ + if (c.getItemAssistant().playerHasItem(1597, 1)) { + for (int i = 0; i < MOULD_INTERFACE_IDS[1].length; i++) { + c.getPlayerAssistant().sendFrame34(MOULD_INTERFACE_IDS[1][i], + i, 4239, 1); + } + c.getPlayerAssistant().sendFrame34(1662, 4, 4239, 1); + c.getPlayerAssistant().sendFrame246(4235, 0, -1); + c.getPlayerAssistant().sendFrame126("", 4236); + } else { + c.getPlayerAssistant().sendFrame246(4235, 120, 1597); + c.getPlayerAssistant().sendFrame126( + "You need a necklace mould to craft necklaces", 4236); + for (int i = 0; i < MOULD_INTERFACE_IDS[1].length; i++) { + c.getPlayerAssistant().sendFrame34(-1, i, 4239, 1); + } + } + /* Amulets */ + if (c.getItemAssistant().playerHasItem(1595, 1)) { + for (int i = 0; i < MOULD_INTERFACE_IDS[2].length; i++) { + c.getPlayerAssistant().sendFrame34(MOULD_INTERFACE_IDS[2][i], + i, 4245, 1); + } + c.getPlayerAssistant().sendFrame34(1681, 4, 4245, 1); + c.getPlayerAssistant().sendFrame246(4241, 0, -1); + c.getPlayerAssistant().sendFrame126("", 4242); + } else { + c.getPlayerAssistant().sendFrame246(4241, 120, 1595); + c.getPlayerAssistant().sendFrame126( + "You need a amulet mould to craft necklaces", 4242); + for (int i = 0; i < MOULD_INTERFACE_IDS[2].length; i++) { + c.getPlayerAssistant().sendFrame34(-1, i, 4245, 1); + } + } + } + + public static void stringAmulet(final Client c, final int itemUsed, + final int usedWith) { + final int amuletId = itemUsed == 1759 ? usedWith : itemUsed; + for (final CraftingData.amuletData a : CraftingData.amuletData.values()) { + if (amuletId == a.getAmuletId()) { + c.getItemAssistant().deleteItem(1759, 1); + c.getItemAssistant().deleteItem(amuletId, 1); + c.getItemAssistant().addItem(a.getProduct(), 1); + c.getPlayerAssistant().addSkillXP(4, 12); + } + } + } + + public static void mouldItem(Client c, int item, int amount) { + int done = 0; + + final int GOLD_BAR = 2357; + + boolean isRing = false; + boolean isNeck = false; + boolean isAmulet = false; + int gem = 0; + int itemAdd = -1; + int xp = 0; + int lvl = 1; + for (int i = 0; i < 7; i++) { + if (item == RINGS[i][0]) { + isRing = true; + itemAdd = RINGS[i][0]; + gem = RINGS[i][1]; + lvl = RINGS[i][2]; + xp = RINGS[i][3]; + break; + } + if (item == NECKLACES[i][0]) { + isNeck = true; + itemAdd = NECKLACES[i][0]; + gem = NECKLACES[i][1]; + lvl = NECKLACES[i][2]; + xp = NECKLACES[i][3]; + break; + } + if (item == AMULETS[i][0]) { + isAmulet = true; + itemAdd = AMULETS[i][0]; + gem = AMULETS[i][1]; + lvl = AMULETS[i][2]; + xp = AMULETS[i][3]; + break; + } + } + if (!isRing && !isNeck && !isAmulet) { + return; + } + if (c.playerLevel[c.playerCrafting] >= lvl) { + if (ItemAssistant.getItemName(itemAdd).toLowerCase() + .contains("gold") + && !c.getItemAssistant().playerHasItem(GOLD_BAR, 1) + || !c.getItemAssistant().playerHasItem(GOLD_BAR, 1)) { + c.getActionSender().sendMessage( + "You need a Gold bar to make this."); + return; + } else if (!c.getItemAssistant().playerHasItem(gem, 1) + && c.getItemAssistant().playerHasItem(GOLD_BAR, 1)) { + c.getActionSender().sendMessage( + getRequiredMessage(ItemAssistant.getItemName(gem))); + return; + } + c.getPlayerAssistant().removeAllWindows(); + while (done < amount + && (ItemAssistant.getItemName(gem).toLowerCase() + .contains("unarmed") + && c.getItemAssistant().playerHasItem(GOLD_BAR, 1) || c + .getItemAssistant().playerHasItem(gem, 1) + && c.getItemAssistant().playerHasItem(GOLD_BAR, 1))) { + c.getItemAssistant().deleteItem(gem, 1); + c.getItemAssistant().deleteItem(GOLD_BAR, 1); + c.getItemAssistant().addItem(itemAdd, 1); + c.getPlayerAssistant().addSkillXP(xp, c.playerCrafting); + c.getPlayerAssistant().refreshSkill(c.playerCrafting); + done++; + } + if (done == 1) { + c.getActionSender().sendMessage( + "You craft the gold to form a " + + ItemAssistant.getItemName(itemAdd) + "."); + } else if (done > 1) { + c.getActionSender().sendMessage( + "You craft the gold to form " + done + + " " + ItemAssistant.getItemName(itemAdd) + + "'s."); + } + } else { + c.getActionSender().sendMessage( + "You need a Crafting level of " + lvl + " to craft this."); + return; + } + } + + public static String getRequiredMessage(String item) { + if (item.startsWith("A") || item.startsWith("E") + || item.startsWith("I") || item.startsWith("O") + || item.startsWith("U")) { + return "You need a Gold bar and an " + item + " to make this."; + } else { + return "You need a Gold bar and a " + item + " to make this."; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/LeatherMaking.java b/2006Redone Server/src/redone/game/content/skills/crafting/LeatherMaking.java new file mode 100644 index 00000000..83148a3f --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/LeatherMaking.java @@ -0,0 +1,190 @@ +package redone.game.content.skills.crafting; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class LeatherMaking extends CraftingData { + + public static void craftLeatherDialogue(final Client c, final int itemUsed, + final int usedWith) { + for (final leatherData l : leatherData.values()) { + final int leather = itemUsed == 1733 ? usedWith : itemUsed; + if (leather == l.getLeather()) { + if (l.getLeather() == 1741) { + c.getPlayerAssistant().showInterface(2311); + c.leatherType = leather; + return; + } + String[] name = { "Body", "Chaps", "Bandana", "Boots", "Vamb", }; + if (l.getLeather() == 1743) { + c.getPlayerAssistant().sendChatInterface(4429); + c.getPlayerAssistant().sendFrame246(1746, 200, 1131); + c.getPlayerAssistant().sendFrame126( + ItemAssistant.getItemName(1131), 2799); + c.leatherType = leather; + } + if (l.getLeather() == 6289) { + c.getPlayerAssistant().sendChatInterface(8938); + c.getActionSender().itemOnInterface(8941, 180, 6322); + c.getActionSender().itemOnInterface(8942, 180, 6324); + c.getActionSender().itemOnInterface(8943, 180, 6326); + c.getActionSender().itemOnInterface(8944, 180, 6328); + c.getActionSender().itemOnInterface(8945, 180, 6330); + for (int i = 0; i < name.length; i++) { + c.getPlayerAssistant() + .sendFrame126(name[i], 8949 + i * 4); + } + c.leatherType = leather; + return; + } + } + } + for (final leatherDialogueData d : leatherDialogueData.values()) { + final int leather = itemUsed == 1733 ? usedWith : itemUsed; + String[] name = { "Vamb", "Body", "Chaps", }; + if (leather == d.getLeather()) { + c.getPlayerAssistant().sendChatInterface(8880); + c.getActionSender().itemOnInterface(8883, 180, d.getVamb()); + c.getActionSender() + .itemOnInterface(8884, 180, d.getChaps()); + c.getActionSender().itemOnInterface(8885, 180, d.getBody()); + for (int i = 0; i < name.length; i++) { + c.getPlayerAssistant().sendFrame126(name[i], 8889 + i * 4); + } + c.leatherType = leather; + return; + } + } + } + + private static int amount; + + public static void craftLeather(final Client c, final int buttonId) { + if (c.isCrafting == true) { + return; + } + for (final leatherData l : leatherData.values()) { + if (buttonId == l.getButtonId(buttonId)) { + if (c.leatherType == l.getLeather()) { + if (c.playerLevel[12] < l.getLevel()) { + c.getActionSender().sendMessage( + "You need a crafting level of " + l.getLevel() + + " to make this."); + c.getPlayerAssistant().removeAllWindows(); + return; + } + if (!c.getItemAssistant().playerHasItem(1734)) { + c.getActionSender().sendMessage( + "You need some thread to make this."); + c.getPlayerAssistant().removeAllWindows(); + return; + } + if (!c.getItemAssistant().playerHasItem(c.leatherType, + l.getHideAmount())) { + c.getActionSender().sendMessage( + "You need " + + l.getHideAmount() + + " " + + ItemAssistant.getItemName( + c.leatherType).toLowerCase() + + " to make " + + ItemAssistant.getItemName( + l.getProduct()).toLowerCase() + + "."); + c.getPlayerAssistant().removeAllWindows(); + return; + } + c.startAnimation(1249); + c.getPlayerAssistant().removeAllWindows(); + c.isCrafting = true; + amount = l.getAmount(buttonId); + CycleEventHandler.getSingleton().addEvent(c, + new CycleEvent() { + + @Override + public void execute( + CycleEventContainer container) { + if (c.isCrafting == true) { + if (!c.getItemAssistant() + .playerHasItem(1734)) { + c.getActionSender() + .sendMessage( + "You have run out of thread."); + container.stop(); + return; + } + if (!c.getItemAssistant() + .playerHasItem(c.leatherType, + l.getHideAmount())) { + c.getActionSender() + .sendMessage( + "You have run out of leather."); + container.stop(); + return; + } + if (amount == 0) { + container.stop(); + return; + } + c.getItemAssistant().deleteItem( + 1734, + c.getItemAssistant() + .getItemSlot(1734), 1); + c.getItemAssistant().deleteItem( + c.leatherType, + l.getHideAmount()); + c.getItemAssistant().addItem( + l.getProduct(), 1); + c.getActionSender() + .sendMessage( + "You make " + + (ItemAssistant + .getItemName( + l.getProduct()) + .contains( + "body") ? "a" + : "some") + + " " + + ItemAssistant + .getItemName(l + .getProduct()) + + "."); + c.getPlayerAssistant().addSkillXP( + (int) l.getXP(), 12); + c.startAnimation(1249); + amount--; + if (!c.getItemAssistant() + .playerHasItem(1734)) { + c.getActionSender() + .sendMessage( + "You have run out of thread."); + container.stop(); + return; + } + if (!c.getItemAssistant() + .playerHasItem(c.leatherType, + l.getHideAmount())) { + c.getActionSender() + .sendMessage( + "You have run out of leather."); + container.stop(); + return; + } + } else { + container.stop(); + } + } + + @Override + public void stop() { + c.isCrafting = false; + } + }, 5); + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/Pottery.java b/2006Redone Server/src/redone/game/content/skills/crafting/Pottery.java new file mode 100644 index 00000000..5bff0e87 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/Pottery.java @@ -0,0 +1,190 @@ +package redone.game.content.skills.crafting; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Tom + */ + +public class Pottery { + + public static int unFire = 896; + public static int Fire = 899; + public static int softClay = 1761; + + public static void showUnfire(Client c) { + c.getPlayerAssistant().sendChatInterface(8938); + c.getPlayerAssistant().sendFrame126("What would you like to make?", 8879); + c.getPlayerAssistant().sendFrame246(8941, 120, 1787); // first + c.getPlayerAssistant().sendFrame246(8942, 150, 1789); // second + c.getPlayerAssistant().sendFrame246(8943, 150, 1791); // third + c.getPlayerAssistant().sendFrame246(8944, 120, 5352); // 4th + c.getPlayerAssistant().sendFrame246(8945, 150, 4438); // 5th + c.getPlayerAssistant().sendFrame126("Pot", 8949); + c.getPlayerAssistant().sendFrame126("Pie Dish", 8953); + c.getPlayerAssistant().sendFrame126("Bowl", 8957); + c.getPlayerAssistant().sendFrame126("Plant pot", 8961); + c.getPlayerAssistant().sendFrame126("Pot lid", 8965); + c.showedUnfire = true; + } + + public static void showFire(Client c) { + c.getPlayerAssistant().sendChatInterface(8938); + c.getPlayerAssistant().sendFrame126("What would you like to make?", 8879); + c.getPlayerAssistant().sendFrame246(8941, 120, 1931); // first + c.getPlayerAssistant().sendFrame246(8942, 150, 2313); // second + c.getPlayerAssistant().sendFrame246(8943, 150, 1923); // third + c.getPlayerAssistant().sendFrame246(8944, 120, 5350); // 4th + c.getPlayerAssistant().sendFrame246(8945, 150, 4440); // 5th + c.getPlayerAssistant().sendFrame126("Pot", 8949); + c.getPlayerAssistant().sendFrame126("Pie Dish", 8953); + c.getPlayerAssistant().sendFrame126("Bowl", 8957); + c.getPlayerAssistant().sendFrame126("Plant pot", 8961); + c.getPlayerAssistant().sendFrame126("Pot lid", 8965); + c.showedFire = true; + } + + public static void makeUnfire(final Client c, final int id, + final double xp, final int level, int amount) { + c.getPlayerAssistant().closeAllWindows(); + c.doAmount = amount; + c.isPotCrafting = true; + if (c.getItemAssistant().playerHasItem(softClay) + && c.playerLevel[12] >= level && c.isPotCrafting == true) { + c.startAnimation(unFire); + c.getItemAssistant().deleteItem2(softClay, 1); + c.getItemAssistant().addItem(id, 1); + c.getActionSender().sendMessage( + "You make the soft clay into a " + + ItemAssistant.getItemName(id) + "."); + c.getPlayerAssistant().addSkillXP(xp, c.playerCrafting); + c.doAmount--; + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.getItemAssistant().playerHasItem(softClay) + && c.playerLevel[12] >= level && !(c.doAmount <= 0) + && c.isPotCrafting == true) { + c.startAnimation(unFire); + c.getItemAssistant().deleteItem2(softClay, 1); + c.getItemAssistant().addItem(id, 1); + c.getActionSender().sendMessage( + "You make the soft clay into a " + + ItemAssistant.getItemName(id) + "."); + c.getPlayerAssistant().addSkillXP(xp, c.playerCrafting); + c.doAmount--; + } + + if (c.playerLevel[12] < level) { + container.stop(); + c.getActionSender().sendMessage( + "You need a crafting level of " + level + + " to make this."); + } + + if (!c.getItemAssistant().playerHasItem(softClay)) { + container.stop(); + c.getActionSender().sendMessage( + "You need soft clay to do this."); + } + + if (c.isPotCrafting == false) { + container.stop(); + } + + if (c.doAmount <= 0) { + container.stop(); + } + + } + + @Override + public void stop() { + c.isPotCrafting = false; + c.startAnimation(65535); + } + }, 3); + } + + public static void makeFire(final Client c, final int startId, + final int finishId, final int level, final double xp, int amount) { + c.getPlayerAssistant().closeAllWindows(); + c.doAmount = amount; + c.isPotCrafting = true; + if (c.getItemAssistant().playerHasItem(startId) + && c.playerLevel[12] >= level && c.isPotCrafting == true) { + c.getItemAssistant().deleteItem2(startId, 1); + c.getItemAssistant().addItem(finishId, 1); + c.startAnimation(Fire); + c.getActionSender().sendSound(469, 100, 0); + c.getActionSender().sendMessage( + "You put a " + ItemAssistant.getItemName(startId) + + " into the oven."); + c.getActionSender().sendMessage( + "You retrieve the " + ItemAssistant.getItemName(finishId) + + " from the oven."); + c.getPlayerAssistant().addSkillXP(xp, c.playerCrafting); + c.doAmount--; + } + + if (c.playerLevel[12] < level) { + c.getActionSender().sendMessage( + "You need a crafting level of " + level + " to make this."); + } + + if (!c.getItemAssistant().playerHasItem(startId) + && c.playerLevel[12] >= level) { + c.getActionSender().sendMessage( + "You need an " + ItemAssistant.getItemName(startId) + + " to do this."); + } + + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.getItemAssistant().playerHasItem(startId) + && c.playerLevel[12] >= level + && c.isPotCrafting == true && !(c.doAmount <= 0)) { + c.getItemAssistant().deleteItem2(startId, 1); + c.getItemAssistant().addItem(finishId, 1); + c.startAnimation(Fire); + c.getActionSender().sendSound(469, 100, 0); + c.getActionSender().sendMessage( + "You put a " + ItemAssistant.getItemName(startId) + + " into the oven."); + c.getActionSender().sendMessage( + "You retrieve the " + + ItemAssistant.getItemName(finishId) + + " from the oven."); + c.getPlayerAssistant().addSkillXP(xp, c.playerCrafting); + c.doAmount--; + } + + if (c.isPotCrafting == false + || !c.getItemAssistant().playerHasItem(startId) + || c.playerLevel[12] < level) { + container.stop(); + } + + if (c.doAmount <= 0) { + container.stop(); + } + + } + + @Override + public void stop() { + c.isPotCrafting = false; + c.startAnimation(65535); + } + }, 5); + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/SoftClay.java b/2006Redone Server/src/redone/game/content/skills/crafting/SoftClay.java new file mode 100644 index 00000000..1908b6b7 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/SoftClay.java @@ -0,0 +1,54 @@ +package redone.game.content.skills.crafting; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.players.Client; + +/** + * Soft Clay + * + * @author Andrew + */ + +public class SoftClay { + + public static final int SOFT_CLAY = 1761, CLAY = 434; + + public static void makeClay(final Client client) { + if (!client.getItemAssistant().playerHasItem(CLAY)) { + client.getActionSender().sendMessage( + "You need clay to do this."); + return; + } + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + int amountToSubtract = client.getItemAssistant().getItemAmount(CLAY); + int amountToAdd = amountToSubtract; + client.doAmount = amountToSubtract; + client.addAmount = amountToAdd; + if (client.getItemAssistant().playerHasItem(CLAY)) { + client.getItemAssistant().deleteItem(CLAY, client.doAmount); + client.doAmount--; + client.getItemAssistant().addItem(SOFT_CLAY, client.addAmount); + client.addAmount++; + RandomEventHandler.addRandom(client); + if (client.doAmount == 0) { + client.getActionSender().sendMessage("You have ran out of clay to turn to soft clay."); + container.stop(); + } + if (client.disconnected) { + container.stop(); + } + } + } + @Override + public void stop() { + + } + }, 1); + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/Spinning.java b/2006Redone Server/src/redone/game/content/skills/crafting/Spinning.java new file mode 100644 index 00000000..d435f506 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/Spinning.java @@ -0,0 +1,79 @@ +package redone.game.content.skills.crafting; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class Spinning extends CraftingData { + + public static int[][] BEFORE_AFTER = { { 1737, 1759, 3, 1 }, + { 1779, 1777, 15, 10 } }; + + public static void showSpinning(Client c) { + c.getPlayerAssistant().sendChatInterface(8880); + c.getPlayerAssistant().sendFrame126("What would you like to make?", 8879); + c.getPlayerAssistant().sendFrame246(8883, 180, 1737); // left + c.getPlayerAssistant().sendFrame246(8884, 180, 1779); // middle + c.getPlayerAssistant().sendFrame246(8885, 180, 6051); // right + c.getPlayerAssistant().sendFrame126("Wool", 8889); + c.getPlayerAssistant().sendFrame126("Flax", 8893); + c.getPlayerAssistant().sendFrame126("Magic tree", 8897); + c.clickedSpinning = true; + } + + public static void getAmount(Client c, int amount) { + c.doAmount = amount; + spinItem(c); + c.isSpinning = true; + } + + public static void spinItem(final Client c) { + c.getPlayerAssistant().removeAllWindows(); + for (int[] element : BEFORE_AFTER) { + final int before = element[0]; + final int after = element[1]; + final int exp = element[2]; + final int level = element[3]; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.isSpinning == true) { + if (c.getItemAssistant().playerHasItem(before)) { + if (c.playerLevel[c.playerCrafting] < level) { + c.getDialogueHandler().sendStatement( + "You need a crafting level of " + level + + " to do this."); + return; + } + c.startAnimation(896); + int amount = c.getItemAssistant().getItemCount( before); + c.getItemAssistant().deleteItem(before, amount); + c.getItemAssistant().addItem(after, amount); + c.getPlayerAssistant().addSkillXP(exp * amount, c.playerCrafting); + c.getActionSender().sendMessage("You spin the " + ItemAssistant.getItemName(before) + " into a " + ItemAssistant.getItemName(after) + "."); + c.doAmount--; + } + + if (!c.getItemAssistant().playerHasItem(before) + || c.isSpinning == false) { + container.stop(); + } + + if (c.doAmount <= 0) { + container.stop(); + } + } + + } + + @Override + public void stop() { + c.isSpinning = false; + } + }, 2); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/crafting/Tanning.java b/2006Redone Server/src/redone/game/content/skills/crafting/Tanning.java new file mode 100644 index 00000000..f6df6d29 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/crafting/Tanning.java @@ -0,0 +1,64 @@ +package redone.game.content.skills.crafting; + +import redone.game.players.Client; + +public class Tanning extends CraftingData { + + public static void sendTanningInterface(final Client c) { + c.getPlayerAssistant().showInterface(14670); + for (final tanningData t : tanningData.values()) { + c.getActionSender().itemOnInterface(t.getItemFrame(), 250, + t.getLeatherId()); + c.getPlayerAssistant().sendFrame126(t.getName(), t.getNameFrame()); + if (c.getItemAssistant().playerHasItem(995, t.getPrice())) { + c.getPlayerAssistant().sendFrame126( + "@gre@Price: " + t.getPrice(), t.getCostFrame()); + } else { + c.getPlayerAssistant().sendFrame126( + "@red@Price: " + t.getPrice(), t.getCostFrame()); + } + } + } + + public static void tanHide(final Client c, final int buttonId) { + for (final tanningData t : tanningData.values()) { + if (buttonId == t.getButtonId(buttonId)) { + int amount = c.getItemAssistant().getItemCount(t.getHideId()); + if (amount > t.getAmount(buttonId)) { + amount = t.getAmount(buttonId); + } + int price = amount * t.getPrice(); + int coins = c.getItemAssistant().getItemCount(995); + if (price > coins) { + price = coins - coins % t.getPrice(); + } + if (price == 0) { + c.getActionSender().sendMessage( + "You do not have enough coins to tan this hide."); + return; + } + amount = price / t.getPrice(); + final int hide = t.getHideId(); + final int leather = t.getLeatherId(); + if (c.getItemAssistant().playerHasItem(995, price)) { + if (c.getItemAssistant().playerHasItem(hide)) { + c.getItemAssistant().deleteItem(hide, amount); + c.getItemAssistant().deleteItem(995, + c.getItemAssistant().getItemSlot(995), price); + c.getItemAssistant().addItem(leather, amount); + c.getActionSender().sendMessage( + "The tanner tans the hides for you."); + } else { + c.getActionSender().sendMessage( + "You do not have any hides to tan."); + return; + } + } else { + c.getActionSender().sendMessage( + "You do not have enough coins to tan this hide."); + return; + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/Allotments.java b/2006Redone Server/src/redone/game/content/skills/farming/Allotments.java new file mode 100644 index 00000000..1dc8fd1b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/Allotments.java @@ -0,0 +1,25 @@ +package redone.game.content.skills.farming; + +import redone.game.players.Client; + +/** + * Allotments + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Allotments { + + + private static final int[] ALLOTMENT = {8550, 8551, 8552, 8553}; + + public static boolean isAllotment(Client player, int objectType) { + for (int i = 0; i < ALLOTMENT.length; i++) { + if (objectType == ALLOTMENT[i]) { + return true; + } + } + return false; + + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/Farming.java b/2006Redone Server/src/redone/game/content/skills/farming/Farming.java new file mode 100644 index 00000000..11720224 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/Farming.java @@ -0,0 +1,25 @@ +package redone.game.content.skills.farming; + +import redone.game.players.Client; + +/** + * Farming + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Farming { + + public static void openGuide(Client player, int objectType) { + if (Flowers.isFlower(player, objectType)) { + player.getSkillInterfaces().farmingComplex(6); + player.getSkillInterfaces().selected = 20; + } else if (Herbs.isHerb(player, objectType)) { + player.getSkillInterfaces().farmingComplex(7); + player.getSkillInterfaces().selected = 20; + } else if (Allotments.isAllotment(player, objectType)) { + player.getSkillInterfaces().farmingComplex(1); + player.getSkillInterfaces().selected = 20; + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/FarmingConstants.java b/2006Redone Server/src/redone/game/content/skills/farming/FarmingConstants.java new file mode 100644 index 00000000..648da29d --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/FarmingConstants.java @@ -0,0 +1,25 @@ +package redone.game.content.skills.farming; + +public class FarmingConstants { + + public static final int WATERING_CAN_ANIM = 2293; + public static final int RAKING_ANIM = 2273; + public static final int SPADE_ANIM = 830; + public static final int SEED_DIBBING = 2291; + public static final int PICKING_VEGETABLE_ANIM = 2282; + public static final int PICKING_HERB_ANIM = 2279; + public static final int PUTTING_COMPOST = 2283; + public static final int CURING_ANIM = 2288; + public static final int FILLING_POT_ANIM = 2287; + public static final int PLANTING_POT_ANIM = 2272; + public static final int PRUNING_ANIM = 2275; + + public static final int RAKE = 5341; + public static final int SEED_DIBBER = 5343; + public static final int SPADE = 952; + public static final int TROWEL = 5325; + public static final int SECATEURS = 5329; + public static final int MAGIC_SECATEURS = 7409; + + public static final int[] WATERED_SAPPLING = {5364, 5365, 5366, 5367, 5368, 5369, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495}; +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/Flowers.java b/2006Redone Server/src/redone/game/content/skills/farming/Flowers.java new file mode 100644 index 00000000..2872f7e1 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/Flowers.java @@ -0,0 +1,24 @@ +package redone.game.content.skills.farming; + +import redone.game.players.Client; + + +/** + * Flowers + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Flowers { + + private static final int[] FLOWER_PATCH = {7847, 7848}; + + public static boolean isFlower(Client player, int objectType) { + for (int i = 0; i < FLOWER_PATCH.length; i++) { + if (objectType == FLOWER_PATCH[i]) { + return true; + } + } + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/Herbs.java b/2006Redone Server/src/redone/game/content/skills/farming/Herbs.java new file mode 100644 index 00000000..41f21943 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/Herbs.java @@ -0,0 +1,24 @@ +package redone.game.content.skills.farming; + +import redone.game.players.Client; + +/** + * Herbs + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Herbs { + + private static final int[] HERB_PATCH = {8150, 8151}; + + public static boolean isHerb(Client player, int objectType) { + for (int i = 0; i < HERB_PATCH.length; i++) { + if (objectType == HERB_PATCH[i]) { + return true; + } + } + return false; + + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/farming/Patch.java b/2006Redone Server/src/redone/game/content/skills/farming/Patch.java new file mode 100644 index 00000000..0941085e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/farming/Patch.java @@ -0,0 +1,11 @@ +package redone.game.content.skills.farming; + +/** + * Patch + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public enum Patch { + + +} diff --git a/2006Redone Server/src/redone/game/content/skills/firemaking/Firemaking.java b/2006Redone Server/src/redone/game/content/skills/firemaking/Firemaking.java new file mode 100644 index 00000000..bd55392f --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/firemaking/Firemaking.java @@ -0,0 +1,163 @@ +package redone.game.content.skills.firemaking; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.content.skills.SkillHandler; +import redone.game.content.skills.cooking.Cooking; +import redone.game.items.ItemAssistant; +import redone.game.objects.Object; +import redone.game.players.Client; +import redone.util.Misc; +import redone.world.clip.Region; + +public class Firemaking { + + public static boolean stopFiremaking = false, pickedUpFiremakingLog = false, logLit; + + public static void stopFiremaking(Client c) { + c.startAnimation(65535); + SkillHandler.lastSkillingAction = System.currentTimeMillis(); + c.isFiremaking = false; + Cooking.resetCooking(c); + logLit = false; + } + + public static void attemptFire(final Client c, final int itemUsed, final int usedWith, final int x, final int y, final boolean groundObject) { + int firemakingItems[] = {590, 7329, 7330, 7331}; + for (int i = 0; i < firemakingItems.length; i++) { + if (Firemaking.pickedUpFiremakingLog == true) { + c.getActionSender().sendMessage("You can't do that!"); + Firemaking.pickedUpFiremakingLog = false; + return; + } + if (c.isFiremaking && logLit == false) { + return; + } + if (!SkillHandler.FIREMAKING) { + c.getActionSender().sendMessage("This skill is currently disabled."); + return; + } + for (final LogData l : LogData.values()) { + final int logId = usedWith == firemakingItems[i] ? itemUsed : usedWith; + if (logId == l.getLogId()) { + if (c.playerLevel[11] < l.getLevel()) { + c.getActionSender().sendMessage("You need a firemaking level of " + l.getLevel() + " to light " + ItemAssistant.getItemName(logId)); + return; + } + if (c.inBank() || c.inLumbBuilding() || c.inDraynorBuilding()) { + c.getActionSender().sendMessage("You cannot light a fire here."); + return; + } + if (Server.objectManager.objectExists(c.absX, c.absY)) { + c.getActionSender().sendMessage("You cannot light a fire here."); + return; + } + c.isFiremaking = true; + logLit = false; + boolean notInstant = System.currentTimeMillis() - SkillHandler.lastSkillingAction > 2500; + int cycle = 2; + if (notInstant) { + c.getActionSender().sendMessage("You attempt to light a fire."); + c.getActionSender().sendSound(SoundList.FIRE_LIGHT, 100, 0); + if (!notInstant) { + c.getActionSender().sendSound(SoundList.FIRST_ATTEMPT, 100, 0);// testing + } + if (c.tutorialProgress == 4) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler().chatboxText(c, "", "Your character is now attempting to light the fire.", "This should only take a few seconds.", "", "Please wait"); + c.getActionSender().chatbox(6179); + } + if (groundObject == false) { + c.getItemAssistant().deleteItem(logId, c.getItemAssistant().getItemSlot(logId), 1); + Server.itemHandler.createGroundItem(c, logId, c.absX, c.absY, 1, c.playerId); + } + cycle = 3 + Misc.random(6); + } else { + if (groundObject == false) { + c.getItemAssistant().deleteItem(logId, c.getItemAssistant().getItemSlot(logId), 1); + } + } + final boolean walk; + if (Region.getClipping(x - 1, y, c.heightLevel, -1, 0)) { + walk = true; + } else { + walk = false; + } + c.startAnimation(733); + c.getPlayerAssistant().walkTo(walk == true ? -1 : 1, 0); + stopFiremaking = false; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (stopFiremaking == true) { + stopFiremaking = false; + return; + } + if (c.isWoodcutting || c.playerIsFletching || c.isFletching) { + container.stop(); + } + if (c.isFiremaking == true) { + Server.itemHandler.removeGroundItem(c, logId, x, y, false); + c.getActionSender().sendSound(SoundList.FIRE_SUCCESSFUL, 100, 0); + if (itemUsed == 7331 || usedWith == 7331) + new Object(11406, x, y, 0, 0, 10, -1, 60 + Misc.random(30)); + else if (itemUsed == 7330 || usedWith == 7330) + new Object(11405, x, y, 0, 0, 10, -1, 60 + Misc.random(30)); + else if (itemUsed == 7329 || usedWith == 7329) + new Object(11404, x, y, 0, 0, 10, -1, 60 + Misc.random(30)); + else + new Object(2732, x, y, 0, 0, 10, -1, 60 + Misc.random(30)); + c.getActionSender().sendMessage("The fire catches and the log beings to burn."); + c.getPlayerAssistant().addSkillXP((int) l.getXp(), 11); + if (c.tutorialProgress == 4) { + c.getDialogueHandler().sendDialogues(3016, 943); + } + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.turnPlayerTo(walk == true ? x + 1 : x - 1, y); + logLit = true; + stopFiremaking(c); + container.stop(); + } + + @Override + public void stop() { + } + }, 2); + container.stop(); + } else { + return; + } + } + + @Override + public void stop() { + stopFiremaking(c); + } + }, cycle); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.playerIsCooking) { + Cooking.resetCooking(c); + } + Server.objectHandler.createAnObject(c, -1, x, y); + Server.itemHandler.createGroundItem(c, 592, x, y, 1, c.getId()); + container.stop(); + } + @Override + public void stop() { + + } + }, 60); + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/firemaking/LogData.java b/2006Redone Server/src/redone/game/content/skills/firemaking/LogData.java new file mode 100644 index 00000000..30b63d2e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/firemaking/LogData.java @@ -0,0 +1,33 @@ +package redone.game.content.skills.firemaking; + +public enum LogData { + + LOG(1511, 1, 40), ACHEY(2862, 1, 40), OAK(1521, 15, 60), WILLOW(1519, 30, + 90), TEAK(6333, 35, 105), ARCTIC_PINE(10810, 42, 125), MAPLE(1517, + 45, 135), MAHOGANY(6332, 50, 157.5), EUCALYPTUS(12581, 58, 193.5), YEW( + 1515, 60, 202.5), MAGIC(1513, 75, 303.8), RED(7406, 1, 250), // RED + // LOG + BLUE(7405, 1, 250), // BLUE LOG + RED2(7404, 1, 250); // RED LOG; + + private int logId, level; + private double xp; + + private LogData(int logId, int level, double xp) { + this.logId = logId; + this.level = level; + this.xp = xp; + } + + public int getLogId() { + return logId; + } + + public int getLevel() { + return level; + } + + public double getXp() { + return xp; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/fletching/ArrowMaking.java b/2006Redone Server/src/redone/game/content/skills/fletching/ArrowMaking.java new file mode 100644 index 00000000..50651e8e --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/fletching/ArrowMaking.java @@ -0,0 +1,158 @@ +package redone.game.content.skills.fletching; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Tom + */ + +public class ArrowMaking { + + public enum Data { + + ARROW_SHAFT(314, 52, 53, 1, 0.4), BRONZE_ARROW(39, 53, 882, 1, 1.3), IRON_ARROW( + 40, 53, 884, 15, 2.5), STEEL_ARROW(41, 53, 886, 30, 5), MITHRIL_ARROW( + 42, 53, 888, 45, 7.5), ADAMANT_ARROW(43, 53, 890, 60, 10), RUNE_ARROW( + 44, 53, 892, 75, 12.5), + + BRONZE_DART(819, 314, 806, 1, 1.8), IRON_DART(820, 314, 807, 22, 3.8), STEEL_DART( + 821, 314, 808, 37, 7.5), MITHRIL_DART(822, 314, 809, 52, 11.2), ADAMANT_DART( + 823, 314, 810, 67, 15), RUNE_DART(824, 314, 811, 81, 18.8), + + BRONZE_BRUTAL_ARROW(4819, 53, 4773, 7, 1.4), IRON_BRUTAL_ARROW(4820, + 53, 4778, 18, 2.6), STEEL_BRUTAL_ARROW(1539, 53, 4783, 33, 5.1), BLACK_BRUTAL_ARROW( + 4821, 53, 4788, 38, 6.4), MITHRIL_BRUTAL_ARROW(4822, 53, 4793, + 49, 7.5), ADAMANT_BRUTAL_ARROW(4823, 53, 4798, 62, 10.1), RUNE_BRUTAL_ARROW( + 4824, 53, 4803, 77, 12.5), + + PEARL_BOLT(46, 877, 880, 41, 3.2); + + public int item1, item2, product, level; + public double xp; + + public static Data forId(int itemUsed, int usedWith) { + for (Data arrowData : Data.values()) { + if (arrowData.item1 == itemUsed && arrowData.item2 == usedWith + || arrowData.item2 == itemUsed + && arrowData.item1 == usedWith) { + return arrowData; + } + } + return null; + } + + private Data(int item1, int item2, int product, int level, double xp) { + this.item1 = item1; + this.item2 = item2; + this.product = product; + this.level = level; + this.xp = xp; + } + + public int getItem1() { + return item1; + } + + public int getItem2() { + return item2; + } + + public int getProduct() { + return product; + } + + public int getLevel() { + return level; + } + + public double getXp() { + return xp; + } + } + + public static boolean makeArrow(final Client c, int itemUsed, int usedWith) { + final Data arrowData = Data.forId(itemUsed, usedWith); + if (arrowData == null) { + return false; + } + if (c.isWoodcutting == true) { + return false; + } + if (c.playerLevel[9] < arrowData.getLevel()) { + c.getDialogueHandler().sendStatement( + "You need a fletching level of " + arrowData.getLevel() + + " to do this"); + c.nextChat = 0; + return false; + } + if (!c.getItemAssistant().playerHasItem(arrowData.getItem1()) + || !c.getItemAssistant().playerHasItem(arrowData.getItem2())) { + c.getDialogueHandler().sendStatement( + "You need 15 " + + ItemAssistant.getItemName(arrowData.getItem1()) + + " and 15 " + + ItemAssistant.getItemName(arrowData.getItem2()) + + " to make this."); + c.nextChat = 0; + return false; + } + if (c.getItemAssistant().freeSlots() < 1 && !c.getItemAssistant().playerHasItem(arrowData.getProduct())) { + c.getActionSender().sendMessage("Not enough space in your inventory."); + return false; + } + c.playerIsFletching = true; + int factor = 1; + final int multiplier = factor; + int count1 = c.getItemAssistant().getItemAmount(arrowData.getItem1()) < 15 ? c + .getItemAssistant().getItemAmount(arrowData.getItem1()) : 15; + int count2 = c.getItemAssistant().getItemAmount(arrowData.getItem2()) < 15 ? c + .getItemAssistant().getItemAmount(arrowData.getItem2()) : 15; + final int count = count1 < count2 ? count1 : count2; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (!c.getItemAssistant().playerHasItem(arrowData.getItem1(), + count) + || !c.getItemAssistant().playerHasItem( + arrowData.getItem2(), count) + || c.playerIsFletching == false) { + container.stop(); + return; + } + if (c.isWoodcutting == true) { + container.stop(); + } + c.getItemAssistant().deleteItem2(arrowData.getItem1(), count); + c.getItemAssistant().deleteItem2(arrowData.getItem2(), count); + c.getItemAssistant().addItem(arrowData.getProduct(), + count / multiplier); + c.getActionSender().sendMessage( + "You attach the " + + ItemAssistant.getItemName(arrowData + .getItem1()) + + " to " + + count + / multiplier + + " " + + ItemAssistant.getItemName(arrowData + .getItem2()) + "s."); + c.getPlayerAssistant().addSkillXP( + count / multiplier * arrowData.getXp(), 9); + } + + @Override + public void stop() { + c.playerIsFletching = false; + return; + } + }, 1); + return true; + + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/fletching/LogCutting.java b/2006Redone Server/src/redone/game/content/skills/fletching/LogCutting.java new file mode 100644 index 00000000..13ec4fc9 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/fletching/LogCutting.java @@ -0,0 +1,472 @@ +package redone.game.content.skills.fletching; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author Tom + */ + +public class LogCutting { + + private static final int KNIFE = 946, CUT_SOUND = 375; + + public static void resetFletching(Client c) { + if (c.playerIsFletching == true) { + c.playerIsFletching = false; + c.startAnimation(65535); + } + } + + public static void cutLog(final Client c, final int product, final int level, final double xp, int amount) { + if (c.isSpinning) { + c.isSpinning = false; + } + if (c.isWoodcutting) { + c.isWoodcutting = false; + } + c.doAmount = amount; + c.getPlayerAssistant().removeAllWindows(); + if (c.playerLevel[9] < level) { + c.getActionSender() + .sendMessage( + "You need a fletching level of " + level + + " to make this."); + return; + } + c.playerIsFletching = true; + c.startAnimation(1248); + c.getActionSender().sendSound(CUT_SOUND, 100, 0); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.getItemAssistant().playerHasItem(KNIFE)) { + c.getItemAssistant().deleteItem2(LogCuttingInterface.log, 1); + if (product == 52) { + c.getItemAssistant().addItem(product, 15); + } else { + c.getItemAssistant().addItem(product, 1); + } + c.getActionSender().sendMessage("You carefully cut the " + ItemAssistant.getItemName(LogCuttingInterface.log) + " into an " + ItemAssistant.getItemName(product) + "."); + c.getPlayerAssistant().addSkillXP(xp, c.playerFletching); + c.doAmount--; + } + + if (!c.getItemAssistant().playerHasItem(LogCuttingInterface.log)) { + container.stop(); + return; + } + + if (c.playerIsFletching == false) { + container.stop(); + return; + } + + if (c.doAmount <= 0) { + container.stop(); + return; + } + + } + + @Override + public void stop() { + c.playerIsFletching = false; + c.startAnimation(65535); + return; + } + }, 3); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (c.playerIsFletching == false) { + container.stop(); + return; + } + c.getActionSender().sendSound(CUT_SOUND, 100, 0); + c.startAnimation(1248); + + } + + @Override + public void stop() { + c.playerIsFletching = false; + c.startAnimation(65535); + return; + } + }, 3); + } + + public static void handleClick(Client c, int buttonId) { + if (c.doAmount == 28 && c.playerIsFletching == true) { + c.getPlayerAssistant().closeAllWindows(); + c.playerIsFletching = false; + return; + } + switch (buttonId) { + /* + * normal log (item on interface 3) + */ + case 34185: + if (c.playerIsFletching == true) { + cutLog(c, 52, 1, 5, 1); + c.playerIsFletching = false; + return; + } + break; + case 34184: + cutLog(c, 52, 1, 5, 5); + return; + case 34183: + cutLog(c, 52, 1, 5, 10); + return; + case 34182: + cutLog(c, 52, 1, 5, 28); + return; + case 34189: + if (c.playerIsFletching == true) { + cutLog(c, 50, 5, 5, 1); + c.playerIsFletching = false; + return; + } + break; + case 34188: + cutLog(c, 50, 5, 5, 5); + return; + case 34187: + cutLog(c, 50, 5, 5, 10); + return; + case 34186: + cutLog(c, 50, 5, 5, 28); + return; + case 34193: + if (c.playerIsFletching == true) { + cutLog(c, 48, 10, 10, 1); + c.playerIsFletching = false; + return; + } + break; + case 34192: + cutLog(c, 48, 10, 10, 5); + return; + case 34191: + cutLog(c, 48, 10, 10, 10); + return; + case 34190: + cutLog(c, 48, 10, 10, 28); + return; + /* + * rest of the log's (item on interface 2) + */ + /* + * first item + */ + case 34170: + if (LogCuttingInterface.log == 1521 && c.playerIsFletching == true) { + cutLog(c, 54, 20, 16.5, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1519 && c.playerIsFletching == true) { + cutLog(c, 60, 35, 33.3, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1517 && c.playerIsFletching == true) { + cutLog(c, 64, 50, 50, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1515 && c.playerIsFletching == true) { + cutLog(c, 68, 65, 67.5, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1513 && c.playerIsFletching == true) { + cutLog(c, 72, 80, 83.25, 1); + c.playerIsFletching = false; + } + return; + case 34169: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 54, 20, 16.5, 5); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 60, 35, 33.3, 5); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 64, 50, 50, 5); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 68, 65, 67.5, 5); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 72, 80, 83.25, 5); + } + return; + case 34168: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 54, 20, 16.5, 10); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 60, 35, 33.3, 10); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 64, 50, 50, 10); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 68, 65, 67.5, 10); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 72, 80, 83.25, 10); + } + return; + case 34167: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 54, 20, 16.5, 28); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 60, 35, 33.3, 28); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 64, 50, 50, 28); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 68, 65, 67.5, 28); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 72, 80, 83.25, 28); + } + return; + /* + * second item + */ + case 34174: + if (LogCuttingInterface.log == 1521 && c.playerIsFletching == true) { + cutLog(c, 56, 25, 25, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1519 && c.playerIsFletching == true) { + cutLog(c, 58, 40, 41.5, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1517 && c.playerIsFletching == true) { + cutLog(c, 62, 55, 58.3, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1515 && c.playerIsFletching == true) { + cutLog(c, 66, 70, 70, 1); + c.playerIsFletching = false; + } + if (LogCuttingInterface.log == 1513 && c.playerIsFletching == true) { + cutLog(c, 70, 85, 91.5, 1); + c.playerIsFletching = false; + } + return; + case 34173: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 56, 25, 25, 5); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 58, 40, 41.5, 5); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 62, 55, 58.3, 5); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 66, 70, 70, 5); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 70, 85, 91.5, 5); + } + return; + case 34172: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 56, 25, 25, 10); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 58, 40, 41.5, 10); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 62, 55, 58.3, 10); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 66, 70, 70, 10); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 70, 85, 91.5, 10); + } + return; + case 34171: + if (LogCuttingInterface.log == 1521) { + cutLog(c, 56, 25, 25, 28); + } + if (LogCuttingInterface.log == 1519) { + cutLog(c, 58, 40, 41.5, 28); + } + if (LogCuttingInterface.log == 1517) { + cutLog(c, 62, 55, 58.3, 28); + } + if (LogCuttingInterface.log == 1515) { + cutLog(c, 66, 70, 70, 28); + } + if (LogCuttingInterface.log == 1513) { + cutLog(c, 70, 85, 91.5, 28); + } + return; + } + } + + public static void wolfBoneArrow(Client c) { + if (c.getItemAssistant().playerHasItem(2859) + && c.getItemAssistant().playerHasItem(1755)) { + final int amount = c.getItemAssistant().getItemCount(2859); + final int makeAmount = c.getItemAssistant().getItemCount(2859) + + c.getItemAssistant().getItemCount(2859) * Misc.random(4); + if (!c.getItemAssistant().playerHasItem(2859)) { + c.getDialogueHandler().sendStatement( + "You don't have any bones left to chisel."); + c.nextChat = 0; + return; + } + c.startAnimation(1248); + c.getItemAssistant().deleteItem2(2859, amount); + c.getItemAssistant().addItem(2861, makeAmount); + c.getPlayerAssistant().addSkillXP(3 * amount, c.playerFletching); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2859) + + " into " + ItemAssistant.getItemName(2861) + "."); + } + } + + public static void flightedArrow(Client c) {// to do + if (c.playerLevel[c.playerFletching] < 5) { + c.getDialogueHandler().sendStatement( + "You need 5 fletching to fletch this."); + c.nextChat = 0; + return; + } + if (!c.getItemAssistant().playerHasItem(314) + || !c.getItemAssistant().playerHasItem(2864)) { + c.getDialogueHandler().sendStatement( + "You don't enough materials to make these arrows."); + c.nextChat = 0; + return; + } + if (c.getItemAssistant().playerHasItem(314) + && c.getItemAssistant().playerHasItem(2864)) { + final int feather = c.getItemAssistant().getItemCount(314), arrowShaft = c + .getItemAssistant().getItemCount(2864); + if (feather == arrowShaft * 4) { + c.startAnimation(1248); + c.getItemAssistant().deleteItem2(314, feather * 4); + c.getItemAssistant().deleteItem2(2864, arrowShaft); + c.getItemAssistant().addItem(2865, arrowShaft); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2864) + + " into " + ItemAssistant.getItemName(2865) + + "(s)."); + /* + * } else if (feather > arrowShaft * 4) {//to fix + * c.startAnimation(1248); c.getItemAssistant().deleteItem2(314, + * feather*4); c.getItemAssistant().deleteItem2(2864, + * arrowShaft); c.getItemAssistant().addItem(2865, arrowShaft); + * c.getPacketDispatcher().sendMessage("You turn your " + + * ItemAssistant.getItemName(2864) + " into " + + * ItemAssistant.getItemName(2865) + "(s)."); } else if (feather + * < arrowShaft * 4) {//to fix c.startAnimation(1248); + * c.getItemAssistant().deleteItem2(314, feather*4); + * c.getItemAssistant().deleteItem2(2864, arrowShaft); + * c.getItemAssistant().addItem(2865, arrowShaft); + * c.getPacketDispatcher().sendMessage("You turn your " + + * ItemAssistant.getItemName(2864) + " (s) into " + + * ItemAssistant.getItemName(2865) + "(s)."); + */ + } else { + c.getActionSender() + .sendMessage( + "You need 4 times the amount of feathers as arrow shafts to do this."); + } + } + } + + public static void ogreArrow(Client c) { + if (c.playerLevel[c.playerFletching] < 5) { + c.getDialogueHandler().sendStatement( + "You need 5 fletching to fletch this."); + c.nextChat = 0; + return; + } + if (!c.getItemAssistant().playerHasItem(2861) + || !c.getItemAssistant().playerHasItem(2865)) { + c.getDialogueHandler().sendStatement( + "You don't enough materials to make these arrows."); + c.nextChat = 0; + return; + } + final int wolfBoneArrow = c.getItemAssistant().getItemCount(2861), flightedArrow = c + .getItemAssistant().getItemCount(2865); + if (c.getItemAssistant().playerHasItem(2861) + && c.getItemAssistant().playerHasItem(2865)) { + if (wolfBoneArrow == flightedArrow) { + c.startAnimation(1248); + c.getItemAssistant().addItem(2866, wolfBoneArrow); + c.getPlayerAssistant().addSkillXP(1 * wolfBoneArrow, + c.playerFletching); + c.getItemAssistant().deleteItem2(2861, wolfBoneArrow); + c.getItemAssistant().deleteItem2(2865, wolfBoneArrow); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2865) + + " (s) into " + + ItemAssistant.getItemName(2866) + "(s)."); + } else if (wolfBoneArrow > flightedArrow) { + c.startAnimation(1248); + c.getItemAssistant().addItem(2866, flightedArrow); + c.getPlayerAssistant().addSkillXP(1 * flightedArrow, + c.playerFletching); + c.getItemAssistant().deleteItem2(2861, flightedArrow); + c.getItemAssistant().deleteItem2(2865, flightedArrow); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2865) + + " (s) into " + + ItemAssistant.getItemName(2866) + "(s)."); + } else if (wolfBoneArrow < flightedArrow) { + c.startAnimation(1248); + c.getItemAssistant().addItem(2866, wolfBoneArrow); + c.getPlayerAssistant().addSkillXP(1 * wolfBoneArrow, + c.playerFletching); + c.getItemAssistant().deleteItem2(2861, wolfBoneArrow); + c.getItemAssistant().deleteItem2(2865, wolfBoneArrow); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2865) + + " (s) into " + + ItemAssistant.getItemName(2866) + "(s)."); + } + } + } + + public static void makeShafts(Client c) { + if (c.getItemAssistant().playerHasItem(2862) + && c.getItemAssistant().playerHasItem(946)) { + final int amount = c.getItemAssistant().getItemCount(2862); + final int makeAmount = c.getItemAssistant().getItemCount(2862) + + c.getItemAssistant().getItemCount(2862) * Misc.random(4); + if (!c.getItemAssistant().playerHasItem(2862)) { + c.getDialogueHandler().sendStatement( + "You don't have any logs left to fletch."); + c.nextChat = 0; + return; + } + c.startAnimation(1248); + c.getItemAssistant().deleteItem2(2862, amount); + c.getItemAssistant().addItem(2864, makeAmount); + c.getPlayerAssistant().addSkillXP(2 * amount, c.playerFletching); + c.getActionSender().sendMessage( + "You turn your " + ItemAssistant.getItemName(2862) + + " (s) into " + ItemAssistant.getItemName(2864) + + "(s)."); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/fletching/LogCuttingInterface.java b/2006Redone Server/src/redone/game/content/skills/fletching/LogCuttingInterface.java new file mode 100644 index 00000000..7d71b1c0 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/fletching/LogCuttingInterface.java @@ -0,0 +1,105 @@ +package redone.game.content.skills.fletching; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Tom + */ + +public class LogCuttingInterface { + + public static int log; + + public static void handleLog(Client c, int item1, int item2) { + if (item1 == 946) { + Interface(c, item2); + } else { + Interface(c, item1); + } + } + + public static void Interface(Client c, int item) { + if (c.playerIsFletching == true && item > 1510 && item < 1522) { + c.getActionSender().sendMessage("You are already fletching!"); + c.getPlayerAssistant().closeAllWindows(); + return; + } else if (item < 1510 && item > 1521) { + c.playerIsFletching = false; + c.getActionSender().sendMessage("Nothing interesting happens."); + } + log = item; + if (item == 1511) { + c.getPlayerAssistant().sendChatInterface(8880); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8883, 180, 52); // left + c.getPlayerAssistant().sendFrame246(8884, 180, 50); // middle + c.getPlayerAssistant().sendFrame246(8885, 180, 48); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(52), + 8889); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(50), + 8893); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(48), + 8897); + } else if (item == 1521) { + c.getPlayerAssistant().sendChatInterface(8866); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8869, 180, 54); // left + c.getPlayerAssistant().sendFrame246(8870, 180, 56); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(54), + 8874); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(56), + 8878); + } else if (item == 1519) { + c.getPlayerAssistant().sendChatInterface(8866); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8869, 180, 60); // left + c.getPlayerAssistant().sendFrame246(8870, 180, 58); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(60), + 8874); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(58), + 8878); + } else if (item == 1517) { + c.getPlayerAssistant().sendChatInterface(8866); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8869, 180, 64); // left + c.getPlayerAssistant().sendFrame246(8870, 180, 62); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(64), + 8874); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(62), + 8878); + } else if (item == 1515) { + c.getPlayerAssistant().sendChatInterface(8866); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8869, 180, 68); // left + c.getPlayerAssistant().sendFrame246(8870, 180, 66); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(68), + 8874); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(66), + 8878); + } else if (item == 1513) { + c.getPlayerAssistant().sendChatInterface(8866); + c.getPlayerAssistant().sendFrame126("What would you like to make?", + 8879); + c.getPlayerAssistant().sendFrame246(8869, 180, 72); // left + c.getPlayerAssistant().sendFrame246(8870, 180, 70); // right + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(72), + 8874); + c.getPlayerAssistant().sendFrame126(ItemAssistant.getItemName(70), + 8878); + } + c.playerIsFletching = true; + } + + public static void handleItemOnItem(Client c, int itemUsed, int useWith) { + + if (itemUsed == 946 || useWith == 946) { + handleLog(c, itemUsed, useWith); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/fletching/Stringing.java b/2006Redone Server/src/redone/game/content/skills/fletching/Stringing.java new file mode 100644 index 00000000..da9bf526 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/fletching/Stringing.java @@ -0,0 +1,121 @@ +package redone.game.content.skills.fletching; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Tom + */ + +public class Stringing { + + public static int STRING_SOUND = 2606; + + public enum Data { + + SHORT_BOW(50, 1777, 841, 5, 5), LONG_BOW(48, 1777, 839, 10, 10), OAK_SHORT_BOW( + 54, 1777, 843, 20, 16.5), OAK_LONG_BOW(56, 1777, 845, 25, 25), COMPOSITE_BOW( + 4825, 1777, 4827, 30, 45), WILLOW_SHORT_BOW(60, 1777, 849, 35, + 33.3), WILLOW_LONG_BOW(58, 1777, 847, 40, 41.5), MAPLE_SHORT_BOW( + 64, 1777, 853, 50, 50), MAPLE_LONG_BOW(62, 1777, 851, 55, 58.3), YEW_SHORT_BOW( + 68, 1777, 857, 65, 68.5), YEW_LONG_BOW(66, 1777, 855, 70, 75), MAGIC_SHORT_BOW( + 72, 1777, 861, 80, 83.3), MAGIC_LONG_BOW(70, 1777, 859, 85, + 91.5); + + public int item1, item2, product, level; + public double xp; + + public static Data forId(int itemId, int usedWith) { + for (Data loadData : Data.values()) { + if (loadData.item1 == itemId && loadData.item2 == usedWith + || loadData.item2 == itemId + && loadData.item1 == usedWith) { + return loadData; + } + } + return null; + } + + private Data(int item1, int item2, int product, int level, double xp) { + this.item1 = item1; + this.item2 = item2; + this.product = product; + this.level = level; + this.xp = xp; + } + + public int getItem1() { + return item1; + } + + public int getItem2() { + return item2; + } + + public int getProduct() { + return product; + } + + public int getLevel() { + return level; + } + + public double getXp() { + return xp; + } + } + + public static boolean StringBow(final Client c, int itemUsed, int usedWith) { + final Data loadData = Data.forId(itemUsed, usedWith); + if (loadData == null) { + return false; + } + if (c.playerLevel[9] < loadData.getLevel()) { + c.getDialogueHandler().sendStatement( + "You need a fletching level of " + loadData.getLevel() + + " to do this"); + return false; + } + if (!c.getItemAssistant().playerHasItem(loadData.getItem1()) + || !c.getItemAssistant().playerHasItem(loadData.getItem2())) { + c.getDialogueHandler().sendStatement( + "You need a " + + ItemAssistant.getItemName(loadData.getItem1()) + + " and a " + + ItemAssistant.getItemName(loadData.getItem2()) + + " to make this."); + return false; + } + c.playerIsFletching = true; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + if (!c.getItemAssistant().playerHasItem(loadData.getItem1()) + || !c.getItemAssistant().playerHasItem( + loadData.getItem2()) + || c.playerIsFletching == false) { + container.stop(); + return; + } + c.getItemAssistant().deleteItem2(loadData.getItem1(), 1); + c.getItemAssistant().deleteItem2(loadData.getItem2(), 1); + c.getActionSender().sendMessage( + "You add a string to the bow."); + c.getItemAssistant().addItem(loadData.getProduct(), 1); + c.getPlayerAssistant().addSkillXP(loadData.getXp(), 9); + } + + @Override + public void stop() { + c.playerIsFletching = false; + return; + } + }, 3); + return true; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/herblore/GrindingAction.java b/2006Redone Server/src/redone/game/content/skills/herblore/GrindingAction.java new file mode 100644 index 00000000..84ad5848 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/herblore/GrindingAction.java @@ -0,0 +1,50 @@ +package redone.game.content.skills.herblore; + +import redone.game.content.music.sound.SoundList; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class GrindingAction { + + public static final int PESTLE_AND_MORTAR = 233; + + public enum Data { + UNICORN(237, 235), CHOCO(1973, 1975), NEST(5075, 6693), SCALE(243, 241), SHARDS( + 6466, 6467), WEED1(401, 6683), WEED2(403, 6683), BAT(530, 2391), CHARCOAL( + 973, 704), COD(341, 7528), KELP(7516, 7517), CRABMEAT(7518, + 7527), THISLE(3263, 3264), MUSHROOM(4620, 4622); + + public int id; + public int end; + + Data(int id, int end) { + this.id = id; + this.end = end; + } + + public int getId() { + return id; + } + + public int getEnd() { + return end; + } + } + + public static void init(Client c, int itemUsed, int useWith) { + for (Data d : Data.values()) { + if (itemUsed == PESTLE_AND_MORTAR && useWith == d.getId() + || itemUsed == d.getId() && useWith == PESTLE_AND_MORTAR) { + c.startAnimation(364); + c.getActionSender().sendSound(SoundList.PESTLE_MOTAR, 100, + 0); + c.getItemAssistant().deleteItem(d.getId(), 1); + c.getItemAssistant().addItem(d.getEnd(), 1); + c.getActionSender().sendMessage( + "You carefully grind the " + + ItemAssistant.getItemName(d.getId()) + "."); + c.getPlayerAssistant().addSkillXP(1, c.playerHerblore); + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/herblore/Herblore.java b/2006Redone Server/src/redone/game/content/skills/herblore/Herblore.java new file mode 100644 index 00000000..a2da6e19 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/herblore/Herblore.java @@ -0,0 +1,194 @@ +package redone.game.content.skills.herblore; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class Herblore extends SkillHandler { + + private static int itemToAdd = -1, itemToDelete = -1, itemToDelete2 = -1, + potExp = -1; + private static final int ANIM = 363; + + private static final int[][] CLEAN_DATA = { { 199, 249, 1, 3 }, + { 201, 251, 5, 4 }, { 203, 253, 11, 5 }, { 205, 255, 20, 6 }, + { 207, 257, 25, 8 }, { 3049, 2998, 30, 8 }, + { 12174, 12172, 35, 8 }, { 209, 259, 40, 9 }, + { 14836, 14854, 30, 8 }, { 211, 261, 48, 10 }, + { 213, 263, 54, 11 }, { 3051, 3000, 59, 12 }, { 215, 265, 65, 13 }, + { 2485, 2481, 67, 13 }, { 217, 267, 70, 14 }, { 219, 269, 75, 15 }, + + }; + + public static void handleHerbCleaning(final Client c, final int itemId, + final int itemSlot) { + for (int[] element : CLEAN_DATA) { + if (itemId == element[0]) { + if (c.playerLevel[15] < element[2]) { + c.getActionSender().sendMessage("You cannot clean this herb."); + c.getActionSender().sendMessage("You need a higher Herblore level."); + return; + } + c.getItemAssistant().deleteItem(itemId, itemSlot, 1); + c.getItemAssistant().addItem(element[1], 1); + c.getActionSender().sendMessage("The herb is a " + ItemAssistant.getItemName(element[1]) + "."); + c.getPlayerAssistant().addSkillXP(element[3], 15); + } + } + } + + //potion, item, finished, level req, exp + private static final int[][] POTION_DATA = { { 91, 221, 121, 1, 25 }, + { 93, 235, 175, 5, 38 }, { 95, 225, 115, 12, 50 }, + { 97, 223, 127, 22, 63 }, { 99, 239, 133, 30, 75 }, + { 97, 9736, 9741, 36, 84 }, { 99, 231, 139, 38, 88 }, + { 101, 221, 145, 45, 100 }, { 101, 235, 181, 48, 106 }, + { 103, 231, 151, 50, 112 }, { 105, 225, 157, 55, 125 }, + { 107, 239, 163, 66, 150 }, { 2483, 241, 2454, 69, 158 }, + { 109, 245, 169, 72, 163 }, { 2483, 3138, 3042, 76, 173 }, + { 111, 247, 189, 78, 175 }, { 3002, 6693, 6687, 81, 180 }, + { 5935, 6016, 5936, 73, 0}, { 5936, 223, 5937, 73, 165}, + { 5935, 2398, 5939, 82, 0}, { 5939, 6018, 5940, 82, 190}, + { 227, 263, 105, 55, 0}, { 105, 241, 187, 60, 137 }, + { 227, 249, 91, 1, 0 }, { 227, 251, 93, 5, 0 }, + { 227, 253, 95, 12, 0 }, { 227, 255, 97, 22, 0 }, + { 227, 257, 99, 30, 0 }, { 227, 259, 101, 34, 0 }, + { 227, 261, 103, 45, 0 }, { 3004, 223, 3026, 63, 142 }, + { 227, 265, 107, 66, 0 }, { 227, 267, 109, 72, 0 }, + { 227, 269, 111, 75, 0 }, { 227, 2481, 2483, 67, 0 }, + { 227, 3000, 3004, 59, 0 }, { 227, 2998, 3002, 30, 0 }, + { 1975, 97, 3010, 26, 67 }, }; + + public static void setupPotion(final Client c, int useItem, int itemUsed) { + for (int[] element : POTION_DATA) { + if (useItem == element[0] && itemUsed == element[1] + || useItem == element[1] && itemUsed == element[0]) { + if (c.playerLevel[c.playerHerblore] < element[3]) { + c.getActionSender().sendMessage( + "You need an herblore level of " + element[3] + + " to mix this potion."); + return; + } + send1Item(c, element[2]); + itemToDelete = element[1]; + itemToDelete2 = element[0]; + potExp = element[4]; + itemToAdd = element[2]; + c.isPotionMaking = true; + } + } + } + + public static void makePotion(final Client c, int amount) { + if (c.playerSkilling[c.playerHerblore]) { + return; + } + if (itemToDelete <= 0 || itemToDelete2 <= 0) { + return; + } + c.doAmount = amount; + c.playerSkilling[c.playerHerblore] = true; + c.getPlayerAssistant().removeAllWindows(); + c.startAnimation(ANIM); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.getItemAssistant().deleteItem(itemToDelete, + c.getItemAssistant().getItemSlot(itemToDelete), 1); + c.getItemAssistant().deleteItem(itemToDelete2, + c.getItemAssistant().getItemSlot(itemToDelete2), 1); + c.getItemAssistant().addItem(itemToAdd, 1); + c.getActionSender().sendMessage( + "You make a " + + ItemAssistant.getItemName(itemToAdd) + .toLowerCase() + "."); + c.getPlayerAssistant().addSkillXP(potExp, c.playerHerblore); + deleteTime(c); + if (!c.getItemAssistant().playerHasItem(itemToDelete2, 1) + || !c.getItemAssistant().playerHasItem(itemToDelete, 1) + || c.doAmount <= 0) { + container.stop(); + } + if (!c.isPotionMaking) { + container.stop(); + } + } + + @Override + public void stop() { + resetHerblore(c); + } + }, 1); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.startAnimation(ANIM); + if (!c.playerSkilling[c.playerHerblore] || !c.isPotionMaking) { + container.stop(); + } + } + + @Override + public void stop() { + } + }, 1); + } + + public static void resetHerblore(Client c) { + itemToAdd = -1; + itemToDelete = -1; + itemToDelete2 = -1; + potExp = -1; + c.isGrinding = false; + c.isPotionMaking = false; + c.playerSkilling[c.playerHerblore] = false; + } + + public static boolean isHerb(int item) { + for (int[] element : CLEAN_DATA) { + if (item == element[0]) { + return true; + } + } + return false; + } + + public static boolean isIngredient(int item) { + for (int[] element : POTION_DATA) { + if (item == element[0] || item == element[1]) { + return true; + } + } + return false; + } + + public static void handleHerbloreButtons(Client c, int actionButtonId) { + switch (actionButtonId) { + case 10239: + if (c.isPotionMaking) { + makePotion(c, 1); + } + break; + case 10238: + if (c.isPotionMaking) { + makePotion(c, 5); + } + break; + case 6212: + if (c.isPotionMaking) { + makePotion(c, 10); + } + break; + case 6211: + if (c.isPotionMaking) { + makePotion(c, 28); + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/runecrafting/AbyssalHandler.java b/2006Redone Server/src/redone/game/content/skills/runecrafting/AbyssalHandler.java new file mode 100644 index 00000000..95b06b03 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/runecrafting/AbyssalHandler.java @@ -0,0 +1,60 @@ +package redone.game.content.skills.runecrafting; + +import redone.game.players.Client; + +public class AbyssalHandler { + + public static void handleAbyssalTeleport(Client c, int objectId) { + switch (objectId) { + case 7147:// added + c.getPlayerAssistant().movePlayer(3030, 4842, 0); + break; + case 7133:// added nature + c.getPlayerAssistant().startTeleport(2395, 4841, 0, "modern"); + break; + case 7132: // cosmic + c.getPlayerAssistant().startTeleport(2144, 4831, 0, "modern"); + break; + case 7129: // fire + c.getPlayerAssistant().startTeleport(2585, 4836, 0, "modern"); + break; + case 7130: // earth + c.getPlayerAssistant().startTeleport(2658, 4839, 0, "modern"); + break; + case 7131: // body + c.getPlayerAssistant().startTeleport(2525, 4830, 0, "modern"); + break; + case 7140: // mind + c.getPlayerAssistant().startTeleport(2786, 4834, 0, "modern"); + break; + case 7139: // air + c.getPlayerAssistant().startTeleport(2844, 4837, 0, "modern"); + break; + case 7138: // soul + c.getActionSender().sendMessage("This altar is disabled atm."); + break; + case 7141: // blood + c.getActionSender().sendMessage("This altar is disabled atm."); + break; + case 7137: // water + c.getPlayerAssistant().startTeleport(2722, 4833, 0, "modern"); + break; + case 7136: // death + c.getPlayerAssistant().startTeleport(2205, 4834, 0, "modern"); + break; + case 7135: + c.getPlayerAssistant().startTeleport(2464, 4830, 0, "modern"); + break; + case 7134: // chaos + c.getPlayerAssistant().startTeleport(2274, 4842, 0, "modern"); + break; + default: + c.getActionSender().sendMessage( + "If you see this message, please PM an Administrator."); + break; + } + c.getActionSender().sendMessage( + "As you click the object, you teleport to a mystical place..."); + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/runecrafting/RuneCraftingActions.java b/2006Redone Server/src/redone/game/content/skills/runecrafting/RuneCraftingActions.java new file mode 100644 index 00000000..fbcb0ec4 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/runecrafting/RuneCraftingActions.java @@ -0,0 +1,222 @@ +package redone.game.content.skills.runecrafting; + +import redone.game.players.Client; + +/** + * Handles runecrafting actions + * + * @author Andrew + */ + +public class RuneCraftingActions { + + public static void handleRuneCrafting(Client client, int objectId) { + switch (objectId) { + case 2465:// air altar portal + if (client.objectX == 2841 && client.objectY == 4828) { + client.getPlayerAssistant().startTeleport(2983, 3293, 0, "modern"); + } + break; + + case 2466:// mind altar portal + if (client.objectX == 2793 && client.objectY == 4827) { + client.getPlayerAssistant().startTeleport(2980, 3514, 0, "modern"); + } + break; + + case 2467:// water altar portal + if (client.objectX == 2727 && client.objectY == 4832) { + client.getPlayerAssistant().startTeleport(3184, 3162, 0, "modern"); + } + break; + + case 2468:// earth rune portal + if (client.objectX == 2655 && client.objectY == 4829) { + client.getPlayerAssistant().startTeleport(3308, 3476, 0, "modern"); + } + break; + + case 2469:// fire rune portal + if (client.objectX == 2574 && client.objectY == 4850) { + client.getPlayerAssistant().startTeleport(3311, 3256, 0, "modern"); + } + break; + + case 2470:// body altar portal + if (client.objectX == 2523 && client.objectY == 4825) { + client.getPlayerAssistant().startTeleport(3051, 3444, 0, "modern"); + } + break; + + case 2471:// cosmic altar portal + if (client.objectX == 2163 && client.objectY == 4833 || client.objectX == 2142 && client.objectY == 4854 || client.objectX == 2121 && client.objectY == 4833 || client.objectX == 2412 && client.objectY == 4812) { + client.getPlayerAssistant().startTeleport(2410, 4379, 0, "modern"); + } + break; + + case 2472:// law altar portal + if (client.objectX == 2464 && client.objectY == 4817) { + client.getPlayerAssistant().startTeleport(2857, 3379, 0, "modern"); + } + break; + + case 2473:// nature portal altar + if (client.objectX == 2400 && client.objectY == 4834) { + client.getPlayerAssistant().startTeleport(2866, 3022, 0, "modern"); + } + break; + + case 2474: + if (client.objectX == 3233 && client.objectY == 9312) {// desert + // treasure + // portal + client.getPlayerAssistant().startTeleport(3233, 2887, 0, "modern"); + } else if (client.objectX == 2282 && client.objectY == 4837) {// chaos + // altar + // portal + client.getPlayerAssistant().startTeleport(3062, 3593, 0, "modern"); + } + break; + + case 2475:// death altar portal + if (client.objectX == 2208 && client.objectY == 4829) { + client.getPlayerAssistant().startTeleport(1863, 4639, 0, + "modern"); + } + break; + + case 2478:// air altar crafting + if (client.objectX == 2843 && client.objectY == 4833) { + client.getRC().craftRunes(objectId); + } + break; + + case 2479:// mind altar crafting + if (client.objectX == 2785 && client.objectY == 4840) { + client.getRC().craftRunes(objectId); + } + break; + + case 2480:// water altar crafting + if (client.objectX == 2715 && client.objectY == 4835) { + client.getRC().craftRunes(objectId); + } + break; + + case 2481:// earth altar crafting + if (client.objectX == 2657 && client.objectY == 4840) { + client.getRC().craftRunes(objectId); + } + break; + + case 2482:// fire altar crafting + if (client.objectX == 2584 && client.objectY == 4837) { + client.getRC().craftRunes(objectId); + } + break; + + case 2483:// body altar crafting + if (client.objectX == 2524 && client.objectY == 4831) { + client.getRC().craftRunes(objectId); + } + break; + + case 2484:// cosmic altar crafting + if (client.objectX == 2141 && client.objectY == 4832) { + client.getRC().craftRunes(objectId); + } + break; + + case 2485:// law altar crafting + if (client.objectX == 2463 && client.objectY == 4831) { + client.getRC().craftRunes(objectId); + } + break; + + case 2486:// nature altar crafting + if (client.objectX == 2399 && client.objectY == 4840) { + client.getRC().craftRunes(objectId); + } + break; + + case 2487:// chaos altar crafting + if (client.objectX == 2270 && client.objectY == 4841) { + client.getRC().craftRunes(objectId); + } + break; + + case 2488:// death altar crafting + if (client.objectX == 2204 && client.objectY == 4835) { + client.getRC().craftRunes(objectId); + } + break; + + case 2452:// air altar entrance + if (client.objectX == 2984 && client.objectY == 3291) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2453:// mind altar entrance + if (client.objectX == 2981 && client.objectY == 3513) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2454:// water altar entrance + if (client.objectX == 3184 && client.objectY == 3164) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2455:// earth altar entrance + if (client.objectX == 3305 && client.objectY == 3473) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2456:// fire altar entrance + if (client.objectX == 3312 && client.objectY == 3254) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2457:// body altar entrance + if (client.objectX == 3052 && client.objectY == 3444) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2458:// cosmic altar entrance + if (client.objectX == 2407 && client.objectY == 4376) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2459:// law altar entrance + if (client.objectX == 2857 && client.objectY == 3380) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2460:// nature altar entrance + if (client.objectX == 2868 && client.objectY == 3018) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2461:// chaos altar entrance + if (client.objectX == 3059 && client.objectY == 3590) { + client.getRC().enterAltar(objectId, 0); + } + break; + + case 2462:// death altar entrance + if (client.objectX == 1859 && client.objectY == 4638) { + client.getRC().enterAltar(objectId, 0); + } + break; + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/runecrafting/Runecrafting.java b/2006Redone Server/src/redone/game/content/skills/runecrafting/Runecrafting.java new file mode 100644 index 00000000..efcac3f6 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/runecrafting/Runecrafting.java @@ -0,0 +1,243 @@ +package redone.game.content.skills.runecrafting; + +import redone.game.content.music.sound.SoundList; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.players.Client; + +/** + * @author phl0w + * @author highly edited by Andrew + */ + +public class Runecrafting { + + private final Client c; + + public Runecrafting(Client c) { + this.c = c; + } + + public static void locate(Client c, int xPos, int yPos) { + String X = ""; + String Y = ""; + if (c.absX >= xPos) { + X = "west"; + } + if (c.absY > yPos) { + Y = "South"; + } + if (c.absX < xPos) { + X = "east"; + } + if (c.absY <= yPos) { + Y = "North"; + } + c.getActionSender().sendMessage( + "You need to travel " + Y + "-" + X + "."); + } + + private enum Altars { + AIR_ALTAR(2452, new int[] { 1438, 5527 }, new int[] { 2842, 4829 }), MIND_ALTAR( + 2453, new int[] { 1448, 5529 }, new int[] { 2793, 4828 }), WATER_ALTAR( + 2454, new int[] { 1444, 5531 }, new int[] { 2713, 4836 }), EARTH_ALTAR( + 2455, new int[] { 1440, 5535 }, new int[] { 2655, 4831 }), FIRE_ALTAR( + 2456, new int[] { 1442, 5537 }, new int[] { 2577, 4845 }), BODY_ALTAR( + 2457, new int[] { 1446, 5533 }, new int[] { 2521, 4834 }), COSMIC_ALTAR( + 2458, new int[] { 1454, 5539 }, new int[] { 2162, 4833 }), CHAOS_ALTAR( + 2461, new int[] { 1452, 5543 }, new int[] { 2268, 4842 }), + NATURE_ALTAR(2460, new int[] { 1462, 5541 }, new int[] { 2400, 4835 }), LAW_ALTAR( + 2459, new int[] { 1458, 5545 }, new int[] { 2464, 4819 }), DEATH_ALTAR( + 2462, new int[] { 1456, 5547 }, new int[] { 2208, 4831 }); + + int objId; + int[] keys, loc; + + private Altars(int objId, int[] keys, int[] loc) { + this.objId = objId; + this.loc = loc; + this.keys = keys; + } + + private int getObj() { + return objId; + } + + private int[] getKeys() { + return keys; + } + + private int[] getNewLoc() { + return loc; + } + } + + public void enterAltar(int objId, int itemUse) { + Altars a = forAltar(objId); + if (a != null) { + /*if (c.runeMist < 4) { + c.getDialogueHandler().sendStatement( + "You need to beat rune mysteries first to do this."); + c.nextChat = 0; + return; + }*/ + if (a.getKeys()[1] == c.playerEquipment[c.playerHat] + || a.getKeys()[0] == itemUse) { + c.getPlayerAssistant().movePlayer(a.getNewLoc()[0], + a.getNewLoc()[1], 0); + c.getActionSender().sendMessage( + "You enter the mysterious ruins."); + } else { + c.getActionSender().sendMessage( + "Nothing interesting happens."); + } + } + } + + private enum Altar_Data { + AIR(2478, 1, 6, 556, new int[][] { { 11, 2 }, { 22, 3 }, { 33, 4 }, + { 44, 5 }, { 55, 6 }, { 66, 7 }, { 77, 8 }, { 88, 9 }, + { 99, 9 } }), MIND(2479, 5, 6, 558, new int[][] { { 14, 2 }, + { 28, 3 }, { 42, 4 }, { 56, 5 }, { 70, 6 }, { 84, 7 }, + { 98, 8 } }), WATER(2480, 9, 7, 555, new int[][] { { 19, 2 }, + { 38, 3 }, { 57, 4 }, { 76, 5 }, { 95, 6 } }), EARTH(2481, 9, + 7, 557, new int[][] { { 26, 2 }, { 52, 3 }, { 78, 4 } }), FIRE( + 2482, 14, 7, 554, + new int[][] { { 26, 2 }, { 52, 3 }, { 78, 4 } }), BODY(2483, + 20, 8, 559, new int[][] { { 35, 2 }, { 70, 3 } }), COSMIC(2484, + 27, 9, 564, new int[][] { { 59, 2 } }), CHAOS(2487, 35, 9, 562, + new int[][] { { 74, 2 } }), // was 2485, 35, + // 9, 562, new + // int[][]{{74, + // 2}} + NATURE(2486, 44, 10, 561, new int[][] { { 91, 2 } }), LAW(2485, 54, 11, + 563, new int[][] { { 100, 2 } }), // was 2487, 54, + // 11, 563, new + // int[][]{{100, + // 2}}) + DEATH(2488, 65, 13, 560, new int[][] { { 100, 2 } }), BLOOD(2489, 77, + 15, 565, new int[][] { { 100, 2 } }), SOUL(2490, 90, 17, 566, + new int[][] { { 100, 2 } }), ASTRAL(17010, 40, 10, 9075, + new int[][] { { 82, 2 } }); + + int altarID, levelReq, xp, rewardedRune; + int[][] multiRunes; + + private Altar_Data(int altarID, int levelReq, int xp, int rewardedRune, + int[][] multiRunes) { + this.altarID = altarID; + this.levelReq = levelReq; + this.xp = xp; + this.rewardedRune = rewardedRune; + this.multiRunes = multiRunes; + } + } + + public Altar_Data forObj(int obj) { + for (Altar_Data ad : Altar_Data.values()) { + if (ad.altarID == obj) { + return ad; + } + } + return null; + } + + int objId; + int[] keys, loc; + + public Altars forAltar(int id) { + for (Altars a : Altars.values()) { + if (a.getObj() == id) { + return a; + } + } + return null; + } + + public boolean craftRunes(int obj) { + Altar_Data ad = forObj(obj); + if (ad != null) { + RandomEventHandler.addRandom(c); + if (!SkillHandler.RUNECRAFTING) { + c.getActionSender().sendMessage( + "This skill is currently disabled."); + return false; + } + if (c.playerLevel[c.playerRunecrafting] >= ad.levelReq) { + getMultiSupport(obj); + c.startAnimation(791); + c.gfx100(186); + c.getActionSender().sendSound(SoundList.RUNECRAFTING, 100, + 0); + } else { + c.getActionSender().sendMessage( + "You need a runecrafting level of at least " + + ad.levelReq + " to make runes here."); + } + } + return false; + } + + public void getMultiSupport(int obj) { + Altar_Data ad = forObj(obj); + if (ad != null) { + int amount = c.getItemAssistant().getItemCount(7936); + int amount2 = c.getItemAssistant().getItemCount(1436); + if (amount > 0) { + c.getItemAssistant().deleteItem(7936, + c.getItemAssistant().getItemCount(7936)); + c.getItemAssistant().addItem( + ad.rewardedRune, + amount + * (getMultiplier(ad) == 1 ? getMultiplier(ad) + : getMultiplier(ad) - 1)); + c.getPlayerAssistant().addSkillXP(ad.xp * amount, + c.playerRunecrafting); + } else if (amount2 > 0) { + c.getItemAssistant().deleteItem(1436, + c.getItemAssistant().getItemCount(1436)); + c.getItemAssistant().addItem( + ad.rewardedRune, + amount2 + * (getMultiplier(ad) == 1 ? getMultiplier(ad) + : getMultiplier(ad) - 1)); + c.getPlayerAssistant().addSkillXP(ad.xp * amount2, + c.playerRunecrafting); + } else if (amount2 > 0 && amount > 0) { + c.getItemAssistant().deleteItem(7936, + c.getItemAssistant().getItemCount(7936)); + c.getItemAssistant().addItem( + ad.rewardedRune, + amount + * (getMultiplier(ad) == 1 ? getMultiplier(ad) + : getMultiplier(ad) - 1)); + c.getPlayerAssistant().addSkillXP(ad.xp * amount, + c.playerRunecrafting); + c.getItemAssistant().deleteItem(1436, + c.getItemAssistant().getItemCount(1436)); + c.getItemAssistant().addItem( + ad.rewardedRune, + amount2 + * (getMultiplier(ad) == 1 ? getMultiplier(ad) + : getMultiplier(ad) - 1)); + c.getPlayerAssistant().addSkillXP(ad.xp * amount2, + c.playerRunecrafting); + } else { + c.getActionSender().sendMessage( + "You don't have any essence left."); + } + } + } + + public int getMultiplier(Altar_Data ad) { + int temp = 1; + for (int[] multiRune : ad.multiRunes) { + for (int j = 0; j < multiRune.length; j++) { + if (c.playerLevel[c.playerRunecrafting] >= multiRune[0]) { + temp++; + } + } + } + return temp; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/slayer/Slayer.java b/2006Redone Server/src/redone/game/content/skills/slayer/Slayer.java new file mode 100644 index 00000000..dfbb0a01 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/slayer/Slayer.java @@ -0,0 +1,617 @@ +package redone.game.content.skills.slayer; + +import java.util.ArrayList; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class Slayer { + + public static final int VERY_EASY_TASK = 0, EASY_TASK = 1, MEDIUM_TASK = 2, + HARD_TASK = 3, VERY_HARD_TASK = 4, VERY_EASY_AMOUNT = 15 + r(25), + EASY_AMOUNT = 25 + r(25), MEDIUM_AMOUNT = 50 + r(25), + HARD_AMOUNT = 100 + r(50), VERY_HARD_AMOUNT = 130 + r(70), + DRAGON_AMOUNT = 10 + r(40); + + public static ArrayList veryEasyTask = new ArrayList(); + public static ArrayList easyTask = new ArrayList(); + public static ArrayList mediumTask = new ArrayList(); + public static ArrayList hardTask = new ArrayList(); + public static ArrayList veryHardTask = new ArrayList(); + + private final Client c; + + public Slayer(Client c) { + this.c = c; + } + + public enum SlayerMasters { + TURAEL(70, 1, "Taverly", "Turael"), MAZCHNA(1596, 20, "Canifis", + "Mazchna"), VANNAKA(1597, 40, "Edgeville", "Vannaka"), CHAELDAR( + 1598, 70, "Zanaris", "Chaeldar"), DURADEL(1599, 100, + "Shilo Village", "Duradel"); + + private int masterId, combatReq; + private String masterLocation, masterName; + + private SlayerMasters(int masterId, int combatReq, + String masterLocation, String masterName) { + this.masterId = masterId; + this.combatReq = combatReq; + this.masterLocation = masterLocation; + this.masterName = masterName; + } + + public int getId() { + return masterId; + } + + public int getCombatRequirement() { + return combatReq; + } + + public String getLocation() { + return masterLocation; + } + + public String getMaster() { + return masterName; + } + + } + + //dark beast, red dragon, skeleton + public enum Task { + ABERRANT_SPECTRE(1604, 60, 90, 3, "Slayer Tower"), + ABYSSAL_DEMON(1615, 85, 150, 4, "Slayer Tower"), + BANSHEE(1612, 15, 22, 0 + r(2), "Slayer Tower"), + BASILISK(1616, 40, 75, 2, "Fremennik Slayer Dungeon"), + BAT(412, 1, 8, 1, "Road to Paterdomus"), + BLACK_DEMON(84, 1, 157, 3, "Taverly Dungeon"), + BLACK_DRAGON(54, 1, 258, 4, "Taverly Dungeon"), + BLOODVELD(1618, 50, 120, 3 + r(1), "Slayer Tower"), + BLUE_DRAGON(55, 1, 107, 3, "Taverly Dungeon"), + BRONZE_DRAGON(1590, 1, 125, 3, "Brimhaven Dungeon"), + CAVE_CRAWLER(1600, 10, 22, 1, "Fremennik Slayer Dungeon"), + COCKATRICE(1620, 25, 37, 2, "Fremennik Slayer Dungeon"), + CRAWLING_HAND(1648, 5, 16 + r(3), 1 + r(1), "Slayer Tower"), + DAGANNOTH_74(1338, 1, 70 + r(50), 3, "Lighthouse Basement"), + DAGANNOTH_92(1342, 1, 70 + r(50), 3, "Lighthouse Basement"), + DARK_BEAST(2783, 90, 180, 4, "Slayer Tower"), + DUST_DEVIL(1624, 65, 105, 2, "Slayer Tower"), + EARTH_WARRIOR(124, 1, 54, 2, "Edgeville Dungeon"), + FIRE_GIANT(110, 1, 111, 3, "Brimhaven Dungeon"), + GARGOYLE(1611, 75, 105, 3, "Slayer Tower"), + GHOST(103, 1, 25, 1 + r(1), "Taverly Dungeon"), + GREATER_DEMON(83, 1, 87, 3, "Brimhaven Dungeon"), + GREEN_DRAGON(941, 1, 75, 2, "The Wilderness"), + HELLHOUND(49, 1, 116, 3 + r(1),"Taverly Dungeon"), + HILL_GIANT(117, 1, 35, 2, "Edgeville Dungeon"), + ICE_GIANT(111, 1, 70, 2, "Asgarnian Ice Caves or White Wolf Mountain"), + ICE_WARRIOR(125, 1, 59, 2, "Asgarnian Ice Caves or the Wilderness"), + SKELETAL_WYVERN(3068, 72, 210, 4, "Asgarnian Ice Caves"), + INFERNAL_MAGE(1643, 45, 60, 2, "Slayer Tower"), + IRON_DRAGON(1591, 1, (int) 173.2, 4, "Brimhaven Dungeon"), + JELLY(1637, 52, 75, 2, "Fremennik Slayer Dungeon"), + KALPHITE_WORKER(1156, 1, 40, 1 + r(1), "Kalphite Lair"), + KALPHITE_SOLDIER(1154, 1, 90, 3, "Kalphite Lair"), + KALPHITE_GUARDIAN(1157, 1, 170, 4, "Kalphite Lair"), + KURASK(1608, 70, 97, 3, "Fremennik Slayer Dungeon"), + LESSER_DEMON(82, 1, 79, 3, "Karamja Dungeon"), + MOSS_GIANT(112, 1, 60, 2, "Brimhaven Dungeon"), + NECHRYAELS(1613, 80, 1, 3, "Slayer Tower"), + PYREFIEND(1633, 30, 1, 1, "Fremennik Slayer Dungeon"), + RED_DRAGON(53, 1, 120, 3, "Brimhaven Dungeon"), + ROCKSLUG(1622, 20, 27, 1, "Fremennik Slayer Dungeon"), + SKELETON(90, 1, 30, 0 + r(2), "Edgeville Dungeon or Taverly Dungeon"), + KARAMAJA_SKELETON(91, 1, 30, 0 + r(2), "Karamaja"), + WILDERNESS_SKELETON(92, 1, 30, 0 + r(2), "Wilderness"), + STEEL_DRAGON(1592, 1, 221, 4, "Brimhaven Dungeon"), + GRIZZLY_BEAR(105, 1, 27, 0, "Goblin Village"), + GREEN_GOBLIN(298, 1, 6, 0, "Goblin Village"), + RED_GOBLIN(299, 1, 6, 0, "Goblin Village"), + SCORPION(107, 1, 17, 0, "Goblin Village"), + TUROTH(1632, 55, 77, 3, "Fremennik Slayer Dungeon"); + + private int npcId, levelReq, diff, exp; + private String location; + + private Task(int npcId, int levelReq, int exp, int difficulty, String location) { + this.npcId = npcId; + this.exp = exp; + this.levelReq = levelReq; + this.location = location; + diff = difficulty; + } + + public int getNpcId() { + return npcId; + } + + public int getExp() { + return exp; + } + + public int getLevelReq() { + return levelReq; + } + + public int getDifficulty() { + return diff; + } + + public String getLocation() { + return location; + } + } + + public static int r(int random) { + return Misc.random(random); + } + + public boolean canAttackNpc(int i) { + if (c.playerLevel[c.playerSlayer] < getRequiredLevel(NpcHandler.npcs[i].npcType)) { + c.getActionSender().sendMessage("You need a slayer level of " + getRequiredLevel(NpcHandler.npcs[i].npcType) + " to attack this npc."); + c.getCombatAssistant().resetPlayerAttack(); + return false; + } + return true; + } + + public void resizeTable(int difficulty) { + if (easyTask.size() > 0 || hardTask.size() > 0 || mediumTask.size() > 0 + || veryHardTask.size() > 0 || veryEasyTask.size() > 0) { + easyTask.clear(); + mediumTask.clear(); + hardTask.clear(); + veryHardTask.clear(); + veryEasyTask.clear(); + } + for (Task slayerTask : Task.values()) { + if (slayerTask.getDifficulty() == EASY_TASK) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + easyTask.add(slayerTask.getNpcId()); + } + continue; + } else if (slayerTask.getDifficulty() == VERY_EASY_TASK) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + veryEasyTask.add(slayerTask.getNpcId()); + } + continue; + } else if (slayerTask.getDifficulty() == MEDIUM_TASK) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + mediumTask.add(slayerTask.getNpcId()); + } + continue; + } else if (slayerTask.getDifficulty() == HARD_TASK) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + hardTask.add(slayerTask.getNpcId()); + } + continue; + } else if (slayerTask.getDifficulty() == VERY_HARD_TASK) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + veryHardTask.add(slayerTask.getNpcId()); + } + continue; + } + } + } + + public boolean getMasterRequirment(int id) { + for (SlayerMasters slayermasters : SlayerMasters.values()) { + if (c.combatLevel < slayermasters.getCombatRequirement() + && slayermasters.getId() == id) { + c.getActionSender().sendMessage( + "You need " + slayermasters.getCombatRequirement() + + " combat to use this slayer master."); + return false; + } + } + return true; + } + + public int getTaskExp(int npcId) { + for (Task task: Task.values()) { + if (task.npcId == npcId) { + return task.exp; + } + } + return -1; + } + + public int getRequiredLevel(int npcId) { + for (Task task : Task.values()) { + if (task.npcId == npcId) { + return task.levelReq; + } + } + return -1; + } + + public String getLocation(int npcId) { + for (Task task : Task.values()) { + if (task.npcId == npcId) { + return task.location; + } + } + return ""; + } + + public String getMasterLocation(int npcId) { + for (SlayerMasters slayermasters : SlayerMasters.values()) { + if (slayermasters.masterId == npcId) { + return slayermasters.masterLocation; + } + } + return ""; + } + + public boolean isSlayerNpc(int npcId) { + for (Task task : Task.values()) { + if (task.getNpcId() == npcId) { + return true; + } + } + return false; + } + + public boolean isSlayerTask(int npcId) { + if (isSlayerNpc(npcId)) { + if (c.slayerTask == npcId) { + return true; + } + } + return false; + } + + public int getDifficulty(int npcId) { + for (Task task : Task.values()) { + if (task.npcId == npcId) { + return task.getDifficulty(); + } + } + return 1; + } + + public String getSlayerMaster(int npcId) { + for (SlayerMasters slayermasters : SlayerMasters.values()) { + if (slayermasters.masterId == npcId) { + return slayermasters.name().replaceAll("_", " ") + .replaceAll("2", "").toLowerCase(); + } + } + return ""; + } + + public String getTaskName(int npcId) { + for (Task task : Task.values()) { + if (task.npcId == npcId) { + return task.name().replaceAll("_", " ").replaceAll("2", "") + .toLowerCase(); + } + } + return ""; + } + + public int getTaskId(String name) { + for (Task task : Task.values()) { + if (task.name() == name) { + return task.npcId; + } + } + return -1; + } + + public boolean hasTask() { + return c.slayerTask > 0 || c.taskAmount > 0; + } + + public void generateTask() { + if (hasTask() && !c.needsNewTask) { + c.getDialogueHandler().sendDialogues(1226, c.npcType);// already have + // task + return; + } + if (hasTask() && c.needsNewTask) {// assigning new task + int difficulty = getDifficulty(c.slayerTask); + if (difficulty == VERY_EASY_TASK) { + c.getDialogueHandler().sendDialogues(1227, c.npcType); + c.needsNewTask = false; + return; + /* + * } else if (difficulty != VERY_EASY_TASK && c.needsNewTask && + * hasTask() && c.wantsEasyTask == true) { int taskLevel = + * VERY_EASY_TASK; int task = getRandomTask(taskLevel); + * c.slayerTask = task; c.taskAmount = getTaskAmount(taskLevel); + * c.getDialogues().handleDialogues(1368, c.npcType); + * c.getPacketDispatcher().sendMessage("You have been assigned " + * + c.taskAmount + " " + getTaskName(c.slayerTask) + + * ", good luck " + c.playerName + "."); c.needsNewTask = false; + */ + } + } + int taskLevel = getSlayerDifficulty(); + // System.out.println("EASY :" + easyTask + "\nMEDIUM: " + mediumTask+ + // "\nHARD: " + hardTask + ""); + for (Task slayerTask : Task.values()) { + if (slayerTask.getDifficulty() == taskLevel) { + if (c.playerLevel[18] >= slayerTask.getLevelReq()) { + resizeTable(taskLevel); + if (!c.needsNewTask) { + int task = getRandomTask(taskLevel); + for (int removedTask : c.removedTasks) { + if (task == removedTask) { + c.getActionSender().sendMessage( + "Unavailable task: " + task); + generateTask(); + return; + } + } + c.slayerTask = task; + c.taskAmount = getTaskAmount(taskLevel); + } else { + int task = getRandomTask(getDifficulty(taskLevel - 1)); + for (int removedTask : c.removedTasks) { + if (task == removedTask) { + c.getActionSender().sendMessage( + "Unavailable task: " + task); + generateTask(); + return; + } + } + c.slayerTask = task; + c.taskAmount = getTaskAmount(getDifficulty(c.slayerTask) - 1); + c.needsNewTask = false; + } + c.getDialogueHandler().sendDialogues(1237, c.npcType);// assign + // task + c.getActionSender().sendMessage( + "You have been assigned " + c.taskAmount + " " + + getTaskName(c.slayerTask) + + ", good luck " + c.playerName + "."); + return; + } + } + } + } + + public int getTaskAmount(int diff) { + switch (diff) { + case 0: + return VERY_EASY_AMOUNT; + case 1: + return EASY_AMOUNT; + case 2: + return MEDIUM_AMOUNT; + case 3: + return HARD_AMOUNT; + case 4: + return VERY_HARD_AMOUNT; + } + return EASY_AMOUNT; + } + + public int getSlayerDifficulty() { + if (c.combatLevel > 0 && c.combatLevel < 20) { + return VERY_EASY_TASK; + } else if (c.combatLevel >= 20 && c.combatLevel < 40) { + return EASY_TASK; + } else if (c.combatLevel >= 40 && c.combatLevel < 70) { + return MEDIUM_TASK; + } else if (c.combatLevel >= 70 && c.combatLevel < 100) { + return HARD_TASK; + } else if (c.combatLevel >= 100) { + return VERY_HARD_TASK; + } + return EASY_TASK; + } + + public int getRandomTask(int diff) { + if (diff == VERY_EASY_TASK) { + return veryEasyTask.get(r(veryEasyTask.size() - 1)); + } else if (diff == EASY_TASK) { + return easyTask.get(r(easyTask.size() - 1)); + } else if (diff == MEDIUM_TASK) { + return mediumTask.get(r(mediumTask.size() - 1)); + } else if (diff == HARD_TASK) { + return hardTask.get(r(hardTask.size() - 1)); + } else if (diff == VERY_HARD_TASK) { + return veryHardTask.get(r(veryHardTask.size() - 1)); + } + return easyTask.get(r(easyTask.size() - 1)); + } + + public void handleInterface(String shop) { + if (shop.equalsIgnoreCase("buy")) { + c.getPlayerAssistant().sendFrame126( + "Slayer Points: " + c.slayerPoints, 41011); + c.getPlayerAssistant().showInterface(41000); + } else if (shop.equalsIgnoreCase("learn")) { + c.getPlayerAssistant().sendFrame126( + "Slayer Points: " + c.slayerPoints, 41511); + c.getPlayerAssistant().showInterface(41500); + } else if (shop.equalsIgnoreCase("assignment")) { + c.getPlayerAssistant().sendFrame126( + "Slayer Points: " + c.slayerPoints, 42011); + updateCurrentlyRemoved(); + c.getPlayerAssistant().showInterface(42000); + } + } + + public void cancelTask() { + if (!hasTask()) { + c.getActionSender().sendMessage( + "You must have a task to cancel first."); + return; + } + if (c.slayerPoints < 30) { + c.getActionSender() + .sendMessage( + "This requires atleast 30 slayer points, which you don't have."); + c.getDialogueHandler() + .sendNpcChat1( + "This requires atleast 30 slayer points, which you don't have.", + c.npcType, NpcHandler.getNpcListName(c.talkingNpc)); + c.nextChat = 0; + return; + } + c.getActionSender().sendMessage( + "You have cancelled your current task of " + c.taskAmount + " " + + getTaskName(c.slayerTask) + "."); + c.slayerTask = -1; + c.taskAmount = 0; + c.slayerPoints -= 30; + } + + public void removeTask() { + int counter = 0; + if (!hasTask()) { + c.getActionSender().sendMessage( + "You must have a task to remove first."); + return; + } + if (c.slayerPoints < 100) { + c.getActionSender() + .sendMessage( + "This requires atleast 100 slayer points, which you don't have."); + c.getDialogueHandler() + .sendNpcChat1( + "This requires atleast 100 slayer points, which you don't have.", + c.npcType, NpcHandler.getNpcListName(c.talkingNpc)); + c.nextChat = 0; + return; + } + for (int i = 0; i < c.removedTasks.length; i++) { + if (c.removedTasks[i] != -1) { + counter++; + } + if (counter == 4) { + c.getActionSender().sendMessage( + "You don't have any open slots left to remove tasks."); + return; + } + if (c.removedTasks[i] == -1) { + c.removedTasks[i] = c.slayerTask; + c.slayerPoints -= 100; + c.slayerTask = -1; + c.taskAmount = 0; + c.getActionSender() + .sendMessage( + "Your current slayer task has been removed, you can't obtain this task again."); + updateCurrentlyRemoved(); + return; + } + } + } + + public void updatePoints() { + c.getPlayerAssistant().sendFrame126("Slayer Points: " + c.slayerPoints, + 41011); + c.getPlayerAssistant().sendFrame126("Slayer Points: " + c.slayerPoints, + 41511); + c.getPlayerAssistant().sendFrame126("Slayer Points: " + c.slayerPoints, + 42011); + } + + public void updateCurrentlyRemoved() { + int line[] = { 42014, 42015, 42016, 42017 }; + for (int i = 0; i < c.removedTasks.length; i++) { + if (c.removedTasks[i] != -1) { + c.getPlayerAssistant().sendFrame126( + getTaskName(c.removedTasks[i]), line[i]); + } else { + c.getPlayerAssistant().sendFrame126("", line[i]); + } + } + } + + public void buySlayerExperience() { + if (System.currentTimeMillis() - c.buySlayerTimer < 500) { + return; + } + if (c.slayerPoints < 50) { + c.getActionSender() + .sendMessage( + "You need at least 50 slayer points to gain 32,500 Experience."); + return; + } + c.buySlayerTimer = System.currentTimeMillis(); + c.slayerPoints -= 50; + c.getPlayerAssistant().addSkillXP(16250, 18); + c.getActionSender() + .sendMessage( + "You spend 50 slayer points and gain 16,250 experience in slayer."); + updatePoints(); + } + + public void buySlayerDart() { + if (System.currentTimeMillis() - c.buySlayerTimer < 500) { + return; + } + if (c.slayerPoints < 35) { + c.getActionSender().sendMessage( + "You need at least 35 slayer points to buy Slayer darts."); + return; + } + if (c.getItemAssistant().freeSlots() < 2 + && !c.getItemAssistant().playerHasItem(560) + && !c.getItemAssistant().playerHasItem(558)) { + c.getActionSender().sendMessage( + "You need at least 2 free lots to purchase this."); + return; + } + + c.buySlayerTimer = System.currentTimeMillis(); + c.slayerPoints -= 35; + c.getActionSender() + .sendMessage( + "You spend 35 slayer points and aquire 250 casts of Slayer darts."); + c.getItemAssistant().addItem(558, 1000); + c.getItemAssistant().addItem(560, 250); + updatePoints(); + } + + public void buyBroadArrows() { + if (System.currentTimeMillis() - c.buySlayerTimer < 500) { + return; + } + if (c.slayerPoints < 25) { + c.getActionSender().sendMessage( + "You need at least 25 slayer points to buy Broad arrows."); + return; + } + if (c.getItemAssistant().freeSlots() < 1 + && !c.getItemAssistant().playerHasItem(4160)) { + c.getActionSender().sendMessage( + "You need at least 1 free lot to purchase this."); + return; + } + c.buySlayerTimer = System.currentTimeMillis(); + c.slayerPoints -= 25; + c.getActionSender().sendMessage( + "You spend 35 slayer points and aquire 250 Broad arrows."); + c.getItemAssistant().addItem(4160, 250); + updatePoints(); + } + + public void buyRespite() { + if (System.currentTimeMillis() - c.buySlayerTimer < 1000) { + return; + } + if (c.slayerPoints < 25) { + c.getActionSender() + .sendMessage( + "You need at least 25 slayer points to buy Slayer's respite."); + return; + } + c.buySlayerTimer = System.currentTimeMillis(); + c.slayerPoints -= 25; + c.getActionSender() + .sendMessage( + "You spend 25 slayer points and aquire a useful Slayer's respite."); + c.getItemAssistant().addItem(5841, 1); + updatePoints(); + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/slayer/SlayerRequirements.java b/2006Redone Server/src/redone/game/content/skills/slayer/SlayerRequirements.java new file mode 100644 index 00000000..e673c484 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/slayer/SlayerRequirements.java @@ -0,0 +1,83 @@ +package redone.game.content.skills.slayer; + +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; + +/** + * Slayer Item Requirements + * + * @author Andrew + */ + +public class SlayerRequirements { + + private static final int NOSE_PEG = 4168, MIRROR_SHIELD = 4156, + EAR_MUFFS = 4166, ROCK_HAMMER = 4162, FACEMASK = 4164, + LEAF_BLADED_SPEAR = 4158, BROAD_ARROWS = 4172, BAG_OF_SALT = 4161; + + public static boolean itemNeededSlayer(Client client, int i) { + int npcType = NpcHandler.npcs[i].npcType; + switch (NpcHandler.npcs[i].npcType) { + case 1622: + case 1623: //rock slug + if (!client.getItemAssistant().playerHasItem(BAG_OF_SALT, 1)) { + client.getActionSender().sendMessage("You need a Bag of Salt to attack Rock Slugs."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1632: // turoth + if (client.playerEquipment[client.playerWeapon] != LEAF_BLADED_SPEAR && client.playerEquipment[client.playerArrows] != BROAD_ARROWS) { + client.getActionSender().sendMessage("You need a Leaf Bladed Spear or Broad Arrows to attack Turoths."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } else if (client.playerEquipment[client.playerArrows] != BROAD_ARROWS && client.playerEquipment[client.playerWeapon] != LEAF_BLADED_SPEAR) { + client.getActionSender().sendMessage("You need a Leaf Bladed Spear or Broad Arrows to attack Turoths."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1612:// banshee + if (client.playerEquipment[client.playerHat] != EAR_MUFFS) { + client.getActionSender().sendMessage("You need some Ear Muffs to attack Banshees."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1620: //basilisk + case 1616:// cockatrice + if (client.playerEquipment[client.playerShield] != MIRROR_SHIELD) { + client.getActionSender().sendMessage("You need a Mirror Shield to attack a " + NpcHandler.getNpcListName(npcType).toLowerCase() + "."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1624:// dust devil + if (client.playerEquipment[client.playerHat] != FACEMASK) { + client.getActionSender().sendMessage("You need a Face Mask to attack Dust devils."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1604: + case 1605: + case 1606: + case 1607:// spectre + if (client.playerEquipment[client.playerHat] != NOSE_PEG) { + client.getActionSender().sendMessage("You need a Nose Peg to attack Aberrant specter."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + case 1611:// garg + if (!client.getItemAssistant().playerHasItem(ROCK_HAMMER)) { + client.getActionSender().sendMessage("You need a Rock Hammer to attack gargoyles."); + client.getCombatAssistant().resetPlayerAttack(); + return false; + } + break; + } + return true; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/smithing/SilverCrafting.java b/2006Redone Server/src/redone/game/content/skills/smithing/SilverCrafting.java new file mode 100644 index 00000000..7cce64a7 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/smithing/SilverCrafting.java @@ -0,0 +1,151 @@ +package redone.game.content.skills.smithing; + +import java.util.HashMap; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +public class SilverCrafting { + + public static final int SILVER_BAR = 2355; + private static final int SILVER_ANIMATION = 899; + + public static enum SilverCraft { + UNBLESSED(34205, 2355, 1716, 1, 16, 50), UNBLESSED5(34204, 2355, 1716, + 5, 16, 50), UNBLESSED10(34203, 2355, 1716, 10, 16, 50), UNBLESSEDX( + 34202, 2355, 1716, 0, 16, 50), UNHOLY(34209, 2355, 1724, 1, 17, + 50), UNHOLY5(34208, 2355, 1724, 5, 17, 50), UNHOLY10(34207, + 2355, 1724, 10, 17, 50), UNHOLYX(34206, 2355, 1724, 0, 17, 50), SICKLE( + 34213, 2355, 2961, 1, 18, 50), SICKLE5(34212, 2355, 2961, 5, + 18, 50), SICKLE10(34211, 2355, 2961, 10, 18, 50), SICKLEX( + 34210, 2355, 2961, 0, 18, 50), TIARA(34217, 2355, 5525, 1, 23, + 52.5), TIARA5(34216, 2355, 5525, 5, 23, 52.5), TIARA10(34215, + 2355, 5525, 10, 23, 52.5), TIARAX(34214, 2355, 5525, 0, 23, + 52.5); + + private final int buttonId; + private final int used; + private final int result; + private final int amount; + private final int level; + private final double experience; + + public static HashMap silverItems = new HashMap(); + + public static SilverCraft forId(int id) { + return silverItems.get(id); + } + + static { + for (SilverCraft data : SilverCraft.values()) { + silverItems.put(data.buttonId, data); + } + } + + private SilverCraft(int buttonId, int used, int result, int amount, + int level, double experience) { + this.buttonId = buttonId; + this.used = used; + this.result = result; + this.amount = amount; + this.level = level; + this.experience = experience; + } + + public int getButtonId() { + return buttonId; + } + + public int getUsed() { + return used; + } + + public int getResult() { + return result; + } + + public int getAmount() { + return amount; + } + + public int getLevel() { + return level; + } + + public double getExperience() { + return experience; + } + + } + + public static void makeSilver(final Client player, int buttonId, + final int amount) { + final SilverCraft silverCraft = SilverCraft.forId(buttonId); + if (silverCraft == null || silverCraft.getAmount() == 0 && amount == 0) { + return; + } + if (silverCraft.getUsed() == SILVER_BAR && player.isCrafting) { + if (!SkillHandler.CRAFTING) { + player.getActionSender().sendMessage( + "This skill is currently disabled."); + return; + } + if (!player.getItemAssistant().playerHasItem(SILVER_BAR)) { + player.getDialogueHandler().sendStatement( + "You need a silver bar to do this."); + return; + } + if (player.playerLevel[player.playerCrafting] < silverCraft + .getLevel()) { + player.getDialogueHandler().sendStatement( + "You need a crafting level of " + + silverCraft.getLevel() + " to make this."); + return; + } + player.startAnimation(SILVER_ANIMATION); + player.isCrafting = true; + player.getPlayerAssistant().closeAllWindows(); + + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + + int amnt = silverCraft.getAmount() != 0 ? silverCraft + .getAmount() : amount; + + @Override + public void execute(CycleEventContainer container) { + if (amnt == 0 + || !player.getItemAssistant().playerHasItem( + SILVER_BAR) || player.isCrafting == false) { + container.stop(); + return; + } + container.setTick(3); + player.startAnimation(SILVER_ANIMATION); + player.getActionSender().sendMessage( + "You make the silver bar into " + + ItemAssistant + .getItemName( + silverCraft.getResult()) + .toLowerCase().toLowerCase() + "."); + player.getItemAssistant().deleteItem2(SILVER_BAR, 1); + player.getItemAssistant().addItem(silverCraft.getResult(), + 1); + player.getPlayerAssistant().addSkillXP( + silverCraft.getExperience(), player.playerCrafting); + amnt--; + + } + + @Override + public void stop() { + player.startAnimation(65535); + player.isCrafting = false; + } + }, 3); + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/smithing/Smelting.java b/2006Redone Server/src/redone/game/content/skills/smithing/Smelting.java new file mode 100644 index 00000000..2d9ed363 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/smithing/Smelting.java @@ -0,0 +1,370 @@ +package redone.game.content.skills.smithing; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * Made by + * + * @author abysspartyy + */ + +public class Smelting extends SkillHandler { + + private static int COPPER = 436, TIN = 438, IRON = 440, COAL = 453, + MITH = 447, ADDY = 449, RUNE = 451, GOLD = 444, SILVER = 442; + private final static int[] SMELT_FRAME = { 2405, 2406, 2407, 2409, 2410, + 2411, 2412, 2413 }; + private final static int[] SMELT_BARS = { 2349, 2351, 2355, 2353, 2357, + 2359, 2361, 2363 }; + + /** + * Handles Smelting data. + */ + public static int[][] data = { + // index ,lvl required, XP, item required, item2, COAL AMOUNT, + // Final item(BAR) + { 1, 1, 6, COPPER, TIN, -1, 2349 }, // Bronze + { 2, 15, 12, IRON, -1, -1, 2351 }, // iron + { 3, 20, 17, IRON, COAL, 2, 2353 }, // Steel + { 4, 50, 30, MITH, COAL, 4, 2359 }, // Mith + { 5, 70, 37, ADDY, COAL, 6, 2361 }, // Addy + { 6, 85, 50, RUNE, COAL, 8, 2363 }, // Rune + { 7, 20, 13, SILVER, -1, -1, 2355 }, // Silver + { 8, 40, 22, GOLD, -1, -1, 2357 } // GOLD + }; + + /** + * Sends the interface + * + * @param c + */ + public static void startSmelting(Client c, int object) { + for (int j = 0; j < SMELT_FRAME.length; j++) { + c.getPlayerAssistant().sendFrame246(SMELT_FRAME[j], 150, + SMELT_BARS[j]); + } + c.getPlayerAssistant().sendChatInterface(2400); + c.isSmelting = true; + } + + /** + * Sets the amount of bars that can be smelted. (EG. 5,10,28 times) + * + * @param c + * @param amount + */ + public static void doAmount(Client c, int amount, int bartype) { + c.doAmount = amount; + smeltBar(c, bartype); + } + + /** + * Main method. Smelting + * + * @param c + */ + private static void smeltBar(final Client c, int bartype) { + for (int i = 0; i < data.length; i++) { + if (bartype == data[i][0]) { + if (c.playerLevel[c.playerSmithing] < data[i][1]) { // Smithing + // level + c.getDialogueHandler().sendStatement( + "You need a smithing level of at least " + + data[i][1] + " in order smelt this bar."); + return; + } + + if (data[i][3] > 0 && data[i][4] > 0) { // All OTHER bars + if (!c.getItemAssistant().playerHasItem(data[i][3]) + || !c.getItemAssistant().playerHasItem(data[i][4])) { + c.getActionSender().sendMessage( + "You need an " + + ItemAssistant.getItemName(data[i][3]) + .toLowerCase() + + " and " + + data[i][5] + + " " + + ItemAssistant.getItemName(data[i][4]) + .toLowerCase() + + " to make this bar."); + + c.getPlayerAssistant().removeAllWindows(); + return; + } + } + + if (data[i][4] < 0) { // Iron bar, Gold & Silver requirements + if (!c.getItemAssistant().playerHasItem(data[i][3])) { + c.getActionSender().sendMessage( + "You need an " + + ItemAssistant.getItemName(data[i][3]) + .toLowerCase() + + " to make this bar."); + c.getPlayerAssistant().removeAllWindows(); + return; + } + } + + if (data[i][5] > 0) { // Bars with more than 1 coal requirement + if (!c.getItemAssistant().playerHasItem(data[i][4], + data[i][5])) { + c.getActionSender().sendMessage( + "You need an " + + ItemAssistant.getItemName(data[i][3]) + .toLowerCase() + " and " + + data[i][5] + + " coal ores to make this bar."); + c.getPlayerAssistant().removeAllWindows(); + return; + } + } + + if (c.playerSkilling[13]) { + return; + } + + c.playerSkilling[13] = true; + c.stopPlayerSkill = true; + + c.playerSkillProp[13][0] = data[i][0];// index + c.playerSkillProp[13][1] = data[i][1];// Level required + c.playerSkillProp[13][2] = data[i][2];// XP + c.playerSkillProp[13][3] = data[i][3];// item required + c.playerSkillProp[13][4] = data[i][4];// item required 2 + c.playerSkillProp[13][5] = data[i][5];// coal amount + c.playerSkillProp[13][6] = data[i][6];// Final Item + + c.getPlayerAssistant().removeAllWindows(); + c.startAnimation(899); + c.getActionSender().sendSound(352, 100, 1); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + deleteTime(c); + c.getItemAssistant().deleteItem( + c.playerSkillProp[13][3], 1); + if (c.playerSkillProp[13][5] == -1) { + c.getItemAssistant().deleteItem( + c.playerSkillProp[13][4], 1); + } + if (c.playerSkillProp[13][5] > 0) {// if coal amount is + // >0 + c.getItemAssistant().deleteItem2( + c.playerSkillProp[13][4], + c.playerSkillProp[13][5]); + } + + c.getActionSender().sendMessage( + "You receive an " // Message + + ItemAssistant.getItemName( + c.playerSkillProp[13][6]) + .toLowerCase() + "."); + if (c.playerSkillProp[13][3] == GOLD + && c.playerSkillProp[13][4] == -1 + && c.playerEquipment[c.playerHands] == 776) { + c.getPlayerAssistant().addSkillXP(56.2, + c.playerSmithing); + } else { + c.getPlayerAssistant().addSkillXP( + c.playerSkillProp[13][2], c.playerSmithing); + } + c.getItemAssistant().addItem(c.playerSkillProp[13][6], + 1);// item + + // ///////////////////////////////CHECKING////////////////////// + if (!c.getItemAssistant().playerHasItem( + c.playerSkillProp[13][3], 1)) { + c.getActionSender() + .sendMessage( + "You don't have enough ores to continue smelting!"); + resetSmelting(c); + container.stop(); + } + if (c.playerSkillProp[13][4] > 0) { + if (!c.getItemAssistant().playerHasItem( + c.playerSkillProp[13][4], 1)) { + c.getActionSender() + .sendMessage( + "You don't have enough ores to continue smelting!"); + resetSmelting(c); + container.stop(); + } + } + if (c.doAmount <= 0) { + resetSmelting(c); + container.stop(); + } + if (!c.playerSkilling[13]) { + resetSmelting(c); + container.stop(); + } + if (!c.stopPlayerSkill) { + resetSmelting(c); + container.stop(); + } + + } + + @Override + public void stop() { + + } + }, (int) 5.9); + + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {// animation + + @Override + public void execute(CycleEventContainer container) { + if (!c.playerSkilling[13]) { + resetSmelting(c); + container.stop(); + return; + } + c.startAnimation(899); + c.getActionSender().sendSound(352, 100, 1); + if (!c.stopPlayerSkill) { + container.stop(); + } + } + + @Override + public void stop() { + + } + }, (int) 5.8); + + } + } + } + + /** + * Gets the index from DATA for which bar to smelt + */ + public static void getBar(Client c, int i) { + switch (i) { + case 15147: // bronze (1) + doAmount(c, 1, 1);// (c,amount,Index in data) + break; + case 15146: // bronze (5) + doAmount(c, 5, 1); + break; + case 10247: // bronze (10) + doAmount(c, 10, 1); + break; + case 9110:// bronze (X) + doAmount(c, 28, 1); + break; + + case 15151: // iron (1) + doAmount(c, 1, 2); + break; + case 15150: // iron (5) + doAmount(c, 5, 2); + break; + case 15149: // iron (10) + doAmount(c, 10, 2); + break; + case 15148:// Iron (X) + doAmount(c, 28, 2); + break; + + case 15159: // Steel (1) + doAmount(c, 1, 3); + break; + case 15158: // Steel (5) + doAmount(c, 5, 3); + break; + case 15157: // Steel (10) + doAmount(c, 10, 3); + break; + case 15156:// Steel (X) + doAmount(c, 28, 3); + break; + + case 29017: // mith (1) + doAmount(c, 1, 4); + break; + case 29016: // mith (5) + doAmount(c, 5, 4); + break; + case 24253: // mith (10) + doAmount(c, 10, 4); + break; + case 16062:// Mith (X) + doAmount(c, 28, 4); + break; + + case 29022: // Addy (1) + doAmount(c, 1, 5); + break; + case 29020: // Addy (5) + doAmount(c, 5, 5); + break; + case 29019: // Addy (10) + doAmount(c, 10, 5); + break; + case 29018:// Addy (X) + doAmount(c, 28, 5); + break; + + case 29026: // RUNE (1) + doAmount(c, 1, 6); + break; + case 29025: // RUNE (5) + doAmount(c, 5, 6); + break; + case 29024: // RUNE (10) + doAmount(c, 10, 6); + break; + case 29023:// Rune (X) + doAmount(c, 28, 6); + break; + + case 15155:// SILVER (1) + doAmount(c, 1, 7); + break; + case 15154:// SILVER (5) + doAmount(c, 5, 7); + break; + case 15153:// SILVER (10) + doAmount(c, 10, 7); + break; + case 15152:// SILVER (28) + doAmount(c, 28, 7); + break; + + case 15163:// Gold (1) + doAmount(c, 1, 8); + break; + case 15162:// Gold (5) + doAmount(c, 5, 8); + break; + case 15161:// Gold (10) + doAmount(c, 10, 8); + break; + case 15160:// Gold (28) + doAmount(c, 28, 8); + break; + } + + } + + /** + * Resets Smelting + */ + public static void resetSmelting(Client c) { + c.playerSkilling[13] = false; + c.stopPlayerSkill = false; + c.isSmelting = false; + for (int i = 0; i < 7; i++) { + c.playerSkillProp[13][i] = -1; + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/smithing/Smithing.java b/2006Redone Server/src/redone/game/content/skills/smithing/Smithing.java new file mode 100644 index 00000000..66693c20 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/smithing/Smithing.java @@ -0,0 +1,912 @@ +package redone.game.content.skills.smithing; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * Cleaned by Andrew + * @author Andrew + */ + +public class Smithing { + + private int addItem, XP, removeItem, removeAmount, makeTimes; + + public void readInput(int levelReq, String type, Client c, int amountToMake) { + if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Bronze")) { + CheckBronze(c, levelReq, amountToMake, type); + } else if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Iron")) { + CheckIron(c, levelReq, amountToMake, type); + } else if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Steel")) { + CheckSteel(c, levelReq, amountToMake, type); + } else if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Mith")) { + CheckMith(c, levelReq, amountToMake, type); + } else if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Adam") || ItemAssistant.getItemName(Integer.parseInt(type)).contains("Addy")) { + CheckAddy(c, levelReq, amountToMake, type); + } else if (ItemAssistant.getItemName(Integer.parseInt(type)).contains("Rune") || ItemAssistant.getItemName(Integer.parseInt(type)).contains("Runite")) { + CheckRune(c, levelReq, amountToMake, type); + } + if (c.playerRights > 1) { + c.getActionSender().sendMessage("You made item id: " + type + "."); + } + } + + private void CheckBronze(Client c, int levelReq, int amountToMake, String type) { + if (c.tutorialProgress == 20 && !type.equalsIgnoreCase("1205")) { + c.getDialogueHandler().sendStatement("You can only make a bronze dagger on this step."); + c.nextChat = 0; + return; + } + if (type.equalsIgnoreCase("1351") && levelReq >= 1) { + XP = 13; + addItem = 1351; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1205") && levelReq >= 1 && c.tutorialProgress > 20) { + XP = 13; + addItem = 1205; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1205") && levelReq >= 1 && c.tutorialProgress == 20) { + XP = 13; + addItem = 1205; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + c.getDialogueHandler().sendDialogues(3066, -1); + } else if (type.equals("1422") && levelReq >= 2) { + XP = 13; + addItem = 1422; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1139") && levelReq >= 3) { + XP = 13; + addItem = 1139; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("819") && levelReq >= 4) { + XP = 13; + addItem = 819; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1277") && levelReq >= 4) { + XP = 13; + addItem = 1277; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("4819") && levelReq >= 4) { + XP = 13; + addItem = 4819; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("39") && levelReq >= 5) { + XP = 13; + addItem = 39; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1321") && levelReq >= 5) { + XP = 25; + addItem = 1321; + removeItem = 2349; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1291") && levelReq >= 6) { + XP = 25; + addItem = 1291; + removeItem = 2349; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("864") && levelReq >= 7) { + XP = 25; + addItem = 864; + removeItem = 2349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1155") && levelReq >= 7) { + XP = 25; + addItem = 1155; + removeItem = 2349; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1173") && levelReq >= 8) { + XP = 25; + addItem = 1173; + removeItem = 2349; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("3095") && levelReq >= 8) { // claws + XP = 25; + addItem = 3095; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1337") && levelReq >= 9) { + XP = 38; + addItem = 1337; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1375") && levelReq >= 10) { + XP = 38; + addItem = 1375; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1103") && levelReq >= 11) { + XP = 38; + addItem = 1103; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1189") && levelReq >= 12) { + XP = 38; + addItem = 1189; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1307") && levelReq >= 14) { + XP = 38; + addItem = 1307; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1075") && levelReq >= 16) { + XP = 38; + addItem = 1075; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1087") && levelReq >= 16) { + XP = 38; + addItem = 1087; + removeItem = 2349; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1117") && levelReq >= 18) { + XP = 63; + addItem = 1117; + removeItem = 2349; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + } + + private void CheckIron(Client c, int levelReq, int amountToMake, String type) { + removeItem = 2351; + if (type.equalsIgnoreCase("1349") && levelReq >= 16) { // Axe + XP = 25; + addItem = 1349; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1203") && levelReq >= 15) { // Dagger + XP = 25; + addItem = 1203; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1420") && levelReq >= 17) { // Mace + XP = 25; + addItem = 1420; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1137") && levelReq >= 18) { // Med helm + XP = 25; + addItem = 1137; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("820") && levelReq >= 19) { // Dart tips + XP = 25; + addItem = 820; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1279") && levelReq >= 19) { // Sword (s) + XP = 25; + addItem = 1279; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("4820") && levelReq >= 19) { // Nails + XP = 25; + addItem = 4820; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("40") && levelReq >= 20) { // Arrow tips + XP = 25; + addItem = 40; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1323") && levelReq >= 20) {// Scim + XP = 50; + addItem = 1323; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1293") && levelReq >= 21) { // Longsword + XP = 50; + addItem = 1293; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("863") && levelReq >= 22) { // Knives + XP = 25; + addItem = 863; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1153") && levelReq >= 22) { // Full Helm + XP = 50; + addItem = 1153; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1175") && levelReq >= 23) { // Square shield + XP = 50; + addItem = 1175; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1335") && levelReq >= 24) { // Warhammer + XP = 38; + addItem = 1335; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1363") && levelReq >= 25) { // Battle axe + XP = 75; + addItem = 1363; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1101") && levelReq >= 26) { // Chain + XP = 75; + addItem = 1101; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("4540") && levelReq >= 26) { // lantern + XP = 25; + addItem = 4540; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1191") && levelReq >= 27) { // Kite + XP = 75; + addItem = 1191; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("3096") && levelReq >= 28) { // claws + XP = 50; + addItem = 3096; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1309") && levelReq >= 29) { // 2h Sword + XP = 75; + addItem = 1309; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1067") && levelReq >= 31) { // Platelegs + XP = 75; + addItem = 1067; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1081") && levelReq >= 31) { // PlateSkirt + XP = 75; + addItem = 1081; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1115") && levelReq >= 33) { // Platebody + XP = 125; + addItem = 1115; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + + } + + private void CheckSteel(Client c, int levelReq, int amountToMake, String type) { + removeItem = 2353; + if (type.equalsIgnoreCase("1353") && levelReq >= 31) { // Axe + XP = 38; + addItem = 1353; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1207") && levelReq >= 30) { // Dagger + XP = 50; + addItem = 1207; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1424") && levelReq >= 32) { // Mace + XP = 50; + addItem = 1424; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1141") && levelReq >= 33) { // Med helm + XP = 50; + addItem = 1141; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("821") && levelReq >= 34) { // Dart tips + XP = 50; + addItem = 821; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1281") && levelReq >= 34) { // Sword (s) + XP = 50; + addItem = 1281; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1539") && levelReq >= 34) { // Nails + XP = 50; + addItem = 1539; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("41") && levelReq >= 35) { // Arrow tips + XP = 50; + addItem = 41; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1325") && levelReq >= 35) {// Scim + XP = 75; + addItem = 1325; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("2370") && levelReq >= 36) {// Studs + XP = 37; + addItem = 2370; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1295") && levelReq >= 36) { // Longsword + XP = 75; + addItem = 1295; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("865") && levelReq >= 37) { // Knives + XP = 50; + addItem = 865; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1157") && levelReq >= 37) { // Full Helm + XP = 75; + addItem = 1157; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1177") && levelReq >= 38) { // Square shield + XP = 75; + addItem = 1177; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1339") && levelReq >= 39) { // Warhammer + XP = 113; + addItem = 1339; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1365") && levelReq >= 40) { // Battle axe + XP = 113; + addItem = 1365; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1105") && levelReq >= 41) { // Chain + XP = 113; + addItem = 1105; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1193") && levelReq >= 42) { // Kite + XP = 113; + addItem = 1193; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("3097") && levelReq >= 43) { // claws + XP = 75; + addItem = 3097; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1311") && levelReq >= 44) { // 2h Sword + XP = 113; + addItem = 1311; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1069") && levelReq >= 46) { // Platelegs + XP = 113; + addItem = 1069; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1083") && levelReq >= 46) { // PlateSkirt + XP = 113; + addItem = 1083; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1119") && levelReq >= 48) { // Platebody + XP = 188; + addItem = 1119; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + } + + private void CheckMith(Client c, int levelReq, int amountToMake, String type) { + removeItem = 2359; + if (type.equalsIgnoreCase("1355") && levelReq >= 51) { // Axe + XP = 50; + addItem = 1355; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1209") && levelReq >= 50) { // Dagger + XP = 50; + addItem = 1209; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1428") && levelReq >= 52) { // Mace + XP = 50; + addItem = 1428; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1143") && levelReq >= 53) {// Med helm + XP = 50; + addItem = 1143; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("822") && levelReq >= 54) { // Dart tips + XP = 50; + addItem = 822; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1285") && levelReq >= 54) { // Sword (s) + XP = 50; + addItem = 1285; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("4822") && levelReq >= 54) { // Nails + XP = 50; + addItem = 4822; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("42") && levelReq >= 55) { // Arrow tips + XP = 50; + addItem = 42; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1329") && levelReq >= 55) {// Scim + XP = 100; + addItem = 1329; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1299") && levelReq >= 56) { // Longsword + XP = 100; + addItem = 1299; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("866") && levelReq >= 57) { // Knives + XP = 50; + addItem = 866; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1159") && levelReq >= 57) { // Full Helm + XP = 100; + addItem = 1159; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1181") && levelReq >= 58) { // Square shield + XP = 100; + addItem = 1181; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1343") && levelReq >= 59) { // Warhammer + XP = 150; + addItem = 1343; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1369") && levelReq >= 60) { // Battle axe + XP = 150; + addItem = 1369; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1109") && levelReq >= 61) { // Chain + XP = 150; + addItem = 1109; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1197") && levelReq >= 62) { // Kite + XP = 150; + addItem = 1197; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("3099") && levelReq >= 63) { // claws + XP = 100; + addItem = 3099; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1315") && levelReq >= 64) { // 2h Sword + XP = 150; + addItem = 1315; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1071") && levelReq >= 66) { // Platelegs + XP = 150; + addItem = 1071; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1085") && levelReq >= 66) { // PlateSkirt + XP = 150; + addItem = 1085; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1121") && levelReq >= 68) { // Platebody + XP = 250; + addItem = 1121; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + } + + private void CheckAddy(Client c, int levelReq, int amountToMake, String type) { + removeItem = 2361; + if (type.equalsIgnoreCase("1357") && levelReq >= 71) { // Axe + XP = 63; + addItem = 1357; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1211") && levelReq >= 70) { // Dagger + XP = 63; + addItem = 1211; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1430") && levelReq >= 72) { // Mace + XP = 63; + addItem = 1430; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1145") && levelReq >= 73) { // Med helm + XP = 63; + addItem = 1145; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("823") && levelReq >= 74) { // Dart tips + XP = 63; + addItem = 823; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1287") && levelReq >= 74) { // Sword (s) + XP = 63; + addItem = 1287; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("4823") && levelReq >= 74) { // Nails + XP = 63; + addItem = 4823; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("43") && levelReq >= 75) { // Arrow tips + XP = 63; + addItem = 43; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1331") && levelReq >= 75) {// Scim + XP = 125; + addItem = 1331; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1301") && levelReq >= 76) { // Longsword + XP = 125; + addItem = 1301; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("867") && levelReq >= 77) { // Knives + XP = 63; + addItem = 867; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1161") && levelReq >= 77) { // Full Helm + XP = 125; + addItem = 1161; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1183") && levelReq >= 78) { // Square shield + XP = 125; + addItem = 1183; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1345") && levelReq >= 79) { // Warhammer + XP = 188; + addItem = 1345; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1371") && levelReq >= 80) { // Battle axe + XP = 188; + addItem = 1371; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1111") && levelReq >= 81) { // Chain + XP = 188; + addItem = 1111; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1199") && levelReq >= 82) { // Kite + XP = 188; + addItem = 1199; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("3100") && levelReq >= 83) { // claws + XP = 125; + addItem = 3100; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1317") && levelReq >= 84) { // 2h Sword + XP = 188; + addItem = 1317; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1073") && levelReq >= 86) { // Platelegs + XP = 188; + addItem = 1073; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1091") && levelReq >= 86) { // PlateSkirt + XP = 188; + addItem = 1091; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1123") && levelReq >= 88) { // Platebody + XP = 313; + addItem = 1123; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + } + + private void CheckRune(Client c, int levelReq, int amountToMake, String type) { + removeItem = 2363; + if (type.equalsIgnoreCase("1359") && levelReq >= 86) { // Axe + XP = 75; + addItem = 1359; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equalsIgnoreCase("1213") && levelReq >= 85) { // Dagger + XP = 75; + addItem = 1213; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1432") && levelReq >= 87) { // Mace + XP = 75; + addItem = 1432; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1147") && levelReq >= 88) { // Med helm + XP = 75; + addItem = 1147; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("824") && levelReq >= 89) { // Dart tips + XP = 75; + addItem = 824; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1289") && levelReq >= 89) { // Sword (s) + XP = 75; + addItem = 1289; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("4824") && levelReq >= 89) { // Nails + XP = 75; + addItem = 4824; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("44") && levelReq >= 90) { // Arrow tips + XP = 75; + addItem = 44; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1333") && levelReq >= 90) {// Scim + XP = 150; + addItem = 1333; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1303") && levelReq >= 91) { // Longsword + XP = 150; + addItem = 1303; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("868") && levelReq >= 92) { // Knives + XP = 75; + addItem = 868; + removeAmount = 1; + makeTimes = amountToMake; + } else if (type.equals("1163") && levelReq >= 92) { // Full Helm + XP = 150; + addItem = 1163; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1185") && levelReq >= 93) { // Square shield + XP = 150; + addItem = 1185; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1347") && levelReq >= 94) { // Warhammer + XP = 225; + addItem = 1347; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1373") && levelReq >= 95) { // Battle axe + XP = 225; + addItem = 1373; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1113") && levelReq >= 96) { // Chain + XP = 225; + addItem = 1113; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1201") && levelReq >= 97) { // Kite + XP = 225; + addItem = 1201; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1319") && levelReq >= 99) { // 2h Sword + XP = 225; + addItem = 1319; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1079") && levelReq >= 99) { // Platelegs + XP = 225; + addItem = 1079; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("3101") && levelReq >= 98) { // claws + XP = 150; + addItem = 3101; + removeAmount = 2; + makeTimes = amountToMake; + } else if (type.equals("1093") && levelReq >= 99) { // PlateSkirt + XP = 225; + addItem = 1093; + removeAmount = 3; + makeTimes = amountToMake; + } else if (type.equals("1127") && levelReq >= 99) { // Platebody + XP = 313; + addItem = 1127; + removeAmount = 5; + makeTimes = amountToMake; + } else if (c.playerLevel[c.playerSmithing] < levelReq) { + c.getActionSender().sendMessage( + "You need " + levelReq + " smithing to do this!"); + return; + } + smithItem(c, addItem, removeItem, removeAmount, makeTimes, XP); + } + + /*public boolean smithItem(final Client c, final int addItem, final int removeItem, final int removeItem2, int timesToMake, final int XP) { + final int makeTimes = timesToMake; + c.isSmithing = true; + c.startAnimation(898); + final String name = ItemAssistant.getItemName(addItem); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!c.getItemAssistant().playerHasItem(removeItem, removeItem2)) { + container.stop(); + } + if (makeTimes == 0 || c.isSmithing == false) { + container.stop(); + } + c.getItemAssistant().deleteItem2(removeItem, removeItem2); + c.getPlayerAssistant().addSkillXP(XP, c.playerSmithing); + c.getPlayerAssistant().refreshSkill(c.playerSmithing); + makeTimes--; + c.getActionSender().sendSound(468, 100, 0); + if (ItemAssistant.getItemName(addItem).contains("bolt")) { + c.getItemAssistant().addItem(addItem, 10); + } else if (ItemAssistant.getItemName(addItem).contains("tip") && !ItemAssistant.getItemName(addItem).contains("dart tip")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("dart tip")) { + c.getItemAssistant().addItem(addItem, 10); + } else if (ItemAssistant.getItemName(addItem).contains("nail")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("arrow")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("knife")) { + c.getItemAssistant().addItem(addItem, 5); + } else if (ItemAssistant.getItemName(addItem).contains("cannon")) { + c.getItemAssistant().addItem(addItem, 4); + } else { + c.getItemAssistant().addItem(addItem, 1); + } + } + + @Override + public void stop() { + // TODO Auto-generated method stub + } + }, 1); + if (makeTimes > 1 && c.getItemAssistant().playerHasItem(removeItem, removeItem2 * 2) && !name.contains("claws") && !name.contains("nails") && !name.contains("dart tip") && !name.contains("tip") && !name.contains("platelegs")) { + c.getActionSender().sendMessage("You make some " + ItemAssistant.getItemName(addItem) + "s."); + } else if (makeTimes > 1 && c.getItemAssistant().playerHasItem(removeItem, removeItem2 * 2) && name.contains("claws") || name.contains("nails") || name.contains("dart tip") || name.contains("tip") || name.contains("platelegs")) { + c.getActionSender().sendMessage("You make some " + ItemAssistant.getItemName(addItem) + "."); + } else { + c.getActionSender().sendMessage("You hammer out a " + ItemAssistant.getItemName(addItem) + "."); + } + return true; + }*/ + + public boolean smithItem(Client c, int addItem, int removeItem, + int removeItem2, int timesToMake, int XP) { + int makeTimes = timesToMake; + c.getPlayerAssistant().closeAllWindows(); + if (c.playerRights == 3) { + c.getActionSender().sendMessage( + "Your smithing is now set to true."); + } + c.isSmithing = true; + String name = ItemAssistant.getItemName(addItem); + if (c.getItemAssistant().playerHasItem(removeItem, removeItem2)) { + c.startAnimation(898); + if (makeTimes > 1 && c.getItemAssistant().playerHasItem(removeItem, removeItem2 * 2) && !name.contains("claws") && !name.contains("nails") && !name.contains("dart tip") && !name.contains("tip") && !name.contains("platelegs")) { + c.getActionSender().sendMessage("You make some " + ItemAssistant.getItemName(addItem) + "s."); + } else if (makeTimes > 1 && c.getItemAssistant().playerHasItem(removeItem, removeItem2 * 2) && name.contains("claws") || name.contains("nails") || name.contains("dart tip") || name.contains("tip") || name.contains("platelegs")) { + c.getActionSender().sendMessage("You make some " + ItemAssistant.getItemName(addItem) + "."); + } else { + c.getActionSender().sendMessage("You hammer out a " + ItemAssistant.getItemName(addItem) + "."); + } + while (makeTimes > 0 && c.isSmithing == true) { + if (c.getItemAssistant().playerHasItem(removeItem, removeItem2)) { + c.getItemAssistant().deleteItem2(removeItem, removeItem2); + if (ItemAssistant.getItemName(addItem).contains("bolt")) { + c.getItemAssistant().addItem(addItem, 10); + } else if (ItemAssistant.getItemName(addItem).contains("tip") && !ItemAssistant.getItemName(addItem).contains("dart tip")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("dart tip")) { + c.getItemAssistant().addItem(addItem, 10); + } else if (ItemAssistant.getItemName(addItem).contains("nail")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("arrow")) { + c.getItemAssistant().addItem(addItem, 15); + } else if (ItemAssistant.getItemName(addItem).contains("knife")) { + c.getItemAssistant().addItem(addItem, 5); + } else if (ItemAssistant.getItemName(addItem).contains("cannon")) { + c.getItemAssistant().addItem(addItem, 4); + } else { + c.getItemAssistant().addItem(addItem, 1); + } + c.getPlayerAssistant().addSkillXP(XP, c.playerSmithing); + c.getPlayerAssistant().refreshSkill(c.playerSmithing); + makeTimes--; + c.getActionSender().sendSound(468, 100, 0); + } else { + if (c.playerRights == 3) { + c.getActionSender().sendMessage("Smithing set to false, ran out of bars."); + } + c.isSmithing = false; + break; + } + } + } else { + c.getActionSender().sendMessage("You don't have enough bars to make this item!"); + if (c.playerRights == 3) { + c.getActionSender().sendMessage("Smithing set to false, doesn't have enough bars."); + } + c.isSmithing = false; + return false; + } + return true; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/smithing/SmithingInterface.java b/2006Redone Server/src/redone/game/content/skills/smithing/SmithingInterface.java new file mode 100644 index 00000000..6c001206 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/smithing/SmithingInterface.java @@ -0,0 +1,679 @@ +package redone.game.content.skills.smithing; + +import redone.game.players.Client; + +public class SmithingInterface { + + Client c; + + public SmithingInterface(Client c) { + this.c = c; + } + + public void showSmithInterface(int itemId) { + if (itemId == 2349 && c.tutorialProgress == 20) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler().chatboxText(c, "Now you have the Smithing menu open, you will see a list of all", "the things you can make. Only the dagger can be made at your", "skill level, this is shown by the white text under it. You'll need", "to select the dagger to continue.", "Smithing a dagger"); + c.getActionSender().chatbox(6179); + makeBronzeInterface(c); + c.isSmithing = true; + } else if (itemId == 2349 && c.tutorialProgress > 20) { + makeBronzeInterface(c); + } else if (itemId == 2351) { + makeIronInterface(c); + } else if (itemId == 2353) { + makeSteelInterface(c); + } else if (itemId == 2359) { + makeMithInterface(c); + } else if (itemId == 2361) { + makeAddyInterface(c); + } else if (itemId == 2363) { + makeRuneInterface(c); + } + } + + private void makeRuneInterface(Client c) { + String fiveb = GetForBars(2363, 5, c); + String threeb = GetForBars(2363, 3, c); + String twob = GetForBars(2363, 2, c); + String oneb = GetForBars(2363, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(88, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(99, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(99, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(99, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(97, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(96, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126( + GetForlvl(95, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(94, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(93, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(92, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(92, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(91, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(90, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(90, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(89, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(89, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(89, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(88, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(87, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(85, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(86, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame34(1213, 0, 1119, 1); // dagger + c.getPlayerAssistant().sendFrame34(1359, 0, 1120, 1); // axe + c.getPlayerAssistant().sendFrame34(1113, 0, 1121, 1); // chain body + c.getPlayerAssistant().sendFrame34(1147, 0, 1122, 1); // med helm + c.getPlayerAssistant().sendFrame34(824, 0, 1123, 10); // Dart Tips + c.getPlayerAssistant().sendFrame34(1289, 1, 1119, 1); // s-sword + c.getPlayerAssistant().sendFrame34(1432, 1, 1120, 1); // mace + c.getPlayerAssistant().sendFrame34(1079, 1, 1121, 1); // platelegs + c.getPlayerAssistant().sendFrame34(1163, 1, 1122, 1); // full helm + c.getPlayerAssistant().sendFrame34(44, 1, 1123, 15); // arrowtips + c.getPlayerAssistant().sendFrame34(1333, 2, 1119, 1); // scimmy + c.getPlayerAssistant().sendFrame34(1347, 2, 1120, 1); // warhammer + c.getPlayerAssistant().sendFrame34(1093, 2, 1121, 1); // plateskirt + c.getPlayerAssistant().sendFrame34(1185, 2, 1122, 1); // Sq. Shield + c.getPlayerAssistant().sendFrame34(868, 2, 1123, 5); // throwing-knives + + c.getPlayerAssistant().sendFrame34(1303, 3, 1119, 1); // longsword + c.getPlayerAssistant().sendFrame34(1373, 3, 1120, 1); // battleaxe + c.getPlayerAssistant().sendFrame34(1127, 3, 1121, 1); // platebody + c.getPlayerAssistant().sendFrame34(1201, 3, 1122, 1); // kiteshield + c.getPlayerAssistant().sendFrame34(1319, 4, 1119, 1); // 2h sword + c.getPlayerAssistant().sendFrame34(3101, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame34(4824, 4, 1122, 15); // nails + c.getPlayerAssistant().sendFrame34(-1, 3, 1123, 1); + c.getPlayerAssistant().sendFrame126("", 1135); + c.getPlayerAssistant().sendFrame126("", 1134); + c.getPlayerAssistant().sendFrame126("", 11461); + c.getPlayerAssistant().sendFrame126("", 11459); + c.getPlayerAssistant().sendFrame126("", 1132); + c.getPlayerAssistant().sendFrame126("", 1096); + c.getPlayerAssistant().showInterface(994); + } + + private void makeAddyInterface(Client c) { + String fiveb = GetForBars(2361, 5, c); + String threeb = GetForBars(2361, 3, c); + String twob = GetForBars(2361, 2, c); + String oneb = GetForBars(2361, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(88, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(86, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(86, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(84, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(82, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(81, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126( + GetForlvl(80, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(79, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(78, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(77, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(77, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(76, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(75, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(75, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(74, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(74, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(74, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(73, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(72, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(70, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(71, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame34(1211, 0, 1119, 1); // dagger + c.getPlayerAssistant().sendFrame34(1357, 0, 1120, 1); // axe + c.getPlayerAssistant().sendFrame34(1111, 0, 1121, 1); // chain body + c.getPlayerAssistant().sendFrame34(1145, 0, 1122, 1); // med helm + c.getPlayerAssistant().sendFrame34(823, 0, 1123, 10); // Dart Tips + c.getPlayerAssistant().sendFrame34(1287, 1, 1119, 1); // s-sword + c.getPlayerAssistant().sendFrame34(1430, 1, 1120, 1); // mace + c.getPlayerAssistant().sendFrame34(1073, 1, 1121, 1); // platelegs + c.getPlayerAssistant().sendFrame34(1161, 1, 1122, 1); // full helm + c.getPlayerAssistant().sendFrame34(43, 1, 1123, 15); // arrowtips + c.getPlayerAssistant().sendFrame34(1331, 2, 1119, 1); // scimmy + c.getPlayerAssistant().sendFrame34(1345, 2, 1120, 1); // warhammer + c.getPlayerAssistant().sendFrame34(1091, 2, 1121, 1); // plateskirt + c.getPlayerAssistant().sendFrame34(1183, 2, 1122, 1); // Sq. Shield + c.getPlayerAssistant().sendFrame34(867, 2, 1123, 5); // throwing-knives + c.getPlayerAssistant().sendFrame34(1301, 3, 1119, 1); // longsword + c.getPlayerAssistant().sendFrame34(1371, 3, 1120, 1); // battleaxe + c.getPlayerAssistant().sendFrame34(1123, 3, 1121, 1); // platebody + c.getPlayerAssistant().sendFrame34(1199, 3, 1122, 1); // kiteshield + c.getPlayerAssistant().sendFrame34(1317, 4, 1119, 1); // 2h sword + c.getPlayerAssistant().sendFrame34(3100, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame34(4823, 4, 1122, 15); // nails + c.getPlayerAssistant().sendFrame34(-1, 3, 1123, 1); + c.getPlayerAssistant().sendFrame126("", 1135); + c.getPlayerAssistant().sendFrame126("", 1134); + c.getPlayerAssistant().sendFrame126("", 11461); + c.getPlayerAssistant().sendFrame126("", 11459); + c.getPlayerAssistant().sendFrame126("", 1132); + c.getPlayerAssistant().sendFrame126("", 1096); + c.getPlayerAssistant().showInterface(994); + } + + private void makeMithInterface(Client c) { + String fiveb = GetForBars(2359, 5, c); + String threeb = GetForBars(2359, 3, c); + String twob = GetForBars(2359, 2, c); + String oneb = GetForBars(2359, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(68, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(66, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(66, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(64, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(62, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(61, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126( + GetForlvl(60, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(59, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(58, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(57, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(57, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(56, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(55, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(55, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(54, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(54, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(54, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(53, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(52, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(50, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(51, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame34(1209, 0, 1119, 1); // dagger + c.getPlayerAssistant().sendFrame34(1355, 0, 1120, 1); // axe + c.getPlayerAssistant().sendFrame34(1109, 0, 1121, 1); // chain body + c.getPlayerAssistant().sendFrame34(1143, 0, 1122, 1); // med helm + c.getPlayerAssistant().sendFrame34(822, 0, 1123, 10); // Dart Tips + c.getPlayerAssistant().sendFrame34(1285, 1, 1119, 1); // s-sword + c.getPlayerAssistant().sendFrame34(1428, 1, 1120, 1); // mace + c.getPlayerAssistant().sendFrame34(1071, 1, 1121, 1); // platelegs + c.getPlayerAssistant().sendFrame34(1159, 1, 1122, 1); // full helm + c.getPlayerAssistant().sendFrame34(42, 1, 1123, 15); // arrowtips + c.getPlayerAssistant().sendFrame34(1329, 2, 1119, 1); // scimmy + c.getPlayerAssistant().sendFrame34(1343, 2, 1120, 1); // warhammer + c.getPlayerAssistant().sendFrame34(1085, 2, 1121, 1); // plateskirt + c.getPlayerAssistant().sendFrame34(1181, 2, 1122, 1); // Sq. Shield + c.getPlayerAssistant().sendFrame34(866, 2, 1123, 5); // throwing-knives + c.getPlayerAssistant().sendFrame34(1299, 3, 1119, 1); // longsword + c.getPlayerAssistant().sendFrame34(1369, 3, 1120, 1); // battleaxe + c.getPlayerAssistant().sendFrame34(1121, 3, 1121, 1); // platebody + c.getPlayerAssistant().sendFrame34(1197, 3, 1122, 1); // kiteshield + c.getPlayerAssistant().sendFrame34(1315, 4, 1119, 1); // 2h sword + c.getPlayerAssistant().sendFrame34(3099, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame34(4822, 4, 1122, 15); // nails + c.getPlayerAssistant().sendFrame34(-1, 3, 1123, 1); + c.getPlayerAssistant().sendFrame126("", 1135); + c.getPlayerAssistant().sendFrame126("", 1134); + c.getPlayerAssistant().sendFrame126("", 11461); + c.getPlayerAssistant().sendFrame126("", 11459); + c.getPlayerAssistant().sendFrame126("", 1132); + c.getPlayerAssistant().sendFrame126("", 1096); + c.getPlayerAssistant().showInterface(994); + } + + private void makeSteelInterface(Client c) { + String fiveb = GetForBars(2353, 5, c); + String threeb = GetForBars(2353, 3, c); + String twob = GetForBars(2353, 2, c); + String oneb = GetForBars(2353, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1132); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1135); + c.getPlayerAssistant().sendFrame126("", 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(48, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(46, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(46, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(44, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(42, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(41, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126("", 11461); + c.getPlayerAssistant().sendFrame126( + GetForlvl(40, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(39, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(38, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(37, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(37, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(36, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(35, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(35, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(34, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(34, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(34, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(33, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(32, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(30, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(31, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame126( + GetForlvl(35, c) + "Cannon Ball" + GetForlvl(35, c), 1096); + c.getPlayerAssistant().sendFrame126( + GetForlvl(36, c) + "Studs" + GetForlvl(36, c), 1134); + c.getPlayerAssistant().sendFrame34(1207, 0, 1119, 1); + c.getPlayerAssistant().sendFrame34(1353, 0, 1120, 1); + c.getPlayerAssistant().sendFrame34(1105, 0, 1121, 1); + c.getPlayerAssistant().sendFrame34(1141, 0, 1122, 1); + c.getPlayerAssistant().sendFrame34(821, 0, 1123, 10); + c.getPlayerAssistant().sendFrame34(1281, 1, 1119, 1); + c.getPlayerAssistant().sendFrame34(1424, 1, 1120, 1); + c.getPlayerAssistant().sendFrame34(1069, 1, 1121, 1); + c.getPlayerAssistant().sendFrame34(1157, 1, 1122, 1); + c.getPlayerAssistant().sendFrame34(41, 1, 1123, 15); + c.getPlayerAssistant().sendFrame34(1325, 2, 1119, 1); + c.getPlayerAssistant().sendFrame34(1339, 2, 1120, 1); + c.getPlayerAssistant().sendFrame34(1083, 2, 1121, 1); + c.getPlayerAssistant().sendFrame34(1177, 2, 1122, 1); + c.getPlayerAssistant().sendFrame34(865, 2, 1123, 5); + c.getPlayerAssistant().sendFrame34(1295, 3, 1119, 1); + c.getPlayerAssistant().sendFrame34(1365, 3, 1120, 1); + c.getPlayerAssistant().sendFrame34(1119, 3, 1121, 1); + c.getPlayerAssistant().sendFrame34(1193, 3, 1122, 1); + c.getPlayerAssistant().sendFrame34(1311, 4, 1119, 1); + c.getPlayerAssistant().sendFrame34(3097, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame34(1539, 4, 1122, 15); + c.getPlayerAssistant().sendFrame34(2, 3, 1123, 4); + c.getPlayerAssistant().sendFrame34(2370, 4, 1123, 1); + c.getPlayerAssistant().showInterface(994); + } + + private void makeIronInterface(Client c) { + String fiveb = GetForBars(2351, 5, c); + String threeb = GetForBars(2351, 3, c); + String twob = GetForBars(2351, 2, c); + String oneb = GetForBars(2351, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(33, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(31, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(31, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(29, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(27, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Oil Lantern Frame" + GetForlvl(11, c), + 11461); + c.getPlayerAssistant().sendFrame126( + GetForlvl(25, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(24, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(23, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(22, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(21, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(21, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(20, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(20, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(19, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(19, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(19, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(18, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(17, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(15, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(16, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame34(1203, 0, 1119, 1); + c.getPlayerAssistant().sendFrame34(1349, 0, 1120, 1); + c.getPlayerAssistant().sendFrame34(1101, 0, 1121, 1); + c.getPlayerAssistant().sendFrame34(1137, 0, 1122, 1); + c.getPlayerAssistant().sendFrame34(820, 0, 1123, 10); + c.getPlayerAssistant().sendFrame34(1279, 1, 1119, 1); + c.getPlayerAssistant().sendFrame34(1420, 1, 1120, 1); + c.getPlayerAssistant().sendFrame34(1067, 1, 1121, 1); + c.getPlayerAssistant().sendFrame34(1153, 1, 1122, 1); + c.getPlayerAssistant().sendFrame34(40, 1, 1123, 15); + c.getPlayerAssistant().sendFrame34(1323, 2, 1119, 1); + c.getPlayerAssistant().sendFrame34(1335, 2, 1120, 1); + c.getPlayerAssistant().sendFrame34(1081, 2, 1121, 1); + c.getPlayerAssistant().sendFrame34(1175, 2, 1122, 1); + c.getPlayerAssistant().sendFrame34(863, 2, 1123, 5); + c.getPlayerAssistant().sendFrame34(1293, 3, 1119, 1); + c.getPlayerAssistant().sendFrame34(1363, 3, 1120, 1); + c.getPlayerAssistant().sendFrame34(1115, 3, 1121, 1); + c.getPlayerAssistant().sendFrame34(1191, 3, 1122, 1); + c.getPlayerAssistant().sendFrame34(1309, 4, 1119, 1); + c.getPlayerAssistant().sendFrame34(4820, 4, 1122, 15); + c.getPlayerAssistant().sendFrame34(4540, 4, 1121, 1); + c.getPlayerAssistant().sendFrame34(3096, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame126("", 1135); + c.getPlayerAssistant().sendFrame126("", 1134); + c.getPlayerAssistant().sendFrame126("", 1132); + c.getPlayerAssistant().sendFrame126("", 1096); + c.getPlayerAssistant().showInterface(994); + } + + private void makeBronzeInterface(Client c) { + String fiveb = GetForBars(2349, 5, c); + String threeb = GetForBars(2349, 3, c); + String twob = GetForBars(2349, 2, c); + String oneb = GetForBars(2349, 1, c); + c.getPlayerAssistant().sendFrame126(fiveb + "5 Bars" + fiveb, 1112); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1109); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1110); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1118); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1111); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1095); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1115); + c.getPlayerAssistant().sendFrame126(threeb + "3 Bars" + threeb, 1090); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1113); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1116); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1114); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 1089); + c.getPlayerAssistant().sendFrame126(twob + "2 Bars" + twob, 8428); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1124); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1125); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1126); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1127); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1128); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1129); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1130); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 1131); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 13357); + c.getPlayerAssistant().sendFrame126(oneb + "1 Bar" + oneb, 11459); + c.getPlayerAssistant().sendFrame126( + GetForlvl(18, c) + "Plate Body" + GetForlvl(18, c), 1101); + c.getPlayerAssistant().sendFrame126( + GetForlvl(16, c) + "Plate Legs" + GetForlvl(16, c), 1099); + c.getPlayerAssistant().sendFrame126( + GetForlvl(16, c) + "Plate Skirt" + GetForlvl(16, c), 1100); + c.getPlayerAssistant().sendFrame126( + GetForlvl(14, c) + "2 Hand Sword" + GetForlvl(14, c), 1088); + c.getPlayerAssistant().sendFrame126( + GetForlvl(26, c) + "Claws" + GetForlvl(11, c), 8429); // claws + c.getPlayerAssistant().sendFrame126( + GetForlvl(12, c) + "Kite Shield" + GetForlvl(12, c), 1105); + c.getPlayerAssistant().sendFrame126( + GetForlvl(11, c) + "Chain Body" + GetForlvl(11, c), 1098); + c.getPlayerAssistant().sendFrame126( + GetForlvl(10, c) + "Battle Axe" + GetForlvl(10, c), 1092); + c.getPlayerAssistant().sendFrame126( + GetForlvl(9, c) + "Warhammer" + GetForlvl(9, c), 1083); + c.getPlayerAssistant().sendFrame126( + GetForlvl(8, c) + "Square Shield" + GetForlvl(8, c), 1104); + c.getPlayerAssistant().sendFrame126( + GetForlvl(7, c) + "Full Helm" + GetForlvl(7, c), 1103); + c.getPlayerAssistant().sendFrame126( + GetForlvl(7, c) + "Throwing Knives" + GetForlvl(7, c), 1106); + c.getPlayerAssistant().sendFrame126( + GetForlvl(6, c) + "Long Sword" + GetForlvl(6, c), 1086); + c.getPlayerAssistant().sendFrame126( + GetForlvl(5, c) + "Scimitar" + GetForlvl(5, c), 1087); + c.getPlayerAssistant().sendFrame126( + GetForlvl(5, c) + "Arrowtips" + GetForlvl(5, c), 1108); + c.getPlayerAssistant().sendFrame126( + GetForlvl(4, c) + "Sword" + GetForlvl(4, c), 1085); + c.getPlayerAssistant().sendFrame126( + GetForlvl(4, c) + "Dart Tips" + GetForlvl(4, c), 1107); + c.getPlayerAssistant().sendFrame126( + GetForlvl(4, c) + "Nails" + GetForlvl(4, c), 13358); + c.getPlayerAssistant().sendFrame126( + GetForlvl(3, c) + "Medium Helm" + GetForlvl(3, c), 1102); + c.getPlayerAssistant().sendFrame126( + GetForlvl(2, c) + "Mace" + GetForlvl(2, c), 1093); + c.getPlayerAssistant().sendFrame126( + GetForlvl(1, c) + "Dagger" + GetForlvl(1, c), 1094); + c.getPlayerAssistant().sendFrame126( + GetForlvl(1, c) + "Axe" + GetForlvl(1, c), 1091); + c.getPlayerAssistant().sendFrame34(1205, 0, 1119, 1); + c.getPlayerAssistant().sendFrame34(1351, 0, 1120, 1); + c.getPlayerAssistant().sendFrame34(1103, 0, 1121, 1); + c.getPlayerAssistant().sendFrame34(1139, 0, 1122, 1); + c.getPlayerAssistant().sendFrame34(819, 0, 1123, 10); + c.getPlayerAssistant().sendFrame34(1277, 1, 1119, 1); + c.getPlayerAssistant().sendFrame34(1422, 1, 1120, 1); + c.getPlayerAssistant().sendFrame34(1075, 1, 1121, 1); + c.getPlayerAssistant().sendFrame34(1155, 1, 1122, 1); + c.getPlayerAssistant().sendFrame34(39, 1, 1123, 15); + c.getPlayerAssistant().sendFrame34(1321, 2, 1119, 1); + c.getPlayerAssistant().sendFrame34(1337, 2, 1120, 1); + c.getPlayerAssistant().sendFrame34(1087, 2, 1121, 1); + c.getPlayerAssistant().sendFrame34(1173, 2, 1122, 1); + c.getPlayerAssistant().sendFrame34(864, 2, 1123, 5); + c.getPlayerAssistant().sendFrame34(1291, 3, 1119, 1); + c.getPlayerAssistant().sendFrame34(1375, 3, 1120, 1); + c.getPlayerAssistant().sendFrame34(1117, 3, 1121, 1); + c.getPlayerAssistant().sendFrame34(1189, 3, 1122, 1); + c.getPlayerAssistant().sendFrame34(1307, 4, 1119, 1); + c.getPlayerAssistant().sendFrame34(3095, 4, 1120, 1); // claws + c.getPlayerAssistant().sendFrame34(4819, 4, 1122, 15); + c.getPlayerAssistant().sendFrame34(-1, 3, 1123, 1); + c.getPlayerAssistant().sendFrame126("", 1135); + c.getPlayerAssistant().sendFrame126("", 1134); + c.getPlayerAssistant().sendFrame126("", 11461); + c.getPlayerAssistant().sendFrame126("", 11459); + c.getPlayerAssistant().sendFrame126("", 1132); + c.getPlayerAssistant().sendFrame126("", 1096); + c.getPlayerAssistant().showInterface(994); + } + + private String GetForlvl(int i, Client c) { + if (c.playerLevel[13] >= i) { + return "@whi@"; + } + + return "@bla@"; + } + + private String GetForBars(int i, int j, Client c) { + if (c.getItemAssistant().playerHasItem(i, j)) { + return "@gre@"; + } + + return "@red@"; + } + +} diff --git a/2006Redone Server/src/redone/game/content/skills/smithing/Superheat.java b/2006Redone Server/src/redone/game/content/skills/smithing/Superheat.java new file mode 100644 index 00000000..cd1fa5c2 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/smithing/Superheat.java @@ -0,0 +1,79 @@ +package redone.game.content.skills.smithing; + +import redone.game.content.music.sound.SoundList; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Andrew + */ + +public class Superheat { + + // ore1, ore1amount, ore2, ore2amount, item, xp, smith lvl req + private static final int[][] SMELT = { { 436, 1, 438, 1, 2349, 6, 1, 6 }, // TIN + { 438, 1, 436, 1, 2349, 6, 1, 6 }, // COPPER + { 440, 1, 453, 2, 2353, 18, 30, 17 }, // STEEL ORE + { 440, 1, -1, -1, 2351, 13, 15, 12 }, // IRON ORE + { 442, 1, -1, -1, 2355, 14, 20, 13 }, // SILVER ORE + { 444, 1, -1, -1, 2357, 23, 40, 22 }, // GOLD BAR + { 447, 1, 453, 4, 2359, 30, 50, 30 }, // MITHRIL ORE + { 449, 1, 453, 6, 2361, 38, 70, 37 }, // ADDY ORE + { 451, 1, 453, 8, 2363, 50, 85, 50 }, // RUNE ORE + }; + + public static boolean superHeatItem(Client c, int itemID) { + for (int smelt[] : SMELT) { + if (itemID == smelt[0]) { + if (!c.getItemAssistant().playerHasItem(smelt[2], smelt[3])) { + if (itemID == 440 && smelt[2] == 453) { + continue; + } else { + c.getActionSender().sendMessage("You haven't got enough " + ItemAssistant.getItemName(smelt[2]).toLowerCase() + " to cast this spell!"); + return false; + } + } + if (!c.getItemAssistant().playerHasItem(554, 4) || !c.getItemAssistant().playerHasItem(561, 1)) { + c.getActionSender().sendMessage("You don't have the correct runes to cast this spell."); + return false; + } + if (itemID == 444 && c.playerEquipment[c.playerHands] == 776) { + c.getPlayerAssistant().addSkillXP(56.2, c.playerSmithing); + } else { + c.getPlayerAssistant().addSkillXP(smelt[7], + c.playerSmithing); + } + if (c.playerLevel[c.playerSmithing] < smelt[6]) { + c.getActionSender().sendMessage( + "You need a smithing level of " + smelt[6] + + " to superheat this ore."); + return false; + } + if (c.playerLevel[c.playerMagic] < 43) { + c.getActionSender() + .sendMessage( + "You need a magic level of 43 to superheat this ore."); + return false; + } + c.getItemAssistant().deleteItem(itemID, 1); + c.getItemAssistant().deleteItem(smelt[2], smelt[3]); + c.getItemAssistant().deleteItem2(554, 4); + c.getItemAssistant().deleteItem2(561, 1); + c.getItemAssistant().addItem(smelt[4], 1); + c.getPlayerAssistant().addSkillXP(53, c.playerMagic); + c.startAnimation(722); + c.gfx0(148); + c.getActionSender().sendSound(SoundList.SUPERHEAT, 100, 0); + if (itemID != 444) { + c.getPlayerAssistant().addSkillXP(smelt[7], c.playerSmithing); + } + c.getPlayerAssistant().sendFrame106(6); + return true; + } + } + c.getActionSender().sendMessage( + "You can only cast superheat item on ores!"); + c.getActionSender().sendSound(SoundList.SUPERHEAT_FAIL, 100, 0); + return false; + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/thieving/Pickpocket.java b/2006Redone Server/src/redone/game/content/skills/thieving/Pickpocket.java new file mode 100644 index 00000000..749ad27b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/thieving/Pickpocket.java @@ -0,0 +1,267 @@ +package redone.game.content.skills.thieving; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemList; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.antimacro.AntiBotting; +import redone.util.Misc; + +public class Pickpocket extends SkillHandler { + + /** + * Pickpocket.java + **/ + + public static enum npcData { + + MAN(new int[] { 1, 2, 3, 3222 }, 1, 8.0, 1, 5, new int[] { 995, 3 }), WOMEN( + new int[] { 4, 5, 6 }, 1, 8.0, 1, 5, new int[] { 995, 3 }), FARMER( + new int[] { 7, 1757 }, 10, 14.5, 1, 5, new int[] { 995, 9 }, + new int[] { 5318, 4 }), HAM_FEMALE(new int[] { 1715 }, 15, + 18.5, 2, 4, new int[] { 995, 2 + r(19) }, + new int[] { 4302, 1 }, new int[] { 4304, 1 }, new int[] { 4298, + 1 }, new int[] { 4308, 1 }, new int[] { 4300, 1 }, + new int[] { 4310, 1 }, new int[] { 4306, 1 }), HAM_MALE( + new int[] { 1714 }, 20, 22.5, 2, 4, + new int[] { 995, 2 + r(19) }, new int[] { 4302, 1 }, new int[] { + 4304, 1 }, new int[] { 4298, 1 }, + new int[] { 4308, 1 }, new int[] { 4300, 1 }, new int[] { 4310, + 1 }, new int[] { 4306, 1 }), WARRIOR( + new int[] { 15, 18 }, 25, 26.0, 2, 5, new int[] { 995, 18 }), ROGUE( + new int[] { 187 }, 32, 35.5, 2, 5, new int[] { 995, 25 }, + new int[] { 995, 40 }, new int[] { 7919, 1 }, new int[] { 556, + 6 }, new int[] { 5686, 1 }, new int[] { 1523, 1 }, + new int[] { 1944, 1 }), MASTER_FARMER(new int[] { 2234, 2235 }, + 38, 43.0, 2, 5, new int[] { i("potato seed"), 1 + r(2) }, + new int[] { i("onion seed"), 1 + r(2) }, new int[] { + i("cabbage seed"), 1 + r(2) }, new int[] { + i("tomato seed"), 1 + r(1) }, new int[] { + i("sweetcorn seedseed"), 1 + r(1) }, new int[] { + i("strawberry seed"), 1 }, new int[] { + i("watermelon seed"), 1 }, new int[] { + i("barely seed"), 1 + r(3) }, new int[] { + i("hammerstone seed"), 1 + r(2) }, new int[] { + i("asgarnian seed"), 1 + r(1) }, new int[] { + i("jute seed"), 1 + r(2) }, new int[] { + i("yanillian seed"), 1 + r(1) }, new int[] { + i("krandorian seed"), 1 }, new int[] { + i("wildblood seed"), 1 }, new int[] { + i("redberry seed"), 1 }, new int[] { + i("cadavaberry seed"), 1 }, new int[] { + i("dwellberry seed"), 1 }, new int[] { + i("jangerberry seed"), 1 }, new int[] { + i("whiteberry seed"), 1 }, new int[] { + i("poison ivy seed"), 1 }, new int[] { + i("marigold seed"), 1 }, new int[] { + i("rosemarry seed"), 1 }, new int[] { + i("nasturtium seed"), 1 }, new int[] { i("woad seed"), + 1 }, new int[] { i("limpwurt seed"), 1 }, new int[] { + i("guam seed"), 1 }, + new int[] { i("marentill seed"), 1 }, new int[] { + i("tarromin seed"), 1 }, new int[] { + i("harralander seed"), 1 }, new int[] { + i("ranarr seed"), 1 }, new int[] { i("toadflax seed"), + 1 }, new int[] { i("irit seed"), 1 }, new int[] { + i("avantoe seed"), 1 }, + new int[] { i("kwuarm seed"), 1 }, new int[] { + i("snapdragon seed"), 1 }, new int[] { + i("cadantine seed"), 1 }, new int[] { + i("lantadyme seed"), 1 }, new int[] { + i("dwarf weed seed"), 1 }, new int[] { + i("torstol seed"), 1 }, new int[] { + i("bittercap mushroom spore"), 1 }, new int[] { + i("belladonna seed"), 1 }, new int[] { + i("cactus seed"), 1 }), GUARD(new int[] { 9, 32 }, 40, + 46.8, 2, 5, new int[] { 995, 30 }), KNIGHT(new int[] { 26 }, + 55, 84.3, 3, 5, new int[] { 995, 50 }), MENAPHITE_THUG( + new int[] { 1904 }, 65, 137.5, 5, 5, new int[] { 995, 60 }), WATCHMAN( + new int[] { 431 }, 65, 137.5, 3, 5, new int[] { 995, 60 }, + new int[] { 4593, 1 }), PALADIN(new int[] { 20 }, 70, 151.8, 5, + 4, new int[] { 995, 80 }, new int[] { 562, 2 }), GNOME( + new int[] { 66 }, 75, 198.3, 1, 6, new int[] { 995, 300 }, + new int[] { 557, 1 }, new int[] { 444, 1 }, + new int[] { 569, 1 }, new int[] { 2150 }, new int[] { 2162 }), HERO( + new int[] { 21 }, 80, 273.3, 4, 6, new int[] { 995, 300 }, + new int[] { 560, 2 }, new int[] { 565, 1 }, + new int[] { 569, 1 }, new int[] { 1617, 1 }, + new int[] { 444, 1 }, new int[] { 1993 }); + + private final int levelReq, damage, stun; + private final int[] npcId; + private final int[][] pickpockets; + private final double xp; + + private npcData(final int[] npcId, final int levelReq, final double xp, + final int damage, final int stun, final int[]... pickpockets) { + this.npcId = npcId; + this.levelReq = levelReq; + this.xp = xp; + this.pickpockets = pickpockets; + this.damage = damage; + this.stun = stun; + } + + public int getNpc(final int npc) { + for (int element : npcId) { + if (npc == element) { + return element; + } + } + return -1; + } + + public int getLevel() { + return levelReq; + } + + public double getXp() { + return xp; + } + + public int[][] getPickPockets() { + return pickpockets; + } + + public int getDamage() { + return damage; + } + + public int getStun() { + return stun; + } + } + + public static int r(int random) { + return Misc.random(random); + } + + public static int i(String ItemName) { + return getItemId(ItemName); + } + + public static int getItemId(String itemName) { + for (ItemList i : Server.itemHandler.ItemList) { + if (i != null) { + if (i.itemName.equalsIgnoreCase(itemName)) { + return i.itemId; + } + } + } + return -1; + } + + public static boolean isNPC(Client c, int npc) { + for (final npcData n : npcData.values()) { + if (npc == n.getNpc(npc)) { + return true; + } + } + return false; + } + + public static void attemptPickpocket(final Client c, final int npcId) { + if (System.currentTimeMillis() - c.lastThieve < 2000 || c.playerStun) { + return; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't thieve right now!"); + return; + } + if (c.underAttackBy > 0 || c.underAttackBy2 > 0) { + c.getActionSender().sendMessage("You can't pickpocket while in combat!"); + return; + } + if (!THIEVING) { + c.getActionSender().sendMessage("This skill is currently disabled."); + return; + } + // membersOnly(); + for (final npcData n : npcData.values()) { + if (npcId == n.getNpc(npcId)) { + if (c.playerLevel[c.playerThieving] < n.getLevel()) { + c.getDialogueHandler().sendStatement("You need a Thieving level of " + n.getLevel() + " to pickpocket the " + NpcHandler.getNpcListName(n.getNpc(npcId)).toLowerCase() + "."); + return; + } + c.getActionSender().sendMessage("You attempt to pick the " + NpcHandler.getNpcListName(n.getNpc(npcId)).toLowerCase() + "'s pocket."); + c.startAnimation(881); + if (Misc.random(c.playerLevel[17] + 5) < Misc.random(n.getLevel())) { + if (Misc.random(200) == 0) { + AntiBotting.botCheckInterface(c); + } + RandomEventHandler.addRandom(c); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.playerStun = true; + c.setHitDiff(n.getDamage()); + c.setHitUpdateRequired(true); + c.playerLevel[3] -= n.getDamage(); + c.getPlayerAssistant().refreshSkill(3); + c.gfx100(80); + c.startAnimation(404); + NpcHandler.npcs[npcId].forceChat("What do you think you're doing?"); + NpcHandler.npcs[npcId].facePlayer(c.playerId); + c.lastThieve = System.currentTimeMillis() + 5000; + c.getActionSender().sendMessage("You fail to pick the " + NpcHandler.getNpcListName(n.getNpc(npcId)).toLowerCase() + "'s pocket."); + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.disconnected) { + container.stop(); + return; + } + c.playerStun = false; + container.stop(); + } + + @Override + public void stop() { + + } + }, n.getStun()); + } else { + String message = "You pick the " + NpcHandler.getNpcListName(n.getNpc(npcId)).toLowerCase() + "'s pocket."; + final String message2 = message; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getActionSender().sendMessage(message2); + c.getPlayerAssistant().addSkillXP((int) n.getXp(), + c.playerThieving); + int[] random = n.getPickPockets()[Misc.random(n + .getPickPockets().length - 1)]; + c.getItemAssistant().addItem( + random[0], + random[1] + + (random.length > 2 ? Misc + .random(random[2]) : 0)); + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + } + c.lastThieve = System.currentTimeMillis(); + } + } + } +} diff --git a/2006Redone Server/src/redone/game/content/skills/thieving/Stalls.java b/2006Redone Server/src/redone/game/content/skills/thieving/Stalls.java new file mode 100644 index 00000000..cd114f8a --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/thieving/Stalls.java @@ -0,0 +1,239 @@ +package redone.game.content.skills.thieving; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.items.ItemList; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.antimacro.AntiBotting; +import redone.util.Misc; + +public class Stalls { + + + public static enum stallData { + VEGETABLE_STALL(4706, 2, 10, 0, new int[] { 1965, 1 }), + BAKER_STALL(2561, 5, 16, 3, new int[] { 2309, 1 }, new int[] { 1891, 1 }, new int[] { 1895, 1 }), + TEA_STALL(635, 5, 16, 0, new int[] {712, 1 }), + SILK_STALL(2560, 20, 24, 2, new int[] { 950, 1 }), + WINE_STALL(14011, 22, 27, 0, new int[] { 1935, 1 }, new int[] {i("jug of water"), 1 }, new int[] { i("jug of wine"), 1 }, + new int[] { i("grapes"), 1 }), SEED_STALL(7053, 27, 10, 0, new int[] { i("potato seed"), 1 }, new int[] {i("onion seed"), 1 }, + new int[] { i("cabbage seed"), 1 }, new int[] {i("tomato seed"), 1 }, new int[] { i("sweetcorn seed"), 1 }, new int[] { i("strawberry seed"), 1 }, + new int[] {i("watermelon seed"), 1 }, new int[] {i("barley seed"), 1 }, new int[] { i("jute seed"), 1 }, new int[] { i("marigold seed"), 1 }, + new int[] {i("rosemary seed"), 1 }, new int[] {i("hammerstone seed"), 1 }, new int[] {i("asgarnain seed"), 1 }, new int[] {i("yanillian seed"), 1 }, + new int[] {i("krandorian seed"), 1 }, new int[] {i("wildblood seed"), 1 }), FUR_STALL(2563, 35, 36, 0, new int[] { 6814, 1 }, new int[] { 958, 1 }), + FUR_STALL2(4278, 35, 36, 0, new int[] { 6814, 1 }, new int[] { 958, 1 }), + FISH_STALL(4705, 42, 42, 0, new int[] { 359, 1 }), + FISH_STALL2(4277, 42, 42, 0, new int[] { 359, 1 }), + SILVER_STALL(2565, 50, 54, 2, new int[] { 442, 1 }, new int[] { 2355, 1 }), + SPICE_STALL(2564, 65, 81.3, 0, new int[] { 2007, 1 }, new int[] { 946, 1 }, new int[] { 1550, 1 }), GEM_STALL(2562, 75, 160, 3, + new int[] { 1617, 1 }, new int[] { 1619, 1 }, new int[] { 1621, 1 }, new int[] { 1623, 1 }), + MAGIC_STALL(4877, 65, 100, 0, new int[] {i("air rune"), 1}, new int[] {i("water rune"), 1}, new int[] {i("fire rune"), 1}, new int[] {i("law rune"), 1}), + SCIMITAR_STALL(4878, 65, 100, 0, new int[] {i("iron scimitar"), 1}, new int[] {i("steel scimitar"), 1}); + + private int objectId, levelReq, face; + private int[][] stalls; + private double xp; + + private stallData(final int objectId, final int levelReq, final double xp, final int face, final int[]... stalls) { + this.objectId = objectId; + this.levelReq = levelReq; + this.xp = xp; + this.face = face; + this.stalls = stalls; + } + + public int getObject() { + return objectId; + } + + public int getLevel() { + return levelReq; + } + + public double getXp() { + return xp; + } + + public int getFace() { + return face; + } + + public int[][] getStalls() { + return stalls; + } + + } + + public static int r(int random) { + return Misc.random(random); + } + + public static int i(String ItemName) { + return getItemId(ItemName); + } + + public static int getItemId(String itemName) { + for (ItemList i : Server.itemHandler.ItemList) { + if (i != null) { + if (i.itemName.equalsIgnoreCase(itemName)) { + return i.itemId; + } + } + } + return -1; + } + + public static boolean isObject(int object) { + for (final stallData s : stallData.values()) { + if(object == s.getObject()) { + return true; + } + } + return false; + } + + public static void attemptStall(final Client c, final int objectId, final int x, final int y) { + for (final stallData s : stallData.values()) { + if (System.currentTimeMillis() - c.lastThieve < 2500 + r(2500)) { + c.getActionSender().sendMessage("You need to wait longer before you can thieve this stall!"); + return; + } + if (!SkillHandler.THIEVING) { + c.getActionSender().sendMessage("This skill is currently disabled."); + return; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't thieve right now!"); + return; + } + if(c.underAttackBy > 0 || c.underAttackBy2 > 0) { + c.getActionSender().sendMessage("You can't steal from a stall while in combat!"); + return; + } + if (c.getItemAssistant().freeSlots() == 0) { + c.getActionSender().sendMessage("Not enough space in your inventory."); + return; + } + if(objectId == s.getObject()) { + if (c.playerLevel[c.playerThieving] >= s.getLevel()) { + if(Misc.random(4) == 1 && c.playerLevel[c.playerThieving] < 99) { + failGuards(c); + return; + } + if (c.getItemAssistant().freeSlots() == 0) { + c.getActionSender().sendMessage("Not enough space in your inventory."); + return; + } + c.startAnimation(832); + if (Misc.random(100) == 0) { + AntiBotting.botCheckInterface(c); + } + RandomEventHandler.addRandom(c); + Server.objectHandler.createAnObject(c, 634, x, y, s.getFace()); + c.getPlayerAssistant().addSkillXP((int) s.getXp(), c.playerThieving); + int[] random = s.getStalls()[Misc.random(s.getStalls().length-1)]; + if (c.isBotting == false) { + c.getItemAssistant().addItem(random[0], random[1] + (random.length > 2 ? Misc.random(random[2]) : 0)); + } + c.lastThieve = System.currentTimeMillis(); + c.getActionSender().sendMessage("You steal a "+ItemAssistant.getItemName(random[0])+" from the stall."); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + Server.objectHandler.createAnObject(c, s.getObject(), x, y, s.getFace()); + //new Object(s.getObject(), x, y, 0, s.getFace(), 10, j, getRespawnTime(c, s.getObject())); + container.stop(); + } + @Override + public void stop() { + } + }, getRespawnTime(c, s.getObject())); + } else { + c.getDialogueHandler().sendStatement("You must have a thieving level of " + s.getLevel() + " to steal from this stall."); + } + } + } + } + + /*private static int getRespawnTime(Client c, int i) { + switch (i) { + case 4706: + return 2000; + case 2561: + return 4000; + case 635: + return 7000; + case 14011: + case 4705: + return 16000; + case 7053: + return 11000; + case 2563: + return 15000; + case 2565: + return 30000; + case 2564: + return 80000; + case 2562: + return 180000; + } + return 2500 + r(2500); + }*/ + + private static int getRespawnTime(Client c, int i) { + switch (i) { + case 4706: + return 3;// veg + case 2561: + return 4;// baker + case 635: + return 12;// tea + case 2560: + return 13;// silk + case 14011: + return 27;// wine + case 7053: + return 18;// seed + case 2563: + return 25;// fur + case 4705: + return 27;// fish + case 2565: + return 50;// silver + case 2564: + case 4877: + case 4878: + return 133;// spice, scimitar, magic + case 2562: + return 300;// gem + } + return 5; + } + + private static void failGuards(final Client c) { + for (int i = 1; i < NpcHandler.maxNPCs; i ++) { + if (NpcHandler.npcs[i] != null) { + if (NpcHandler.npcs[i].npcType == 32 + || NpcHandler.npcs[i].npcType == 1317 + || NpcHandler.npcs[i].npcType == 2236 + || NpcHandler.npcs[i].npcType == 2571) { + if (c.goodDistance(c.absX, c.absY, NpcHandler.npcs[i].absX, NpcHandler.npcs[i].absY, 7) + && c.heightLevel == NpcHandler.npcs[i].heightLevel) { + if (!NpcHandler.npcs[i].underAttack) { + NpcHandler.npcs[i].forceChat("What do you think you're doing?!?"); + NpcHandler.npcs[i].underAttack = true; + NpcHandler.npcs[i].killerId = c.playerId; + return; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/skills/thieving/ThieveOther.java b/2006Redone Server/src/redone/game/content/skills/thieving/ThieveOther.java new file mode 100644 index 00000000..f9eda018 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/skills/thieving/ThieveOther.java @@ -0,0 +1,87 @@ +package redone.game.content.skills.thieving; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Thieveother + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class ThieveOther { + + private static boolean isPicking = false; + + private static final int[][] LOCKED_DOORS = {{2550, 2674, 3305}, {2551, 2674, 3304}}; + + public static boolean lockedDoor(Client client, int objectType) { + for (int[] element : LOCKED_DOORS) { + int objectId = element[0]; + int x = element[1]; + int y = element[2]; + if (objectType == objectId && client.absX == x && client.absY == y) { + client.getActionSender().sendMessage("The door is locked."); + return false; + } + } + return true; + } + + public static void stealFromChest(Client client, int level, int exp, int reward, int amount) { + if (client.playerLevel[client.playerThieving] < level) { + client.getActionSender().sendMessage("You need " + level + " thieving to thieve this chest."); + return; + } + if (!SkillHandler.THIEVING) { + client.getActionSender().sendMessage("Thieving is currently disabled."); + return; + } + client.getItemAssistant().addItem(reward, amount); + client.getPlayerAssistant().addSkillXP(exp, client.playerThieving); + client.getActionSender().sendMessage("You steal " + ItemAssistant.getItemName(reward) + " from the chest."); + } + + public static void pickLock(final Client client, int level, final double exp, final int x, final int y, final int hardness, boolean lock) { + if (!client.getItemAssistant().playerHasItem(1523, 1) && lock) { + client.getActionSender().sendMessage("You need a lock pick to do that."); + return; + } + if (client.playerLevel[client.playerThieving] < level) { + client.getActionSender().sendMessage("You need " + level + " thieving to thieve this chest."); + return; + } + if (!SkillHandler.THIEVING) { + client.getActionSender().sendMessage("Thieving is currently disabled."); + return; + } + if (isPicking == true) { + client.getActionSender().sendMessage("You are already picking a lock."); + return; + } + isPicking = true; + client.getActionSender().sendMessage("You attempt to pick the lock."); + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (Misc.random(10) < hardness) { + client.getActionSender().sendMessage("You fail to pick the lock."); + container.stop(); + return; + } + client.getPlayerAssistant().movePlayer(x, y, client.heightLevel); + client.getActionSender().sendMessage("You manage to pick the lock."); + client.getPlayerAssistant().addSkillXP(exp, client.playerThieving); + container.stop(); + } + @Override + public void stop() { + isPicking = false; + } + }, 3); + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/traveling/Desert.java b/2006Redone Server/src/redone/game/content/traveling/Desert.java new file mode 100644 index 00000000..6a0a20f2 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/traveling/Desert.java @@ -0,0 +1,135 @@ +package redone.game.content.traveling; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class Desert { + + /** + * The animation played when cutting the cactus.(SLASH) + */ + private static final int CUTTING_ANIMATION = 451; + + /** + * The dry cactus object id. + */ + private static final int DRY_CACTUS = 2671; + + /** + * The cactus re-spawning delay. + */ + private static final int CACTUS_DELAY = 20 + Misc.random(5); + + /** + * The cactus cutting items. + */ + public static int[] CACTUS_CUTTER = { 946 }; + + /** + * Various filling vessels. (The water-skins) + */ + public static int[][] FILLS = { { 1825, 1823 }, { 1827, 1825 }, + { 1829, 1827 }, { 1831, 1829 } }; + + /** + * Gets the cutters. + * + * @param c + * Player c. + * @return Returns default value. + */ + public static int getCacCutter(Client c) { + int cut = 0; + for (int element : CACTUS_CUTTER) { + if (c.getItemAssistant().playerHasItem(element)) { + cut = element; + } + } + return cut; + } + + public static void showWarning(Client c) { + for (int i = 8144; i < 8195; i++) { + c.getPlayerAssistant().sendFrame126("", i); + } + c.getPlayerAssistant().sendFrame126("@dre@DESERT WARNING", 8144); + c.getPlayerAssistant().sendFrame126("", 8145); + c.getPlayerAssistant().sendFrame126("The intense heat of the desert reduces your health.", 8147); + c.getPlayerAssistant().sendFrame126("Bring 2-5 waterskins to avoid receiving any damage.", 8148); + c.getPlayerAssistant().sendFrame126("", 8149); + c.getPlayerAssistant().sendFrame126("Wearing desert robes will not prevent the damage, but", 8150); + c.getPlayerAssistant().sendFrame126("will reduce it significantly.", 8151); + c.getPlayerAssistant().sendFrame126("", 8152); + c.getPlayerAssistant().sendFrame126("The waterskins however need to be re-filled. Bring a", 8153); + c.getPlayerAssistant().sendFrame126("knife and cut healthy cacti to re-fill the waterskins.", 8154); + c.getPlayerAssistant().sendFrame126("@red@Any water vessels will evaporate, such as jug of water.", 8155); + c.getPlayerAssistant().showInterface(8134); + } + + /** + * Handles fails and success attempts. + * + * @param c + * @param objectId + * @param obX + * @param obY + */ + public static void checkCactus(Client c, int objectId, int obX, int obY) { + int fail = Misc.random(2); + if (fail == 1) { + c.getActionSender().sendMessage("You failed to cut the cactus."); + c.getPlayerAssistant().addSkillXP(1, c.playerWoodcutting); + return; + } + c.startAnimation(CUTTING_ANIMATION); + c.getActionSender().sendMessage("You slash away the cactus."); + Server.objectHandler.createAnObject(c, DRY_CACTUS, obX, obY, -1); + for (int element[] : FILLS) { + if (c.getItemAssistant().playerHasItem(element[0])) { + c.getItemAssistant().deleteItem(element[0], c.getItemAssistant().getItemSlot(element[0]), 1); + c.getItemAssistant().addItem(element[1], 1); + c.getPlayerAssistant().addSkillXP(10, c.playerWoodcutting); + } + } + } + + /** + * Cuts the cactus. Uses schedule task management. + * + * @param c + * The Player client. + * @param itemId + * The cactus cutter item id. + * @param objectId + * The cactus(healthy/dry) object id. + * @param obX + * Gets the object coordinate x. + * @param obY + * Gets the object coordinate y. + */ + public static void cutCactus(final Client c, int itemId, final int objectId, final int obX, final int obY) { + for (int element : CACTUS_CUTTER) { + if (itemId == element) { + checkCactus(c, objectId, obX, obY); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + Server.objectHandler.createAnObject(c, objectId, obX, obY, -1); + container.stop(); + } + @Override + public void stop() { + + } + }, CACTUS_DELAY); + } else { + c.getActionSender().sendMessage("You need a knife or a sharp weapon to cut this."); + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/content/traveling/GnomeGlider.java b/2006Redone Server/src/redone/game/content/traveling/GnomeGlider.java new file mode 100644 index 00000000..750b0d88 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/traveling/GnomeGlider.java @@ -0,0 +1,88 @@ +package redone.game.content.traveling; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +public class GnomeGlider { + + private static final int[][] GLIDER_DATA = { { 3058, 2848, 3497, 0, 1 }, // TO + // MOUNTAIN + { 3057, 2465, 3501, 3, 2 }, // TO GRAND TREE + { 3059, 3321, 3427, 0, 3 }, // TO CASTLE + { 3060, 3278, 3212, 0, 4 }, // TO DESERT + { 3056, 2894, 2730, 0, 8 }, // TO CRASH ISLAND + { 48054, 2544, 2970, 0, 10 }, // TO OGRE AREA + }; + + public static void flightButtons(Client player, int button) { + if (player.gliderOpen == true) { + for (int i = 0; i < getLength(); i++) { + if (getButton(i) == button) { + handleFlight(player, i); + } + } + } else { + for (int i = 0; i < getLength(); i++) { + if (player.gliderOpen == false && getButton(i) == button) { + player.getActionSender().sendMessage("You have improperly opened the glider."); + } + } + } + } + + public static void handleFlight(final Client player, final int flightId) { + player.getPlayerAssistant().showInterface(802); + player.getPlayerAssistant().sendConfig(153, getMove(flightId)); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getPlayerAssistant().movePlayer(getX(flightId), getY(flightId), getH(flightId)); + container.stop(); + } + @Override + public void stop() { + + } + }, 3); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getPlayerAssistant().closeAllWindows(); + player.getPlayerAssistant().sendConfig(153, -1); + player.gliderOpen = false; + container.stop(); + } + @Override + public void stop() { + + } + }, 4); + + } + + public static int getLength() { + return GLIDER_DATA.length; + } + + public static int getButton(int i) { + return GLIDER_DATA[i][0]; + } + + public static int getX(int i) { + return GLIDER_DATA[i][1]; + } + + public static int getY(int i) { + return GLIDER_DATA[i][2]; + } + + public static int getH(int i) { + return GLIDER_DATA[i][3]; + } + + public static int getMove(int i) { + return GLIDER_DATA[i][4]; + } +} diff --git a/2006Redone Server/src/redone/game/content/traveling/Sailing.java b/2006Redone Server/src/redone/game/content/traveling/Sailing.java new file mode 100644 index 00000000..4c23ef19 --- /dev/null +++ b/2006Redone Server/src/redone/game/content/traveling/Sailing.java @@ -0,0 +1,151 @@ +package redone.game.content.traveling; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; + +/** + * @author Andrew + */ + +public class Sailing { + + private static final int[][] TRAVEL_DATA = { {}, // 0 - Null + { 2834, 3335, 15 }, // 1 - From Port Sarim to Entrana + { 3048, 3234, 15 }, // 2 - From Entrana to Port Sarim + { 2853, 3237, 12 }, // 3 - From Port Sarim to Crandor + { 2834, 3335, 13 }, // 4 - From Crandor to Port Sarim + { 2956, 3146, 9 }, // 5 - From Port Sarim to Karajama + { 3029, 3217, 8 }, // 6 - From Karajama to Port Sarim + { 2772, 3234, 3 }, // 7 - From Ardougne to Brimhaven + { 2683, 3271, 3 }, // 8 - From Brimhaven to Ardougne + { 2998, 3043, 23 }, // 11 - From Port Khazard to Ship Yard + { 2676, 3170, 23 }, // 12 - From Ship Yard to Port Khazard + { 2998, 3043, 17 }, // 13 - From Cairn Island to Ship Yard + { 2659, 2676, 12 }, // 14 - From Port Sarim to Pest Control + { 3041, 3202, 12 }, // 15 - From Pest Control to Port Sarim + { 2763, 2956, 10 }, // 16 - To Cairn Isle from Feldip Hills + { 2551, 3759, 20}, // 17 - To Waterbirth from Relleka + { 2620, 3686, 20}, //18 - To Relleka from Waterbirth + }; + + //2620, 3686 - relleka + //2551, 3759 - waterbirth + + public static boolean checkForCash(Client player) { + if (!player.getItemAssistant().playerHasItem(995, 1000)) { + player.getDialogueHandler().sendNpcChat1("You need 1000 coins to to travel on this ship!", 2437, NpcHandler.getNpcListName(player.npcType)); + player.nextChat = 0; + return false; + } + player.getItemAssistant().deleteItem2(995, 1000); + player.getActionSender().sendMessage("Your free to go and pay the 1000 coins."); + return true; + } + + public static boolean checkForCoins(Client player) { + if (!player.getItemAssistant().playerHasItem(995, 30)) { + player.getDialogueHandler().sendNpcChat1("You need 30 coins to to travel on this ship!", 381, NpcHandler.getNpcListName(player.npcType)); + player.nextChat = 0; + return false; + } + player.getItemAssistant().deleteItem2(995, 30); + player.getActionSender().sendMessage("Your free to go and pay the 30 coins."); + return true; + } + + public static boolean searchForAlcohol(Client player) { + for (int element : Constants.ALCOHOL_RELATED_ITEMS) { + if (player.getItemAssistant().playerHasItem(element, 1)) { + player.getDialogueHandler().sendNpcChat1("You can't bring intoxicating items to Asgarnia!", player.npcType, NpcHandler.getNpcListName(player.npcType)); + player.nextChat = 0; + return false; + } + } + player.getActionSender().sendMessage( + "Your clean of any possible alchohol."); + return true; + } + + public static boolean quickSearch(Client player) { + for (int element : Constants.COMBAT_RELATED_ITEMS) { + if (player.getItemAssistant().playerHasItem(element, 1) || player.getItemAssistant().playerHasEquipped(element)) { + player.getDialogueHandler().sendNpcChat2("Grr! I see you brought some illegal items! Get", "out of my sight immediately!", 657, NpcHandler.getNpcListName(player.npcType)); + player.nextChat = 0; + return false; + } + } + player.getActionSender().sendMessage("Your clean of any possible weapons."); + return true; + } + + public static void startTravel(final Client player, final int i) { + if (i == 1) {// entrana check + if (!quickSearch(player)) { + return; + } + } + if (i == 2) {// entrana check + if (!searchForAlcohol(player)) { + return; + } + } + if (i == 7 || i == 8) { + if (!checkForCoins(player)) { + return; + } + } + if (i == 17 || i == 18) { + if (!checkForCash(player)) { + return; + } + } + player.stopPlayerPacket = true; + player.getPlayerAssistant().showInterface(3281); + player.getPlayerAssistant().sendConfig(75, i); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getPlayerAssistant().movePlayer(getX(i), getY(i), 0); + container.stop(); + } + @Override + public void stop() { + + } + }, getTime(i) - 1); + + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.stopPlayerPacket = false; + player.getPlayerAssistant().sendConfig(75, -1); + player.getPlayerAssistant().closeAllWindows(); + player.getDialogueHandler().sendStatement("You arrive safely."); + player.nextChat = 0; + container.stop(); + } + @Override + public void stop() { + + } + }, getTime(i)); + + } + + public static int getX(int i) { + return TRAVEL_DATA[i][0]; + } + + public static int getY(int i) { + return TRAVEL_DATA[i][1]; + } + + public static int getTime(int i) { + return TRAVEL_DATA[i][2]; + } + +} diff --git a/2006Redone Server/src/redone/game/dialogues/Dialogue.java b/2006Redone Server/src/redone/game/dialogues/Dialogue.java new file mode 100644 index 00000000..be1a6eb1 --- /dev/null +++ b/2006Redone Server/src/redone/game/dialogues/Dialogue.java @@ -0,0 +1,20 @@ +package redone.game.dialogues; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Dialogue + **/ + +public class Dialogue implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + if (c.nextChat > 0) { + c.getDialogueHandler().sendDialogues(c.nextChat, c.talkingNpc); + } else { + c.getDialogueHandler().sendDialogues(0, -1); + } + } +} diff --git a/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java b/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java new file mode 100644 index 00000000..d48542e6 --- /dev/null +++ b/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java @@ -0,0 +1,6899 @@ +package redone.game.dialogues; + +import redone.Constants; +import redone.game.content.quests.QuestAssistant; +import redone.game.content.quests.QuestRewards; +import redone.game.content.randomevents.FreakyForester; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.content.traveling.Sailing; +import redone.game.globalworldobjects.PassDoor; +import redone.game.items.ItemAssistant; +import redone.game.npcs.NpcHandler; +import redone.game.objects.impl.SpecialObjects; +import redone.game.players.Client; +import redone.game.players.PlayerAssistant; +import redone.game.shops.Shops.Shop; +import redone.util.Misc; + +/** + * Anims: + * http://www.rune-server.org/runescape-development/rs2-server/tutorials/518991-pi-317-player-npc-facial-dialogue-expressions.html + */ + +public class DialogueHandler { + + private final Client player; + + public DialogueHandler(Client client) { + this.player = client; + } + + public void sendDialogues(int dialogue, int npcId) { + int MOLE_SKIN = player.getItemAssistant().getItemCount(7418), MOLE_CLAW = player.getItemAssistant().getItemCount(7416); + player.talkingNpc = npcId; + switch (dialogue) { + case 0: + player.talkingNpc = -1; + player.getPlayerAssistant().removeAllWindows(); + player.nextChat = 0; + break; + + case 1: // was 16 + sendOption2("I would like to reset my barrows brothers.", + "I would like to fix all my barrows"); + player.dialogueAction = 8; + break; + + case 2: + if (player.canLeaveArea) { + sendNpcChat2( + "Just step through the glowing portal when you're ready", + "to leave, and I'll ensure you get a nice reward.", + player.talkingNpc, "Freaky Forester"); + player.getItemAssistant().deleteItem(6178, player.getItemAssistant().getItemSlot(6178), player.getItemAssistant().getItemAmount(6178)); + } else if (FreakyForester.hasKilledPheasant(player) + && player.getItemAssistant().playerHasItem(6178, 1)) { + sendNpcChat1( + "Thank you. I take that pheasant, you can leave now.", + player.talkingNpc, "Freaky Forester"); + player.canLeaveArea = true; + player.getItemAssistant().deleteItem(6178, player.getItemAssistant().getItemSlot(6178), player.getItemAssistant().getItemAmount(6178)); + } else { + sendNpcChat2("Hello there mate. Can you please kill a " + + FreakyForester.getPheasant(player) + " and", + "bring it back to me and I shall let you leave.", + player.talkingNpc, "Freaky Forester"); + } + player.nextChat = 0; + break;// go to where they appear or whatever + + case 3: + sendNpcChat1("Come back mate! You can't leave yet!", + player.talkingNpc, "Freaky Forester"); + player.nextChat = 0; + break; + + case 4: + if (player.luthas == true && player.bananas >= 2) { + player.getItemAssistant().addOrDropItem(995, 30); + sendNpcChat1( + "Thank you for your services you have been rewarded 30 coins.", + player.talkingNpc, "Luthas"); + player.luthas = false; + player.bananas = 0; + player.nextChat = 0; + } else { + player.getPlayerAssistant().bananasCheck(); + player.nextChat = 0; + } + break; + + case 8: + sendOption2("I would like to collect some banana's for you", + "Never mind"); + player.dialogueAction = 92; + break; + + case 9: + sendPlayerChat1("I would like to collect some banana's for you."); + player.luthas = true; + player.bananas = 1; + player.nextChat = 10; + break; + + case 10: + sendNpcChat1( + "Please put 10 bannanas in a crate then I will reward you.", + player.talkingNpc, "Luthas"); + player.nextChat = 4; + break; + + case 5: + sendPlayerChat1("Hello, how's it going?"); + player.nextChat = 6; + break; + case 6: + sendNpcChat1("I'm fine, how are you?", player.talkingNpc, "Man"); + player.nextChat = 7; + break; + case 7: + sendPlayerChat1("Very well thank you."); + player.nextChat = 0; + break; + + case 11: + sendOption2("Here's 5 coins you tramp.", "Leave, me alone."); + player.dialogueAction = 90; + break; + + case 12: + if (player.getItemAssistant().playerHasItem(995, 5)) { + player.getItemAssistant().deleteItem2(995, 5); + sendPlayerChat1("Here's 5 coins you tramp."); + player.nextChat = 0; + } else { + player.nextChat = 13; + } + break; + + case 13: + sendPlayerChat1("No! Leave me alone."); + player.nextChat = 0; + break; + + case 14: // lumby guide + sendNpcChat1( + "Greetings, welcome to " + Constants.SERVER_NAME + ".", + player.talkingNpc, "Lumbridge Guide"); + player.nextChat = 0; + break; + + case 15: + sendOption2("I would like to view your shop", + "I would like to fix my barrows"); + player.dialogueAction = 91; + break; + + case 16: + player.getShopAssistant().openShop(8); + player.nextChat = 0; + break; + + case 17: + player.getPlayerAssistant().fixAllBarrows(); + player.nextChat = 0; + break; + + case 18: + sendNpcChat1("Hi welcome to the partyroom.", player.talkingNpc, + "Party Pete"); + player.nextChat = 605; + break; + + case 19: + sendNpcChat1("Hello would you like to buy a beer for 2 gp?", + player.talkingNpc, "Bartender"); + player.nextChat = 20; + break; + + case 20: + if (player.getItemAssistant().playerHasItem(995, 2)) { + sendPlayerChat1("Yes I would love a beer."); + player.getItemAssistant().deleteItem2(995, 2); + player.getItemAssistant().addOrDropItem(1917, 1); + player.nextChat = 0; + } else { + sendPlayerChat1("I don't have enough coins to buy a beer."); + player.nextChat = 0; + } + break; + + case 21: + sendNpcChat1( + "Hello, would you like me to bring you into to shilo village?", + player.talkingNpc, "Mosol Rei"); + player.nextChat = 22; + break; + + case 22: + sendOption2("Yes", "No"); + player.dialogueAction = 93; + break; + + case 23: + player.getPlayerAssistant().movePlayer(2867, 2952, 0); + player.nextChat = 0; + break; + + case 24: + if (player.getItemAssistant().playerHasItem(995, 200)) { + sendNpcChat3("Hello Fair Traveler.", + "Can i interest you in a ride back to shantay", + "for 200 coins?", player.talkingNpc, "Rug Merchant"); + player.nextChat = 25; + } else { + sendNpcChat1("You need 200 coins to travel my rug.", + player.talkingNpc, "Rug Merchant"); + player.nextChat = 0; + } + break; + + case 25: + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().startTeleport(3308, 3108, 0, "modern"); + player.getItemAssistant().deleteItem2(995, 200); + player.nextChat = 0; + break; + + case 26: + if (player.getItemAssistant().playerHasItem(995, 200)) { + sendNpcChat2("Hello Fair Traveler.", + "Can i interest you in a ride for 200 coins?", + player.talkingNpc, "Rug Merchant"); + player.nextChat = 27; + } else { + sendNpcChat1("You need 200 coins to travel my rug.", + player.talkingNpc, "Rug Merchant"); + player.nextChat = 0; + } + break; + + case 27: + sendOption4("Pollnivneach (North)", "Bedabin Camp", "Uzer", + "Shantay Pass"); + player.dialogueAction = 700; + break; + + case 28: + sendPlayerChat1("Pollnivneach please."); + player.getPlayerAssistant().startTeleport(3350, 3004, 0, "modern"); + player.nextChat = 32; + break; + case 29: + sendPlayerChat1("Bedabin Camp please."); + player.getPlayerAssistant().startTeleport(3180, 3043, 0, "modern"); + player.nextChat = 32; + break; + case 30: + sendPlayerChat1("Uzer please."); + player.getPlayerAssistant().startTeleport(3469, 3111, 0, "modern"); + player.nextChat = 32; + break; + case 31: + sendPlayerChat1("Shantay pass please."); + player.getPlayerAssistant().startTeleport(3308, 3108, 0, "modern"); + player.nextChat = 32; + break; + case 32: + sendNpcChat1("Enjoy!", player.talkingNpc, "Rug Merchant"); + player.getItemAssistant().deleteItem2(995, 200); + player.nextChat = 0; + break; + case 33: + sendNpcChat1("The trip to karamja will cost you 30 coins.", + player.talkingNpc, "Sailor"); + player.nextChat = 34; + break; + + case 34: + sendOption2("Yes", "No"); + player.dialogueAction = 67; + break; + + case 35: + sendPlayerChat1("No thank you."); + player.nextChat = 0; + break; + case 36: + sendPlayerChat1("Yes please."); + player.nextChat = 583; + break; + + case 37: + sendNpcChat2("Welcome to my food store!", + "Would you like to buy anything?", player.talkingNpc, + "Wydin"); + player.nextChat = 38; + break; + case 38: + sendOption3("Yes please.", "No thank you.", "Can I get a job here?"); + player.dialogueAction = 68; + break; + case 39: + sendPlayerChat1("Yes please."); + player.getShopAssistant().openShop(34); + break; + case 40: + sendPlayerChat1("No thank you."); + player.nextChat = 0; + break; + case 41: + sendPlayerChat1("Can I get a job here?"); + player.ptjob = 1; + player.nextChat = 42; + break; + case 42: + sendNpcChat3("Well you're keen, I'll give you that.", + "Okay, I'll give you a go.", + "Have you got your own white apron?", player.talkingNpc, + "Wydin"); + player.nextChat = 43; + break; + case 43: + sendPlayerChat1("No, I haven't."); + player.nextChat = 44; + break; + case 44: + sendNpcChat2( + "Well, you can't work here unless you have a white apron.", + "Health and safety regulations, you understand.", + player.talkingNpc, "Wydin"); + player.nextChat = 45; + break; + case 45: + sendPlayerChat1("Where can I get one of those?"); + player.nextChat = 46; + break; + case 46: + sendNpcChat2( + "Well I get all mine at the clothing shop in Varrock.", + "They sell them cheap there.", player.talkingNpc, "Wydin"); + player.nextChat = 47; + player.ptjob = 1; + break; + case 47: + sendNpcChat1("Have you got your white apron now?", + player.talkingNpc, "Wydin"); + player.nextChat = 47; + break; + case 48: + if (player.getItemAssistant().playerHasItem(1005, 1)) { + sendPlayerChat1("Yes I have one here."); + player.nextChat = 49; + player.ptjob = 1; + } else { + sendPlayerChat1("No I still need to get one."); + player.nextChat = 0; + } + break; + case 49: + sendNpcChat2("Wow, your well prepared! Your hired.", + "Go through the back and tidy up for me please.", + player.talkingNpc, "Wydin"); + player.nextChat = 0; + player.ptjob = 2; + break; + case 50: + sendNpcChat1("What am I to do?", player.talkingNpc, "Cook"); + player.nextChat = 51; + break; + case 51: + sendOption4("What's wrong?", "Can you cook me a cake?", + "You don't look very happy.", "Nice hat."); + player.dialogueAction = 52; + break; + case 52: + sendPlayerChat1("What's wrong?"); + player.nextChat = 54; + break; + case 54: + sendNpcChat3( + "Oh dear, oh dear, oh dear, I'm in a terrible terrible", + "mess! It's the Duke's birthday today, and I should be", + "making him a lovely big birthday cake!", + player.talkingNpc, "Cook"); + player.nextChat = 55; + break; + case 55: + sendNpcChat4( + "I've forgotten to buy the ingredients. I'll never get", + "them in time now. He'll sack me! What will I do? I have", + "four children and a goat to look after. Would you help", + "me? Please?", player.talkingNpc, "Cook"); + player.nextChat = 56; + break; + case 56: + sendOption2("I'm always happy to help a cook in distress.", + "I can't right now, Maybe later."); + player.dialogueAction = 57; + break; + case 57: + sendPlayerChat1("Yes, I'll help you.");// 9157 + player.nextChat = 60; + break; + case 58: + sendPlayerChat1("I can't right now, Maybe later.");// 9158 + player.nextChat = 59; + break; + case 59: + sendNpcChat1("Oh please! Hurry then!", player.talkingNpc, "Cook"); + player.nextChat = 0; + break; + case 60: + sendNpcChat2("Oh thank you, thank you. I need milk, an egg, and", + "flour. I'd be very grateful if you can get them for me.", + player.talkingNpc, "Cook"); + player.cookAss = 1; + QuestAssistant.sendStages(player); + player.nextChat = 61; + break; + case 61: + sendPlayerChat1("So where do I find these ingredients then?"); + player.nextChat = 62; + break; + case 62: + sendNpcChat3("You can find flour in any of the shops here.", + "You can find eggs by killing chickens.", + "You can find milk by using a bucket on a cow", + player.talkingNpc, "Cook"); + player.nextChat = 0; + break; + case 63: + sendNpcChat1("I don't have time for your jibber-jabber!", + player.talkingNpc, "Cook"); + player.nextChat = 0; + break; + case 64: + sendNpcChat1("Does it look like I have the time?", + player.talkingNpc, "Cook"); + player.nextChat = 0; + break; + case 65: + sendPlayerChat1("You don't look so happy."); + player.nextChat = 54; + break; + case 66: + sendNpcChat1( + "How are you getting on with finding the ingredients?", + player.talkingNpc, "Cook"); + player.nextChat = 67; + break; + case 67: + if (player.getItemAssistant().playerHasItem(1944, 1) + && player.getItemAssistant().playerHasItem(1927, 1) + && player.getItemAssistant().playerHasItem(1933, 1)) { + sendPlayerChat1("Here's all the items!"); + player.nextChat = 68; + } else { + sendPlayerChat1("I don't have all the items yet."); + player.nextChat = 59; + } + break; + case 68: + player.getItemAssistant().deleteItem(1944, 1); + player.getItemAssistant().deleteItem(1927, 1); + player.getItemAssistant().deleteItem(1933, 1); + player.cookAss = 2; + sendNpcChat2("You brought me everything I need! I'm saved!", + "Thank you!", player.talkingNpc, "Cook"); + player.nextChat = 69; + break; + case 69: + sendPlayerChat1("So do I get to go to the Duke's Party?"); + player.nextChat = 70; + break; + case 70: + sendNpcChat2( + "I'm afraid not, only the big cheeses get to dine with the", + "Duke.", player.talkingNpc, "Cook"); + player.nextChat = 72; + break; + case 72: + sendPlayerChat2( + "Well, maybe one day I'll be important enough to sit on", + "the Duke's table"); + player.nextChat = 74; + break; + case 74: + sendNpcChat1("Maybe, but I won't be holding my breath.", + player.talkingNpc, "Cook"); + player.nextChat = 75; + break; + case 75: + QuestRewards.cookReward(player); + break; + case 76: + sendNpcChat1("Thanks for helping me out friend!", + player.talkingNpc, "Cook"); + player.nextChat = 0; + break; + case 84: + sendNpcChat1("How are you getting on finding all my supplies", + player.talkingNpc, "Doric"); + player.nextChat = 85; + break; + case 85: + if (player.getItemAssistant().playerHasItem(434, 6) + && player.getItemAssistant().playerHasItem(436, 4) + && player.getItemAssistant().playerHasItem(440, 2)) { + sendPlayerChat1("Here's all the items!"); + player.nextChat = 86; + } else { + sendPlayerChat1("I haven't found all the items yet."); + player.nextChat = 88; + } + break; + case 86: + player.getItemAssistant().deleteItem2(434, 6); + player.getItemAssistant().deleteItem2(436, 4); + player.getItemAssistant().deleteItem2(440, 2); + player.doricQuest = 2; + sendNpcChat2("You brought me everything i need.", "Thank You!", + player.talkingNpc, "Doric"); + player.nextChat = 87; + break; + case 87: + QuestRewards.doricFinish(player); + player.nextChat = 0; + break; + case 88: + sendNpcChat1("Hurry Then!", player.talkingNpc, "Doric"); + player.nextChat = 0; + break; + case 89: + sendNpcChat1( + "Hello traveler, what brings you to my humble smithy?", + player.talkingNpc, "Doric"); + player.nextChat = 90; + break; + case 90: + sendOption2("Mind your own buisness, Shortstuff!", + "I wanted to use your anivils."); + player.dialogueAction = 55; + break; + case 91: + sendNpcChat1("Mind your own buisness, Shortstuff!", + player.talkingNpc, "Doric"); + player.nextChat = 0; + break; + case 92: + sendNpcChat1("So you want to use my anivils?", player.talkingNpc, + "Doric"); + player.nextChat = 98; + break; + case 98: + sendPlayerChat1("Yes, I would like to use your anivil."); + player.nextChat = 93; + break; + case 93: + sendNpcChat4("My anvils get enough work with my own use.", + "I make pickaxes, and it takes a lot of hard work.", + "If you could get me some more materials,", + "then i could let use them.", player.talkingNpc, "Doric"); + player.nextChat = 94; + break; + case 94: + sendOption2("Yes i will get you the materials.", + "No, hitting rocks is boring."); + player.dialogueAction = 56; + break; + case 95: + sendPlayerChat1("No, hitting rocks is boring."); + player.nextChat = 0; + break; + case 96: + sendPlayerChat1("Yes i will get you the materials."); + player.nextChat = 97; + break; + case 97: + sendNpcChat4( + "Clay is what i use more than anything, to make casts.", + "Could you get me 6 clay, 4 copper, and 2 iron, please?", + "I could give a nice little reward", + "Take my pickaxe with you just incase you need it.", + player.talkingNpc, "Doric"); + player.getItemAssistant().addOrDropItem(1265, 1); + player.nextChat = 99; + break; + case 99: + sendPlayerChat1("Certainly, I'll be right back!"); + player.doricQuest = 1; + QuestAssistant.sendStages(player); + player.nextChat = 0; + break; + case 100: + sendNpcChat1("Thanks for the help!", player.talkingNpc, "Doric"); + player.nextChat = 0; + break; + case 101: + sendNpcChat2("You're on your own now, Jal-Yt. Prepare to fight", "for your life!", 2617, "TzHaar-Mej-Jal"); + player.nextChat = 0; + break; + case 102: + sendNpcChat1("Look out, here comes TzTok-Jad!", 2617, "TzHaar-Mej-Jal"); + player.nextChat = 0; + break; + case 103: + sendNpcChat2("You even defeated TzTok-Jad, I am most impressed!", "Please accept this gift as a reward.", 2617, "TzHaar-Mej-Jal"); + player.nextChat = 0; + break; + case 104: + sendNpcChat1("Well done in the cave, here, take TokKul as reward.", 2617, "TzHaar-Mej-Jal"); + player.nextChat = 0; + break; + case 145: + sendPlayerChat1("Give me a quest!"); + player.nextChat = 146; + break; + case 146: + sendNpcChat1("Give me a quest what?", player.talkingNpc, + "Wizard Mizgog"); + player.nextChat = 147; + break; + case 147: + sendPlayerChat1("Give me a quest please."); + player.nextChat = 148; + break; + case 148: + sendNpcChat2( + "Well seeing as you asked nicely... I could do with some", + "help.", player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 149; + break; + case 149: + sendNpcChat2("The wizard Grayzag next door decided he didn't like", + "me so he enlisted an army of hundreds of imps.", + player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 150; + break; + case 150: + sendNpcChat3( + "These imps stole all sorts of my things. Most of these", + "things I don't really care about, just eggs and balls of", + "string and things.", player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 151; + break; + case 151: + sendNpcChat2( + "But they stole my four magical beads. There was a red", + "one, a yellow one, a black one, and a white one.", + player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 152; + break; + case 152: + sendNpcChat2( + "These imps have now spread out all over the kingdom.", + "Could you get my beads back for me?", player.talkingNpc, + "Wizard Mizgog"); + player.nextChat = 153; + break; + case 153: + sendOption2("I'll try.", + "I've better things to do than chase imps."); + player.dialogueAction = 125; + break; + case 154: + sendPlayerChat1("I'll try."); + player.impsC = 1; + QuestAssistant.sendStages(player); + player.nextChat = 155; + break; + case 155: + sendNpcChat1("That's great, thank you.", player.talkingNpc, + "Wizard Mizgog"); + player.nextChat = 0; + break; + + case 156: + sendNpcChat1("So how are you doing finding my beads?", + player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 157; + break; + case 157: + sendPlayerChat1("I am still working on it."); + player.nextChat = 0; + break; + + case 158: + sendNpcChat1("So how are you doing finding my beads?", + player.talkingNpc, "Wizard Mizgog"); + player.nextChat = 159; + break; + case 159: + sendPlayerChat1("I've got all four beads. It was hard work I can tell you."); + player.nextChat = 160; + break; + case 160: + sendNpcChat3( + "Give them here and I'll check that really are MY", + "beads, before I give you your reward. You'll take it, it's", + "an amulet of accuracy.", player.talkingNpc, + "Wizard Mizgog"); + player.nextChat = 161; + break; + case 161: + sendStatement("You give four coloured beads to Wizard Mizgog."); + if (player.getItemAssistant().playerHasItem(1470, 1) + && player.getItemAssistant().playerHasItem(1472, 1) + && player.getItemAssistant().playerHasItem(1474, 1) + && player.getItemAssistant().playerHasItem(1476, 1)) { + player.getItemAssistant().deleteItem2(1470, 1); + player.getItemAssistant().deleteItem2(1472, 1); + player.getItemAssistant().deleteItem2(1474, 1); + player.getItemAssistant().deleteItem2(1476, 1); + player.impsC = 2; + player.nextChat = 162; + } else { + player.nextChat = 157; + } + break; + case 162: + QuestRewards.impFinish(player); + break; + case 163: + sendPlayerChat1("I've better things to do than chase imps."); + player.nextChat = 0; + break; + + case 164: + sendNpcChat3("What are you doing on my land? ", + "You're not the one who keeps leaving all my gates open", + "and letting out all my sheep are you?", player.talkingNpc, + "Fred"); + player.nextChat = 165; + break; + case 165: + sendOption3("I'm looking for a quest.", + "I'm looking for something to kill.", "I'm lost."); + player.dialogueAction = 63; + break; + case 166: + sendPlayerChat1("I'm looking for a quest."); + player.nextChat = 170; + break; + case 167: + sendNpcChat1( + "Goblins are great for killing near the bridge in lumbridge.", + player.talkingNpc, "Fred"); + player.nextChat = 0; + break; + case 168: + sendNpcChat1("Your in lumbridge silly.", player.talkingNpc, "Fred"); + player.nextChat = 0; + break; + case 169: + sendNpcChat2("You're after a quest, you say", + "Actually I could do with a bit of help.", + player.talkingNpc, "Fred"); + player.nextChat = 170; + break; + case 170: + sendNpcChat3("My sheep are getting mighty wolly.", + "I'd be much obliged if you could shear them.", + "And while you're at it spin the wool for me too.", + player.talkingNpc, "Fred"); + player.nextChat = 171; + break; + case 171: + sendNpcChat4("Yes, that's it.", " Bring me 20 balls of wool.", + "And I'm sure I could sort out some sort of payment.", + " Of course, there's the small matter of The Thing.", + player.talkingNpc, "Fred"); + player.nextChat = 172; + break; + case 172: + sendOption3("Yes okay. I can do that.", + "That doesn't sound a very exciting quest.", + "What do you mean, The Thing?"); + player.sheepShear = 1; + QuestAssistant.sendStages(player); + player.dialogueAction = 64; + break; + case 173: + sendPlayerChat1("Yes okay. I can do that."); + player.nextChat = 177; + break; + case 174: + sendPlayerChat1("Nevermind, that doesn't sound a very exciting quest."); + player.nextChat = 0; + break; + case 175: + sendPlayerChat1("What do you mean, The Thing?"); + player.nextChat = 176; + break; + case 176: + sendNpcChat1("Never mind.", player.talkingNpc, "Fred"); + player.nextChat = 0; + break; + case 177: + sendNpcChat2("Good! Now one more thing,", + "do you actually know how to shear a sheep?.", + player.talkingNpc, "Fred"); + player.nextChat = 178; + break; + case 178: + sendOption2("Of course!", "Err. No, I don't know acctually."); + player.dialogueAction = 65; + break; + case 179: + sendPlayerChat1("Of course!"); + player.nextChat = 180; + break; + case 180: + sendNpcChat1("And you know how to spin wool into balls?", + player.talkingNpc, "Fred"); + player.nextChat = 181; + break; + case 181: + sendOption2("I'm something of an expert actually!", + "I don't know how to spin wool, sorry.."); + player.dialogueAction = 66; + break; + case 182: + sendPlayerChat1("I'm something of an expert actually!"); + player.nextChat = 183; + break; + case 183: + sendNpcChat1("Well you can stop grinning and get to work then?", + player.talkingNpc, "Fred"); + player.nextChat = 184; + break; + case 184: + sendNpcChat1("I'm not paying you by the hour!", player.talkingNpc, + "Fred"); + player.nextChat = 0; + break; + case 185: + sendNpcChat1("How are you doing getting my balls of wool?", + player.talkingNpc, "Fred"); + player.nextChat = 186; + break; + case 186: + if (player.getItemAssistant().playerHasItem(1759, 20)) { + sendPlayerChat1("I have some."); + player.getItemAssistant().deleteItem(1759, 20); + player.nextChat = 187; + } else { + sendStatement("I should get 20 balls wool first."); + player.nextChat = 0; + } + break; + case 187: + sendNpcChat1("Give em here then.", player.talkingNpc, "Fred"); + player.nextChat = 188; + break; + case 188: + sendPlayerChat1("That's the last of them."); + player.nextChat = 189; + break; + case 189: + sendNpcChat1("I guess I'd better pay you then.", player.talkingNpc, + "Fred"); + player.nextChat = 263; + break; + case 263: + QuestRewards.sheepFinish(player); + break; + case 190: + sendNpcChat1("Greetings, welcome to my castle.", player.talkingNpc, + "Duke Horacio"); + player.nextChat = 191; + break; + case 191: + sendOption3("Have you any quests for me?", + "Where can I find money?", + "Can I have an anti dragon shield please?"); + player.dialogueAction = 124; + break; + case 192:// 9158 + sendPlayerChat1("Where can I find money?"); + player.nextChat = 193; + break; + case 193: + sendNpcChat1("I'm sorry, I'm not sure.", player.talkingNpc, + "Duke Horacio"); + player.nextChat = 0; + break; + case 194:// 9157 + if (player.runeMist == 0) { + sendNpcChat2("Well, it's not really a quest", + "but I recently discovered this strange talisman.", + player.talkingNpc, "Duke Horacio"); + player.nextChat = 195; + } else { + sendNpcChat1("You have already started this quest.", + player.talkingNpc, "Duke Horacio"); + player.nextChat = 0; + } + break; + case 195: + sendNpcChat2( + "It seems to be mystical and I have never seen anything like it before.", + "Would you take it to the head wizard at", + player.talkingNpc, "Duke Horacio"); + player.nextChat = 196; + break; + case 196: + sendNpcChat3( + "the Wizards Tower for me?", + "It's just south-west of here and should not take you very long at all.", + "I would be awfully grateful.", player.talkingNpc, + "Duke Horacio"); + player.nextChat = 197; + break; + case 197: + sendOption2("Sure, no problem.", "Not right now."); + player.dialogueAction = 140; + break; + case 198:// 9157 + sendPlayerChat1("Sure, no problem."); + player.nextChat = 199; + break; + case 199: + sendNpcChat2( + "Thank you very much, stranger.", + "I'm sure the head wizard will reward you for such an interesting find.", + player.talkingNpc, "Duke Horacio"); + player.nextChat = 200; + break; + case 200: + itemMessage1("The duke hands you an @blu@air talisman@blu@.", 1438, + 1); + player.getItemAssistant().addOrDropItem(1438, 1); + player.runeMist = 1; + QuestAssistant.sendStages(player); + player.nextChat = 0; + break; + case 201: + sendNpcChat2( + "Welcome adventurer, to the world renowed Wizards Tower", + "How may I help you?", player.talkingNpc, "Sedridor"); + player.nextChat = 202; + break; + case 202: + sendOption3("Nothing thanks, I'm just looking around.", + "What are you doing down here?", + "I'm looking for the head wizard."); + player.dialogueAction = 126; + break; + case 203: // 9168 + sendNpcChat1("That's none of your buisness.", player.talkingNpc, + "Sedridor"); + player.nextChat = 0; + break; + case 204: // 9169 + sendPlayerChat1("I'm looking for the head wizard."); + player.nextChat = 205; + break; + case 205: + sendNpcChat2("Oh, you are, are you?", + "And just why would you be doing that?", player.talkingNpc, + "Sedridor"); + player.nextChat = 207; + break; + case 207: + sendPlayerChat3( + "The Duke of Lumbridge sent me to find him. Most of these", + "I have this weird talisman he found.", + "He said the head wizard would be very interested in it."); + player.nextChat = 208; + break; + case 208: + sendNpcChat4("Did he now? HmmmMMMMMmmmm.", + "Well that IS interested. Hand it over then adverturer", + "let me see what all the hubbub about it is.", + "Just some amulet I'll wager.", player.talkingNpc, + "Sedridor"); + player.nextChat = 209; + break; + case 209: + sendOption2("Ok, here you are.", + "No, I'll only give it to the head wizard."); + player.dialogueAction = 127; + break; + case 210:// 9157 + sendPlayerChat1("Ok, here you are."); + player.nextChat = 212; + break; + case 212: + itemMessage1("You hand the Talisman to the wizard.", 1438, 1); + player.getItemAssistant().deleteItem(1438, 1); + player.runeMist = 2; + player.nextChat = 213; + break; + case 213: + sendNpcChat1("Wow! This is... incredible!", player.talkingNpc, + "Sedridor"); + player.nextChat = 214; + break; + case 214: + sendNpcChat4("Th-this talisman you brought me...! ", + "It is the last piece of the puzzle, I think! Finally!", + "The legacy of our ancestors.", + "It will return to us once more!", player.talkingNpc, + "Sedridor"); + player.nextChat = 215; + break; + case 215: + sendNpcChat3( + "I need time to study this, " + player.playerName + ".", + "Can you please do me this task while I study this talisman you have brought me?", + "In the mighty town of Varrock, which", player.talkingNpc, + "Sedridor"); + player.nextChat = 216; + break; + case 216: + sendNpcChat2( + "is located North East of here, there is a certain shop that sells magical runes.", + "I have in this package all of the research I have done relating to the Rune Stones, and", + player.talkingNpc, "Sedridor"); + player.nextChat = 217; + break; + case 217: + sendNpcChat3( + "require sombody to take them to the shopkeeper so that he may share my research", + "and offer me his insights.", + "Do this thing for me, and bring back what he gives you,", + player.talkingNpc, "Sedridor"); + player.nextChat = 218; + break; + case 218: + sendNpcChat3( + "and if my suspicions are correct,", + "I will let you into the knowledge of one of the greatest secrets this world has ever known!", + "A secret so powerful that it destroyed the", + player.talkingNpc, "Sedridor"); + player.nextChat = 219; + break; + case 219: + sendNpcChat3( + "original Wizards tower all of those centuries ago!", + "My research, combined with this mysterious talisman...", + "I cannot believe the answer to the mysteries is so close now!", + player.talkingNpc, "Sedridor"); + player.nextChat = 220; + break; + case 220: + sendNpcChat2("Do this thing for me " + player.playerName + ".", + " Be rewarded in a way you can never imagine.", + player.talkingNpc, "Sedridor"); + player.nextChat = 222; + break; + case 222: + sendOption2("Yes, certainly.", "No, I'm busy."); + player.dialogueAction = 128; + break; + case 223:// 9157 + sendPlayerChat1("Yes, certainly."); + player.nextChat = 224; + break; + case 224: + sendNpcChat3( + "Take this package, and head directly North from here.", + "through Draynor village, until you reach the Barbarian Village.", + "Then head East from there until you reach Varrock.", + player.talkingNpc, "Sedridor"); + player.nextChat = 225; + break; + case 225: + sendNpcChat3( + "Once in Varrock, take this package to the owner of the rune shop.", + "His name is Aubury.", + "You may find it helpful to ask one of Varrock's citizens for directions,", + player.talkingNpc, "Sedridor"); + player.nextChat = 226; + break; + case 226: + sendNpcChat3( + "as Varrock can be a confusing place for the first time visitor.", + "He will give you a special item - bring it back to me,", + "and I shall show you the mystery of the runes...", + player.talkingNpc, "Sedridor"); + player.nextChat = 227; + break; + case 227: + itemMessage1("The head wizard gives you a package.", 290, 1); + player.getItemAssistant().addOrDropItem(290, 1); + player.nextChat = 228; + break; + case 228: + sendNpcChat1("Best of luck with your quest, " + player.playerName + + ".", player.talkingNpc, "Sedridor"); + player.nextChat = 0; + break; + case 229: + sendNpcChat1("Do you want to buy some runes?", player.talkingNpc, + "Aubury"); + player.nextChat = 230; + break; + case 230: + sendOption3("Yes please!", + "Oh, it's a rune shop. No thank you, then.", + "I have been sent here with a package for you."); + player.dialogueAction = 129; + break; + case 231: // 9167 + sendPlayerChat1("Yes please!"); + player.getShopAssistant().openShop(52); + player.nextChat = 0; + break; + case 232: // 9169 + sendPlayerChat1("I have been sent here with a package for you. It's for the head wizard at the Wizards Tower."); + player.nextChat = 233; + break; + case 233: + sendNpcChat3( + "Really? But... surely he can't have..?", + "Please, let me have it,", + "it must be extremely important for him to have sent a stranger.", + player.talkingNpc, "Aubury"); + player.nextChat = 234; + break; + case 234: + itemMessage1("You hand Aubury the research package.", 290, 1); + player.getItemAssistant().deleteItem(290, 1); + player.runeMist = 3; + player.nextChat = 235; + break; + case 235: + sendNpcChat2( + "This... this is incredible. Please,", + "give me a few moments to quickly look over this, and then talk to me again.", + player.talkingNpc, "Aubury"); + player.nextChat = 236; + break; + case 236: + itemMessage1("Aubury gives you the research notes.", 290, 1); + player.getItemAssistant().addOrDropItem(290, 1); + player.nextChat = 237; + break; + case 237: + sendNpcChat1( + "Thank you, now you should head back to Sedridor and tell him your discoveries.", + player.talkingNpc, "Aubury"); + player.nextChat = 0; + break; + case 238: + sendNpcChat2( + "Welcome, adventure to the world-renowed Wizards Tower.", + "How may i help you?", player.talkingNpc, "Sedridor"); + player.nextChat = 239; + break; + case 239: + sendNpcChat2("Ah, " + player.playerName + ". How goes your quest?", + "Have you delivered the research notes to my friend yet?", + player.talkingNpc, "Sedridor"); + player.nextChat = 240; + break; + case 240: + sendPlayerChat1("Yes, I have. He gave me some research notes to pass on to you."); + player.nextChat = 241; + break; + case 241: + sendNpcChat1("May I have them?", player.talkingNpc, "Sedridor"); + player.nextChat = 242; + break; + case 242: + sendPlayerChat1("Sure. I have them here."); + player.nextChat = 243; + break; + case 243: + sendNpcChat2( + "You have been nothing but helpful, adventured.", + "In return, I can let you in on the secret of our research.", + player.talkingNpc, "Sedridor"); + player.nextChat = 245; + break; + case 245: + sendNpcChat2( + "Many centuries ago, the wizards of the Wizards Tower learnt the secret of creating runes,", + "which allowed them to cast magic very easily.", + player.talkingNpc, "Sedridor"); + player.nextChat = 247; + break; + case 247: + sendNpcChat3( + "But, when this tower was burnt down, the sercret of creating runes was lost with it...", + "or so I thought.", + "Some months ago, while searching these ruins for information, ", + player.talkingNpc, "Sedridor"); + player.nextChat = 248; + break; + case 248: + sendNpcChat2( + "I came upon a scroll that made refrence to a magical rock", + "deep in the ice fields of the north.", player.talkingNpc, + "Sedridor"); + player.nextChat = 249; + break; + case 249: + sendNpcChat3( + "This rock was called the rune essence by those magicians who studied it's powers.", + "Apparently, by simply breaking a chunk for it,", + "a rune could be fashioned and taken to certain", + player.talkingNpc, "Sedridor"); + player.nextChat = 250; + break; + case 250: + sendNpcChat3( + "magical altars that were scattered across the land.", + "Now, this is an intersting little peice of history,", + "not much use to us since we do not have access to this rune essence", + player.talkingNpc, "Sedridor"); + player.nextChat = 251; + break; + case 251: + sendNpcChat2( + "teleportations spell that he had never come across before, When cast,", + "it took him to a strange rock, yet it felt strangly familiar.", + player.talkingNpc, "Sedridor"); + player.nextChat = 252; + break; + case 252: + sendNpcChat3( + "As I'm sure you have guessed, he had discovered a spell to the mythical rune essence.", + "As soon as he told me of this,", + "I saw the importance of the find.", player.talkingNpc, + "Sedridor"); + player.nextChat = 253; + break; + case 253: + sendNpcChat2( + "For, if we could find the altars spoken of in the ancient texts", + "we would once more be able to create runes as our ancestors had done!", + player.talkingNpc, "Sedridor"); + player.nextChat = 254; + break; + case 254: + sendPlayerChat1("I'm still not sure how I fit into this little story of yours."); + player.nextChat = 255; + break; + case 255: + sendNpcChat3( + "You haven't guessed?", + "This talisman you brough me is the key to the elemental altar of air!", + "When you hold it, it directs you to", player.talkingNpc, + "Sedridor"); + player.nextChat = 256; + break; + case 256: + sendNpcChat3("the entrance of the long-forgotten Air Altar.", + "By bringing peices of the rune essence the Air Altar,", + "you will be able to fashion your own air runes", + player.talkingNpc, "Sedridor"); + player.nextChat = 257; + break; + case 257: + sendNpcChat3( + "That's not all!", + "By finding other talismans similar to his one,", + "you will eventually be able to craft every rune that is available in this world, jus", + player.talkingNpc, "Sedridor"); + player.nextChat = 258; + break; + case 258: + sendNpcChat3( + "as our ancestors did.", + "I cannot stress enough what find this is!", + "Now, due to the risks invovled in letting this mighty power fall into the wrong hands.", + player.talkingNpc, "Sedridor"); + player.nextChat = 259; + break; + case 259: + sendNpcChat3( + "I will keep the teleport spell to the rune essence a closely guarded secret.", + "This means that, if any evil power should discover the talismans required to enter the emental temples,", + "we will be able to prevent their", player.talkingNpc, + "Sedridor"); + player.nextChat = 260; + break; + case 260: + sendNpcChat3( + "access to the rune essence.", + "I know not where the altars are located, not do I know where the talismans have been scattered,", + "but now return your air talisman.", player.talkingNpc, + "Sedridor"); + player.nextChat = 261; + break; + case 261: + sendNpcChat1( + "Find the Air Altar and you will be able to craft you blank runes into air runes at will.", + player.talkingNpc, "Sedridor"); + player.nextChat = 262; + break; + case 262: + sendNpcChat2( + "Any time you wish to visit the rune essence,", + "speak to me or Aubury and we will open a portal to that mystical place.", + player.talkingNpc, "Sedridor"); + player.nextChat = 264; + break; + case 264: + sendPlayerChat1("So, only you and Aubury know the teleport spell to the rune essence?"); + player.nextChat = 266; + break; + case 266: + sendNpcChat2( + "No, there are others. When you speak to them,", + "they will know you and grant you access to that place when asked.", + player.talkingNpc, "Sedridor"); + player.nextChat = 267; + break; + case 267: + sendNpcChat2( + "Use the air talisman to locate the Air Altar and use any further talismans you find to locate the other altars.", + "Now, my research notes please?", player.talkingNpc, + "Sedridor"); + player.nextChat = 268; + break; + case 268: + itemMessage1( + "You give the research notes to Sedrdior. He gives you an air talisman.", + 290, 1); + player.getItemAssistant().deleteItem(290, 1); + player.runeMist = 4; + QuestRewards.runeFinish(player); + player.nextChat = 0; + break; + case 269: + sendPlayerChat1("Hello, are you ok?"); + player.nextChat = 270; + break; + case 270: + sendNpcChat2("Do I look ok?", "Those kid's drive me crazy.", + player.talkingNpc, "Gertrude"); + player.nextChat = 271; + break; + case 271: + sendNpcChat1("I'm sorry. It's just that I've lost her.", + player.talkingNpc, "Gertrude"); + player.nextChat = 272; + break; + case 272: + sendPlayerChat1("Lost whom?"); + player.nextChat = 273; + break; + case 273: + sendNpcChat1("Fluffs, poor Fluffs, She never hurt anyone.", + player.talkingNpc, "Gertrude"); + player.nextChat = 274; + break; + case 274: + sendPlayerChat1("Who's Fluffs?"); + player.nextChat = 275; + break; + case 275: + sendNpcChat4("My beloved feline friend, Fluffs.", + "She's been purring by my side for almost a decade.", + "Could you go and search for her while", + "I take care of the children?", player.talkingNpc, + "Gertrude"); + player.nextChat = 276; + break; + case 276: + sendOption3( + "Well, I suppose I could though I'd need more details.", + "What's in it for me?", + "Sorry, I'm too busy to play per rescue."); + player.dialogueAction = 60; + break; + case 277: // 9167 + sendPlayerChat1("Well, I suppose I could though I'd need more details."); + player.nextChat = 280; + break; + case 278: // 9169 + sendPlayerChat1("Sorry I'm too busy to play per rescue."); + player.nextChat = 0; + break; + case 279: // 9168 + sendNpcChat1( + "Come back with a better attitude a maybe you will find out.", + player.talkingNpc, "Gertrude"); + player.nextChat = 0; + break; + case 280: + sendNpcChat2("Really? Thank you so much!", + "I really have no idea where she could be!", + player.talkingNpc, "Gertrude"); + player.gertCat = 1; + player.nextChat = 281; + break; + case 281: + sendNpcChat2( + "I think my sons, Shilop and Wilough, saw the cat last.", + "They'll be out in the marketplace.", player.talkingNpc, + "Gertrude"); + player.nextChat = 282; + break; + case 282: + sendPlayerChat2("The marketplace? Which one would that be?", + "It would help to know what they get up to, as well."); + player.nextChat = 283; + break; + case 283: + sendNpcChat4( + "Really? Well, I generally let them do what they want,", + "so I've no idea exactly what they would be doing.", + "They are good lads, though. I'm sure, they are", + "just watching the passers-by in Varrock Marketplace.", + player.talkingNpc, "Gertrude"); + player.nextChat = 284; + break; + case 284: + sendNpcChat1("Oh, to be young and carefree again!", + player.talkingNpc, "Gertrude"); + player.nextChat = 285; + break; + case 285: + sendPlayerChat2( + "I'll see what I can do. Two young lads in Varrock.", + "I hope that there's no school trip passing when I arrive."); + QuestAssistant.sendStages(player); + player.nextChat = 0; + break; + case 286: + sendPlayerChat1("Hello there, I've been looking for you."); + player.nextChat = 287; + break; + case 287: + sendNpcChat1("I didn't mean to take it! I just forgot to pay.", + player.talkingNpc, "Wilough"); + player.nextChat = 288; + break; + case 288: + sendPlayerChat2("What?", + "I'm trying to help your mum find some cat called Fluffs."); + player.nextChat = 289; + break; + case 289: + sendNpcChat4("Ohh...well, in that case I might be able to help.", + "Fluffs followed me to my super secret hideout.", + "I haven't seen her since.", + "She's probably off eating small creatures somewhere.", + player.talkingNpc, "Wilough"); + player.nextChat = 290; + break; + case 290: + sendPlayerChat2("Where is this secret hideout?", + "I really need to find that cat for you mum."); + player.nextChat = 291; + break; + case 291: + sendNpcChat2("If I told you that, It wouldn't be a secret.", + "What if I need to escape for the law? I need a hideout.", + player.talkingNpc, "Wilough"); + player.nextChat = 292; + break; + case 292: + sendPlayerChat2("From my limited knowledge of law,", + "they are not usually involved in manhunts for children."); + player.nextChat = 293; + break; + case 293: + sendNpcChat3( + "Well it's still mine anyway, we need a place to relax,", + "sometimes.", + "Those two little brothers at the house are just such babies.", + player.talkingNpc, "Wilough"); + player.nextChat = 294; + break; + case 294: + sendOption3( + "Tell me sonny, or I will inform you are a pair of criminals.", + "What will make you tell me?", + "Well never mind, it's Fluffs loss."); + player.dialogueAction = 61; + break; + case 295: // 9167 + sendNpcChat1("No. Where not criminals.", player.talkingNpc, + "Wilough"); + player.nextChat = 0; + break; + case 296: // 9169 + sendPlayerChat1("Well never mind, it's Fluffs loss."); + player.nextChat = 0; + break; + case 297: // 9168 + sendPlayerChat1("What will make you tell me?"); + player.nextChat = 298; + break; + case 298: + sendNpcChat1("Well...now you ask, I am a bit short on cash.", + player.talkingNpc, "Wilough"); + player.nextChat = 299; + break; + case 299: + sendPlayerChat1("How much?"); + player.nextChat = 300; + break; + case 300: + sendNpcChat1("10 coins.", player.talkingNpc, "Wilough"); + player.nextChat = 301; + break; + case 301: + sendNpcChat1("10 coins?!", player.talkingNpc, "Shilop"); + player.nextChat = 302; + break; + case 302: + sendNpcChat1("I'll handle this.", player.talkingNpc, "Shilop"); + player.nextChat = 303; + break; + case 303: + sendNpcChat1("100 coins should cover it.", player.talkingNpc, + "Shilop"); + player.nextChat = 304; + break; + case 304: + sendPlayerChat2("100 coins!", + "What sort of expensive things do you need that badly?"); + player.nextChat = 305; + break; + case 305: + sendNpcChat2("Well I don't like chocolate", + "and have you seen how much sweets cost to buy?", + player.talkingNpc, "Shilop"); + player.nextChat = 306; + break; + case 306: + sendPlayerChat2("Why should I pay you then", + "can you answer that as easily?"); + player.nextChat = 307; + break; + case 307: + sendNpcChat4("Obviously you shouldn't pay that much,", + "but I won't help otherwise. I never liked,", + "that cat anyway, fussy scratchy thing it is", + "so what do you say?", player.talkingNpc, "Shilop"); + player.nextChat = 308; + break; + case 308: + sendOption2("I'm not paying you a thing.", "Okay then, I'll pay."); + player.dialogueAction = 62; + break; + case 309: // 9158 + sendPlayerChat2("Okay then. I'll pay, but I'll want you,", + "to tell your mother what a nice person I am."); + player.nextChat = 310; + break; + case 310: + sendNpcChat1("What?", player.talkingNpc, "Shilop"); + player.nextChat = 311; + break; + case 311: + sendPlayerChat2( + "I'll want you to tell your mother what a nice person I am", + "so she rewards me for this search."); + player.nextChat = 312; + break; + case 312: + sendNpcChat1("It's a deal.", player.talkingNpc, "Shilop"); + player.nextChat = 313; + break; + case 313: + if (player.getItemAssistant().playerHasItem(995, 100)) { + sendStatement("You give the lad 100 coins."); + player.getItemAssistant().deleteItem2(995, 100); + player.nextChat = 314; + player.gertCat = 2; + } else { + sendStatement("I don't have 100 coin's I should come back."); + player.nextChat = 0; + } + break; + case 314: + sendPlayerChat1("There you go, now where did you see Fluffs?"); + player.nextChat = 315; + break; + case 315: + sendNpcChat4( + "We hide out at the lumber mill to the northeast.", + "Just beyond the Jolly Beat Inn.", + "I saw Fluffs running around in there. Well,", + "not so much running as plodding lazily, you get the point.", + player.talkingNpc, "Wilough"); + player.nextChat = 316; + break; + case 316: + sendPlayerChat1("Anything else?"); + player.nextChat = 317; + break; + case 317: + sendNpcChat4( + "Well, technically you are tresspassing inside there but noone seems to care.", + "You'll have to find the broken fence to get in.", + "It will be a bit of a squeeze for a grown-up but", + "I'm sure you can manage that.", player.talkingNpc, + "Wilough"); + player.nextChat = 0; + break; + case 318: + sendStatement("Mew"); + player.nextChat = 319; + break; + case 319: + sendPlayerChat1("Progress atleast."); + player.nextChat = 321; + break; + case 321: + sendStatement("Fluffs laps up the milk greedly. The she mews at you again."); + player.nextChat = 0; + break; + case 322: + sendStatement("Mew!"); + player.nextChat = 323; + break; + case 323: + sendPlayerChat1("Progress atleast."); + player.nextChat = 324; + break; + case 324: + sendStatement2("Fluffs devours the dougle sardine greedly.", "Then she mews at you again."); + player.nextChat = 0; + break; + case 325: + sendStatement2("Fluffs seems afraid to leave.", "In the lumberyard below you can hear the mewing."); + player.nextChat = 0; + break; + case 326: + sendNpcChat1("Purr...", player.talkingNpc, "Fluffs"); + player.nextChat = 327; + break; + case 327: + sendStatement("Fluffs and her offspring will now live happily."); + player.nextChat = 0; + break; + case 328: + sendPlayerChat2( + "Hello Gertrude. Fluffs has run off with her lost kittens.", + "That I have now returned to her."); + player.nextChat = 329; + break; + case 329: + sendNpcChat4( + "You're Back!", + "Thank you, thank you!", + "Fluffs just came back. I think she was upset,", + "because she couldn't find her kittens.", + player.talkingNpc, "Gertrude"); + player.nextChat = 330; + break; + case 330: + sendStatement("Gertrude thanks you heartily."); + player.nextChat = 331; + break; + case 331: + sendNpcChat2("If you wouldn't have found her kittens,", + "then they would have died out there.", player.talkingNpc, + "Gertrude"); + player.nextChat = 332; + break; + case 332: + sendPlayerChat1("That's okay, I like to do my bit."); + player.nextChat = 333; + break; + case 333: + sendNpcChat3( + "I don't know how to thank you.", + "I have no real material possesions, but I do have kittens.", + "I can really only look after one or two.", + player.talkingNpc, "Gertrude"); + player.nextChat = 334; + break; + case 334: + sendPlayerChat1("Well, if one needs a home."); + player.nextChat = 335; + break; + case 335: + sendNpcChat4("I would sell one to my couzin in West Aroudnge.", + "I hear there's a " + " epidemic there,", + "but it's too far for me to travel.", + "With all my boys and all.", player.talkingNpc, "Gertrude"); + player.nextChat = 336; + break; + case 336: + sendNpcChat1("Here you go look after her and thank you.", + player.talkingNpc, "Gertrude"); + player.nextChat = 337; + break; + case 337: + sendStatement("Gertrude gives you a kitten."); + QuestRewards.gertFinish(player); + player.nextChat = 0; + break; + case 338: + sendNpcChat1("Welcome to the church of holy Saradomin..", + player.talkingNpc, "Father Aereck"); + player.nextChat = 339; + break; + case 339: + sendOption4("Who's Saradomin?", "Nice place you've got here", + "I'm looking for a quest", "Never Mind"); + player.dialogueAction = 32; + break; + case 340:// 9178 + sendNpcChat1("None of your buisness.", player.talkingNpc, + "Father Aereck"); + player.nextChat = 0; + break; + case 341:// 9179 + sendPlayerChat1("Nice place you've got here."); + player.nextChat = 0; + break; + case 342:// 9180 + sendPlayerChat1("I'm looking for a quest."); + player.nextChat = 343; + break; + case 343: + sendNpcChat1("That's lucky, I need someone to do a quest for me.", + player.talkingNpc, "Father Aereck"); + player.nextChat = 344; + break; + case 344: + sendPlayerChat1("Okay, let me help then."); + player.nextChat = 345; + break; + case 345: + sendNpcChat3( + "Thank you. The problem is there's,", + "a ghost in the graveyard crypt just south of this church.", + "I would like you to get rid of it.", player.talkingNpc, + "Father Aereck"); + player.nextChat = 346; + break; + case 346: + sendNpcChat2("You'll need the help of my friend, Father Urhney,", + "who is a bit of a ghost expert.", player.talkingNpc, + "Father Aereck"); + player.nextChat = 347; + break; + case 347: + sendNpcChat2( + "He's currently living in a little shack to the south of,", + "the Lumbridge Swamp near the coast.", player.talkingNpc, + "Father Aereck"); + player.nextChat = 348; + break; + case 348: + sendNpcChat2("My name is Father Aereck, by the way.", + "Pleased to meet you.", player.talkingNpc, "Father Aereck"); + player.nextChat = 349; + break; + case 349: + sendPlayerChat1("Likewise."); + player.nextChat = 350; + break; + case 350: + sendNpcChat3("Take care traveling through the swamps.", + "To get there just follow the path south,", + "through the graveyard.", player.talkingNpc, + "Father Aereck"); + player.nextChat = 351; + player.restGhost = 1; + QuestAssistant.sendStages(player); + break; + case 351: + sendPlayerChat1("I will thanks."); + player.nextChat = 0; + break; + case 352: + sendNpcChat1("Go away! I'm meditating.", player.talkingNpc, + "Father Urhney"); + player.nextChat = 353; + break; + case 353: + sendOption4("Well, that's friendly", + "Father Aereck sent me to talk to you", + "I've come to repossess your house", "Never Mind"); + player.dialogueAction = 33; + break; + case 354:// 9178 + sendPlayerChat1("Well, that's friendly."); + player.nextChat = 0; + break; + case 355: // 9180 + sendPlayerChat1("I've come to repossess your house."); + player.nextChat = 0; + break; + case 356: // 9179 + sendPlayerChat1("Father Aereck sent me to talk to you."); + player.nextChat = 357; + break; + case 357: + sendNpcChat2("I suppose I better talk to you then.", + "What has he got himself into this time?", + player.talkingNpc, "Father Urhney"); + player.nextChat = 358; + break; + case 358: + sendOption2("A ghost is haunting his graveyard", + "You mean he gets into lots of problems?"); + player.dialogueAction = 34; + break; + case 359: // 9158 + sendPlayerChat1("You mean he gets into lots of problems?"); + player.nextChat = 360; + break; + case 360: + sendNpcChat1("Yes, he does. A ghost is haunting his graveyard.", + player.talkingNpc, "Father Urhney"); + player.nextChat = 0; + break; + case 361: + sendPlayerChat1("A ghost is haunting his graveyard"); + player.nextChat = 362; + break; + case 362: + sendNpcChat1("Oh, the silly fool.", player.talkingNpc, + "Father Urhney"); + player.nextChat = 363; + break; + case 363: + sendNpcChat2("I leave town for five months,", + "and he's already having problems.", player.talkingNpc, + "Father Urhney"); + player.nextChat = 364; + break; + case 364: + sendNpcChat1("*sigh*", player.talkingNpc, "Father Urhney"); + player.nextChat = 365; + break; + case 365: + sendNpcChat3("Well I can't go back and exorcise it", + "I vowed not to leave this place until,", + "I've spent a full two years praying and meditating.", + player.talkingNpc, "Father Urhney"); + player.nextChat = 366; + break; + case 366: + sendNpcChat1( + "I'll tell you what I can do though take this amulet.", + player.talkingNpc, "Father Urhney"); + player.nextChat = 367; + player.getItemAssistant().addOrDropItem(552, 1); + player.restGhost = 2; + break; + case 367: + sendNpcChat1("It's a ghost speak amulet.", player.talkingNpc, + "Father Urhney"); + player.nextChat = 368; + break; + case 368: + sendNpcChat3( + "It's called that because, when you wear it, you can,", + "speak to ghosts. Many ghosts are doomed to remain in this,", + "world because they have some important task left uncompleted.", + player.talkingNpc, "Father Urhney"); + player.nextChat = 369; + break; + case 369: + sendNpcChat3( + "If you know what this task is, you can get rid of the ghost.", + "I'm not making any guarentees, mind you,", + "but it's the best I can do right now.", player.talkingNpc, + "Father Urhney"); + player.nextChat = 370; + break; + case 370: + sendPlayerChat1("Thank you. I'll give it a try."); + player.nextChat = 0; + break; + case 371: + sendPlayerChat1("Hello ghost how are you?"); + player.nextChat = 372; + break; + case 372: + sendNpcChat1("Not very good, actually.", player.talkingNpc, + "Restless Ghost"); + player.nextChat = 373; + break; + case 373: + sendPlayerChat1("What's the problem?"); + player.nextChat = 374; + break; + case 374: + sendNpcChat1("Did you just understand what I said?", + player.talkingNpc, "Restless Ghost"); + player.nextChat = 375; + break; + case 375: + sendOption4("Yep. Now, tell me what the problem is.", + "No, you sound like you're speaking nonsense to me.", + "Wow, this amulet works!", "Never mind."); + player.dialogueAction = 35; + break; + case 376: // 9179 + sendPlayerChat1("No, you sound like you're speaking nonsense to me."); + player.nextChat = 0; + break; + case 377: // 9180 + sendPlayerChat1("Wow, this amulet works!"); + player.nextChat = 0; + break; + case 378: // 9178 + sendPlayerChat1("Yep. Now, tell me what the problem is."); + player.nextChat = 379; + break; + case 379: + sendNpcChat2("Wow! This is incredible!", + "I didn't expect anyone to ever understand me!", + player.talkingNpc, "Restless Ghost"); + player.nextChat = 380; + break; + case 380: + sendPlayerChat1("Okay, okay, I can understand you."); + player.nextChat = 381; + break; + case 381: + sendPlayerChat1("But have you any idea why you're doomed to be a ghost?"); + player.nextChat = 382; + break; + case 382: + sendNpcChat1("Well, to be honest, I'm not sure.", + player.talkingNpc, "Restless Ghost"); + player.nextChat = 383; + break; + case 383: + sendPlayerChat2( + "I've been told that a certain task needs to be completed", + "before you can rest in peace."); + player.nextChat = 384; + break; + case 384: + sendNpcChat1("I should think it's because I've lost my head.", + player.talkingNpc, "Restless Ghost"); + player.nextChat = 385; + break; + case 385: + sendPlayerChat1("What? I can see your head perfectly fine. Well, see through it at least."); + player.nextChat = 386; + break; + case 386: + sendNpcChat4( + "No, no, I mean from my REAL body.", + "If you look in my coffin you'll see my corpse is without it's,", + "skull. Last thing I remember was being attacked by a warlock,", + "while I was mining. It was at the mine just south of this", + player.talkingNpc, "Restless Ghost"); + player.nextChat = 387; + break; + case 387: + sendNpcChat1("graveyard.", player.talkingNpc, "Restless Ghost"); + player.nextChat = 388; + player.restGhost = 3; + break; + case 388: + sendPlayerChat1("Okay. I'll try to get your skull back for you so you can rest in peace."); + player.nextChat = 0; + break; + case 389: + sendNpcChat1("Why me?...", player.talkingNpc, "Romeo"); + player.nextChat = 390; + break; + case 390: + sendNpcChat2("Why isn't she returning any of them...", + "Is it my hair...", player.talkingNpc, "Romeo"); + player.nextChat = 391; + break; + case 391: + sendOption2("What's wrong?", "Yes it's your hair"); + player.dialogueAction = 118; + break; + case 392: // 9158 + sendPlayerChat1("Haha yes it's your hair, get a haircut loser!"); + player.nextChat = 393; + break; + case 393: + sendNpcChat1("Tis' a sad world...", player.talkingNpc, "Romeo"); + player.nextChat = 0; + break; + case 394: // 9157 + sendPlayerChat1("What's wrong?"); + player.nextChat = 396; + break; + case 396: + sendNpcChat1("My Juliet..my poor poor Juliet", player.talkingNpc, + "Romeo"); + player.nextChat = 397; + break; + case 397: + sendNpcChat3("I've been trying to contact her all day", + "but the problem is...she won't return any", + "of my letters...", player.talkingNpc, "Romeo"); + player.nextChat = 398; + break; + case 398: + sendOption2("Why don't you just meet in person?", + "I might have to go now..."); + player.dialogueAction = 119; + break; + case 399: // 9157 + sendNpcChat1("Well you see...the problem is..", player.talkingNpc, + "Romeo"); + player.nextChat = 401; + break; + case 401: + sendNpcChat1("Her mother doesn't know we've been dating.", + player.talkingNpc, "Romeo"); + player.nextChat = 402; + break; + case 402: + sendNpcChat1( + "Can you please speak with Juliet and see what's going on?", + player.talkingNpc, "Romeo"); + player.nextChat = 403; + break; + case 403: + sendOption2("Yes I'll do so now", "Is that my fish calling me?"); + player.dialogueAction = 120; + break; + case 404:// 9158 + sendPlayerChat1("I might have to go now..."); + player.nextChat = 0; + break; + case 405: + sendPlayerChat1("Why not just meet her in person?"); + player.nextChat = 406; + break; + case 406: + sendPlayerChat1("Yeah anything to help a lover in need."); + player.nextChat = 407; + break; + case 407: + player.romeojuliet++; + QuestAssistant.sendStages(player); + sendNpcChat2("Great, Juliet is just in the house west of here", + "You will most likely find her upstairs.", + player.talkingNpc, "Romeo"); + player.nextChat = 0; + break; + case 408: + sendNpcChat1("Please speak to Juliet for me", player.talkingNpc, + "Romeo"); + player.nextChat = 0; + break; + case 409: + sendNpcChat1("How I long him...", player.talkingNpc, "Juliet"); + player.nextChat = 0; + break; + case 410: + sendNpcChat1("Please you have to go.", player.talkingNpc, "Juliet"); + player.nextChat = 411; + break; + case 411: + sendPlayerChat2("Wait, what's happening? Romeo has", + "been looking all over for you."); + player.nextChat = 412; + break; + case 412: + sendNpcChat1("I can't explain much. Please just go.", + player.talkingNpc, "Juliet"); + player.nextChat = 413; + break; + case 413: + sendNpcChat1("Take this...and go...", player.talkingNpc, "Juliet"); + player.getItemAssistant().addOrDropItem(755, 1); + player.romeojuliet++; + player.nextChat = 0; + break; + case 414: + sendNpcChat1("Just go...you shouldn't be here.", player.talkingNpc, + "Juliet"); + player.nextChat = 0; + break; + case 415: + sendNpcChat1( + "Hey did you talk to her yet?..How I long for Juliet.", + player.talkingNpc, "Romeo"); + player.nextChat = 416; + break; + case 416: + sendPlayerChat1("Yes she gave me this let---"); + player.nextChat = 417; + break; + case 417: + sendNpcChat1("Pass it here, pass it!", player.talkingNpc, "Romeo"); + player.getItemAssistant().deleteItem2(755, 1); + player.nextChat = 418; + break; + case 418: + sendNpcChat3( + "Dear Romeo...sadly we can not see each other anymore", + "mother has been complaining on how you aren't the right", + "person.", player.talkingNpc, "Romeo"); + player.nextChat = 419; + break; + case 419: + sendNpcChat3("We come from two different classes..", + "I'm just some lonely Varrock girl, and", + "your a fine prince that travels around the world..", + player.talkingNpc, "Romeo"); + player.nextChat = 420; + break; + case 420: + sendNpcChat1("This is my goodbyes...Juliet...", player.talkingNpc, + "Romeo"); + player.nextChat = 0; + player.romeojuliet++; + player.romeojuliet++; + break; + case 421: + sendNpcChat1("Well have you spoken to her?", player.talkingNpc, + "Romeo"); + player.nextChat = 422; + break; + case 422: + sendPlayerChat2("She gave me a letter to give you..", + "Which I don't have on me"); + player.nextChat = 423; + break; + case 423: + sendNpcChat2("Please bring it as soon as possible...", + "How I miss my Juliet", player.talkingNpc, "Romeo"); + player.nextChat = 0; + break; + case 424: + sendNpcChat1("She just...", player.talkingNpc, "Romeo"); + player.nextChat = 425; + break; + case 425: + sendNpcChat1("What have I done wrong...", player.talkingNpc, + "Romeo"); + player.nextChat = 426; + break; + case 426: + sendNpcChat1("My Juliet...", player.talkingNpc, "Romeo"); + player.nextChat = 427; + break; + case 427: + sendPlayerChat2("Are you just going to give up??", + "What about love?"); + player.nextChat = 428; + break; + case 428: + sendNpcChat1("No...", player.talkingNpc, "Romeo"); + player.nextChat = 429; + break; + case 429: + sendNpcChat2("No, your right. Please", + "speak to the witch just south west of here.", + player.talkingNpc, "Romeo"); + player.nextChat = 430; + break; + case 430: + sendNpcChat1("She'll know what to do.", player.talkingNpc, "Romeo"); + player.nextChat = 0; + player.romeojuliet++; + break; + case 431: + sendNpcChat1("Speak to Winelda. She's south west.", + player.talkingNpc, "Romeo"); + player.nextChat = 0; + break; + case 432: + sendNpcChat1("So I see that prince sent you here.", + player.talkingNpc, "Winelda"); + player.nextChat = 433; + break; + case 433: + sendPlayerChat1("Wait how did you know?"); + player.nextChat = 434; + break; + case 434: + sendNpcChat2("I'm a witch..I've studied the arts", + "of magic for years.", player.talkingNpc, "Winelda"); + player.nextChat = 435; + break; + case 435: + sendNpcChat2("I will help you. This one time.", + "But next time I won't be so kind.", player.talkingNpc, + "Winelda"); + player.nextChat = 436; + break; + case 436: + sendOption2("So what do I need to do?", + "I don't think I'm up for this anymore..."); + player.dialogueAction = 121; + break; + case 437:// 9158 + sendPlayerChat1("This is just getting more twisted...I have to go..."); + player.nextChat = 0; + break; + case 438:// 9157 + sendPlayerChat1("So what do you need me to do?"); + player.nextChat = 439; + break; + case 439: + sendNpcChat1("You need, 1 rat's tail, 1 bone, and a vial of water", + player.talkingNpc, "Winelda"); + player.nextChat = 440; + break; + case 440: + sendNpcChat2("Bring those items here and I'll make you a potion", + "that makes anyone tell the truth.", player.talkingNpc, + "Winelda"); + player.nextChat = 0; + player.romeojuliet++; + break; + case 441: + sendNpcChat1("You need, 1 rats tail, 1 bone, and a vial of water", + player.talkingNpc, "Winelda"); + player.nextChat = 442; + break; + case 442: + sendNpcChat1("Speak to me when you have all 3 items.", + player.talkingNpc, "Winelda"); + player.nextChat = 0; + break; + case 443: + sendNpcChat1("What did the witch say?", player.talkingNpc, "Romeo"); + player.nextChat = 444; + break; + case 444: + sendPlayerChat2("She wants me to bring her 3 items", + "Then she'll speak to me"); + player.nextChat = 445; + break; + case 445: + sendNpcChat1("Which items if you don't mind me asking?", + player.talkingNpc, "Romeo"); + player.nextChat = 446; + break; + case 446: + sendPlayerChat1("Oh just a rat's"); + player.nextChat = 448; + break; + case 447: + sendNpcChat1("Nevermind.", player.talkingNpc, "Romeo"); + player.nextChat = 0; + break; + case 448: + sendNpcChat1("I'll take that", player.talkingNpc, "Winelda"); + player.getItemAssistant().deleteItem2(300, 1); + player.getItemAssistant().deleteItem2(227, 1); + player.getItemAssistant().deleteItem2(526, 1); + player.nextChat = 449; + break; + case 449: + sendNpcChat1("Azari-Ahmi-Grantai!!", player.talkingNpc, "Winelda"); + player.nextChat = 450; + break; + case 450: + sendNpcChat1("Here take this", player.talkingNpc, "Winelda"); + player.romeojuliet++; + player.getItemAssistant().addOrDropItem(4836, 1); + player.nextChat = 451; + break; + case 451: + sendNpcChat1("Tell Juliet to drink this", player.talkingNpc, + "Winelda"); + player.nextChat = 453; + break; + case 453: + sendPlayerChat1("Wait but will Juliet actually drink it?"); + player.nextChat = 454; + break; + case 454: + sendNpcChat3("I don't know?!", "What do I look like some kind of", + "fortune teller?", player.talkingNpc, "Winelda"); + player.nextChat = 455; + break; + case 455: + sendNpcChat1("Tell her it's soup or something.", player.talkingNpc, + "Winelda"); + player.nextChat = 456; + break; + case 456: + sendPlayerChat1("Wow she's polite..."); + player.nextChat = 0; + break; + case 457: + sendNpcChat1("I told you to leave....", player.talkingNpc, "Juliet"); + player.nextChat = 458; + break; + case 458: + sendPlayerChat1("Here take this."); + player.nextChat = 459; + break; + case 459: + sendStatement("Juliet drinks the potion."); + player.getItemAssistant().deleteItem2(4836, 1); + player.nextChat = 460; + break; + case 460: + sendNpcChat1("What was that..", player.talkingNpc, "Juliet"); + player.nextChat = 461; + break; + case 461: + sendPlayerChat1("Now tell me why you've been ignoring Romeo!"); + player.nextChat = 462; + break; + case 462: + sendNpcChat1("Well...tomorrow's Romeos birthday.", + player.talkingNpc, "Juliet"); + player.nextChat = 463; + break; + case 463: + sendNpcChat3("Mama and I wanted to show Romeo that", + "Even though he's richer then us we still", + "care for him.", player.talkingNpc, "Juliet"); + player.nextChat = 464; + break; + case 464: + sendPlayerChat1("Wait was that it?"); + player.nextChat = 465; + break; + case 465: + sendNpcChat2("Yeah, I've been telling Mother to act", + "grouchy with him.", player.talkingNpc, "Juliet"); + player.nextChat = 466; + break; + case 466: + sendNpcChat2("That way we can throw him off easily.", + "that's what a surprise is.", player.talkingNpc, "Juliet"); + player.nextChat = 467; + break; + case 467: + sendPlayerChat1("I should get going"); + player.nextChat = 0; + player.romeojuliet++; + break; + case 468: + sendNpcChat1("Wait your not going to tell Romeo are you?", + player.talkingNpc, "Juliet"); + player.nextChat = 0; + break; + case 469: + sendNpcChat1("So? What's going on with Juliet?", player.talkingNpc, + "Romeo"); + player.nextChat = 470; + break; + case 470: + sendPlayerChat2("She's been planning a surprise", + "birthday party for you all along"); + player.nextChat = 471; + break; + case 471: + sendPlayerChat2("Her mother was in on in too. They", + "just wanted to show that they're always there for you"); + player.nextChat = 472; + break; + case 472: + sendNpcChat1("Wait but my birthday isn't till next week", + player.talkingNpc, "Romeo"); + player.nextChat = 473; + break; + case 473: + sendNpcChat2("That was very thoughtful of her", + "Thank you young traveller for all your help", + player.talkingNpc, "Romeo"); + player.nextChat = 474; + break; + case 474: + QuestRewards.julietFinish(player); + sendNpcChat2("Juliet and I have been great ever", + "since you've helped. Thank you adventurer", + player.talkingNpc, "Romeo"); + player.romeojuliet = 9; + player.nextChat = 0; + break; + case 475: + if (player.romeojuliet == 8) { + player.nextChat = 474; + } + break; + case 211: + sendOption2("Quest.", "Buy Wool."); + player.dialogueAction = 168; + break; + case 476: + sendNpcChat2( + "Praise Saradomin! He has Brought you here to save us", + "all!", player.talkingNpc, "Morgan"); + player.nextChat = 477; + break; + case 477: + sendPlayerChat1("Wha-"); + player.nextChat = 478; + break; + case 478: + sendNpcChat3("He has guided your steps to my door, So that", + "I may beseech you to save my village from a terrible", + "threat.", player.talkingNpc, "Morgan"); + player.nextChat = 479; + break; + case 479: + sendOption2("Why don't you save your own village?", + "What terrible threat?"); + player.dialogueAction = 29; + break; + case 480:// 9157 + sendPlayerChat1("Why don't you save your own village?"); + player.nextChat = 0; + break; + case 481:// 9158 + sendPlayerChat1("What terrible threat?"); + player.nextChat = 482; + break; + case 482: + sendNpcChat3( + "Our village is plagued by a vampire. He visits us", + "frequently and demands blood payments or he will,", + "terroise us all!", player.talkingNpc, "Morgan"); + player.nextChat = 483; + break; + case 483: + sendPlayerChat2("The vampire showed up all of a sudden", + "and started attacking your village?"); + player.nextChat = 484; + break; + case 484: + sendNpcChat3("I don't know, I just moved here with my wife.", + "We'd move on again,", + "but we're down on our luck and can't afford to.", + player.talkingNpc, "Morgan"); + player.nextChat = 485; + break; + case 485: + sendNpcChat3( + "Besides, I don't want to abandon other innocents to this,", + "fate. This could be a good community.", + "If only that vampire would leave us.", player.talkingNpc, + "Morgan"); + player.nextChat = 486; + break; + case 486: + sendNpcChat1("Will you help me, brave adventurer?", + player.talkingNpc, "Morgan"); + player.nextChat = 487; + break; + case 487: + sendOption2("Yes", "No"); + player.dialogueAction = 30; + break; + case 488:// 9157 + sendPlayerChat1("Yes I'll help you."); + player.vampSlayer = 1; + QuestAssistant.sendStages(player); + player.nextChat = 489; + break; + case 489: + sendNpcChat4("Wonderful! You will succeed.,", + "I'm sure of it you are very brave to take this on.", + "But you should speak to my friend Harlow before you,", + "do anything else.", player.talkingNpc, "Morgan"); + player.nextChat = 490; + break; + case 490: + sendPlayerChat1("Who is this harlow?"); + player.nextChat = 491; + break; + case 491: + sendNpcChat4("He is a retired vampire slayer!,", + "I met him when i was a missionaire, long ago.", + "He will be able to advise you on the best methods to,", + "vanquish the vampire.", player.talkingNpc, "Morgan"); + player.nextChat = 492; + break; + case 492: + sendPlayerChat2("You already know a vampire slayer?", + "What do you need me for?"); + player.nextChat = 493; + break; + case 493: + sendNpcChat3( + "Harlow is... past his prime.. He's seen too many evil things in", + "his life, and, to forget that, he drinks himself into,", + "oblivion. I fear he will slayer vampires no more.", + player.talkingNpc, "Morgan"); + player.nextChat = 494; + break; + case 494: + sendPlayerChat1("Where can i find this Harlow?"); + player.nextChat = 495; + break; + case 495: + sendNpcChat4( + "He spends his time at the Blue Moon Inn, located in,", + "Varrock. If you enter Varrock from the south it is,", + "the second building on your right. I'm sure,", + "it's filled with lively people, so you shouldn't miss it.", + player.talkingNpc, "Morgan"); + player.nextChat = 496; + break; + case 496: + sendPlayerChat1("Okay, I'll go find Harlow."); + player.nextChat = 497; + break; + case 497: + sendNpcChat1("May Saradomin protect you, my friend!", + player.talkingNpc, "Morgan"); + player.nextChat = 0; + break; + case 498: + sendNpcChat1("Buy me a drink please.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 499; + break; + case 499: + sendOption4("No you've had enough.", + "Are you Dr Harlow, the famous vampire slayer?", + "You couldn't possibly be Dr Harlow, your just a drunk.", + "Never mind."); + player.dialogueAction = 31; + break; + case 500:// 9178 + sendPlayerChat1("No you've had enough."); + player.nextChat = 0; + break; + case 501:// 9180 + sendPlayerChat1("You couldn't possibly be Dr Harlow, your just a drunk."); + player.nextChat = 0; + break; + case 502:// 9179 + sendPlayerChat1("Are you Dr harlow, the famous vampire Slayer?"); + player.nextChat = 503; + break; + case 503: + sendNpcChat1("Dependish whose is ashking.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 504; + break; + case 504: + sendPlayerChat2("Your friend Morgan sent me.", + "He said you could teach me how to slay a vampire."); + player.nextChat = 505; + break; + case 505: + sendNpcChat2("Shure I can teach you.", + "I wash the best vampire shhlayer ever.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 506; + break; + case 506: + sendNpcChat1("Buy me a beer and I'll teach you.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 507; + break; + case 507: + sendPlayerChat2( + "Your good friend Morgan is living in fear of a vampire,", + "and all you think about is beer?"); + player.nextChat = 508; + break; + case 508: + sendNpcChat1("Buy ush a drink anyway.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 509; + break; + case 509: + if (player.getItemAssistant().playerHasItem(1917, 1)) { + sendPlayerChat1("Okay, here you go."); + player.getItemAssistant().deleteItem2(1917, 1); + player.nextChat = 510; + } else { + sendPlayerChat1("Okay, let me get one."); + player.nextChat = 0; + } + break; + case 510: + sendNpcChat1("Cheersh, matey.", player.talkingNpc, "Doctor Harlow"); + player.vampSlayer = 2; + player.nextChat = 511; + break; + case 511: + sendPlayerChat1("So tell me how to kill vampires then."); + player.nextChat = 512; + break; + case 512: + sendNpcChat1( + "Yes, yes, vampires, I was very good at killing em once.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 513; + break; + case 513: + sendNpcChat2("Vampire slaying is not to be undertaken lighty.", + "You must go in prepared, or you will die.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 514; + break; + case 514: + sendNpcChat1("*Sigh*", player.talkingNpc, "Doctor Harlow"); + player.nextChat = 515; + break; + case 515: + sendNpcChat3( + "A stake is an essential tool for any vampire slayer. The,", + "stake must be used in the final blow againt the vampire.", + "Or his dark magic will regenerate him to full health.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 516; + break; + case 516: + sendNpcChat1("I always carry a spare, so you can have one.", + player.talkingNpc, "Doctor Harlow"); + player.getItemAssistant().addOrDropItem(1549, 1); + player.nextChat = 517; + break; + case 517: + sendNpcChat2( + "You'll need a special hammer as well, to drive it in in", + "properly.", player.talkingNpc, "Doctor Harlow"); + player.nextChat = 518; + break; + case 518: + sendNpcChat1("Hmm, I think i have a spare hammer you can have.", + player.talkingNpc, "Doctor Harlow"); + player.getItemAssistant().addOrDropItem(2347, 1); + player.vampSlayer = 3; + player.nextChat = 519; + break; + case 519: + sendNpcChat2("One last thing. It's wise to carry garlic with you,", + "vampires are slightly weakened if they can smell garlic.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 520; + break; + case 520: + sendNpcChat4("Garlic is pretty common,", + "I know I always advised Morgan to keep a supply,", + "so you might be able to get some from him.", + "If not, I know they it is in Port Sarim.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 521; + break; + case 521: + sendPlayerChat2("Okay, So those are the supplies I need", + "but how do I acctually kill him?"); + player.nextChat = 522; + break; + case 522: + sendNpcChat1("You are a eager one.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 523; + break; + case 523: + sendNpcChat4("Killing a vampire is D A N G E R O U S!", + "Never forget that. Go in prepared", + "Understand you may die.", + "It's a risk we all take in the buisness.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 524; + break; + case 524: + sendNpcChat2("I've seen many fine men and women,", + "die at the hands of vampires.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 525; + break; + case 525: + sendNpcChat4( + "Enter the vampire's lair and attempt to open the coffin.", + "He should be asleep in there, so try to use the stake on,", + "him. As you're new at this you'll,", + "probably just wake him up and the real fight begins.", + player.talkingNpc, "Doctor Harlow"); + player.nextChat = 526; + break; + case 526: + sendNpcChat3("Fight him until he's nearly dead, and,", + "when the moment is right. Stake him through the heart", + "and hammer it in.", player.talkingNpc, "Doctor Harlow"); + player.nextChat = 527; + break; + case 527: + sendNpcChat3("It's gruesome, but it's the only way.", + "Once he's dead speak to morgan so", + "he can notify the village.", player.talkingNpc, + "Doctor Harlow"); + player.nextChat = 528; + break; + case 528: + sendPlayerChat1("Thank you!"); + player.nextChat = 0; + break; + case 529: + sendPlayerChat1("I killed the vampire!"); + player.nextChat = 530; + break; + case 530: + sendNpcChat1("Congratulations! You have saved the village.", + player.talkingNpc, "Morgan"); + player.nextChat = 3194; + break; + case 531: + if (player.getItemAssistant().playerHasItem(1549)) { + sendPlayerChat1("I still need to kill the vampire."); + player.nextChat = 0; + } else if (!player.getItemAssistant().playerHasItem(1549) && player.vampSlayer == 3) { + player.getItemAssistant().addOrDropItem(1549, 1); + sendPlayerChat1("Thank you, I will be more careful next time."); + player.nextChat = 0; + } + break; + case 532: + sendNpcChat1("What could you want with an old woman like me?", + player.talkingNpc, "Hetty"); + player.nextChat = 533; + break; + case 533: + sendOption2("I am in search of a quest", + "I've heard that you are a witch"); + player.dialogueAction = 74; + break; + case 534: // 9157 + sendPlayerChat1("I am in search of a quest."); + player.nextChat = 536; + break; + case 535: // 9158 + sendNpcChat1("Yes I am...", player.talkingNpc, "Hetty"); + player.nextChat = 0; + break; + case 536: + sendNpcChat2("Would you like to become more proficient in the", + "dark arts?", player.talkingNpc, "Hetty"); + player.nextChat = 537; + break; + case 537: + sendOption3("Yes help me become one with my darker side.", + "No I have my principles and hour.", + "What, you mean improve my magic?"); + player.dialogueAction = 58; + break; + case 538:// 9168 + sendPlayerChat1("No I have my principles and hour."); + player.nextChat = 0; + break; + case 539:// 9169 + sendPlayerChat1("What, you mean improve my magic?"); + player.nextChat = 0; + break; + case 540:// 9167 + sendPlayerChat1("Yes help me become one with my darker side."); + player.nextChat = 541; + break; + case 541: + sendNpcChat2( + "Ok, I'm going to make a potion to help bring out your", + "darker self.", player.talkingNpc, "Hetty"); + player.nextChat = 542; + break; + case 542: + sendNpcChat1("You will need certain ingredients.", + player.talkingNpc, "Hetty"); + player.nextChat = 543; + break; + case 543: + sendPlayerChat1("What do I need?"); + player.nextChat = 544; + break; + case 544: + sendNpcChat2("You need an eye of newt, a rat's tail, an onion...", + "Oh and a peice of burnt mean.", player.talkingNpc, "Hetty"); + player.nextChat = 545; + break; + case 545: + sendPlayerChat1("Great, I'll go and get them."); + player.witchspot = 1; + QuestAssistant.sendStages(player); + player.nextChat = 0; + break; + case 546: + sendNpcChat1("So have you found the things for my potion?", + player.talkingNpc, "Hetty"); + player.nextChat = 547; + break; + case 547: + if (player.getItemAssistant().playerHasItem(221, 1) + && player.getItemAssistant().playerHasItem(300, 1) + && player.getItemAssistant().playerHasItem(2146, 1)) { + sendPlayerChat1("Yes I have everything!"); + player.witchspot = 2; + player.nextChat = 550; + } else { + sendPlayerChat1("No I still need to keep looking."); + player.nextChat = 0; + } + break; + case 548: + sendPlayerChat1("Yes I have everything!"); + player.witchspot = 2; + player.nextChat = 550; + break; + case 549: + sendPlayerChat1("No I still need to keep looking."); + player.nextChat = 0; + break; + case 550: + sendNpcChat1("Excellent can I have them?", player.talkingNpc, + "Hetty"); + player.nextChat = 551; + break; + case 551: + if (player.getItemAssistant().playerHasItem(221, 1) + && player.getItemAssistant().playerHasItem(300, 1) + && player.getItemAssistant().playerHasItem(2146, 1)) { + sendStatement4( + "You pass the ingredients to Hetty and she puts them all into her,", + "Cauldron.", + "Hetty closes her eyes and begins to chant.", + "The caludron bubbles mysteriously."); + player.getItemAssistant().deleteItem2(221, 1); + player.getItemAssistant().deleteItem2(300, 1); + player.getItemAssistant().deleteItem2(2146, 1); + player.nextChat = 552; + } else { + sendPlayerChat1("I don't have them anymore."); + player.nextChat = 0; + } + break; + case 552: + sendPlayerChat1("Well, is it ready?"); + player.nextChat = 553; + break; + case 553: + sendNpcChat1("Ok, now drink from the cauldron.", player.talkingNpc, + "Hetty"); + player.nextChat = 0; + break; + case 554: + sendNpcChat1("Arr, Matey!", player.talkingNpc, "Redbeard Frank"); + player.nextChat = 555; + break; + case 555: + sendOption2("I'm in search of treasure.", "Arr!"); + player.dialogueAction = 71; + break; + case 556:// 9157 + sendPlayerChat1("I'm in search of treasure."); + player.nextChat = 557; + break; + case 557: + sendNpcChat2( + "Arr, trasure you be after eh?", + "Well I might be able to tell you where to find some... For a price...", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 558; + break; + case 558: + sendPlayerChat1("What sort of price?"); + player.nextChat = 559; + break; + case 559: + sendNpcChat2( + "Well for example if you can get me a bottle of rum..", + "Not just any rum mind...", player.talkingNpc, + "Redbeard Frank"); + player.nextChat = 560; + break; + case 560: + sendNpcChat2("I'd like some rum made on Karamja Island.", + "There's no rum like Karamja Rum!", player.talkingNpc, + "Redbeard Frank"); + player.nextChat = 561; + break; + case 561: + sendOption2("Ok, I will bring you some rum.", "Not right now."); + player.dialogueAction = 72; + break; + case 562:// 9158 + sendPlayerChat1("Not right now."); + player.nextChat = 0; + break; + case 563:// 9157 + sendPlayerChat1("Ok, I will bring you some rum."); + player.nextChat = 564; + break; + case 564: + sendNpcChat1( + "Yer a saint, although it'll take a miracle to get it off Karamja.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 565; + break; + case 565: + sendPlayerChat1("What do you mean?"); + player.nextChat = 566; + break; + case 566: + sendNpcChat3( + "The customs office has been clampin' down on the export of spirits. ", + "You seem like a resourceful young lad,", + " I'm sure ye'll be able to find a way to slip the stuff past them.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 567; + break; + case 567: + sendPlayerChat1("Well, I'll give it a shot."); + player.nextChat = 568; + break; + case 568: + sendNpcChat1("Arr, that's the spirit!", player.talkingNpc, + "Redbeard Frank"); + player.nextChat = 0; + player.pirateTreasure = 1; + QuestAssistant.sendStages(player); + break; + case 569: + if (player.pirateTreasure == 2 + && player.getItemAssistant().playerHasItem(431, 1)) { + sendNpcChat1("Arr, Matey!", player.talkingNpc, "Redbeard Frank"); + player.nextChat = 570; + } else { + sendPlayerChat1("No I still need to get some rum."); + player.nextChat = 0; + } + break; + case 570: + sendNpcChat1("Have ye brought some rum for yer ol' mate Frank?", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 571; + break; + case 571: + if (player.getItemAssistant().playerHasItem(431, 1)) { + sendPlayerChat1("Yes I've got some."); + player.nextChat = 572; + } else { + sendPlayerChat1("No I still need to get it."); + player.nextChat = 0; + } + break; + case 572: + sendNpcChat2( + "Now a deal's a deal, I'll tell ye about the treasure.", + "I used to server under a pirate captain called One-Eyed Hector.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 573; + break; + case 573: + sendNpcChat2( + "Hector were very successful and became very rich.", + "But about a year ago we were boarded by the Customs and Excise Agents.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 574; + break; + case 574: + sendNpcChat2("Hector were killed along with many of the crew,", + "I were one of the few to escape and I escaped with this.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 575; + break; + case 575: + if (player.getItemAssistant().playerHasItem(431, 1)) { + sendStatement("Frank happily takes the rum... and hands you a key"); + player.getItemAssistant().addOrDropItem(432, 1); + player.getItemAssistant().deleteItem2(431, 1); + player.nextChat = 576; + } else { + sendPlayerChat1("I still need to get some rum."); + player.nextChat = 0; + } + break; + case 576: + sendNpcChat2( + "This be Hector's key. ", + "I belive it opens his chest in his old room in the Blue Moon Inn in Varrock.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 577; + break; + case 577: + sendNpcChat1("With any luck his treasure will be in there.", + player.talkingNpc, "Redbeard Frank"); + player.nextChat = 578; + break; + case 578: + sendOption2("Ok thanks, I'll go and get it.", + "So why didn't you ever get it?"); + player.dialogueAction = 73; + break; + case 579:// 9157 + sendPlayerChat1("Ok thanks, I'll go and get it."); + player.pirateTreasure = 3; + player.nextChat = 0; + break; + case 580:// 9158 + sendPlayerChat1("So why didn't you ever get it?"); + player.nextChat = 581; + break; + case 581: + sendNpcChat1("That's none of your buisness.", player.talkingNpc, + "Redbeard Frank"); + player.nextChat = 0; + break; + case 582:// 9158 + sendPlayerChat1("Arr!"); + player.nextChat = 0; + break; + + case 583: + if (!player.getItemAssistant().playerHasItem(995, 30)) { + sendPlayerChat1("Sorry, I don't have enough coins for that."); + player.nextChat = 0; + return; + } else { + Sailing.startTravel(player, 5); + player.getItemAssistant().deleteItem2(995, 30); + player.nextChat = 0; + } + break; + + case 584: + sendNpcChat1("The trip back to port sarim will cost you 30 coins.", + player.talkingNpc, "Sailor"); + player.nextChat = 585; + break; + + case 585: + sendOption2("Yes", "No"); + player.dialogueAction = 68; + break; + + case 586: + sendPlayerChat1("No thank you."); + player.nextChat = 0; + break; + + case 587: + sendPlayerChat1("Yes please."); + player.nextChat = 588; + break; + + case 588: + if (!player.getItemAssistant().playerHasItem(995, 30)) { + sendPlayerChat1("Sorry, I don't have enough coins for that."); + player.nextChat = 0; + return; + } else { + Sailing.startTravel(player, 6); + player.getItemAssistant().deleteItem2(995, 30); + player.nextChat = 0; + } + break; + + case 589: + player.getItemAssistant().deleteItem2(995, 30); + player.nextChat = 0; + break; + + case 590: + sendNpcChat1("Hello " + player.playerName + ".", player.talkingNpc, + "Gnome Pilot"); + player.nextChat = 591; + break; + + case 591: + sendNpcChat1("Would you like to fly my glider?", player.talkingNpc, + "Gnome Pilot"); + player.nextChat = 592; + break; + + case 592: + sendOption2("Yes", "No"); + player.dialogueAction = 130; + break; + + case 593: + sendPlayerChat1("No thank you."); + player.nextChat = 0; + break; + + case 594: + sendPlayerChat1("Yes please."); + player.nextChat = 595; + break; + + case 595: + player.gliderOpen = true; + player.getPlayerAssistant().showInterface(802); + break; + + case 596: + sendNpcChat2("You didn't participate enough to take down", + "You've gain less points", player.talkingNpc, "Void Knight"); + player.nextChat = 0; + break; + case 597: + sendNpcChat3("You couldn't take down all the portals in time.", + "Please try harder next time, or ask more", + "people to join your game.", player.talkingNpc, + "Void Knight"); + player.nextChat = 0; + break; + case 598: + sendNpcChat3("Congratulations " + player.playerName + + "! you have taken", + "down all the portals while keeping the Knight alive", + "please accept this reward from us.", player.talkingNpc, + "Void Knight"); + player.getActionSender().sendMessage( + "You have won the Pest Control game!"); + player.nextChat = 0; + break; + case 599: + sendNpcChat2("Do not let the Void Knights health reach 0!", + "You can regain health by destroying more monsters,", + player.talkingNpc, "Void Knight"); + player.nextChat = 600; + break; + case 600: + sendNpcChat1("NOW GO AND DESTROY THOSE PORTALS!!!", + player.talkingNpc, "Void Knight"); + player.nextChat = 0; + break; + case 601: + sendNpcChat1("You call yourself a Knight?", player.talkingNpc, + "Void Knight"); + player.nextChat = 0; + break; + case 602: + sendNpcChat1("Hi welcome to Pest Control.", player.talkingNpc, + "Void Knight"); + player.nextChat = 84; + break; + case 603: + sendNpcChat1("Would you like to open the Armor Shop or Exp Shop?", + player.talkingNpc, "Void Knight"); + player.nextChat = 85; + break; + case 604: + sendOption2("Void Knight Armor", "Experience Shop"); + player.dialogueAction = 85; + break; + case 605: + sendNpcChat2( + "The party room is a fun place where you can put your items", + "in the chest and drop them and have a party with your friends.", + player.talkingNpc, "Party Pete"); + player.nextChat = 0; + break; + + case 610: + sendNpcChat1("Hello. I am the squire to Sir Vyvin.", player.talkingNpc, "Squire"); + player.nextChat = 611; + break; + case 611: + sendOption2("And how is life as a squire?", "Wouldn't you prefer to be a squire for me?"); + player.dialogueAction = 181;/*DIALOGUE ACTION*/ + break; + case 612: + sendPlayerChat1("And how is life as a squire?"); + player.nextChat = 613; + break; + case 613: + sendNpcChat3("Well, Sir Vyvin is a good guy to work for, however,", "I'm in a spot of trouble today. I've gone and lost Sir", "Vyvin's sword!", player.talkingNpc, "Squire"); + player.nextChat = 614; + break; + case 614: + sendOption3("Do you know where you lost it?", "I can make a new sword if you like...", "Is he angry?"); + player.dialogueAction = 182;/*DIALOGUE ACTION*/ + break; + case 615: + sendPlayerChat1("I can make a new sword if you like..."); + player.nextChat = 616; + break; + case 616: + sendNpcChat2("Thanks for the offer. I'd be surprised if you could", "though.", player.talkingNpc, "Squire"); + player.nextChat = 617; + break; + case 617: + sendNpcChat4("The thing is, this sword is a family heirloom. It has been", "passed down through Vyvin's family for five", "generations! It was originally made by the Imacando", "dwarves, who were", player.talkingNpc, "Squire"); + player.nextChat = 618; + break; + case 618: + sendNpcChat2("a particularly skilled tribe of dwarven smiths.", "I doubt anyone could make it in the style they do.", player.talkingNpc, "Squire"); + player.nextChat = 619; + break; + case 619: + sendOption2("So would these dwarves make another one?", "Well I hope you find it soon."); + player.dialogueAction = 183;/*DIALOGUE ACTION*/ + break; + case 620: + sendPlayerChat1("So would these dwarves make another one?"); + player.nextChat = 621; + break; + case 621: + sendNpcChat4("I'm not a hundred percent sure the Imacando tribe", "exists anymore. I should think Reldo, the palace", "librarian will know; he has done a lot of", "research on the races of Runescape.", player.talkingNpc, "Squire"); + player.nextChat = 622; + break; + case 622: + sendNpcChat3("I don't suppose you could try and track down the", "Imcando dwarves for me? I've got so much work to", "do...", player.talkingNpc, "Squire"); + player.nextChat = 623; + break; + case 623: + sendOption2("Ok, I'll give it a go.", "No, I've got lots of mining work to do."); + player.dialogueAction = 184;/*DIALOGUE ACTION*/ + break; + case 624: + sendPlayerChat1("Ok, I'll give it a go."); + player.knightS = 1; + QuestAssistant.sendStages(player); + player.nextChat = 625; + break; + case 625: + sendNpcChat2("Thank you very much! As I say, the best place to start", "should be with Reldo...", player.talkingNpc, "Squire"); + player.nextChat = 0; + break; + + // reldo starts here + case 626: + sendNpcChat1("Hello stranger.", player.talkingNpc, "Reldo"); + player.nextChat = 630; + break; + case 627: + sendOption3("Do you have anything to trade?", "What do you do?", "What do you know about the Imcando Dwarves?"); + player.dialogueAction = 185;/*DIALOGUE ACTION*/ + break; + case 628: + sendNpcChat1("I work here as a librarian.", player.talkingNpc, "Reldo"); + player.nextChat = 0; + break; + case 629: + sendNpcChat1("I do not have anything to trade, sorry.", player.talkingNpc, "Reldo"); + player.nextChat = 0; + break; + case 630: + if (player.knightS == 1) { + sendPlayerChat1("What do you know about the Imcando dwarves?"); + player.nextChat = 631; + } else { + sendNpcChat1("You are not on this part of the Knights Sword quest.", player.talkingNpc, "Reldo"); + player.nextChat = 0; + } + break; + case 631: + sendNpcChat1("The imcando dwarves, you say?", player.talkingNpc, "Reldo"); + player.nextChat = 632; + break; + case 632: + sendNpcChat3("Ah yes... for many hundreds of years they were the", "world's most skilled smiths. They used secret smithing", "knowledge passed down from generation to generation.", player.talkingNpc, "Reldo"); + player.nextChat = 633; + break; + case 633: + sendNpcChat3("Unfortunately, about century ago, the once thriving", "race was wiped out during the barbarian invasions of", "that time.", player.talkingNpc, "Reldo"); + player.nextChat = 634; + break; + case 634: + sendPlayerChat1("So are there any Imcando left at all?"); + player.nextChat = 635; + break; + case 635: + sendNpcChat3("I believe a few of them survived, but with the bulk of", "their population destroyed their numbers have dwindled", "even further.", player.talkingNpc, "Reldo"); + player.nextChat = 636; + break; + case 636: + sendNpcChat3("I believe I remember a couple living in Asgarnia near", "the cliffs on the Asgarnian southern peninsula, but they", "DO tend to keep to themselves.", player.talkingNpc, "Reldo"); + player.nextChat = 637; + break; + case 637: + sendNpcChat4("They tend not to tell people they're the", "descendents of the Imcando, which is why people think", "that the tribe has died out totally, but you may well", "have more luck talking to them if you bring them some", player.talkingNpc, "Reldo"); + player.nextChat = 639; + break; + case 639: + sendNpcChat1("redberry pie. They REALLY like redberry pie.", player.talkingNpc, "Reldo"); + player.knightS = 2; + player.nextChat = 0; + break; + + // start thurgo + case 640: + if (player.knightS == 2) { + if (player.getItemAssistant().playerHasItem(2325, 1)) { + sendPlayerChat1("Hello. Are you an Imcando dwarf?"); + player.nextChat = 641; + } else if (!player.getItemAssistant().playerHasItem(2325, 1)) { + sendNpcChat1("I am not interested in talking to you right now.", player.talkingNpc, "Thurgo"); + player.nextChat = 0; + } + } + break; + + case 641: + sendNpcChat1("Maybe. Who wants to know?", player.talkingNpc, "Thurgo"); + player.nextChat = 642; + break; + + case 642: + sendPlayerChat1("Would you like some redberry pie?"); + player.nextChat = 644; + break; + + case 644: + sendStatement("You see Thurgo's eyes light up."); + player.nextChat = 645; + break; + + case 645: + sendNpcChat2("I'd never say no to a redberry pie! They're GREAT", "stuff!", player.talkingNpc, "Thurgo"); + player.nextChat = 646; + break; + case 646: + if (player.getItemAssistant().playerHasItem(2325, 1)) { + sendStatement2("You hand over the pie. Thurgo eats the pie. Thurgo pats his", "stomach."); + player.getItemAssistant().deleteItem2(2325, 1); + player.nextChat = 647; + } else { + sendPlayerChat1("I don't have pie anymore."); + player.nextChat = 0; + } + break; + case 647: + sendNpcChat2("By Guthix! THAT was a good pie! Anyone who makes", "pie like THAT has got to be alright!", player.talkingNpc, "Thurgo"); + player.knightS = 3; + player.nextChat = 0; + break; + case 648: + sendPlayerChat1("Can you make a special sword?"); + player.nextChat = 649; + break; + case 649: + sendNpcChat2("Well, after bringing me my favorite food I guess I", "should give it a go. What sort of sword is it?", player.talkingNpc, "Thurgo"); + player.nextChat = 650; + break; + case 650: + sendPlayerChat4("I need you to make a sword for one of Falador's", "knights. He had one which was passed down through five", "generations, but his squire lost it. So we need an", "identical one to replace it."); + player.nextChat = 651; + break; + case 651: + sendNpcChat2("A knight's sword eh? Well I'd need to know exactly", "how it looked before I could make a new one.", player.talkingNpc, "Thurgo"); + player.nextChat = 652; + break; + case 652: + sendNpcChat3("All the Faladorian knights used to have sword with", "unique designs according to their position. Could you bring me", "a picture or something?", player.talkingNpc, "Thurgo"); + player.nextChat = 653; + break; + case 653: + sendPlayerChat1("I'll go ask his squire and see if I can find one."); + player.knightS = 4; + player.nextChat = 0; + break; + // back to squire + case 654: + sendNpcChat1("So how are you doing getting the sword?", player.talkingNpc, "Squire"); + player.nextChat = 655; + break; + case 655: + sendPlayerChat2("I've found an Imcando dwarf but he needs a picture of", "the sword before he can make it."); + player.nextChat = 656; + break; + case 656: + sendNpcChat3("A picture eh? Hmmm.... The only one I can think of is", "in a small portrait of Sir Vyvin's father... Sir Vyvin", "keeps it in a cupboard in his room I think.", player.talkingNpc, "Squire"); + player.nextChat = 657; + break; + case 657: + sendPlayerChat1("Ok, I'll try and get that then."); + player.nextChat = 658; + break; + case 658: + sendNpcChat2("Please don't let him catch you! He MUSTN'T know", "what happened!", player.talkingNpc, "Squire"); + player.knightS = 5; + player.nextChat = 0; + break; + case 659: + sendStatement("You find a small portrait in here which you take."); + player.getItemAssistant().addItem(666, 1); + player.nextChat = 0; + break; + // back to thurgo + case 660: + sendPlayerChat2("I have found a picture of the sword I would like you to", "make."); + player.nextChat = 661; + break; + case 661: + sendStatement("You give the portrait to Thurgo. Thurgo studies the portrait."); + player.getItemAssistant().deleteItem2(666, 1); + player.nextChat = 662; + break; + case 662: + sendNpcChat2("Ok. You'll need to get me some stuff in order for me", "to make this.", player.talkingNpc, "Thurgo"); + player.nextChat = 663; + break; + case 663: + sendNpcChat4("I'll need two iron bars to make the sword to start with.", "I'll also need an ore called blurite. It's useless for", "making actual weapons for fighting with except", "crossbows, but I'll need some as decoration for the hilt.", player.talkingNpc, "Thurgo"); + player.nextChat = 664; + break; + case 664: + sendNpcChat2("It is a fairly rare sort of ore... The only place I know", "where to get it is under the cliff here...", player.talkingNpc, "Thurgo"); + player.nextChat = 665; + break; + case 665: + sendNpcChat1("But it is guarded by a very powerful ice giant.", player.talkingNpc, "Thurgo"); + player.nextChat = 666; + break; + case 666: + sendNpcChat3("Most of the rocks in that cliff are pretty useless, and", "don't contain much of anything, but there's", "DEFINITELY some blurite in there.", player.talkingNpc, "Thurgo"); + player.nextChat = 667; + break; + case 667: + sendNpcChat2("You'll need a little bit of mining experience to be able to", "find it.", player.talkingNpc, "Thurgo"); + player.knightS = 7; + player.nextChat = 668; + break; + case 668: + sendPlayerChat1("Ok. I'll go and find them then."); + player.nextChat = 0; + break; + + // after getting the materials + case 669: + sendNpcChat1("How are you doing finding those sword materials?", player.talkingNpc, "Thurgo"); + player.nextChat = 670; + break; + case 670: + if (player.getItemAssistant().playerHasItem(2351, 2) && player.getItemAssistant().playerHasItem(668, 1)) { + sendPlayerChat1("I have them right here."); + player.nextChat = 671; + } else { + sendPlayerChat1("I'm still working on it."); + player.nextChat = 0; + } + break; + case 671: + if (player.knightS == 7) { + sendStatement2("You give the blurite ore and two bars to Thurgo. Thurgo starts", "to make the sword. Thurgo hands you a sword."); + player.getItemAssistant().deleteItem2(2351, 1); + player.getItemAssistant().deleteItem2(2351, 1); + player.getItemAssistant().deleteItem2(668, 1); + player.knightS = 8; + player.getItemAssistant().addItem(667, 1); + player.nextChat = 672; + } else if (player.knightS == 8) { + sendStatement2("You give the blurite ore and two bars to Thurgo. Thurgo starts", "to make the sword. Thurgo hands you a sword."); + player.getItemAssistant().deleteItem2(2351, 1); + player.getItemAssistant().deleteItem2(2351, 1); + player.getItemAssistant().deleteItem2(668, 1); + player.getItemAssistant().addItem(667, 1); + player.nextChat = 672; + } else { + sendNpcChat1("You are not on this part of the quest right now.", player.talkingNpc, "Thurgo"); + player.nextChat = 0;/*DIALOGUE ACTION*/ + } + break; + case 672: + sendPlayerChat1("Thank you very much!"); + player.nextChat = 673; + break; + + case 673: + sendNpcChat1("Just remember to call in with more pie some time!", player.talkingNpc, "Thurgo"); + player.nextChat = 0; + break; + + case 674: + if(player.getItemAssistant().playerHasItem(667, 1)) { + sendNpcChat1("You should bring the Squire that sword.", player.talkingNpc, "Thurgo"); + player.nextChat = 0; + } else { + sendNpcChat1("Did the sword work?", player.talkingNpc, "Thurgo"); + player.nextChat = 675; + } + break; + + case 675: + sendPlayerChat2("I've seemed to have lost my sword.", "Can you make me another?"); + player.nextChat = 676; + break; + + case 676: + if (player.getItemAssistant().playerHasItem(2351, 2) && player.getItemAssistant().playerHasItem(668, 1)){ + sendNpcChat1("Sure, just let me see that blurite, and iron bars.", player.talkingNpc, "Thurgo"); + player.nextChat = 677; + } else { + sendNpcChat2("Sure, but you need to get more", "blurite ore, and iron bars.", player.talkingNpc, "Thurgo"); + player.nextChat = 0; + } + break; + case 677: + sendStatement("You give the bluerite ore and two bars to Thurgo"); + player.getItemAssistant().deleteItem(2351, 1); + player.getItemAssistant().deleteItem(2351, 1); + player.getItemAssistant().deleteItem(668, 1); + player.nextChat = 678; + break; + case 678: + sendStatement("Thurgo starts to make the sword"); + player.nextChat = 679; + break; + case 679: + sendStatement("Thurgo hands you the sword"); + player.getItemAssistant().addItem(667, 1); + player.nextChat = 680; + break; + case 680: + sendPlayerChat1("Thank you very much!"); + player.nextChat = 681; + break; + case 681: + sendNpcChat1("Just remember to call in with more pie some time!", player.talkingNpc, "Thurgo"); + player.nextChat = 0; + break; + + // back to squire + case 682: + sendPlayerChat1("I have retrieved your sword for you."); + player.nextChat = 683; + break; + case 683: + sendNpcChat2("Thank you, thank you, thank you! I was seriously", "worried I would have to own up to Sir Vyvin!", player.talkingNpc, "Squire"); + player.nextChat = 684; + break; + case 684: + sendStatement("You give the sword to the squire."); + player.getItemAssistant().deleteItem2(667, 1); + player.knightS = 8; + player.nextChat = 685; + break; + case 685: + QuestRewards.knightsReward(player); + break; + + case 908: + sendPlayerChat1("Hello there " + NpcHandler.getNpcListName(player.talkingNpc) + "!"); + player.nextChat = 909; + break; + case 909: + sendNpcChat1("Meeeooow.", npcId, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + case 910: + sendOption3("Pet", "Catch Rat", "Shoo Away"); + player.dialogueAction = 222; + player.nextChat = 0; + break; + case 911: + sendStatement("You pet your cat."); + // Server.npcHandler.startAnimation(9166, client.rememberNpcIndex); + // client.startAnimation(9087); + NpcHandler.npcs[player.rememberNpcIndex].forceChat("Meow!"); + player.nextChat = 0; + break; + case 912: + player.getDialogueHandler().sendStatement( + "Catching rats is currently disabled."); + player.nextChat = 0; + break; + case 913: + sendStatement("You shoo your cat away."); + if (NpcHandler.npcs[player.rememberNpcIndex].npcType >= 761 + && NpcHandler.npcs[player.rememberNpcIndex].npcType >= 766) + // client.ratsCaught = 0; + NpcHandler.npcs[player.rememberNpcIndex].absX = 0; + NpcHandler.npcs[player.rememberNpcIndex].absY = 0; + NpcHandler.npcs[player.rememberNpcIndex] = null; + player.summonId = 0; + player.hasNpc = false; + player.nextChat = 0; + break; + + case 1000: + sendNpcChat1("Is it nice and tidy round the back now?", + player.talkingNpc, "Wydin"); + player.pirateTreasure = 2; + player.nextChat = 1001; + break; + case 1001: + sendOption4("Yes, can I work out front now?", + "Yes, are you going to pay me yet?", + "No it's a complete mess", "Can I buy something please?"); + player.dialogueAction = 69; + break; + case 1002:// 9179 + sendNpcChat1("Not yet.", player.talkingNpc, "Wydin"); + player.nextChat = 0; + break; + case 1003:// 9180 + sendPlayerChat1("No it's a complete mess"); + player.nextChat = 0; + break; + case 1004:// 9181 + sendPlayerChat1("Can I buy something please?"); + player.getShopAssistant().openShop(34); + player.nextChat = 0; + break; + case 1005:// 9178 + sendPlayerChat1("Yes can I work out front now?"); + player.nextChat = 1006; + break; + case 1006: + sendNpcChat1("No I'm the person who works here.", + player.talkingNpc, "Wydin"); + player.nextChat = 0; + break; + case 1007: + sendStatement("You find a hole. Would you like to enter it?"); + player.nextChat = 1008; + break; + case 1008: + sendOption2("Yes", "No"); + player.dialogueAction = 70; + break; + case 1009: + sendPlayerChat1("Yes."); + player.getPlayerAssistant().movePlayer(1761, 5192, 0); + player.nextChat = 0; + break; + case 1011: + sendNpcChat2("How dare you try to take dangerous equipment?", + "Come back when you have left it all behind.", + player.talkingNpc, "Monk of Entrana"); + player.nextChat = 0; + break; + case 1012: + sendNpcChat2("You even defeated TzTok-Jad, I am most impressed!", + "Please accept this gift as a reward.", player.talkingNpc, + "Tzhaar-Mej-Tal"); + player.nextChat = 0; + break; + + /** Bank Settings **/ + case 1013: + if (SkillHandler.isSkilling(player)) { + return; + } + sendNpcChat1("Good day. How may I help you?", player.talkingNpc, "Banker"); + player.nextChat = 1014; + break; + case 1014:// bank open done, this place done, settings done, to do + // delete pin + sendOption3("I'd like to access my bank account, please.", "I'd like to check my my P I N settings.", "What is this place?"); + player.dialogueAction = 251; + break; + /** What is this place? **/ + case 1015: + sendPlayerChat1("What is this place?"); + player.nextChat = 1016; + break; + case 1016: + sendNpcChat2("This is the bank of " + Constants.SERVER_NAME + ".", "We have many branches in many towns.", player.talkingNpc, "Banker"); + player.nextChat = 0; + break; + /** + * Note on P I N. In order to check your "Pin Settings. You must have + * enter your Bank Pin first + **/ + /** I don't know option for Bank Pin **/ + case 1017: + sendStartInfo("Since you don't know your P I N, it will be deleted in @red@3 days@bla@. If you", "wish to cancel this change, you may do so by entering your P I N", "correctly next time you attempt to use your bank.", "", "", false); + player.nextChat = 0; + break; + + case 1018: + sendPlayerChat1("Can I come through this gate?"); + player.nextChat = 1019; + break; + case 1019: + if (player.absX == 3267 || player.absX == 3268) { + sendNpcChat1("You must pay a toll of 10 gold coins to pass.", + player.talkingNpc, "Border Guard"); + player.nextChat = 1020; + } else { + sendNpcChat1("You need to be closer to the gate to use it.", player.talkingNpc, "Border Guard"); + player.nextChat = 0; + } + break; + case 1020: + sendOption3("Okay, I'll pay.", "Who does my money go to?", + "No thanks, I'll walk around."); + player.dialogueAction = 502; + break; + case 1022: + sendPlayerChat1("Who does my money go to?"); + player.nextChat = 1023; + break; + case 1023: + sendNpcChat2("The money goes to the city of Al-Kharid.", + "Will you pay the toll?", player.talkingNpc, "Border Guard"); + player.nextChat = 1024; + break; + case 1024: + sendOption2("Okay, I'll pay.", "No thanks, I'll walk around."); + player.dialogueAction = 508; + break; + case 1025: + sendPlayerChat1("No thanks, I'll walk around."); + player.nextChat = 0; + break; + + case 1026: + if (!player.getItemAssistant().playerHasItem(995, 10)) { + sendPlayerChat1("I haven't got that much."); + player.nextChat = 0; + } else { + sendPlayerChat1("Okay, I'll pay."); + player.nextChat = 1027; + } + break; + + case 1027: + player.getDialogueHandler().sendStatement( + "10 coins are removed from your inventory."); + SpecialObjects.initKharid(player, player.objectId); + player.nextChat = 0; + break; + + /* + * case 1028: client.getDialogues().sendStatement( + * "10 coins are removed from your inventory."); client.nextChat = 0; + * break; + */ + + case 1033: + sendOption2( + "I would like to skip tutorial Island and go to Mainland", + "I would like to continue"); + player.dialogueAction = 132; + break; + + case 1034: + sendNpcChat1("You have been warned, you can't go back now.", + player.talkingNpc, "Runescape Guide"); + player.getPlayerAssistant().movePlayer(3098, 3107, 0); + player.nextChat = 0; + break; + + case 1035: + sendNpcChat1("You have successfully skipped tutorial island.", + player.talkingNpc, "Runescape Guide"); + player.getPlayerAssistant().startTeleport(3222, 3218, 0, "modern"); + player.nextChat = 0; + break; + + case 1036: + sendNpcChat1("Good day to you Bwana.", player.talkingNpc, + "Saniboch"); + player.nextChat = 1037; + break; + case 1037: + sendOption4("Can I go through that door please?", + "Where does this strange entrance lead?", + "Good day to you too.", + "I'm impressed, that tree is growing on that shed."); + player.dialogueAction = 228; + break; + case 1038: + sendPlayerChat1("I'm impressed, that tree is growing on that shed."); + player.nextChat = 1039; + break; + case 1040: + sendNpcChat2("My employer tells me it is an uncommon sort of tree", + "called the Fyburglars tree.", player.talkingNpc, + "Saniboch"); + player.nextChat = 0; + break; + case 1041: + sendPlayerChat1("Good day to you too."); + player.nextChat = 0; + break; + case 1042: + sendPlayerChat1("Where does this strange entrance lead?"); + player.nextChat = 1043; + break; + case 1043: + sendNpcChat3("To a huge fearsome dungeon, populated by giants and", + "strange dogs. Adventurers come from all around to", + "explore its depths", player.talkingNpc, "Saniboch"); + player.nextChat = 1044; + break; + case 1044: + sendNpcChat2( + "I know not what lies deeper in myself, for my skills in", + "agility and woodcutting are inadequate.", + player.talkingNpc, "Saniboch"); + player.nextChat = 0; + break; + case 1045: + sendPlayerChat1("Can I go through that door please?"); + player.nextChat = 1046; + break; + case 1046: + sendNpcChat2( + "Most certainly, but I must charge you the sum of 875", + "coins first.", player.talkingNpc, "Saniboch"); + player.nextChat = 1047; + break; + case 1047: + sendOption3("Ok, here's 875 coins.", "Never mind.", + "Why is it worth the entry cost?"); + player.dialogueAction = 230; + break; + case 1048: + sendNpcChat1("You can't go in there without paying me!", + player.talkingNpc, "Saniboch"); + player.nextChat = 0; + break; + case 1049: + sendPlayerChat1("Never mind."); + player.nextChat = 0; + break; + case 1050: + sendPlayerChat1("Why is it worth the entry cost?"); + player.nextChat = 1051; + break; + case 1051: + sendNpcChat3("It leads to a huge fearsome dungeon, populated by", + "giants and strange dogs. Adventurers come from all", + "around to explore its depths.", player.talkingNpc, + "Saniboch"); + player.nextChat = 1052; + break; + case 1052: + sendNpcChat3( + "I know not what lies deeper in myself, for my skills in", + "agility and woodcutting are inadequate, but I hear tell", + "of even greater dangers deeper in.", player.talkingNpc, + "Saniboch"); + player.nextChat = 0; + break; + case 1053: + if (player.getItemAssistant().playerHasItem(995, 875)) { + sendPlayerChat1("Ok, here's 875 coins."); + player.nextChat = 1054; + } else { + sendPlayerChat1("I don't have the money at the moment."); + player.nextChat = 1057; + } + break; + case 1054: + sendStatement("You give Saniboch 875 coins."); + player.nextChat = 1055; + player.getItemAssistant().deleteItem2(995, 875); + player.hasPaidBrim = true; + break; + case 1055: + sendNpcChat2("Many thanks. You may now pass the door. May your", + "death be a glorious one!", player.talkingNpc, "Saniboch"); + player.nextChat = 0; + break; + case 1056: + sendPlayerChat1("I don't have the money at the moment."); + player.nextChat = 1057; + break; + case 1057: + sendNpcChat2( + "Well this is a dungeon for the more wealthy discerning", + "adventurer, be gone with you riff raff.", + player.talkingNpc, "Saniboch"); + player.nextChat = 1058; + break; + case 1058: + sendPlayerChat2( + "But you don't even have clothes, how can you seriously", + "call anyone riff raff"); + player.nextChat = 1059; + break; + case 1059: + sendNpcChat1("Hummph.", player.talkingNpc, "Saniboch"); + player.nextChat = 0; + break; + case 1226: + sendNpcChat2("You already have a slayer task", + "please finish it talk to me again.", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + case 1227: + sendNpcChat1( + "You already have an easier slayer task. Please finish it then talk to me again.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + case 1228: + sendNpcChat1("'Ello and what are you after then?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1229; + break; + case 1229: + sendOption4("I need another assignement.", + "Where is the location of my task?", + "I would like to view your shop.", + "I would like to cancel or remove my task."); + player.dialogueAction = 142; + break; + case 1231: + sendOption2("I want to cancel my current task.", + "I want to remove my task for ever."); + player.dialogueAction = 143; + break; + case 1232: + player.getSlayer().cancelTask(); + player.getPlayerAssistant().closeAllWindows(); + player.nextChat = 0; + break; + case 1233: + player.getSlayer().removeTask(); + player.getPlayerAssistant().closeAllWindows(); + player.nextChat = 0; + break; + case 1234: + player.getSlayer().generateTask(); + break; + case 1235: + if (player.getSlayer().hasTask()) { + sendNpcChat1("Your Slayer Task is located at " + + player.getSlayer().getLocation(player.slayerTask) + + ".", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } else { + sendNpcChat2("You don't have a slayer task", + "if you wish to get one talk to a slayer mask.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + case 1236: + player.getShopAssistant().openShop(109); + player.nextChat = 0; + break; + case 1237: + sendNpcChat2("You have been assigned " + player.taskAmount + " " + + player.getSlayer().getTaskName(player.slayerTask) + ",", + "Good luck " + player.playerName + ".", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + + case 1300: + sendNpcChat2( + "Good afternoon, sir. In need of a haircut or shave, are", + "we?", player.talkingNpc, "Hairdresser"); + player.nextChat = 1301; + break; + + case 1301: + sendOption3("A haircut, please.", "A shave, please.", + "No, thank you."); + player.dialogueAction = 1301; + break; + + case 1302:// first option + sendPlayerChat1("A haircut, please."); + player.nextChat = 1303; + break; + + case 1303: + sendNpcChat1("Certainly, sir. The fee will be 2,000 coins.", + player.talkingNpc, "Hairdresser"); + player.nextChat = 1304; + break; + + case 1304: + if (player.getItemAssistant().playerHasItem(995, 2000)) { + sendNpcChat2("Please select a hairstyle you would", + "like from this brochure.", 598, "Hairdresser"); + player.nextChat = 1305; + } else { + sendNpcChat2("It looks like you don't have 2,000 coins,", + "please revisit when you do.", 598, "Hairdresser"); + player.nextChat = 0; + } + break; + + case 1305: + player.getPlayerAssistant().showInterface(2653); // hairstyle + // interface + break; + // end of hairstyle cut. + + case 1306: // dialogue option 3 + sendPlayerChat1("No, thank you."); + player.nextChat = 1307; + break; + + case 1307: + sendNpcChat1("Very well. Come back if you change your mind.", + player.talkingNpc, "Hairdresser"); + player.nextChat = 0; + break; + // END + case 1308: // start of shaving + sendPlayerChat1("A shave, please."); + player.nextChat = 1309; + break; + + case 1309: + sendNpcChat1("Certainly, sir. The fee will be 2,000 coins.", + player.talkingNpc, "Hairdresser"); + player.nextChat = 1310; + break; + + case 1310: + if (player.getItemAssistant().playerHasItem(995, 2000)) { + sendNpcChat2("Please select a beard and color you would", + "like from this brochure.", player.talkingNpc, + "Hairdresser"); + player.nextChat = 1311; + } else { + sendNpcChat2("It looks like you don't have 2,000 coins,", + "please revisit when you do.", player.talkingNpc, + "Hairdresser"); + player.nextChat = 0; + } + break; + case 1311: + player.getPlayerAssistant().showInterface(2007); // hair/beard + // interface + player.nextChat = 0; + break; + case 1312: + sendNpcChat1( + "What sort of dye would you like? Red, yellow, or blue?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1313; + break; + case 1313: + sendOption3("Red Dye", "Yellow Dye", "Blue Dye"); + player.dialogueAction = 144; + break; + case 1314:// red 1763, yellow 1765, blue 1767 + if (player.getItemAssistant().playerHasItem(1951, 3) + && player.getItemAssistant().playerHasItem(995, 5)) { + player.getItemAssistant().deleteItem2(1951, 3); + player.getItemAssistant().addOrDropItem(1763, 1); + sendPlayerChat1("Red Dye Please."); + player.nextChat = 0; + } else { + sendNpcChat1( + "You need 5 coins and 3 redberries to make red dye.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + case 1315:// red 1763, yellow 1765, blue 1767 + if (player.getItemAssistant().playerHasItem(1957, 2) + && player.getItemAssistant().playerHasItem(995, 5)) { + player.getItemAssistant().deleteItem2(1957, 2); + player.getItemAssistant().addOrDropItem(1765, 1); + sendPlayerChat1("Yellow Dye Please."); + player.nextChat = 0; + } else { + sendNpcChat1( + "You need 5 coins and 2 onions to make yellow dye.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + case 1316:// red 1763, yellow 1765, blue 1767 + if (player.getItemAssistant().playerHasItem(1793, 2) + && player.getItemAssistant().playerHasItem(995, 5)) { + player.getItemAssistant().deleteItem2(1793, 2); + player.getItemAssistant().addOrDropItem(1767, 1); + sendPlayerChat1("Blue Dye Please."); + player.nextChat = 0; + } else { + sendNpcChat1( + "You need 5 coins and 2 woad leaves to make blue dye.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + case 1317: + sendNpcChat1("Welcome to the Guild of Master Craftsman.", + player.talkingNpc, "Master Crafter"); + player.nextChat = 0; + break; + + /* Slayer Gem */ + + case 1318: + if (player.getSlayer().hasTask()) { + sendNpcChat3( + "Hello " + player.playerName + ".", + "You currently need to kill " + + player.taskAmount + + " more " + + player.getSlayer().getTaskName( + player.slayerTask) + ".", + "in the " + + player.getSlayer().getLocation( + player.slayerTask) + ".", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have a slayer task.", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + } + break; + case 1319: + if (player.getSlayer().hasTask()) { + sendNpcChat1( + "I am " + + player.getSlayer().getSlayerMaster( + player.SlayerMaster) + ".", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have a slayer task.", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + } + break; + case 1320: + if (player.getSlayer().hasTask()) { + sendNpcChat2( + "Hello " + player.playerName + ".", + "I am located in " + + player.getSlayer().getMasterLocation( + player.SlayerMaster) + ".", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have a slayer task.", + player.talkingNpc, + NpcHandler.getNpcListName(player.SlayerMaster)); + } + break; + case 1321: + sendNpcChat1("You have " + player.slayerPoints + " slayer points nice job!", player.talkingNpc, NpcHandler.getNpcListName(player.SlayerMaster)); + player.nextChat = 0; + break; + + case 1322: + sendNpcChat2("Hello " + player.playerName + ".", "Are you interested in buying anything?", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1323; + break; + + case 1323: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 146; + break; + + case 1324: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1325: + sendPlayerChat1("Yes please."); + player.nextChat = 1326; + break; + + case 1326: + for (Shop shop : Shop.values()) { + if (shop != null) { + if (shop.getNpc() == player.talkingNpc) { + player.getShopAssistant().openShop(shop.getShop()); + RandomEventHandler.addRandom(player); + player.nextChat = 0; + } + } + } + break; + + case 1329: + sendNpcChat2("Hello " + player.playerName + ".", + "Are you interested in buying anything?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1330; + break; + + case 1330: + sendOption3("Yes please.", "No Thanks.", + "I have a frog token I would like to exchange."); + player.dialogueAction = 148; + break; + + case 1331: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1332: + sendPlayerChat1("Yes please."); + player.nextChat = 1334; + break; + + case 1333: + sendOption2("A frog mask please!", "A frog outfit, please!"); + player.dialogueAction = 149; + break; + + case 1334: + player.getShopAssistant().openShop(12); + RandomEventHandler.addRandom(player); + break; + + case 1335: + if (player.getItemAssistant().playerHasItem(6183, 1)) { + sendPlayerChat1("A frog mask please!"); + player.getItemAssistant().deleteItem2(6183, 1); + player.getItemAssistant().addOrDropItem(6188, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have any frog tokens.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1336: + if (player.getItemAssistant().playerHasItem(6183, 1) + && player.playerAppearance[0] == 0) { + sendPlayerChat1("A frog prince outfit, please!"); + player.getItemAssistant().deleteItem2(6183, 1); + player.getItemAssistant().addOrDropItem(6184, 1); + player.getItemAssistant().addOrDropItem(6185, 1); + player.nextChat = 0; + } else if (player.getItemAssistant().playerHasItem(6183, 1) + && player.playerAppearance[0] == 1) { + sendPlayerChat1("A frog princess outfit, please!"); + player.getItemAssistant().deleteItem2(6183, 1); + player.getItemAssistant().addOrDropItem(6186, 1); + player.getItemAssistant().addOrDropItem(6187, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have any frog tokens.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1337: + sendNpcChat1("Hello, would you like some rope?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1338; + break; + + case 1338: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 166; + break; + + case 1339: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1340: + sendPlayerChat1("Yes please."); + player.nextChat = 1341; + break; + + case 1341: + sendOption3("I will give you 15 coins for 1 rope.", + "I will give you 4 balls of wool for 1 rope.", + "Never mind."); + player.dialogueAction = 167; + break; + + case 1342: + sendPlayerChat1("Never mind."); + player.nextChat = 0; + break; + + case 1343: + if (player.getItemAssistant().playerHasItem(995, 15)) { + player.getItemAssistant().deleteItem2(995, 15); + player.getItemAssistant().addOrDropItem(954, 1); + sendPlayerChat1("I will give you 15 coins for 1 rope."); + player.nextChat = 0; + } else { + sendNpcChat1("You don't even have 15 coins.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1344: + if (player.getItemAssistant().playerHasItem(1759, 4)) { + player.getItemAssistant().deleteItem2(1759, 4); + player.getItemAssistant().addOrDropItem(954, 1); + sendPlayerChat1("I will give you 4 balls of wool for 1 rope."); + player.nextChat = 0; + } else { + sendNpcChat1("You don't even have 4 balls of wool.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1345: + sendNpcChat1( + "Hello, would you like to buy climbing boots for 12 gp?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1346; + break; + + case 1346: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 170; + break; + + case 1347: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1348: + if (player.getItemAssistant().playerHasItem(995, 12)) { + player.getItemAssistant().deleteItem2(995, 12); + player.getItemAssistant().addOrDropItem(3105, 1); + sendPlayerChat1("Yes please."); + player.nextChat = 0; + } else { + sendNpcChat1("You need 12 gp to buy these.", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1349: + if (player.absY > 3485 && player.absY < 3489 + && player.hasPaid != true) { + sendNpcChat2( + "Hello, are you interested in traveling up the river", + "for 50 coins?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1350; + } else if (player.hasPaid != true) { + sendNpcChat2( + "Hello, are you interested in traveling back down the river", + "for 50 coins?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1350; + } else if (player.hasPaid == true && player.absY > 3485 + && player.absY < 3489) { + sendNpcChat1( + "Hello, are you interested in a free ride up the river?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1350; + } else if (player.hasPaid == true) { + sendNpcChat1( + "Hello, are you interested in a free back down the river?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1350; + } + break; + + case 1350: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 171; + break; + + case 1351: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1352: + if (player.getItemAssistant().playerHasItem(995, 50) + && player.absY > 3485 && player.absY < 3489) { + player.getItemAssistant().deleteItem2(995, 50); + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().startTeleport(2358, 3640, 0, + "modern"); + player.hasPaid = true; + player.nextChat = 0; + } else if (player.getItemAssistant().playerHasItem(995, 50)) { + player.getItemAssistant().deleteItem2(995, 50); + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().startTeleport(2367, 3488, 0, + "modern"); + player.hasPaid = true; + player.nextChat = 0; + } else if (player.hasPaid == true && player.absY > 3485 + && player.absY < 3489) { + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().startTeleport(2358, 3640, 0, + "modern"); + } else if (player.hasPaid == true) { + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().startTeleport(2367, 3488, 0, + "modern"); + } + break; + + case 1353: + sendNpcChat1("Would you like to travel to Keldagrim?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1354; + break; + + case 1354: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 172; + break; + + case 1355: + sendPlayerChat1("Yes please."); + player.nextChat = 1357; + break; + + case 1356: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1357: + player.getPlayerAssistant().startTeleport(2827, 10214, 0, "modern"); + player.nextChat = 0; + break; + + case 1358: + sendNpcChat1("Hello, would you like some monk robes?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1359; + break; + + case 1359: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 173; + break; + + case 1360: + sendPlayerChat1("Yes please."); + player.nextChat = 1362; + break; + + case 1361: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1362: + if (player.getItemAssistant().playerHasItem(542) + || player.getItemAssistant().playerHasItem(544) + || player.playerEquipment[player.playerLegs] == 542 + || player.playerEquipment[player.playerChest] == 544) { + sendNpcChat1("You already have some monks robes", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } else { + player.getItemAssistant().addOrDropItem(542, 1); + player.getItemAssistant().addOrDropItem(544, 1); + player.nextChat = 0; + } + break; + + case 1363: + sendNpcChat4( + "You already have the slayer task of " + player.slayerTask + + " and have", + " " + player.taskAmount + " left to kill", + "are you sure you would like an easier task?", + "it will be something much simpiler than your previous task.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1364; + break; + + case 1364: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 174; + break; + + case 1365: + sendPlayerChat1("No thanks I would like to stay with my task."); + player.nextChat = 0; + break; + + case 1366: + sendPlayerChat1("Yes please I would like an easier task."); + player.nextChat = 1367; + break; + + case 1367: + player.getSlayer().generateTask(); + break; + + case 1368: + sendNpcChat2("You have been assigned " + player.taskAmount + " " + + player.getSlayer().getTaskName(player.slayerTask) + ",", + "Good luck " + player.playerName + ".", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + + case 1369: + sendNpcChat2("Hello, " + player.playerName + + " would you like to change your appearance?", "for 3k?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1370; + break; + + case 1370: + sendOption2("Yes please.", "No thanks, I'm not interested."); + player.dialogueAction = 176; + break; + + case 1371: + sendPlayerChat1("No thanks, I'm not interested."); + player.nextChat = 0; + break; + + case 1372: + if (player.getItemAssistant().playerHasItem(995, 3000)) { + sendPlayerChat1("Yes please."); + player.getPlayerAssistant().showInterface(3559); + player.canChangeAppearance = true; + player.getItemAssistant().deleteItem2(995, 3000); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough gold to do that.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 1373: + sendNpcChat2("Hello " + player.playerName + ".", + "Are you interested in buying anything?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 1374; + break; + + case 1374: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 177; + break; + + case 1375: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 1376: + sendPlayerChat1("Yes please."); + player.nextChat = 1377; + break; + + case 1377: + if (player.npcType == 537) { + player.getShopAssistant().openShop(124); + } else if (player.npcType == 536) { + player.getShopAssistant().openShop(125); + } + RandomEventHandler.addRandom(player); + player.nextChat = 0; + break; + + case 1378: + sendNpcChat2("Hello " + player.playerName + ".", + "Are you interested in buying a candle for 1k?", + player.talkingNpc, "Candle Seller"); + player.nextChat = 1379; + break; + + case 1379: + sendOption2("Yes please.", "No thank you."); + player.dialogueAction = 179; + break; + + case 1380: + if (player.getItemAssistant().playerHasItem(995, 1000)) { + sendPlayerChat1("Yes please."); + player.getItemAssistant().deleteItem2(995, 1000); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins to buy a candle.", + player.talkingNpc, "Candle Seller"); + player.nextChat = 0; + } + break; + + case 1381: + sendPlayerChat1("No thank you."); + player.nextChat = 0; + break; + + case 2995: + player.canWalkTutorial = false; + sendStatement2( + "Before you start if you would like to skip Tutorial Island,", + "now is your chance. If you skip you will be brought to mainland."); + player.nextChat = 2996; + break; + + case 2996: + sendStatement2( + "If you don't want to skip Tutorial Island you can stay here.", + "Would you like to skip Tutorial Island, or stay here?"); + player.nextChat = 2997; + break; + + case 2997: + sendOption2( + "I would like to skip Tutorial Island and go to Mainland.", + "I would like to stay here and complete Tutorial island."); + player.dialogueAction = 151; + break; + + case 2998: + sendPlayerChat1("Yes I would like to skip Tutorial Island."); + player.nextChat = 3115; + break; + + case 2999: + if (!player.getItemAssistant().playerHasItem(1549) && player.vampSlayer == 3) { + player.getItemAssistant().addOrDropItem(1549, 1); + sendPlayerChat1("Thank you, I will be more careful next time."); + player.nextChat = 0; + } + break; + + case 3000: // first part. Entering the tutorial island + player.getActionSender().chatbox(6180); // displays + // client.getPacketDispatcher().chatbox + // client.getPlayerAssistant().tutorialIslandInterface(0, 0); // + // progress bar + tutorial int + player.getActionSender().createArrow(1, 1); + chatboxText( + player, + "To start the tutorial use your left mouse button to click on the", + "" + Constants.SERVER_NAME + + " in this room. He is indicated by a flashing", + "yellow arrow above his head. If you can't see him, use your", + "keyboard's arrow keys to rotate the view.", + "@blu@Getting started"); + player.getActionSender().chatbox(6179); // displays + // client.getPacketDispatcher().chatbox + player.tutorialProgress = 0; + player.canWalkTutorial = true; + player.nextChat = 0; + break; + /* + * RS guide section + */ + case 3001: // RS GUIDE + sendNpcChat2( + "Greetings! I see you are a new arrival to the land. My", + "job is to welcome all new visitors. So welcome!", + player.talkingNpc, "Runescape Guide"); + player.nextChat = 3002; + break; + case 3002: // 2 + sendNpcChat2("You have already learned the first thing needed to", + "succeed in this world: talking to other people!", + player.talkingNpc, "Runescape Guide"); + player.nextChat = 3003; + break; + + case 3003: // 3 + sendNpcChat3( + "You will find many inhabitants of this world have useful", + "things to say to you. By clicking on them with your", + "mouse you can talk to them.", player.talkingNpc, + "Runescape Guide"); + player.nextChat = 3004; + break; + case 3004: + sendNpcChat4( + "I would also suggest reading through some of the", + "supporting information on the website. There you can", + "find the Knowledge Base, which contains all the", + "additional information you're ever likely to need. It also", + player.talkingNpc, "Runescape Guide"); + player.nextChat = 3005; + break; + case 3005: + sendNpcChat2("contains maps and helpful tips to help you on your", + "journey.", player.talkingNpc, "Runescape Guide"); + player.nextChat = 3006; + break; + + case 3006:// show tab wrentch + clearChatBoxText(player); // call this every time there is new + // client.getPacketDispatcher().chatboxtext + // coming up + sendNpcChat2( + "You will notice a flashing icon of a wrench, please click", + "on this to continue the tutorial.", player.talkingNpc, + "Runescape Guide"); + player.getActionSender().setSidebarInterface(11, 904); // wrench + // tab + player.getActionSender().flashSideBarIcon(-11); + player.nextChat = 3007; + break; + + case 3007: // Player controls + player.getPlayerAssistant().removeAllWindows(); + chatboxText( + player, + "Please click on the flashing wrench icon found at the bottom", + "right of your screen. This will display your player controls.", + "", "", "Player controls"); + player.nextChat = 0; + break; + + case 3008: // Glad your making progress + sendNpcChat1("I'm glad you're making progress!", player.talkingNpc, + "Runescape Guide"); + player.nextChat = 3009; + break; + + case 3009: + sendNpcChat2("To continue the tutorial go through that door over", + "there and speak to your first instructor!", + player.talkingNpc, "Runescape Guide"); + player.nextChat = 3010; + break; + case 3010: + player.tutorialProgress = 2; + player.getActionSender().chatbox(6180); + player.getPlayerAssistant().removeAllWindows(); + chatboxText( + player, + "You can interact with many items of scenery by simply clicking", + "on them. Right clicking will also give more options. Feel free to", + "try it with the things in this room, then click on the door", + "indicated with the yellow arrow to go through to the next instructor.", + "Interacting with scenery"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3098, 3107, player.getH(), + 2); + player.nextChat = 0; + break; + + case 3011: // door handling + player.getPlayerAssistant().removeAllWindows(); + chatboxText( + player, + "Follow the path to find the next instructor. Clicking on the", + "ground will walk you to that point. Talk to the Survival Expert by", + "the pond to the continue the tutorial. Remember you can rotate", + "the view by pressing the arrow keys.", "Moving around"); + player.getActionSender().createArrow(1, 2); + // client.getPacketDispatcher().tutorialIslandInterface(5, 2); + // // progress bar + tutorial int + player.nextChat = 0; + break; + // end end end end end + + /* + * Survival Expert. Second part. + */ + case 3012: // Survival Expert + sendNpcChat4( + "Hello there, newcomer. My name is Brynna. My job is", + "to teach you a few survival tips and tricks. First off", + "we're going to start with the most basic survival skill of", + "all: making a fire.", player.talkingNpc, "Survival Expert"); + player.nextChat = 3013; + break; + + case 3013: // giving bronze and tinder + sendItemChat2(player, "", + "The Survival Guide gives you a @blu@tinderbox @bla@and a", + "@blu@bronze axe!", 590, 150); + player.getItemAssistant().addOrDropItem(590, 1); + player.getItemAssistant().addOrDropItem(1351, 1); + player.nextChat = 0; + chatboxText( + player, + "Click on the flashing backpack icons to the right hand side of", + "the main window to view your inventory. Your inventory is a list", + "of everything you have on your backpack.", "", + "Viewing the items that you were given"); + player.getActionSender().setSidebarInterface(3, 3213);// sends + // interface + player.getActionSender().flashSideBarIcon(-3); // flashes + // inventory + player.tutorialProgress = 3; + break; + case 3014: // finished cutting tree + sendItemChat1(player, "", "You got some logs", 1511, 150); + PlayerAssistant.removeHintIcon(player); + player.nextChat = 3015; + break; + case 3015: // firemaking time + player.getPlayerAssistant().removeAllWindows(); + chatboxText( + player, + "Well done! You managed to cut some logs from the tree! Next,", + "use the tinderbox in your inventory to light the logs.", + "First click on the tinderbox to use it.", + "Then click on the logs in your inventory to light them.", + "Making a fire"); + // client.getPacketDispatcher().createArrow(1, 2); // sends to + // Survival Expert + player.tutorialProgress = 4; + break; + + case 3016: // firemaking done skill tab flashing now. + // client.getPlayerAssistant().removeAllWindows(); + chatboxText( + player, + "Click on the flashing bar graph icon near the inventory button", + "to see your skill stats.", "", "", + "You gained some experience."); + player.getActionSender().flashSideBarIcon(-1); // flashes + // skill + player.getActionSender().setSidebarInterface(1, 3917); // sets + // the + // skill + // tab + player.nextChat = 3017; + break; + + case 3017: // survival expert part 2 + sendNpcChat3("Well done! Next we need to get some food in our", + "bellies. We'll need something to cook. There are shrimp", + "in the pond there so let's catch and cook some.", + player.talkingNpc, "Survival Expert"); + player.nextChat = 3018; + + break; + + case 3018: + sendItemChat1(player, "", + "The Survival Guide gives you a @blu@net!", 303, 150); + player.getItemAssistant().addOrDropItem(303, 1); + player.nextChat = 0; + chatboxText( + player, + "Click on the sparkling fishing spot indicated by the flashing", + "arrow. Remember, you can check your inventory by clicking the", + "backpack icon.", "", "Catch some Shrimp"); + player.getActionSender().createArrow(3101, 3092, player.getH(), + 2); + player.tutorialProgress = 6; + break; + + case 3019: // Cooking the shrimp + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Now you have caught some shrimp let's cook it. First light a", + "fire, chop down a tree and then use the tinderbox on the logs.", + "If you've lost your axe or tinderbox, Brynna will give you", + "another.", "Cooking your shrimp."); + player.getActionSender().chatbox(6179); + break; + // END + + /* + * Finding next tutor FAT BITCH + */ + case 3020: // tutorial PROGRESS = 7 + // client.getPacketDispatcher().tutorialIslandInterface(15,4); + // // 15 percent + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Talk to the chef indicated. He will teach you the more advanced", + "aspects of Cooking such as combining ingredients. He will also", + "teach you about your music player menu as well.", "", + "Find your next instructor"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3078, 3084, player.getH(), + 2); + break; + + case 3021: // start of dialogue. + sendNpcChat3( + "Ah! Welcome newcomer. I am the Master Chef Leo. It", + "is here I will teach you how to cook food truly fit for a", + "king.", player.talkingNpc, "Master Chef"); + player.nextChat = 3022; + break; + + case 3022: + sendPlayerChat2( + "I already know how to cook. Brynna taught me just", "now."); + player.nextChat = 3023; + break; + case 3023: + sendNpcChat3("Hahahahahaha! You call THAT cooking? Some shrimp", + "on an open log fire? Oh no, no, no. I am going to", + "teach you the fine art of cooking bread.", + player.talkingNpc, "Master Chef"); + player.nextChat = 3024; + break; + case 3024: + sendNpcChat2("And no fine meal is complete without good music, so", + "we'll cover that while you're here too.", + player.talkingNpc, "Master Chef"); + player.nextChat = 3025; + break; + + case 3025: // he gives u bucket of water etc TTUOTRIAL PROG 8 + sendItemChat2( + player, + "", + "The Cooking Guide gives you a @blu@bucket of water@bla@ and a", + "@blu@pot of flour!", 1933, 150); + player.getItemAssistant().addOrDropItem(1933, 1); + player.getItemAssistant().addOrDropItem(1929, 1); + player.nextChat = 0; + chatboxText( + player, + "This is the base for many of the meals. To make dough we must", + "mix flour and water. First right click the bucket of water and", + "select use, then left click on the pot of flour.", "", + "Making dough"); + PlayerAssistant.removeHintIcon(player); + player.tutorialProgress = 8; + + break; + case 3026: // cooking dough + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Now you have made dough, you can cook it. To cook the dough", + "use it with the range shown by the arrow. If you lose your", + "dough, talk to Leo - he will give you more ingredients.", + "", "Cooking dough"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3075, 3081, player.getH(), + 2); + + player.nextChat = 0; + break; + + case 3037: // new tutorial prog + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Well done! Your first loaf of bread. As you gain experience in", + "Cooking you will be able to make other things like pies, cakes", + "and even kebabs. Now you've got the hang of cooking, let's", + "move on. Click on the flashing icon in the bottom right.", + "Cooking dough"); + player.getActionSender().chatbox(6179); + PlayerAssistant.removeHintIcon(player); + // client.getPacketDispatcher().tutorialIslandInterface(20, 5); + player.getActionSender().setSidebarInterface(13, 962); // sets + // music + player.getActionSender().flashSideBarIcon(-13); + player.tutorialProgress = 9; + player.nextChat = 0; + break; + + case 3038: // Emotes + player.getActionSender().chatbox(6180); + chatboxText( + player, + "", + "Now, how about showing some feelings? You will see a flashing", + "icon in the shape of a person. Click on that to access your", + "emotes.", "Emotes"); + player.getActionSender().chatbox(6179); + PlayerAssistant.removeHintIcon(player); + // client.getPacketDispatcher().tutorialIslandInterface(25, 6); + // // 25 percent now + player.getActionSender().setSidebarInterface(12, 147); // run + // tab + player.getActionSender().flashSideBarIcon(-12); + player.nextChat = 0; + break; + case 3039: // running + player.tutorialProgress = 11; + player.getActionSender().chatbox(6180); + chatboxText(player, + "It's only a short distance to the next guide.", + "Why not try running there? Start by opening the player", + "settings, that's the flashing icon of a wrench.", "", + "Running"); + player.getActionSender().chatbox(6179); + player.getActionSender().flashSideBarIcon(-12); + player.getActionSender().createArrow(3086, 3126, player.getH(), + 2); + player.nextChat = 0; + break; + case 3040: + player.getActionSender().chatbox(6180); + chatboxText( + player, + "In this menu you will see many options. At the bottom in the", + "middle is a button with the symbol of a running shoe. You can", + "turn this button on or off to select run or walk. Give it a go,", + "click on the run button now.", "Running"); + player.getActionSender().chatbox(6179); + player.nextChat = 0; + break; + case 3041: // clicked on run + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Now that you have the run button turned on, follow the path", + "until you come to the end. You may notice that the numbers on", + "the button goes down. This is your run energy. If your run", + "energy reaches zero, you'll stop running.", + "Run to the next guide"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3086, 3125, player.getH(), + 2); + + player.nextChat = 0; + break; + + /** + * Quest Guide + */ + case 3042: // entering the quest GUIDE + player.getActionSender().createArrow(1, 4); // sends to + // quest + // guide + // client.getPacketDispatcher().tutorialIslandInterface(35, 8);//30 or 35 percent + player.getActionSender().chatbox(6180); + chatboxText(player, "Talk with the Quest Guide.", "", + "He will tell you all about quests.", "", ""); + player.getActionSender().chatbox(6179); + player.tutorialProgress = 12; + PassDoor.passThroughDoor(player, 3019, 2, 3, 0, 0, -1, 0); + player.nextChat = 0; + break; + + case 3043: // quest guide dialogue START + sendNpcChat2( + "Ah. Welcome, adventurer. I'm here to tell you all about", + "quests. Let's start by opening the quest side panel.", + player.talkingNpc, "Quest Guide"); + player.nextChat = 3044; + break; + + case 3044: // Send quest tab + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText(player, "Open the Quest Journal.", "", + "Click on the flashing icon next to your inventory.", "", + ""); + player.getActionSender().chatbox(6179); + player.getActionSender().setSidebarInterface(2, 638); // quest + player.getActionSender().flashSideBarIcon(-2); + player.nextChat = 0; + break; + + case 3045: // quest guide 2 prog 13 + sendNpcChat3( + "Now you have the journal open. I'll tell you a bit about", + "it. At the moment all the quests shown in red which", + "means you have not started them yet.", player.talkingNpc, + "Quest Guide"); + player.nextChat = 3046; + + break; + + case 3046: + sendNpcChat4( + "When you start a quest it will change colour to yellow", + "and to green when you've finished. This is so you can", + "easily see what's complete, what's started, and what's left", + "to begin.", player.talkingNpc, "Quest Guide"); + player.nextChat = 3047; + break; + + case 3047: + sendNpcChat3( + "The start of quests are easy to find. Look out for the", + "star icons on the minimap, just like the one you should", + "see marking my house.", player.talkingNpc, "Quest Guide"); + player.nextChat = 3048; + break; + + case 3048: + sendNpcChat4( + "The quests themselves can vary greatly from collecting", + "beads to hunting down dragons. Generally quests are", + "started by talking to a non-player character like me,", + "and will involve a series of tasks.", player.talkingNpc, + "Quest Guide"); + player.nextChat = 3049; + break; + + case 3049: // last + sendNpcChat4( + "There's not a lot more I can tell you about questing.", + "You have to experience the thrill of it yourself to fully", + "understand. You may find some adventure in the caves", + "under my house.", player.talkingNpc, "Quest Guide"); + player.nextChat = 3050; + break; + + case 3050: // moving on. Cave time biaches + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "", + "It's time to enter some caves. Click on the ladder to go down to", + "the next area.", "", "Moving on"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3088, 3119, player.getH(), + 2); + player.nextChat = 0; + player.tutorialProgress = 14; + break; + // end + + /* + * Start of Mining/Smithing + */ + case 3051: + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Next let's get you a weapon or more to the point, you can", + "make your first weapon yourself. Don't panic, the Mining", + "Instructor will help you. Talk to him and he'll tell you all about it.", + "", "Mining and Smithing"); + player.getActionSender().chatbox(6179); + // client.getPacketDispatcher().tutorialIslandInterface(40,9); + player.getActionSender().createArrow(1, 5); + player.nextChat = 0; + break; + + case 3052:// mining tutor start + sendNpcChat4("Hi there. You must be new around here. So what do I", + "call you? Newcomer seems so impersonal and if we're", + "going to be working together, I'd rather call you by", + "name.", player.talkingNpc, "Mining Instructor"); + player.nextChat = 3053; + break; + + case 3053:// mining tutor start + sendPlayerChat1("You can call me " + + Misc.capitalize(player.playerName) + "."); + player.nextChat = 3054; + break; + + case 3054:// mining tutor start + sendNpcChat2("Ok then, " + Misc.capitalize(player.playerName) + "." + + " My name is Dezzick and I'm a", + "miner by trade. Let's prospect some of those rocks.", + player.talkingNpc, "Mining Instructor"); + player.nextChat = 3055; + break; + + case 3055: // prospecting + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "To prospect a mineable rock, just right click it and select the", + "'prospect rock' option. This will tell you the type of ore you can", + "mine from it. Try it now on one of the rocks indicated.", + "", "Prospecting"); + player.getActionSender().chatbox(6179); + // client.getPacketDispatcher().tutorialIslandInterface(40,9); + player.getActionSender().createArrow(3076, 9504, player.getH(), + 2); + player.nextChat = 0; + player.tutorialProgress = 15; + break; + case 3056: // done prospecting + sendPlayerChat2( + "I prospected both types of rocks! One set contains tin", + "and the other has copper ore inside."); + player.nextChat = 3057; + break; + + case 3057: + sendNpcChat2( + "Absolutely right, " + Misc.capitalize(player.playerName) + + "." + " These two ore types", + "can be smelted together to make bronze.", + player.talkingNpc, "Mining Instructor"); + player.nextChat = 3058; + break; + + case 3058: + sendNpcChat3( + "So now you know what ore is in the rocks over there,", + "why don't you have a go at mining some tin and", + "copper? here, you'll need this to start with.", + player.talkingNpc, "Mining Instructor"); + player.nextChat = 3060; + break; + case 3060: + sendItemChat1(player, "", + "Dezzick gives you a @blu@bronze pickaxe!", 1265, 300); + player.getItemAssistant().addOrDropItem(1265, 1); + player.nextChat = 0; + chatboxText( + player, + "It's quite simple really. All you need to do is right click on the", + "rock and select 'mine'. You can only mine when you have a", + "pickaxe. So give a try: first mine one tin ore.", "", + "Mining"); + player.getActionSender().createArrow(3076, 9504, player.getH(), + 2); // sends + // hint + // to + // ore + player.tutorialProgress = 17; + break; + + case 3061: // furnace time + player.tutorialProgress = 19; + player.nextChat = 0; + chatboxText( + player, + "You should now have both some copper and tin ore. So let's", + "smelt them to make a bronze bar. To do this, right click on", + "either tin or copper ore and select use, then left click on the", + "furnace. Try it now.", "Smelting"); + break; + case 3062: // smelting + player.tutorialProgress = 20; + player.nextChat = 0; + player.getActionSender().chatbox(6180); + chatboxText(player, "", "Speak to the Mining Instructor and he'll show you how to make", "it into a weapon.", "", "You've made a bronze bar!"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(1, 5); + break; + + case 3063: + player.nextChat = 3064; + sendPlayerChat1("How do I make a weapon out of this?"); + break; + + case 3064: + sendNpcChat2("Okay, I'll show you how to make a dagger out of it.", + "You'll be needing this...", player.talkingNpc, + "Mining Instructor"); + player.nextChat = 3065; + break; + + case 3065: // giving you the hammer + sendItemChat1(player, "", "Dezzick gives you a @blu@hammer!", 2347, 300); + player.getItemAssistant().addOrDropItem(2347, 1); + player.nextChat = 0; + chatboxText(player, "To smith you'll need a hammer - like the one you were given by", "Dezzick - access to an anvil like the one with the arrow over it", "and enough metal bars to make what you are trying to smith.", "", "Smithing a dagger"); + player.getActionSender().createArrow(3082, 9499, player.getH(), 2); // send + // hint + // to + // furnace + break; + + case 3066: + chatboxText(player, "So let's move on. Go through the gates shown by the arrow.", "Remember you may need to move the camera to see your,", "surroundings. Speak to the guide for a recap at any time.", "", "You've finished in this area"); + player.tutorialProgress = 21; + player.getActionSender().createArrow(3094, 9503, player.getH(), 2); // send + // hint + // to + // furnace + break; + + // end of mining/smithing + + /* + * start of melee + */ + case 3067:// Melee instructor c.tutorialProgress = 22 + sendPlayerChat1("Hi! My name is " + + Misc.capitalize(player.playerName) + "."); + player.nextChat = 3068; + break; + + case 3068: + sendNpcChat2("Do I look like I care? To me you're just another", + "newcomer who thinks they're ready to fight.", + player.talkingNpc, "Combat Instructor"); + player.nextChat = 3069; + break; + + case 3069: + sendNpcChat1("I am Vannaka, the greatest swordsman alive.", + player.talkingNpc, "Combat Instructor"); + player.nextChat = 3070; + break; + + case 3070: + sendNpcChat1("Let's get started by teaching you to wield a weapon", + player.talkingNpc, "Combat Instructor"); + player.nextChat = 3071; + break; + + case 3071: // send wear interface + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "", + "You now have access to a new interface. Click on the flashing", + "icon of a man the one to the right of your backpack icon.", + "", "Wielding weapons"); + player.getActionSender().chatbox(6179); + player.getActionSender().setSidebarInterface(4, 1644);// worn + player.getActionSender().flashSideBarIcon(-4); + player.nextChat = 0; + break; + + case 3072: + sendNpcChat2( + "Very good, but that little butter knife isn't going to", + "protect you much. Here, take these.", player.talkingNpc, + "Combat Instructor"); + player.nextChat = 3073; + break; + + case 3073: + sendItemChat2( + player, + "",// Gives me sword and shield + "The Combat Guide gives you a @blu@bronze sword@bla@ and a", + "@blu@wooden shield!", 1171, 300); + player.getItemAssistant().addOrDropItem(1171, 1); + player.getItemAssistant().addOrDropItem(1277, 1); + player.nextChat = 0; + chatboxText( + player, + "In your worn inventory panel, right click on the dagger and", + "select the remove option from the drop down list. After you've", + "unequipped the dagger, wield the sword and shield. As you", + "pass the mouse over an item you will see its name.", + "Unequipping items"); + PlayerAssistant.removeHintIcon(player); + break; + + case 3074: + sendPlayerChat1("I did it! I killed a giant rat!"); + player.nextChat = 3075; + break; + + case 3075: + sendNpcChat3("I saw, " + Misc.capitalize(player.playerName) + "." + + " You seem better at this than I", + "thought. Now that you have grasped basic swordplay", + "let's move on.", player.talkingNpc, "Combat Instructor"); + + player.nextChat = 3076; + break; + + case 3076: + sendNpcChat4( + "Let's try some ranged attacking, with this you can kill", + "foes from a distance. Also, foes unable to reach you are", + "as good as dead. You'll be able to attack the rats", + "without entering the pit.", player.talkingNpc, + "Combat Instructor"); + + player.nextChat = 3077; + break; + + case 3077: // gives me bow and arrow + sendItemChat2( + player, + "", + "The Combat Guide gives you some @blu@bronze arrows@bla@ and", + "a @blu@shortbow!", 841, 300); + player.getItemAssistant().addOrDropItem(841, 1); + player.getItemAssistant().addOrDropItem(882, 50); + player.nextChat = 0; + chatboxText( + player, + "Now you have a bow and some arrows. Before you can use", + "them you'll need to equip them. Remember: to attack, right", + "click on the monster and select attack.", "", + "Rat ranging"); + player.ratdied2 = true; + player.getActionSender().drawHeadicon(1, 13, 0, 0); // draws + // headicon + // to + // rat + break; + /* + * FINISH . Last parts, Finacial,prayer,magic + */ + + case 3078: // fresh + player.getActionSender().chatbox(6180); + chatboxText( + player, + "Follow the path and you will come to the front of the building.", + "This is the Bank of " + Constants.SERVER_NAME + + ", where you can store all your", + "most valued items. To open your bank box just right click on an", + "open booth indicated and select 'use'.", "Banking"); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3122, 3124, player.getH(), + 2); + break; + + case 3079: // fiancial dude start + sendPlayerChat1("Hello. Who are you?"); + player.nextChat = 3080; + + break; + + case 3080: + sendNpcChat2( + "I'm the Financial Advisor. I'm here to tell people how to", + "make money.", player.talkingNpc, "Financial Advisor"); + player.nextChat = 3081; + break; + + case 3081: + sendPlayerChat1("Okay. How can I make money then?"); + player.nextChat = 3082; + break; + + case 3082: + sendNpcChat1("How you can make money? Quite.", player.talkingNpc, + "Financial Advisor"); + player.nextChat = 3083; + break; + + case 3083: + sendNpcChat3( + "Well there are three basic ways of making money here:", + "combat, quests, and trading. I will talk you through each", + "of them very quickly.", player.talkingNpc, + "Financial Advisor"); + player.nextChat = 3084; + break; + + case 3084: + sendNpcChat3( + "Let's start with combat as it is probably still fresh in", + "your mind. Many enemies, both human and monster,", + "will drop items when they die.", player.talkingNpc, + "Financial Advisor"); + player.nextChat = 3085; + break; + + case 3085: + sendNpcChat3( + "Now, the next way to earn money quickly is by quests.", + "Many people on " + Constants.SERVER_NAME + + " have things they need", + "doing, which they will reward you for.", + player.talkingNpc, "Financial Advisor"); + player.nextChat = 3086; + break; + + case 3086: + sendNpcChat3( + "By getting a high level in skills such as Cooking, Mining,", + "Smithing or Fishing, you can create or catch your own", + "items and sell them for pure profit.", player.talkingNpc, + "Financial Advisor"); + player.nextChat = 3087; + break; + + case 3087: + sendNpcChat2( + "Well that about covers it. Come back if you'd like to go", + "over this again.", player.talkingNpc, "Financial Advisor"); + player.nextChat = 3088; + break; + + case 3088: // end + player.getPlayerAssistant().removeAllWindows(); + player.tutorialProgress = 28; + player.getActionSender().chatbox(6180); + chatboxText(player, "", "Continue through the next door.", "", "", + ""); + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(3129, 3124, player.getH(), + 2); + player.getActionSender().createArrow(1, 8); + player.nextChat = 0; + break; + // end of FINANCIAL + + /* + * Section Prayer + */ + + case 3089: // start of dialogue + sendPlayerChat1("Good day, brother, my name's " + + Misc.capitalize(player.playerName) + "."); + player.nextChat = 3090; + break; + + case 3090: + sendNpcChat2("Hello, " + Misc.capitalize(player.playerName) + "." + + " I'm Brother Brace. I'm here to", + "tell you all about Prayer.", player.talkingNpc, + "Brother Brace"); + player.nextChat = 3091; + + break; + case 3091: + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText(player, "", + "Click on the flashing icon to open the Prayer menu.", "", + "", "Your Prayer menu"); + player.getActionSender().chatbox(6179); + player.getActionSender().setSidebarInterface(5, 5608); + player.getActionSender().flashSideBarIcon(-5); + player.tutorialProgress = 29; + player.nextChat = 0; + break; + + case 3092: + sendNpcChat3("This is your Prayer list. Prayers can help a lot in", + "combat. Click on the prayer you wish to use to activate", + "it and click it again to deactivate it.", + player.talkingNpc, "Brother Brace"); + player.nextChat = 3093; + + break; + case 3093: + sendNpcChat3("Active prayers will drain your Prayer Points which", + "you can recharge by finding an altar or other holy spot", + "and praying there.", player.talkingNpc, "Brother Brace"); + player.nextChat = 3094; + break; + + case 3094: + sendNpcChat3("As you noticed, most enemies will drop bones when", + "defeated. Burying bones by clicking them in your", + "inventory will gain you Prayer experience.", + player.talkingNpc, "Brother Brace"); + player.nextChat = 3095; + break; + + case 3095: + sendNpcChat2( + "I'm also the community officer 'round here, so it's my", + "job to tell you about your friends and ignore list.", + player.talkingNpc, "Brother Brace"); + player.nextChat = 3096; + break; + + case 3096: + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "You should now see another new icon. Click on the flashing", + "icon to open your friends list.", "", "", "Friends list"); + player.getActionSender().chatbox(6179); + player.getActionSender().setSidebarInterface(8, 5065); + player.getActionSender().flashSideBarIcon(-8); + player.tutorialProgress = 30; + player.nextChat = 0; + break; + + case 3097: // long dialogue START + // client.getPacketDispatcher().tutorialIslandInterface(75, 16); + sendNpcChat4("Good. Now you have both menus open, I'll tell you a", + "little about each. You can add people to either list by", + "clicking the add button then typing their name into the", + "box that appears.", player.talkingNpc, "Brother Brace"); + player.nextChat = 3098; + break; + + case 3098: + sendNpcChat4( + "You remove people from the lists in the same way. If", + "you add someone to your ignore list they will not be", + "able to talk to you or send any form of message to", + "you.", player.talkingNpc, "Brother Brace"); + player.nextChat = 3099; + + break; + case 3099: + sendNpcChat4( + "Your friends list shows the online status of your", + "friends. Friends in the red are offline, friends in green are", + "online and on the same server and friends in yellow", + "are online but on a different server.", player.talkingNpc, + "Brother Brace"); + player.nextChat = 3100; + break; + + case 3100: + sendPlayerChat1("Are there rules on in-game behaviour?"); + player.nextChat = 3101; + break; + case 3101: + sendNpcChat3("Yes, you should read the rules of conduct on the", + "website to make sure you do nothing to get yourself", + "banned.", player.talkingNpc, "Brother Brace"); + player.nextChat = 3102; + break; + case 3102: + sendNpcChat3("But in general, always try to be courteous to other", + "players - remember the people in the game are real", + "people with real feelings.", player.talkingNpc, + "Brother Brace"); + player.nextChat = 3103; + break; + case 3103: + sendNpcChat2( + "If you go 'round being abusive or causing trouble your", + "character could end up being the one in trouble.", + player.talkingNpc, "Brother Brace"); + player.nextChat = 3104; + break; + case 3104: // last one + sendPlayerChat1("Okay thanks. I'll bear that in mind."); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "You're almost finished on tutorial island. Pass through the", + "door to find the path leading to your final instructor.", + "", "", "Your final instructor!"); + PlayerAssistant.removeHintIcon(player); + player.tutorialProgress = 32; + player.getActionSender().chatbox(6179); + player.getActionSender().createArrow(1, 9); + player.nextChat = 0; + break; + // END BROTHER BRACE PRAYER + + /* + * Start magic instructor + */ + + case 3105: + sendPlayerChat1("Hello."); + player.nextChat = 3106; + break; + + case 3106: + sendNpcChat3("Good day, newcomer. My name is Terrova. I'm here", + "to tell you about Magic. Let's start by opening your", + "spell list.", player.talkingNpc, "Magic Instructor"); + player.nextChat = 3107; + break; + + case 3107: + // sendItemChat1(client, "", "", 0, 50); + player.getPlayerAssistant().removeAllWindows(); + player.getActionSender().chatbox(6180); + chatboxText( + player, + "", + "Open up the Magic menu by clicking on the flashing icon next", + "to the Prayer button you just learned about.", "", + "Open up your final menu"); + player.getActionSender().chatbox(6179); + player.nextChat = 0; + player.getActionSender().setSidebarInterface(6, 1151); // modern + player.getActionSender().flashSideBarIcon(-6); + break; + + case 3108: + sendNpcChat3( + "Good. This is a list of your spells. Currently you can", + "only cast one offensive spell called Wind Strike. Let's", + "try it out on one of those chickens.", player.talkingNpc, + "Magic Instructor"); + player.nextChat = 3109; + break; + + case 3109: + sendItemChat1( + player, + "", + "Terrova gives you five @blu@air runes@bla@ and @blu@five mind runes!", + 556, 300); + player.getItemAssistant().addOrDropItem(558, 5); + player.getItemAssistant().addOrDropItem(556, 5); + player.nextChat = 0; + chatboxText( + player, + "Now you have runes you should see the Wind Strike icon at the", + "top left corner of the Magic interface - second in from the", + "left. Walk over to the caged chickens, click the Wind Strike icon", + "and then select one of the chicken to cast it on.", + "Cast Wind Strke at a chicken"); + // sendStatement4("Now you have runes you should see the Wind Strike icon at the", + // "top left corner of the Magic interface - second in from the", + // "left. Walk over to the caged chickens, click the Wind Strike icon", + // "and then select one of the chicken to cast it on."); + player.getActionSender().drawHeadicon(1, 20, 0, 0); // draws + // headicon + // to + // chicken + break; + + case 3110: + sendNpcChat2("Well you're all finished here now. I'll give you a", + "reasonable number of runes when you leave.", + player.talkingNpc, "Magic Instructor"); + player.nextChat = 3111; + break; + + case 3111: + sendOption2("Mainland", "Stay here"); + player.dialogueAction = 3111; + player.nextChat = 0; + break; + + case 3112:// Mainland + player.tutorialProgress = 35; + sendNpcChat4( + "When you get to the mainland you will find yourself in", + "the town of Lumbridge. If you want some ideas on", + "where to go next talk to my friend the Lumbridge", + "Guide. You can't miss him; he's holding a big staff with", + player.talkingNpc, "Magic Instructor"); + player.nextChat = 3113; + break; + case 3113: + sendNpcChat4( + "a question mark on the end. He also has a white beard", + "and carries a rucksack full of scrolls. There are also", + "many tutors willing to teach you about the many skills", + "you could learn.", player.talkingNpc, "Magic Instructor"); + player.nextChat = 3114; + break; + + case 3114: + sendNpcChat3( + "If all else fails, visit the " + Constants.SERVER_NAME + + " website for a whole", + "chestload of information on quests, skills, and minigames", + "as well as a very good starter's guide.", + player.talkingNpc, "Magic Instructor"); + player.nextChat = 3115; + break; + + case 3115: + player.tutorialProgress = 36; + PlayerAssistant.removeHintIcon(player); + player.getItemAssistant().deleteAllItems(); + player.getItemAssistant().clearBank(); + player.getPlayerAssistant().sendSidebars(); + player.getPlayerAssistant().walkableInterface(-1); + player.getActionSender().chatbox(-1); + player.getItemAssistant() + .sendWeapon( + player.playerEquipment[player.playerWeapon], + ItemAssistant + .getItemName(player.playerEquipment[player.playerWeapon])); + player.getPlayerAssistant().addStarter(); + player.getPlayerAssistant().movePlayer(3233, 3229, 0); + player.getActionSender().sendMessage( + "Welcome to @blu@" + Constants.SERVER_NAME + + "@bla@ - currently in Server Stage v@blu@" + + Constants.TEST_VERSION + "@bla@."); + sendStatement4( + "Welcome to Lumbridge! To get more help, simply click on the", + "Lumbridge Guide or one of the Tutors - these can be found by", + "looking for the question mark icon on your mini-map. If you find", + "you are lost at any time, look for a signpost."); + player.nextChat = 3116; + player.canWalkTutorial = true; + break; + + case 3116: + player.getPlayerAssistant().showInterface(3559); + player.canChangeAppearance = true; + player.closeTutorialInterface = true; + player.nextChat = 0; + break; + + case 3117: + sendNpcChat1( + "You can't stay here you've completed the tutorial already.", + player.talkingNpc, "Magic Instructor"); + player.nextChat = 3112; + break; + + case 3118: + sendNpcChat2("Hello " + player.playerName + ".", + "Are you interested in buying any beer?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3119; + break; + + case 3119: + sendOption2("Yes please.", "No Thanks."); + player.dialogueAction = 152; + break; + + case 3120: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3121: + sendPlayerChat1("Yes please."); + player.nextChat = 3122; + break; + + case 3122: + sendOption4("Asgarnain Ale", "Wizard's Mind Bomb", "Dwarven Stout", + "Never Mind"); + player.dialogueAction = 153; + break; + + case 3123: + if (player.getItemAssistant().playerHasItem(995, 3)) { + sendPlayerChat1("Asgarnian Ale please."); + player.getItemAssistant().deleteItem2(995, 3); + player.getItemAssistant().addOrDropItem(1905, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins to buy that.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + } + break; + + case 3124: + sendPlayerChat1("Wizard's Mind Bomb please."); + player.getItemAssistant().deleteItem2(995, 3); + player.getItemAssistant().addOrDropItem(1907, 1); + player.nextChat = 0; + break; + + case 3125: + sendPlayerChat1("Dwarven Stout please."); + player.getItemAssistant().deleteItem2(995, 3); + player.getItemAssistant().addOrDropItem(1913, 1); + player.nextChat = 0; + break; + + case 3126: + sendPlayerChat1("Never mind."); + player.nextChat = 0; + break; + + /*case 3127: + sendNpcChat3("Im sorry...", "I can't seem to find your reward,", "Did you vote correctly?", 945, "" + Constants.SERVER_NAME + " Guide"); + client.nextChat = 0; + break; + + case 3128: + sendNpcChat2("Im sorry,", "An error occured, please try again later.", 945, "" + Constants.SERVER_NAME + " Guide"); + client.nextChat = 0; + break; + + case 3129: + sendNpcChat2("Thank you so much for voting!", "Enjoy your free experience lamp!", 945, "" + Constants.SERVER_NAME + " Guide"); + client.getItemAssistant().addOrDropItem(2528, 1); + VotingHandler.setAsReceived(client.playerName); + client.nextChat = 0; + break; + + case 3130: + int reward = 1000 + Misc.random(3000); + sendNpcChat2("Thank you so much for voting!", "Enjoy your " + reward + " coins!", 945, "" + Constants.SERVER_NAME + " Guide"); + client.getItemAssistant().addOrDropItem(995, reward); + VotingHandler.setAsReceived(client.playerName); + client.nextChat = 0; + break; + + case 3131: + sendNpcChat2("Thank you so much for voting!", "Enjoy your magical lamp that restores your run!", 945, "" + Constants.SERVER_NAME + " Guide"); + client.getItemAssistant().addOrDropItem(VotingRewards.ITEM, 1); + VotingHandler.setAsReceived(client.playerName); + client.nextChat = 0; + break; + + case 3132: + sendNpcChat2("We couldn't find your reward,", "Please report this with a screenshot of your chatbox!", 945, "" + Constants.SERVER_NAME + " Guide"); + client.nextChat = 0; + break;*/ + + case 3133: + sendNpcChat2( + "Thank you for rescuing me! It isn't very comfy in this", + "cell!", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3134; + break; + + case 3134: + sendOption2("So... do you know anywhere good to explore?", + "Do I get a reward?"); + player.dialogueAction = 154; + break; + + case 3135: + sendPlayerChat1("Do I get a reward? For freeing you and all..."); + player.nextChat = 3136; + break; + + case 3136: + sendNpcChat2( + "Well... not really... The Black Knights took all of my", + "stuff before throwing me in here to rot!", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + + case 3137: + sendPlayerChat1("So... do you know anywhere good to explore?"); + player.nextChat = 3138; + break; + + case 3138: + sendNpcChat3( + "Well, this dungeon was quite good to explore ...until I", + "got captured, anyway. I was given a key to an inner", + "part of this dungeon by a mysterious cloaked stranger!", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3139; + break; + + case 3139: + sendNpcChat3("It's rather tough for me to get that far into the", + "dungeon however... I just keep getting captured! Would", + "you like to give it a go?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3140; + break; + + case 3140: + sendOption2("Yes please!", "No, it's too dangerous for me."); + player.dialogueAction = 155; + break; + + case 3141: + sendPlayerChat1("No, it's too dangerous for me."); + player.nextChat = 0; + break; + + case 3142: + sendPlayerChat1("Yes please!"); + player.nextChat = 3143; + break; + + case 3143: + sendStatement("Velrak reaches somewhere mysterious and passes you a key."); + player.getItemAssistant().addOrDropItem(1590, 1); + player.nextChat = 0; + break; + + case 3144: + sendNpcChat1("Would you like me to teleport you to rune essence?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3145; + break; + + case 3145: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 156; + break; + + case 3146: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3147: + sendPlayerChat1("Yes please."); + player.nextChat = 3148; + break; + + case 3148: + String type = player.playerMagicBook == 0 ? "modern" : "ancient"; + player.getPlayerAssistant().startTeleport(2911, 4832, 0, type); + break; + + case 3149: + sendNpcChat1("Welcome to the Wizards Guild.", player.talkingNpc, + "Wizard Distenor"); + player.nextChat = 0; + break; + + case 3150: + sendNpcChat1("Hello are you interested in buying anything?", + player.talkingNpc, "Bartender"); + player.nextChat = 3151; + break; + + case 3151: + sendOption2("Yes please.", "No thanks."); + player.dialogueAction = 157; + break; + + case 3152: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3153: + sendPlayerChat1("Yes please."); + player.nextChat = 3154; + break; + + case 3154: + sendNpcChat1("What would you like?", player.talkingNpc, "Bartender"); + player.nextChat = 3155; + break; + + case 3155: + sendOption2("Meat Pie", "Stew"); + player.dialogueAction = 158; + break; + + case 3156: + if (player.getItemAssistant().playerHasItem(995, 16)) { + sendPlayerChat1("Meat Pie please."); + player.getItemAssistant().deleteItem2(995, 16); + player.getItemAssistant().addOrDropItem(2327, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You need 16 coins to buy that.", + player.talkingNpc, "Bartender"); + player.nextChat = 0; + } + break; + + case 3157: + if (player.getItemAssistant().playerHasItem(995, 20)) { + sendPlayerChat1("Stew please."); + player.getItemAssistant().deleteItem2(995, 20); + player.getItemAssistant().addOrDropItem(2003, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You need 20 coins to buy that.", + player.talkingNpc, "Bartender"); + player.nextChat = 0; + } + break; + + case 3158: + sendNpcChat1("Hello, " + player.playerName + " what would you like to do?", player.talkingNpc, "Wyson the Gardener"); + player.nextChat = 3159; + break; + + case 3159: + sendOption3("Buy woad leaves.", "Exchange mole skins/claws for nests.", "Nothing."); + player.dialogueAction = 159; + break; + + case 3160: + sendPlayerChat1("I don't want to do anything."); + player.nextChat = 0; + break; + + case 3161: + sendPlayerChat1("I would like to buy woad leaves."); + player.nextChat = 3162; + break; + + case 3162: + sendNpcChat1("How much are you willing to pay for a woad leaf?", + player.talkingNpc, "Wyson the Gardener"); + player.nextChat = 3163; + break; + + case 3163: + sendOption4("5 coins", "10 coins", "15 coins", "20 coins"); + player.dialogueAction = 160; + break; + + case 3164: + sendNpcChat2("Don't be ridiculous offer me more", + "and I may sell you one!", player.talkingNpc, + "Wyson the Gardener"); + player.nextChat = 0; + break; + + case 3165: + if (player.getItemAssistant().playerHasItem(995, 15)) { + sendNpcChat1( + "That sounds like a fair offer, here's one woaf leaf.", + player.talkingNpc, "Wyson the Gardener"); + player.getItemAssistant().addOrDropItem(1793, 1); + player.getItemAssistant().deleteItem2(995, 15); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins to buy a woad leaf.", + player.talkingNpc, "Wyson the Gardener"); + } + break; + + case 3166: + if (player.getItemAssistant().playerHasItem(995, 15)) { + sendNpcChat1( + "That offer sounds generous, I will give you two woaf leaves!", + player.talkingNpc, "Wyson the Gardener"); + player.getItemAssistant().addOrDropItem(1793, 2); + player.getItemAssistant().deleteItem2(995, 20); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins to buy a woad leaf.", + player.talkingNpc, "Wyson the Gardener"); + } + break; + + case 3167: + sendNpcChat1("Hello are you interested in buying anything?", + player.talkingNpc, "Roavar"); + player.nextChat = 3168; + break; + + case 3168: + sendOption2("Yes please.", "No Thanks."); + player.dialogueAction = 162; + break; + + case 3169: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3170: + sendPlayerChat1("Yes please can I get a moonlight mean?"); + player.nextChat = 3171; + break; + + case 3171: + if (player.getItemAssistant().playerHasItem(995, 5)) { + sendNpcChat1("Sure thing.", player.talkingNpc, "Roavar"); + player.getItemAssistant().deleteItem2(995, 5); + player.getItemAssistant().addOrDropItem(2955, 1); + player.nextChat = 0; + } else { + sendNpcChat1("You need 5 coins to buy that.", + player.talkingNpc, "Roavar"); + player.nextChat = 0; + } + break; + + case 3172: + sendOption2("Experience Lamp", + "Magical Lamp that restores your run to full"); + player.dialogueAction = 163; + break; + + case 3173: + sendNpcChat2("Hello, would you like to travel to Shilo Village", + "for 200 coins?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3174; + break; + + case 3174: + sendOption2("Yes please.", "No Thanks."); + player.dialogueAction = 164; + break; + + case 3175: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3176: + sendPlayerChat1("Yes please."); + player.nextChat = 3177; + break; + + case 3177: + if (player.getItemAssistant().playerHasItem(995, 200)) { + player.getItemAssistant().deleteItem2(995, 200); + player.getPlayerAssistant().startTeleport(2834, 2953, 0, + "modern"); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3178: + sendNpcChat2( + "Hello, would you like to travel to back to Brimhaven", + "for 200 coins?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3179; + break; + + case 3179: + sendOption2("Yes please.", "No Thanks."); + player.dialogueAction = 165; + break; + + case 3180: + sendPlayerChat1("No thanks."); + player.nextChat = 0; + break; + + case 3181: + sendPlayerChat1("Yes please."); + player.nextChat = 3182; + break; + + case 3182: + if (player.getItemAssistant().playerHasItem(995, 200)) { + player.getItemAssistant().deleteItem2(995, 200); + player.getPlayerAssistant().startTeleport(2779, 3212, 0, "modern"); + player.nextChat = 0; + } else { + sendNpcChat1("You don't have enough coins", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3183: + sendNpcChat2("Hello, are you interested in buying cooking gauntlets", "for 25k?", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3184; + break; + + case 3184: + sendOption2("Yes please.", "No thank you."); + player.dialogueAction = 178; + break; + + case 3185: + sendPlayerChat1("No thank you, do I look like I'm a cook?"); + player.nextChat = 0; + break; + + case 3186: + if (player.getItemAssistant().playerHasItem(995, 25000) + && !player.getItemAssistant().playerHasItem(775) + && player.playerEquipment[player.playerHands] != 775) { + sendPlayerChat1("Yes please."); + player.getItemAssistant().deleteItem2(995, 25000); + player.getPlayerAssistant().removeGloves(); + player.getItemAssistant().addOrDropItem(775, 1); + player.nextChat = 0; + } else if (player.getItemAssistant().playerHasItem(775) + || player.playerEquipment[player.playerHands] == 775) { + sendNpcChat1("Why would you want another pair?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } else { + sendNpcChat1("You need 25k to buy these.", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3187: + sendStatement("You found a hidden tunnel! Do you want to enter it?"); + player.nextChat = 3188; + break; + + case 3188: + sendOption2("Yea! I'm fearless!", "No way! That looks scary!"); + player.dialogueAction = 1; + player.nextChat = 0; + break; + + case 3189: + sendNpcChat2( + "Hello, are you interested in buying goldsmith gantlets", + "for 25k?", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 3190; + break; + + case 3190: + sendOption2("Yes please.", "No thank you."); + player.dialogueAction = 175; + break; + + case 3191: + sendPlayerChat1("No thank you, do I look like I'm a smither?"); + player.nextChat = 0; + break; + + case 3192: + if (player.getItemAssistant().playerHasItem(995, 25000) + && !player.getItemAssistant().playerHasItem(776) + && player.playerEquipment[player.playerHands] != 776) { + sendPlayerChat1("Yes please."); + player.getItemAssistant().deleteItem2(995, 25000); + player.getPlayerAssistant().removeGloves(); + player.getItemAssistant().addOrDropItem(776, 1); + player.nextChat = 0; + } else if (player.getItemAssistant().playerHasItem(776) + || player.playerEquipment[player.playerHands] == 776) { + sendNpcChat1("Why would you want another pair?", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } else { + sendNpcChat1("You need 25k to buy these.", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3193: + if (!player.getItemAssistant().playerHasItem(1540)) { + player.getItemAssistant().addOrDropItem(1540, 1); + sendNpcChat1("Enjoy!", player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } else { + sendNpcChat1("You already have one of those shields.", + player.talkingNpc, + NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3194: + QuestRewards.vampFinish(player); + break; + + case 3195: + sendPlayerChat1("I would like to exchange mole skins/claws for nests."); + player.nextChat = 3196; + break; + + case 3196: + sendOption2("Mole skins.", "Mole claws."); + player.dialogueAction = 180; + break; + + case 3197: + if (MOLE_SKIN > 0) { + sendPlayerChat2("I would like to exchange my " + MOLE_SKIN + " mole skins,", "for bird nests."); + player.nextChat = 3198; + } else { + sendNpcChat1("You don't have any mole skins.", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3198: + player.getItemAssistant().deleteItem2(7418, MOLE_SKIN); + player.getItemAssistant().addOrDropItem(7413, MOLE_SKIN); + sendNpcChat1("Here you go", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + + case 3199: + if (MOLE_CLAW > 0) { + sendPlayerChat2("I would like to exchange my " + MOLE_CLAW + " mole claws,", "for bird nests."); + player.nextChat = 3200; + } else { + sendNpcChat1("You don't have any mole claws.", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + } + break; + + case 3200: + player.getItemAssistant().deleteItem2(7416, MOLE_CLAW); + player.getItemAssistant().addOrDropItem(7413, MOLE_CLAW); + sendNpcChat1("Here you go", player.talkingNpc, NpcHandler.getNpcListName(player.talkingNpc)); + player.nextChat = 0; + break; + + //483 + case 3201: //competition judge + sendNpcChat4("Hello!", "I'm the competition judge of the Ranging Guild.", "You can buy shots from me and shoot the targets", "for points. You can exchange the points with me.", player.talkingNpc, "Judge"); + player.nextChat = 3202; + break; + + case 3202: + sendNpcChat1("What would you like to do?", player.talkingNpc, "Judge"); + player.nextChat = 3203; + break; + + case 3203: + sendOption4("I would like to buy shots.", "I would like to exchange my points.", "How am I doing right now?", "Never mind."); + player.dialogueAction = 485; + break; + + case 3204: + sendOption2("Pastry Dough", "Bread Dough"); + player.dialogueAction = 3204;//186 + break; + + case 3205: + sendOption2("Pastry Dough", "Bread Dough"); + player.dialogueAction = 3205;//187 + break; + + /*case 3206: + if (Constants.HALLOWEEN == false) { + sendNpcChat2("The halloween event is now over,", "what would you like?", 945, "" + Constants.SERVER_NAME + " Guide"); + client.nextChat = 3207; + } else if (client.recievedMask == false && Constants.HALLOWEEN) { + sendNpcChat2("Thank you so much for voting!", "Enjoy your mask!", 945, "" + Constants.SERVER_NAME + " Guide"); + client.getItemAssistant().addOrDropItem(client.getPlayerAssistant().randomReward(), 1); + VotingHandler.setAsReceived(client.playerName); + client.recievedMask = true; + client.nextChat = 0; + } else if (client.recievedMask == true && Constants.HALLOWEEN) { + sendNpcChat2("You have already recieved a halloween mask.", "What reward would you like?", 945, "" + Constants.SERVER_NAME + " Guide"); + client.nextChat = 3207; + } + break; + + case 3207: + sendOption3("Experience Lamp (Depends on Level of Skill)", "Coins (1-4k)", "Energy Lamp"); + client.dialogueAction = 188; + break;*/ + + case 3208: + sendNpcChat1("Hello, " + player.playerName + " what would you like to do?", 958, "Fadli"); + player.nextChat = 3209; + break; + + case 3209: + sendOption2("I would like to open my bank.", "I would like to view your shop."); + player.dialogueAction = 189; + break; + + case 3210: + sendPlayerChat1("I would like to open my bank."); + player.nextChat = 3211; + break; + + case 3211: + player.getPlayerAssistant().openUpBank(); + player.nextChat = 0; + break; + + case 3212: + sendPlayerChat1("I would like to view your shop."); + player.nextChat = 3213; + break; + + case 3213: + player.getShopAssistant().openShop(143); + player.nextChat = 0; + break; + + case 3214: + sendPlayerChat1("How's it going?"); + player.nextChat = 3215; + break; + + case 3215: + if (Misc.random(1) == 1) { + sendNpcChat1("I'm good, thank you for asking.", 2238, "Donie"); + player.nextChat = 0; + } else { + sendNpcChat1("I feel great, thanks for asking.", 2238, "Donie"); + player.nextChat = 0; + } + break; + + case 3216://23 + sendStartInfo("As you collect your reward, you notice an aweful smell.", "You look below the remaining debris to the bottom of the", "chest. You see a trapdoor. You open it and it leads to a ladder", "that goes down a long ways.", "Continue?"); + break; + + case 3217://24 + sendStatement("Would you like to continue?"); + player.nextChat = 3218; + break; + + case 3218://25 + sendOption2("Yes, I'm not afraid of anything!", "No way, the smell itself turns me away."); + player.dialogueAction = 3218; + break; + + case 3219://26 + sendStatement("This is a very dangerous minigame, are you sure?"); + player.nextChat = 3220; + break; + + case 3220://27 + player.dialogueAction = 3220; + sendOption2("Yes, I'm a brave warrior!", "Maybe I shouldn't, I could lose my items!"); + break; + + case 3221://28 + sendStatement("Congratulations, "+player.playerName+". You've completed the barrows challenge & your reward has been delivered."); + player.nextChat = 0; + break; + + case 3222://29 + sendStatement("Are you ready to visit the chest room?"); + player.nextChat = 3223; + player.dialogueAction = 3222; + break; + + case 3223://30 + sendOption2("Yes, I've killed all the other brothers!", "No, I still need to kill more brothers"); + player.nextChat = 0; + break; + + /** + * CANNNON + * @author Andrew + */ + case 3500: + if (player.getCannon().needsCannon()) { + sendNpcChat2("Hello, " + Misc.capitalize(player.playerName) + ".", "I see that you lost your cannon.", player.talkingNpc, "Nulodion"); + player.nextChat = 3501; + } else { + sendNpcChat1("" + Misc.capitalize(player.playerName) + " you do not have anything to collect currently.", player.talkingNpc, "Nulodion"); + player.nextChat = 0; + } + break; + + case 3501: + if (player.getCannon().needsCannon()) { + sendNpcChat1("Here is your cannon, try not to lose it again.", player.talkingNpc, "Nulodion"); + for (int i = 0; i < 4; i++) { + player.getItemAssistant().addItem(player.getCannon().ITEM_PARTS[i], 1); + } + player.lostCannon = false; + player.nextChat = 0; + } else { + sendNpcChat1("" + Misc.capitalize(player.playerName) + " you do not have a cannon to collect currently.", player.talkingNpc, "Nulodion"); + player.nextChat = 0; + } + break; + + } + + } + + public void chatboxText(Client c, String text, String text1, String text2, + String text3, String title) { + player.getPlayerAssistant().sendFrame126(title, 6180); + player.getPlayerAssistant().sendFrame126(text, 6181); + player.getPlayerAssistant().sendFrame126(text1, 6182); + player.getPlayerAssistant().sendFrame126(text2, 6183); + player.getPlayerAssistant().sendFrame126(text3, 6184); + } + + public void clearChatBoxText(Client c) { + player.getPlayerAssistant().sendFrame126("", 6180); + player.getPlayerAssistant().sendFrame126("", 6181); + player.getPlayerAssistant().sendFrame126("", 6182); + player.getPlayerAssistant().sendFrame126("", 6183); + player.getPlayerAssistant().sendFrame126("", 6184); + } + + public void sendStartInfo(String text, String text1, String text2, String text3, String title, boolean send) { + player.getPlayerAssistant().sendFrame126(title, 6180); + player.getPlayerAssistant().sendFrame126(text, 6181); + player.getPlayerAssistant().sendFrame126(text1, 6182); + player.getPlayerAssistant().sendFrame126(text2, 6183); + player.getPlayerAssistant().sendFrame126(text3, 6184); + player.getPlayerAssistant().sendChatInterface(6179); + } + + /* + * Options + */ + + public void sendPlayerChat1(String s) { + player.getPlayerAssistant().sendDialogueAnimation(969, 591); + player.getPlayerAssistant().sendFrame126(player.playerName, 970); + player.getPlayerAssistant().sendFrame126(s, 971); + player.getPlayerAssistant().sendPlayerDialogueHead(969); + player.getPlayerAssistant().sendChatInterface(968); + } + + public void sendPlayerChat2(String s, String s1) { + player.getPlayerAssistant().sendDialogueAnimation(974, 591); + player.getPlayerAssistant().sendFrame126(player.playerName, 975); + player.getPlayerAssistant().sendFrame126(s, 976); + player.getPlayerAssistant().sendFrame126(s1, 977); + player.getPlayerAssistant().sendPlayerDialogueHead(974); + player.getPlayerAssistant().sendChatInterface(973); + } + + private void sendPlayerChat3(String s, String s1, String s2) { + player.getPlayerAssistant().sendDialogueAnimation(980, 591); + player.getPlayerAssistant().sendFrame126(player.playerName, 981); + player.getPlayerAssistant().sendFrame126(s, 982); + player.getPlayerAssistant().sendFrame126(s1, 983); + player.getPlayerAssistant().sendFrame126(s2, 984); + player.getPlayerAssistant().sendPlayerDialogueHead(980); + player.getPlayerAssistant().sendChatInterface(979); + } + + private void sendPlayerChat4(String s, String s1, String s2, String s3) { + player.getPlayerAssistant().sendDialogueAnimation(987, 591); + player.getPlayerAssistant().sendFrame126(player.playerName, 988); + player.getPlayerAssistant().sendFrame126(s, 989); + player.getPlayerAssistant().sendFrame126(s1, 990); + player.getPlayerAssistant().sendFrame126(s2, 991); + player.getPlayerAssistant().sendFrame126(s3, 992); + player.getPlayerAssistant().sendPlayerDialogueHead(987); + player.getPlayerAssistant().sendChatInterface(986); + } + + public void sendOption2(String s, String s1) { + player.getPlayerAssistant().sendFrame126("Select an Option", 2460); + player.getPlayerAssistant().sendFrame126(s, 2461); + player.getPlayerAssistant().sendFrame126(s1, 2462); + player.getPlayerAssistant().sendChatInterface(2459); + } + + public void sendOption3(String s, String s1, String s2) { + player.getPlayerAssistant().sendFrame126("Select an Option", 2470); + player.getPlayerAssistant().sendFrame126(s, 2471); + player.getPlayerAssistant().sendFrame126(s1, 2472); + player.getPlayerAssistant().sendFrame126(s2, 2473); + player.getPlayerAssistant().sendChatInterface(2469); + } + + public void sendOption4(String s, String s1, String s2, String s3) { + player.getPlayerAssistant().sendFrame126("Select an Option", 2481); + player.getPlayerAssistant().sendFrame126(s, 2482); + player.getPlayerAssistant().sendFrame126(s1, 2483); + player.getPlayerAssistant().sendFrame126(s2, 2484); + player.getPlayerAssistant().sendFrame126(s3, 2485); + player.getPlayerAssistant().sendChatInterface(2480); + } + + public void sendOption5(String s, String s1, String s2, String s3, String s4) { + player.getPlayerAssistant().sendFrame126("Select an Option", 2493); + player.getPlayerAssistant().sendFrame126(s, 2494); + player.getPlayerAssistant().sendFrame126(s1, 2495); + player.getPlayerAssistant().sendFrame126(s2, 2496); + player.getPlayerAssistant().sendFrame126(s3, 2497); + player.getPlayerAssistant().sendFrame126(s4, 2498); + player.getPlayerAssistant().sendChatInterface(2492); + } + + /* + * Statements + */ + + public void sendStatement(String s) { // 1 line click here to continue chat + // box interface + player.getPlayerAssistant().sendFrame126(s, 357); + player.getPlayerAssistant().sendFrame126("Click here to continue", 358); + player.getPlayerAssistant().sendChatInterface(356); + } + + public void sendStatement2(String s, String s1) { + player.getPlayerAssistant().sendFrame126(s, 360); + player.getPlayerAssistant().sendFrame126(s1, 361); + player.getPlayerAssistant().sendFrame126("Click here to continue", 362); + player.getPlayerAssistant().sendChatInterface(359); + } + + public void sendStatement3(String s, String s1, String s2) { + player.getPlayerAssistant().sendFrame126(s, 364); + player.getPlayerAssistant().sendFrame126(s1, 365); + player.getPlayerAssistant().sendFrame126(s1, 366); + player.getPlayerAssistant().sendFrame126("Click here to continue", 367); + player.getPlayerAssistant().sendChatInterface(363); + } + + public void sendStatement4(String s, String s1, String s2, String s3) { + player.getPlayerAssistant().sendFrame126(s, 369); + player.getPlayerAssistant().sendFrame126(s1, 370); + player.getPlayerAssistant().sendFrame126(s2, 371); + player.getPlayerAssistant().sendFrame126(s3, 372); + player.getPlayerAssistant().sendFrame126("Click here to continue", 373); + player.getPlayerAssistant().sendChatInterface(368); + } + + public void itemMessage(String title, String message, int itemid, int size) { + player.getPlayerAssistant().sendDialogueAnimation(4883, 591); + player.getPlayerAssistant().sendFrame126(title, 4884); + player.getPlayerAssistant().sendFrame126(message, 4885); + player.getPlayerAssistant().sendFrame126("Click here to continue.", 4886); + player.getPlayerAssistant().sendFrame246(4883, size, itemid); + player.getPlayerAssistant().sendChatInterface(4882); + } + + /* + * Npc Chatting + */ + + public void sendNpcChat1(String s, int ChatNpc, String name) { + player.getPlayerAssistant().sendDialogueAnimation(4883, 591); + player.getPlayerAssistant().sendFrame126(name, 4884); + player.getPlayerAssistant().sendFrame126(s, 4885); + player.getPlayerAssistant().sendNPCDialogueHead(ChatNpc, 4883); + player.getPlayerAssistant().sendChatInterface(4882); + } + + public void sendNpcChat2(String s, String s1, int ChatNpc, String name) { + player.getPlayerAssistant().sendDialogueAnimation(4888, 591); + player.getPlayerAssistant().sendFrame126(name, 4889); + player.getPlayerAssistant().sendFrame126(s, 4890); + player.getPlayerAssistant().sendFrame126(s1, 4891); + player.getPlayerAssistant().sendNPCDialogueHead(ChatNpc, 4888); + player.getPlayerAssistant().sendChatInterface(4887); + } + + public void sendNpcChat3(String s, String s1, String s2, int ChatNpc, + String name) { + player.getPlayerAssistant().sendDialogueAnimation(4894, 591); + player.getPlayerAssistant().sendFrame126(name, 4895); + player.getPlayerAssistant().sendFrame126(s, 4896); + player.getPlayerAssistant().sendFrame126(s1, 4897); + player.getPlayerAssistant().sendFrame126(s2, 4898); + player.getPlayerAssistant().sendNPCDialogueHead(ChatNpc, 4894); + player.getPlayerAssistant().sendChatInterface(4893); + } + + + public void sendNpcChat4(String s, String s1, String s2, String s3, + int ChatNpc, String name) { + player.getPlayerAssistant().sendDialogueAnimation(4901, 591); + player.getPlayerAssistant().sendFrame126(name, 4902); + player.getPlayerAssistant().sendFrame126(s, 4903); + player.getPlayerAssistant().sendFrame126(s1, 4904); + player.getPlayerAssistant().sendFrame126(s2, 4905); + player.getPlayerAssistant().sendFrame126(s3, 4906); + player.getPlayerAssistant().sendNPCDialogueHead(ChatNpc, 4901); + player.getPlayerAssistant().sendChatInterface(4900); + } + + /* + * Tutorial interface + */ + + public void sendStartInfo(String text, String text1, String text2, + String text3, String title) { + player.getPlayerAssistant().sendFrame126(title, 6180); + player.getPlayerAssistant().sendFrame126(text, 6181); + player.getPlayerAssistant().sendFrame126(text1, 6182); + player.getPlayerAssistant().sendFrame126(text2, 6183); + player.getPlayerAssistant().sendFrame126(text3, 6184); + player.getPlayerAssistant().sendChatInterface(6179); + } + + /* + * ItemInformation Box + */ + + public void itemMessage1(String message1, int itemid, int size) { + player.getPlayerAssistant().sendDialogueAnimation(307, 591); + player.getPlayerAssistant().sendFrame126(message1, 308); + player.getPlayerAssistant().sendFrame246(307, size, itemid); + player.getPlayerAssistant().sendChatInterface(306); + player.nextChat = 0; + } + + /* + * Give items + */ + + public void sendGiveItemNpc(String text1, String text2, int item1, int item2) { + player.getPlayerAssistant().sendFrame126(text1, 6232); + player.getPlayerAssistant().sendFrame126(text2, 6233); + player.getPlayerAssistant().sendFrame246(6235, 170, item1); + player.getPlayerAssistant().sendFrame246(6236, 170, item2); + player.getPlayerAssistant().sendChatInterface(6231); + } + + public void sendGiveItemNpc(String text, int item) { + player.getPlayerAssistant().sendFrame126(text, 308); + player.getPlayerAssistant().sendFrame246(307, 200, item); + player.getPlayerAssistant().sendChatInterface(306); + } + + /** + * USAGE: displayTwoItemsOption(c, new String {"Whip", "DDS", new int { + * 4151, 5698}, new int { 150, 150}); Displays two items with a select one + * option. + */ + public void displayTwoItemsOption(Client c, String[] s, int items[], + int[] zoom) { + player.getPlayerAssistant().sendFrame126(s[0], 144); + player.getPlayerAssistant().sendFrame126(s[1], 145); + player.getPlayerAssistant().sendFrame246(items[0], zoom[0], 142); + player.getPlayerAssistant().sendFrame246(items[1], zoom[1], 143); + player.getPlayerAssistant().sendChatInterface(139); + } + + /** + * Displays single line text + */ + public void displaySingleLine(Client c, String s) { + player.getPlayerAssistant().sendFrame126(s, 357); + player.getPlayerAssistant().sendChatInterface(356); + } + + /** + * Displays two lined text + */ + public void displayTwoLined(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 360); + player.getPlayerAssistant().sendFrame126(s[1], 361); + player.getPlayerAssistant().sendChatInterface(359); + } + + /** + * Displays Three lined text + */ + public void displayThreeLined(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 364); + player.getPlayerAssistant().sendFrame126(s[1], 365); + player.getPlayerAssistant().sendFrame126(s[2], 366); + player.getPlayerAssistant().sendChatInterface(363); + } + + /** + * Displays Four lined text + */ + public void displayFourLined(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 369); + player.getPlayerAssistant().sendFrame126(s[1], 370); + player.getPlayerAssistant().sendFrame126(s[2], 371); + player.getPlayerAssistant().sendFrame126(s[2], 372); + player.getPlayerAssistant().sendChatInterface(368); + } + + /** + * Select Option 2 + */ + public void displaySelectOption2(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 2461); + player.getPlayerAssistant().sendFrame126(s[1], 2462); + player.getPlayerAssistant().sendChatInterface(2459); + } + + /** + * Select Option 3 + */ + public void displaySelectOption3(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 2471); + player.getPlayerAssistant().sendFrame126(s[1], 2472); + player.getPlayerAssistant().sendFrame126(s[2], 2473); + player.getPlayerAssistant().sendChatInterface(2469); + } + + /** + * Select Option 4 + */ + public void displaySelectOption4(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 2482); + player.getPlayerAssistant().sendFrame126(s[1], 2483); + player.getPlayerAssistant().sendFrame126(s[2], 2484); + player.getPlayerAssistant().sendFrame126(s[3], 2485); + player.getPlayerAssistant().sendChatInterface(2480); + } + + /** + * Select Option 5 + */ + public void displaySelectOption5(Client c, String[] s) { + player.getPlayerAssistant().sendFrame126(s[0], 2494); + player.getPlayerAssistant().sendFrame126(s[1], 2495); + player.getPlayerAssistant().sendFrame126(s[2], 2496); + player.getPlayerAssistant().sendFrame126(s[3], 2497); + player.getPlayerAssistant().sendFrame126(s[4], 2498); + player.getPlayerAssistant().sendChatInterface(2492); + } + + public void itemMessage(Client c, String message1, int itemid, int size) { + player.getPlayerAssistant().sendDialogueAnimation(307, 591); + player.getPlayerAssistant().sendFrame126(message1, 308); + player.getPlayerAssistant().sendFrame246(307, size, itemid); + player.getPlayerAssistant().sendChatInterface(306); + c.nextChat = 0; + } + + public void sendItemChat1(Client c, String header, String one, int item, + int zoom) { + player.getPlayerAssistant().sendFrame246(4883, zoom, item); + player.getPlayerAssistant().sendFrame126(header, 4884); + player.getPlayerAssistant().sendFrame126(one, 4885); + player.getPlayerAssistant().sendChatInterface(4882); + } + + public void sendItemChat2(Client c, String header, String one, String two, + int item, int zoom) { + player.getPlayerAssistant().sendFrame246(4888, zoom, item); + player.getPlayerAssistant().sendFrame126(header, 4889); + player.getPlayerAssistant().sendFrame126(one, 4890); + player.getPlayerAssistant().sendFrame126(two, 4891); + player.getPlayerAssistant().sendChatInterface(4887); + } + + public void sendItemChat3(Client c, String header, String one, String two, + String three, int item, int zoom) { + player.getPlayerAssistant().sendFrame246(4894, zoom, item); + player.getPlayerAssistant().sendFrame126(header, 4895); + player.getPlayerAssistant().sendFrame126(one, 4896); + player.getPlayerAssistant().sendFrame126(two, 4897); + player.getPlayerAssistant().sendFrame126(three, 4898); + player.getPlayerAssistant().sendChatInterface(4893); + } + + public void sendItemChat4(Client c, String header, String one, String two, + String three, String four, int item, int zoom) { + player.getPlayerAssistant().sendFrame246(4901, zoom, item); + player.getPlayerAssistant().sendFrame126(header, 4902); + player.getPlayerAssistant().sendFrame126(one, 4903); + player.getPlayerAssistant().sendFrame126(two, 4904); + player.getPlayerAssistant().sendFrame126(three, 4905); + player.getPlayerAssistant().sendFrame126(four, 4906); + player.getPlayerAssistant().sendChatInterface(4900); + } +} diff --git a/2006Redone Server/src/redone/game/globalworldobjects/ClimbOther.java b/2006Redone Server/src/redone/game/globalworldobjects/ClimbOther.java new file mode 100644 index 00000000..d744ba5d --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/ClimbOther.java @@ -0,0 +1,56 @@ +package redone.game.globalworldobjects; + +import redone.game.objects.Object; +import redone.game.objects.ObjectDefaults; +import redone.game.players.Client; +import redone.world.clip.ObjectDef; +import redone.world.clip.Region; + +public class ClimbOther { + + public enum ClimbData { + + VARROCK_MANHOLE(881, 882), + LUMBRIDGE_TRAPDOOR(14879, 10698), + VARROCK_TRAPDOOR(1568, 10698); + + private int closedId, openId; + + private ClimbData(int closedId, int openId) { + this.closedId = closedId; + this.openId = openId; + } + + public int getClosed() { + return closedId; + } + + public int getOpen() { + return openId; + } + } + + public static void handleOpenOther(Client player, int objectType) { + for (ClimbData t: ClimbData.values()) { + if (objectType == t.getClosed()) { + new Object(t.getOpen(), player.objectX, player.objectY, player.heightLevel, ObjectDefaults.getObjectFace(player, t.getClosed()), 10, t.getClosed(), 100); + Region.addObject(t.getOpen(), player.objectX, player.objectY, player.heightLevel, 10, ObjectDefaults.getObjectFace(player, t.getClosed()), false); + } + } + } + + public static void useOther(Client player, int objectType) { + final String objectName = ObjectDef.getObjectDef(objectType).name; + if (System.currentTimeMillis() - player.climbDelay < 1800) { + return; + } + player.stopMovement(); + player.startAnimation(827); + player.getPlayerAssistant().removeAllWindows(); + player.teleportToX = player.absX; + player.teleportToY = player.absY + 6400; + player.getActionSender().sendMessage("You climb down the " + objectName.toLowerCase() + "."); + player.climbDelay = System.currentTimeMillis(); + } + +} diff --git a/2006Redone Server/src/redone/game/globalworldobjects/Doors.java b/2006Redone Server/src/redone/game/globalworldobjects/Doors.java new file mode 100644 index 00000000..1f52648c --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/Doors.java @@ -0,0 +1,272 @@ +package redone.game.globalworldobjects; + +import java.util.ArrayList; +import java.util.List; +import java.io.*; +import java.util.Scanner; + +import redone.Server; +import redone.game.objects.Objects; + + + +public class Doors { + + private static Doors singleton = null; + + private List doors = new ArrayList(); + + private File doorFile; + + public static Doors getSingleton() { + if (singleton == null) { + singleton = new Doors("./data/doors.txt"); + } + return singleton; + } + + private Doors(String file){ + doorFile = new File(file); + } + + private Doors(int door, int x, int y, int z, int face, int type, int open) { + this.doorId = door; + this.originalId = door; + this.doorX = x; + this.doorY = y; + this.originalX = x; + this.originalY = y; + this.doorZ = z; + this.originalFace = face; + this.currentFace = face; + this.type = type; + this.open = open; + } + + private Doors getDoor(int id, int x, int y, int z) { + for (Doors d : doors) { + if (d.doorId == id) { + if (d.doorX == x && d.doorY == y && d.doorZ == z) { + return d; + } + } + } + return null; + } + + public boolean handleDoor(int id, int x, int y, int z) { + + Doors d = getDoor(id, x, y, z); + + if (d == null) { + if (DoubleDoors.getSingleton().handleDoor(id, x, y, z)) { + return true; + } + return false; + } + int xAdjustment = 0, yAdjustment = 0; + if (d.type == 0) { + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = -1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + yAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + yAdjustment = -1; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + yAdjustment = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + xAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + yAdjustment = -1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + xAdjustment = -1; + } + } + } else if (d.type == 9) { + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + xAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = -1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + xAdjustment = -1; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + xAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = -1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + xAdjustment = -1; + } + } + } + if (xAdjustment != 0 || yAdjustment != 0) { + Objects o = new Objects(-1, d.doorX, d.doorY, d.doorZ, 0, d.type, 0); + Server.objectHandler.placeObject(o); + } + if (d.doorX == d.originalX && d.doorY == d.originalY) { + d.doorX += xAdjustment; + d.doorY += yAdjustment; + } else { + Objects o = new Objects(-1, d.doorX, d.doorY, d.doorZ, 0, d.type, 0); + Server.objectHandler.placeObject(o); + d.doorX = d.originalX; + d.doorY = d.originalY; + } + if (d.doorId == d.originalId) { + if (d.open == 0) { + d.doorId += 1; + } else if (d.open == 1) { + d.doorId -= 1; + } + } else if (d.doorId != d.originalId) { + if (d.open == 0) { + d.doorId -= 1; + } else if (d.open == 1) { + d.doorId += 1; + } + } + Server.objectHandler.placeObject(new Objects(d.doorId, d.doorX, d.doorY, d.doorZ, getNextFace(d), d.type, 0)); + return true; + } + + private int getNextFace(Doors d) { + int f = d.originalFace; + if (d.type == 0) { + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 2; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 3; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 0; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 3; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 0; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 2; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } + } else if (d.type == 9) { + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 3; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 2; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 0; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 3; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 0; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 2; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } + } + d.currentFace = f; + return f; + } + + public void load() { + //long start = System.currentTimeMillis(); + try { + singleton.processLineByLine(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + //System.out.println("Loaded "+ doors.size() +" doors in "+ (System.currentTimeMillis() - start) +"ms."); + } + + private final void processLineByLine() throws FileNotFoundException { + Scanner scanner = new Scanner(new FileReader(doorFile)); + try { + while(scanner.hasNextLine()) { + processLine(scanner.nextLine()); + } + } finally { + scanner.close(); + } + } + + protected void processLine(String line){ + Scanner scanner = new Scanner(line); + scanner.useDelimiter(" "); + try { + while(scanner.hasNextLine()) { + int id = Integer.parseInt(scanner.next()); + int x = Integer.parseInt(scanner.next()); + int y = Integer.parseInt(scanner.next()); + int f = Integer.parseInt(scanner.next()); + int z = Integer.parseInt(scanner.next()); + int t = Integer.parseInt(scanner.next()); + doors.add(new Doors(id,x,y,z,f,t,alreadyOpen(id)?1:0)); + } + } finally { + scanner.close(); + } + } + + private boolean alreadyOpen(int id) { + for (int i = 0; i < openDoors.length; i++) { + if (openDoors[i] == id) { + return true; + } + } + return false; + } + + private int doorId; + private int originalId; + private int doorX; + private int doorY; + private int originalX; + private int originalY; + private int doorZ; + private int originalFace; + private int currentFace; + private int type; + private int open; + + private static int[] openDoors = { + 1504, 1514, 1517, 1520, 1531, + 1534, 2033, 2035, 2037, 2998, + 3271, 4468, 4697, 6101,6103, + 6105, 6107, 6109, 6111, 6113, + 6115, 6976, 6978, 8696, 8819, + 10261, 10263,10265,11708,11710, + 11712,11715,11994,12445, 13002, + }; + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/globalworldobjects/DoubleDoors.java b/2006Redone Server/src/redone/game/globalworldobjects/DoubleDoors.java new file mode 100644 index 00000000..31c20650 --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/DoubleDoors.java @@ -0,0 +1,387 @@ +package redone.game.globalworldobjects; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import redone.Server; +import redone.game.objects.Objects; + +/** + * + * @author Killamess + * + */ +public class DoubleDoors { + + private static DoubleDoors singleton = null; + + private List doors = new ArrayList(); + + private File doorFile; + + public static DoubleDoors getSingleton() { + if (singleton == null) { + singleton = new DoubleDoors("./data/doubledoors.txt"); + } + return singleton; + } + + private DoubleDoors(String file){ + doorFile = new File(file); + } + + private DoubleDoors getDoor(int id, int x, int y, int z) { + for (DoubleDoors d : doors) { + if (d.doorId == id) { + if (d.x == x && d.y == y && d.z == z) { + return d; + } + } + } + return null; + } + + public boolean handleDoor(int id, int x, int y, int z) { + DoubleDoors doorClicked = getDoor(id, x, y, z); + + if (doorClicked == null) { + return true; + } + if (doorClicked.doorId > 12000) { + return true; //nearly all of these are not opened + } + if (doorClicked.open == 0) { + if (doorClicked.originalFace == 0) { + DoubleDoors lowerDoor = getDoor(id - 3, x, y -1, z); + DoubleDoors upperDoor = getDoor(id + 3, x, y +1, z); + if (lowerDoor != null) { + changeLeftDoor(lowerDoor); + changeRightDoor(doorClicked); + } else if (upperDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(upperDoor); + } + } else if (doorClicked.originalFace == 1) { + DoubleDoors westDoor = getDoor(id - 3, x -1, y, z); + DoubleDoors eastDoor = getDoor(id + 3, x +1, y, z); + if (westDoor != null) { + changeLeftDoor(westDoor); + changeRightDoor(doorClicked); + } else if (eastDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(eastDoor); + } + } else if (doorClicked.originalFace == 2) { + DoubleDoors lowerDoor = getDoor(id - 3, x, y +1, z); + DoubleDoors upperDoor = getDoor(id + 3, x, y -1, z); + if (lowerDoor != null) { + changeLeftDoor(lowerDoor); + changeRightDoor(doorClicked); + } else if (upperDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(upperDoor); + } + } else if (doorClicked.originalFace == 3) { + DoubleDoors westDoor = getDoor(id + 3, x -1, y, z); + DoubleDoors eastDoor = getDoor(id - 3, x +1, y, z); + if (westDoor != null) { + changeLeftDoor(westDoor); + changeRightDoor(doorClicked); + } else if (eastDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(eastDoor); + } + } + } else if (doorClicked.open == 1) { + if (doorClicked.originalFace == 0) { + DoubleDoors westDoor = getDoor(id - 3, x -1, y, z); + DoubleDoors upperDoor = getDoor(id + 3, x +1, y, z); + if (westDoor != null) { + changeLeftDoor(westDoor); + changeRightDoor(doorClicked); + } else if (upperDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(upperDoor); + } + } else if (doorClicked.originalFace == 1) { + DoubleDoors northDoor = getDoor(id - 3, x, y + 1, z); + DoubleDoors southDoor = getDoor(id + 3, x, y -1, z); + if (northDoor != null) { + changeLeftDoor(northDoor); + changeRightDoor(doorClicked); + } else if (southDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(southDoor); + } + } else if (doorClicked.originalFace == 2) { + DoubleDoors westDoor = getDoor(id - 3, x -1, y, z); + DoubleDoors eastDoor = getDoor(id + 3, x, y -1, z); + if (westDoor != null) { + changeLeftDoor(westDoor); + changeRightDoor(doorClicked); + } else if (eastDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(eastDoor); + } + } else if (doorClicked.originalFace == 3) { + DoubleDoors northDoor = getDoor(id - 3, x, y + 1, z); + DoubleDoors southDoor = getDoor(id + 3, x, y -1, z); + if (northDoor != null) { + changeLeftDoor(northDoor); + changeRightDoor(doorClicked); + } else if (southDoor != null) { + changeLeftDoor(doorClicked); + changeRightDoor(southDoor); + } + } + } + return true; + } + + public void changeLeftDoor(DoubleDoors d) { + int xAdjustment = 0, yAdjustment = 0; + + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = -1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + yAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = +1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + yAdjustment = -1; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + yAdjustment = -1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + xAdjustment = -1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = -1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + xAdjustment = -1; + } + } + if (xAdjustment != 0 || yAdjustment != 0) { + Server.objectHandler.placeObject(new Objects(-1, d.x, d.y, d.z, 0, 0, 0)); + } + if (d.x == d.originalX && d.y == d.originalY) { + d.x += xAdjustment; + d.y += yAdjustment; + } else { + Server.objectHandler.placeObject(new Objects(-1, d.x, d.y, d.z, 0, 0, 0)); + d.x = d.originalX; + d.y = d.originalY; + } + if (d.doorId == d.originalId) { + if (d.open == 0) { + d.doorId += 1; + } else if (d.open == 1) { + d.doorId -= 1; + } + } else if (d.doorId != d.originalId) { + if (d.open == 0) { + d.doorId = d.originalId; + } else if (d.open == 1) { + d.doorId = d.originalId; + } + } + Server.objectHandler.placeObject(new Objects(d.doorId, d.x, d.y, d.z, getNextLeftFace(d), 0, 0)); + } + + private int getNextLeftFace(DoubleDoors d) { + int f = d.originalFace; + + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 3; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 0; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 0; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 2; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 2; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } + d.currentFace = f; + return f; + } + + public void changeRightDoor(DoubleDoors d) { + int xAdjustment = 0, yAdjustment = 0; + + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = -1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + yAdjustment = 1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + xAdjustment = +1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + yAdjustment = -1; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + xAdjustment = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + xAdjustment = -1; + } else if (d.originalFace == 2 && d.currentFace == 2) { + yAdjustment = -1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + xAdjustment = -1; + } + } + if (xAdjustment != 0 || yAdjustment != 0) { + Server.objectHandler.placeObject(new Objects(-1, d.x, d.y, d.z, 0, 0, 0)); + } + if (d.x == d.originalX && d.y == d.originalY) { + d.x += xAdjustment; + d.y += yAdjustment; + } else { + Server.objectHandler.placeObject(new Objects(-1, d.x, d.y, d.z, 0, 0, 0)); + d.x = d.originalX; + d.y = d.originalY; + } + if (d.doorId == d.originalId) { + if (d.open == 0) { + d.doorId += 1; + } else if (d.open == 1) { + d.doorId -= 1; + } + } else if (d.doorId != d.originalId) { + if (d.open == 0) { + d.doorId = d.originalId; + } else if (d.open == 1) { + d.doorId = d.originalId; + } + } + Server.objectHandler.placeObject(new Objects(d.doorId, d.x, d.y, d.z, getNextRightFace(d), 0, 0)); + } + + private int getNextRightFace(DoubleDoors d) { + int f = d.originalFace; + + if (d.open == 0) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 1; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 2; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 3; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 2; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } else if (d.open == 1) { + if (d.originalFace == 0 && d.currentFace == 0) { + f = 3; + } else if (d.originalFace == 1 && d.currentFace == 1) { + f = 0; + } else if (d.originalFace == 2 && d.currentFace == 2) { + f = 1; + } else if (d.originalFace == 3 && d.currentFace == 3) { + f = 2; + } else if (d.originalFace != d.currentFace){ + f = d.originalFace; + } + } + d.currentFace = f; + return f; + } + + private int doorId; + private int originalId; + private int open; + private int x; + private int y; + private int z; + private int originalX; + private int originalY; + private int currentFace; + private int originalFace; + + public DoubleDoors(int id, int x, int y, int z, int f, int open) { + this.doorId = id; + this.originalId = id; + this.open = open; + this.x = x; + this.originalX = x; + this.y = y; + this.z = z; + this.originalY = y; + this.currentFace = f; + this.originalFace = f; + } + + public boolean isOpenDoor(int id){ + for (int i = 0; i < openDoors.length; i++) { + if (id == openDoors[i] || id + 3 == openDoors[i]) { + return true; + } + } + return false; + } + + //Have not found any others yet. Maybe only 1 type of double + //doors exist to operate. + private static int[] openDoors = { + 1520, 1517 + }; + + public void load() { + //long start = System.currentTimeMillis(); + try { + singleton.processLineByLine(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + //System.out.println("Loaded "+ doors.size() +" Double doors in "+ (System.currentTimeMillis() - start) +"ms."); + } + + private final void processLineByLine() throws FileNotFoundException { + Scanner scanner = new Scanner(new FileReader(doorFile)); + try { + while(scanner.hasNextLine()) { + processLine(scanner.nextLine()); + } + } finally { + scanner.close(); + } + } + + protected void processLine(String line){ + Scanner scanner = new Scanner(line); + scanner.useDelimiter(" "); + try { + while(scanner.hasNextLine()) { + int id = Integer.parseInt(scanner.next()); + int x = Integer.parseInt(scanner.next()); + int y = Integer.parseInt(scanner.next()); + int f = Integer.parseInt(scanner.next()); + int z = Integer.parseInt(scanner.next()); + doors.add(new DoubleDoors(id, x, y, z, f, isOpenDoor(id) ? 1 : 0)); + } + } finally { + scanner.close(); + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/globalworldobjects/DoubleGates.java b/2006Redone Server/src/redone/game/globalworldobjects/DoubleGates.java new file mode 100644 index 00000000..4359c836 --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/DoubleGates.java @@ -0,0 +1,180 @@ +package redone.game.globalworldobjects; + +import redone.game.players.Client; +/** + * Single Gates + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class DoubleGates extends GateHandler { + + public static void useDoubleGate(Client player, int objectId) { + switch (objectId) { + case 7049: + handleGate(player, 7049, 7050, 3077, 3259, 3077, 3260, 3077, 3258, 3078, 3258, 2); + break; + case 7050: + handleGate(player, 7050, 7049, 3077, 3260, 3077, 3259, 3078, 3258, 3077, 3258, 2); + break; + case 1598: + handleGate(player, 1598, 1599, 3319, 3467, 3318, 3467, 3320, 3467, 3320, 3468, 1); + break; + case 1599: + handleGate(player, 1599, 1598, 3318, 3467, 3319, 3467, 3320, 3468, 3320, 3467, 1); + break; + case 3197: + handleGate(player, 3197, 3198, 3311, 3234, 3310, 3234, 3312, 3234, 3312, 3235, 1); + break; + case 3198: + handleGate(player, 3198, 3197, 3310, 3234, 3311, 3234, 3312, 3235, 3312, 3234, 1); + break; + case 1551: + if (player.objectX > 3179 && player.objectX < 3182) { + handleGate(player, 1551, 1553, 3181, 3288, 3181, 3287, 3181, 3289, 3180, 3289, 0); + } else if (player.objectX > 3161 && player.objectX < 3164) { + handleGate(player, 1551, 1553, 3163, 3289, 3163, 3288, 3163, 3290, 3162, 3290, 0); + } else if (player.objectY > 3290 && player.objectY < 3294) { + handleGate(player, 1551, 1553, 3145, 3292, 3145, 3293, 3145, 3291, 3146, 3291, 2); + } else if (player.objectY > 3272 && player.objectY < 3275) { + handleGate(player, 1551, 1553, 3106, 3273, 3105, 3273, 3107, 3273, 3107, 3274, 1); + } else if (player.objectY > 3265 && player.objectY < 3268) { + handleGate(player, 1551, 1553, 3252, 3266, 3251, 3266, 3253, 3266, 3253, 3267, 1); + } else if (player.objectY > 3283 && player.objectY < 3286) { + handleGate(player, 1551, 1553, 3237, 3285, 3238, 3285, 3236, 3285, 3236, 3284, 5); + } else if (player.objectY > 3294 && player.objectY < 3297) { + handleGate(player, 1551, 1553, 3237, 3296, 3238, 3296, 3236, 3296, 3236, 3295, 5); + } else if (player.objectY > 3300 && player.objectY < 3303) { + handleGate(player, 1551, 1553, 3240, 3301, 3239, 3301, 3241, 3301, 3241, 3302, 1); + } else if (player.objectX > 3260 & player.objectX < 3263) { + handleGate(player, 1551, 1553, 3261, 3322, 3261, 3323, 3261, 3321, 3262, 3321, 2); + } else if (player.objectY > 3348 && player.objectY < 3351) { + handleGate(player, 1551, 1553, 2676, 3350, 2677, 3350, 2675, 3350, 2675, 3349, 5); + } else if (player.objectY > 3313 && player.objectY < 3318) { + handleGate(player, 1551, 1553, 3174, 3314, 3174, 3315, 3175, 3316, 3174, 3316, 4); + } else { + handleGate(player, 1551, 1553, 3198, 3281, 3198, 3280, 3198, 3282, 3197, 3282, 0); + } + break; + case 1553: + if (player.objectX > 3179 && player.objectX < 3182) { + handleGate(player, 1553, 1551, 3181, 3287, 3181, 3288, 3180, 3289, 3181, 3289, 0); + } else if (player.objectX > 3161 && player.objectX < 3164) { + handleGate(player, 1553, 1551, 3163, 3288, 3163, 3289, 3162, 3290, 3163, 3290, 0); + } else if (player.objectY > 3290 && player.objectY < 3294) { + handleGate(player, 1553, 1551, 3145, 3293, 3145, 3292, 3146, 3291, 3145, 3291, 2); + } else if (player.objectY > 3272 && player.objectY < 3275) { + handleGate(player, 1553, 1551, 3105, 3273, 3106, 3273, 3107, 3274, 3107, 3273, 1); + } else if (player.objectY > 3265 && player.objectY < 3268) { + handleGate(player, 1553, 1551, 3251, 3266, 3252, 3266, 3253, 3267, 3253, 3266, 1); + } else if (player.objectY > 3283 && player.objectY < 3286) { + handleGate(player, 1553, 1551, 3238, 3285, 3237, 3285, 3236, 3284, 3236, 3285, 5); + } else if (player.objectY > 3294 && player.objectY < 3297) { + handleGate(player, 1553, 1551, 3238, 3296, 3237, 3296, 3236, 3295, 3236, 3296, 5); + } else if (player.objectY > 3300 && player.objectY < 3303) { + handleGate(player, 1553, 1551, 3239, 3301, 3240, 3301, 3241, 3302, 3241, 3301, 1); + } else if (player.objectX > 3260 & player.objectX < 3263) { + handleGate(player, 1553, 1551, 3261, 3323, 3261, 3322, 3262, 3321, 3261, 3321, 2); + } else if (player.objectY > 3348 && player.objectY < 3351) { + handleGate(player, 1553, 1551, 2677, 3350, 2676, 3350, 2675, 3349, 2675, 3350, 5); + } else if (player.objectY > 3313 && player.objectY < 3318) { + handleGate(player, 1553, 1551, 3174, 3315, 3174, 3314, 3174, 3316, 3175, 3316, 4); + } else { + handleGate(player, 1553, 1551, 3198, 3280, 3198, 3281, 3197, 3282, 3198, 3282, 0); + } + break; + case 12986: + if (player.objectX > 3187 && player.objectX < 3190) { + handleGate(player, 12986, 12987, 3188, 3280, 3188, 3281, 3188, 3279, 3189, 3279, 2); + } else if (player.objectY > 3267 && player.objectY < 3270) { + handleGate(player, 12986, 12987, 3185, 3268, 3184, 3268, 3186, 3268, 3186, 3269, 1); + } else { + handleGate(player, 12986, 12987, 3212, 3261, 3211, 3261, 3213, 3261, 3213, 3262, 1); + } + break; + case 12987: + if (player.objectX > 3187 && player.objectX < 3190) { + handleGate(player, 12987, 12986, 3188, 3281, 3188, 3280, 3189, 3279, 3188, 3279, 2); + } else if (player.objectY > 3267 && player.objectY < 3270) { + handleGate(player, 12987, 12986, 3184, 3268, 3185, 3268, 3186, 3269, 3186, 3268, 1); + } else { + handleGate(player, 12987, 12986, 3211, 3261, 3212, 3261, 3213, 3262, 3213, 3261, 1); + } + break; + case 1596: + if (player.objectX > 3310 && player.objectX < 3313 && player.absY != 3333) { + handleSpecialGate(player, 1596, 1597, 3311, 3331, 3311, 3332, 3312, 3331, 3312, 3332, 3); + } else if (player.objectY > 3318 && player.objectY < 3321 && player.absX != 2935 && player.absX != 2932) { + handleSpecialGate(player, 1596, 1597, 2934, 3319, 2933, 3319, 2934, 3320, 2933, 3320, 0); + } else if (player.objectX > 3130 && player.objectX < 3133) { + handleSpecialGate(player, 1596, 1597, 3131, 9918, 3132, 9918, 3131, 9917, 3132, 9917, 6); + } else if (player.objectY > 3181 && player.objectY < 3184) { + handleSpecialGate(player, 1596, 1597, 2815, 3182, 2815, 3183, 2816, 3182, 2816, 3183, 3); + } else if (player.objectY > 3449 && player.objectY < 3452) { + handleSpecialGate(player, 1596, 1597, 2936, 3451, 2936, 3450, 2935, 3451, 2935, 3450, 7); + } + break; + case 1597: + if (player.objectX > 3310 && player.objectX < 3313 && player.absY != 3333) { + handleSpecialGate(player, 1597, 1596, 3311, 3332, 3311, 3331, 3312, 3332, 3312, 3331, 1); + } else if (player.objectY > 3318 && player.objectY < 3321 && player.absX != 2935 && player.absX != 2932) { + handleSpecialGate(player, 1597, 1596, 2933, 3319, 2934, 3319, 2933, 3320, 2934, 3320, 2); + } else if (player.objectX > 3130 && player.objectX < 3133) { + handleSpecialGate(player, 1597, 1596, 3132, 9918, 3131, 9918, 3132, 9917, 3131, 9917, 4); + } else if (player.objectY > 3181 && player.objectY < 3184) { + handleSpecialGate(player, 1597, 1596, 2815, 3183, 2815, 3182, 2816, 3183, 2816, 3182, 1); + } else if (player.objectY > 3449 && player.objectY < 3452) { + handleSpecialGate(player, 1597, 1596, 2936, 3450, 2936, 3451, 2935, 3450, 2935, 3451, 5); + } + break; + case 1557: + if (player.objectY > 9830 && player.objectY < 9833 && player.absY != 9830) { + handleSpecialGate(player, 1557, 1558, 2897, 9831, 2897, 9832, 2898, 9831, 2898, 9832, 3); + } else if (player.objectY > 3866 && player.objectY < 3869) { + handleSpecialGate(player, 1557, 1558, 3075, 3868, 3076, 3868, 3075, 3867, 3076, 3867, 4); + /*Heroes Guild*/ + } else if (player.objectX > 2908 && player.objectX < 2911) { + //newx, newy, newx2, newy2, oldx, oldy, oldx2, oldy2 + handleSpecialGate(player, 1557, 1558, 2910, 9909, 2909, 9909, 2910, 9910, 2909, 9910, 0); + } else if (player.objectY > 9908 && player.objectY < 9911) { + handleSpecialGate(player, 1557, 1558, 3104, 9910, 3104, 9909, 3103, 9910, 3103, 9909, 7); + } else if (player.objectX > 3110 && player.objectX < 3113 && player.absY != 3513 && player.absY != 3516) { + handleSpecialGate(player, 1557, 1558, 3111, 3514, 3111, 3515, 3112, 3514, 3112, 3515, 3); + } else if (player.objectX > 3104 && player.objectX < 3107 && player.absX != 3104 && player.absX != 3107) { + handleSpecialGate(player, 1557, 1558, 3105, 9945, 3106, 9945, 3105, 9944, 3106, 9944, 6); + } else if (player.objectX > 3144 && player.objectX < 3147) { + handleSpecialGate(player, 1558, 1557, 3146, 9871, 3146, 9870, 3145, 9871, 3145, 9870, 1); + } + break; + case 1558: + if (player.objectY > 9830 && player.objectY < 9833 && player.absY != 9830) { + handleSpecialGate(player, 1558, 1557, 2897, 9832, 2897, 9831, 2898, 9832, 2898, 9831, 1); + } else if (player.objectY > 3866 && player.objectY < 3869) { + handleSpecialGate(player, 1558, 1557, 3076, 3868, 3075, 3868, 3076, 3867, 3075, 3867, 4); + /* Heroes Guild*/ + } else if (player.objectX > 2908 && player.objectX < 2911) { + //newx, newy, newx2, newy2, oldx, oldy, oldx2, oldy2 + handleSpecialGate(player, 1558, 1557, 2909, 9909, 2910, 9909, 2909, 9910, 2910, 9910, 2); + } else if (player.objectY > 9908 && player.objectY < 9911) { + handleSpecialGate(player, 1558, 1557, 3104, 9909, 3104, 9910, 3103, 9909, 3103, 9910, 5); + } else if (player.objectX > 3110 && player.objectX < 3113 && player.absY != 3513 && player.absY != 3516) { + handleSpecialGate(player, 1558, 1557, 3111, 3515, 3111, 3514, 3112, 3515, 3112, 3514, 3); + } else if (player.objectX > 3104 && player.objectX < 3107 && player.absX != 3104 && player.absX != 3107) { + handleSpecialGate(player, 1558, 1557, 3106, 9945, 3105, 9945, 3106, 9944, 3105, 9944, 4); + } else if (player.objectX > 3144 && player.objectX < 3147) { + handleSpecialGate(player, 1558, 1557, 3146, 9870, 3146, 9871, 3145, 9870, 3145, 9871, 5); + } + break; + case 3506: + if (player.absX != 3445 && player.absX != 3442) { + openSpecialWalkGate(player, 3506, 3507, 3444, 3457, 3443, 3457, 3444, 3458, 3443, 3458, 0, player.absY == 3457 ? 1 : -1, 2, 0, 3); + } + break; + case 3507: + if (player.absX != 3445 && player.absX != 3442) { + openSpecialWalkGate(player, 3507, 3506, 3443, 3457, 3444, 3457, 3443, 3458, 3444, 3458, 0, player.absY == 3457 ? 1 : -1, 0, 2, 3); + } + break; + } + } + +} diff --git a/2006Redone Server/src/redone/game/globalworldobjects/GateHandler.java b/2006Redone Server/src/redone/game/globalworldobjects/GateHandler.java new file mode 100644 index 00000000..74b10735 --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/GateHandler.java @@ -0,0 +1,193 @@ +package redone.game.globalworldobjects; + +import redone.Server; +import redone.game.objects.Objects; +import redone.game.players.Client; +import redone.world.ObjectManager; +import redone.world.clip.ObjectDef; +import redone.world.clip.Region; + +/** + * GateHandler + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ +public class GateHandler { + + public static int gateAmount = 0, gateTicks = 100; + + public static boolean isGate(int objectId) { + String objectName = ObjectDef.getObjectDef(objectId).name; + return objectName.equalsIgnoreCase("gate") || objectName.equalsIgnoreCase("Gate"); + } + + public static void spawnGate(int objectId, int x, int y, int h, int face) { + Server.objectHandler.placeObject(new Objects(objectId, x, y, h, face, 0, 0)); + } + + public static void openSingleGate(Client player, int objectId, int x1, int y1, int x2, int y2, int walkX, int walkY, int face1, int face2) { + if (isGate(objectId) && gateAmount == 0) { + spawnGate(-1, x2, y2, player.heightLevel, 0); + spawnGate(objectId, x1, y1, player.heightLevel, face1); + gateAmount = 1; + player.getPlayerAssistant().walkTo(walkX, walkY); + ObjectManager.singleGateTicks(player, objectId, x2, y2, x1, y1, player.heightLevel, face2, 2); + } + } + + private static void openDoubleGate(Client player, int objectId, int objectId2, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int face1, int face2) { + if (isGate(objectId) && isGate(objectId2) && gateAmount == 0) { + spawnGate(-1, x3, y3, player.heightLevel, 0); + spawnGate(-1, x4, y4, player.heightLevel, 0); + spawnGate(objectId, x1, y1, player.heightLevel, face1); + Region.addObject(objectId, x1, y1, player.heightLevel, 0, face1, false); + gateAmount = 1; + spawnGate(objectId2, x2, y2, player.heightLevel, face1); + Region.addObject(objectId2, x2, y2, player.heightLevel, 0, face1, false); + gateAmount = 2; + ObjectManager.doubleGateTicks(player, objectId, x3, y3, x1, y1, x2, y2, player.heightLevel, face2, gateTicks); + ObjectManager.doubleGateTicks(player, objectId2, x4, y4, x1, y1, x2, y2, player.heightLevel, face2, gateTicks); + } else if (isGate(objectId) && isGate(objectId2) && gateAmount == 2) { + ObjectManager.doubleGateTicks(player, objectId, x3, y3, x1, y1, x2, y2, player.heightLevel, face2, 0); + ObjectManager.doubleGateTicks(player, objectId2, x4, y4, x1, y1, x2, y2, player.heightLevel, face2, 0); + } + } + + private static void openSpecialGate(Client player, int objectId, int objectId2, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int face1, int face2, int face3) { + if (isGate(objectId) && isGate(objectId2) && gateAmount == 0) { + spawnGate(-1, x3, y3, player.heightLevel, 0); + spawnGate(-1, x4, y4, player.heightLevel, 0); + spawnGate(objectId, x1, y1, player.heightLevel, face1); + Region.addObject(objectId, x1, y1, player.heightLevel, 0, face1, false); + gateAmount = 1; + spawnGate(objectId2, x2, y2, player.heightLevel, face2); + Region.addObject(objectId2, x2, y2, player.heightLevel, 0, face2, false); + gateAmount = 2; + ObjectManager.doubleGateTicks(player, objectId, x3, y3, x1, y1, x2, y2, player.heightLevel, face3, gateTicks); + ObjectManager.doubleGateTicks(player, objectId2, x4, y4, x1, y1, x2, y2, player.heightLevel, face3, gateTicks); + } else if (isGate(objectId) && isGate(objectId2) && gateAmount == 2) { + ObjectManager.doubleGateTicks(player, objectId, x3, y3, x1, y1, x2, y2, player.heightLevel, face3, 0); + ObjectManager.doubleGateTicks(player, objectId2, x4, y4, x1, y1, x2, y2, player.heightLevel, face3, 0); + } + } + + public static void openSpecialWalkGate(Client player, int objectId, int objectId2, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int walkX, int walkY, int face1, int face2, int face3) { + if (isGate(objectId) && isGate(objectId2) && gateAmount == 0) { + spawnGate(-1, x3, y3, player.heightLevel, 0); + spawnGate(-1, x4, y4, player.heightLevel, 0); + spawnGate(objectId, x1, y1, player.heightLevel, face1); + gateAmount = 1; + spawnGate(objectId2, x2, y2, player.heightLevel, face2); + gateAmount = 2; + player.getPlayerAssistant().walkTo(walkX, walkY); + ObjectManager.doubleGateTicks(player, objectId, x3, y3, x1, y1, x2, y2, player.heightLevel, face3, 2); + ObjectManager.doubleGateTicks(player, objectId2, x4, y4, x1, y1, x2, y2, player.heightLevel, face3, 2); + } + } + + public static void handleGate(Client player, int objectId, int objectId2, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int type) { + switch (type) { + /** + * X Gate 1 + */ + case 0: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 2, 3); + break; + /** + * Y Gate 1 + */ + case 1: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 3, 0); + break; + /** + * X Gate 2 + */ + case 2: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 0, 1); + break; + /** + * Y Gate 2 + */ + case 3: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 1, 0); + break; + /** + * X Gate 3 + */ + case 4: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 0, 3); + break; + /** + * Y Gate 3 + */ + case 5: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 1, 2); + break; + /** + * X Gate 4 + */ + case 6: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 2, 1); + break; + /** + * Y Gate 4 + */ + case 7: + openDoubleGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 3, 2); + break; + } + } + + public static void handleSpecialGate(Client player, int objectId, int objectId2, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int type) { + switch (type) { + /** + * X Gate 1 + */ + case 0: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 2, 0, 3); + break; + /** + * Y Gate 1 + */ + case 1: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 1, 3, 0); + break; + /** + * X Gate 2 + */ + case 2: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 0, 2, 3); + break; + /** + * Y Gate 2 + */ + case 3: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 3, 1, 0); + break; + /** + * X Gate 3 + */ + case 4: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 2, 0, 1); + break; + /** + * Y Gate 3 + */ + case 5: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 3, 1, 2); + break; + /** + * X Gate 4 + */ + case 6: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 0, 2, 1); + break; + /** + * Y Gate 4 + */ + case 7: + openSpecialGate(player, objectId, objectId2, x1, y1, x2, y2, x3, y3, x4, y4, 1, 3, 2); + break; + } + } + +} diff --git a/2006Redone Server/src/redone/game/globalworldobjects/PassDoor.java b/2006Redone Server/src/redone/game/globalworldobjects/PassDoor.java new file mode 100644 index 00000000..d8e074ce --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/PassDoor.java @@ -0,0 +1,109 @@ +package redone.game.globalworldobjects; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.Position; + +/** + * Passdoor + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class PassDoor { + + private static long doorDelay; + + public static boolean passThroughDoor(final Client client, final int objectType, int face1, final int face2, final int type, int x, int y, final int height) { + if (System.currentTimeMillis() - doorDelay < 1200) { + client.getActionSender().sendMessage("You must wait longer to pass this door."); + return false; + } + client.getActionSender().object(objectType, client.objectX, client.objectY, height, face1, type); + client.getPlayerAssistant().walkTo(x, y); + client.stopPlayer = true; + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + client.getActionSender().object(objectType, client.objectX, client.objectY, height, face2, type); + container.stop(); + } + + @Override + public void stop() { + client.stopPlayer = false; + doorDelay = System.currentTimeMillis(); + } + }, 2); + return true; + } + + public static void processDoor(Client client, int objectType) { + //player, object, face1, face2, type, x, y, height + switch (objectType) { + case 2550: + if (Position.checkPosition(client, 2674, 3306, 0)) { + passThroughDoor(client, objectType, 0, 1, 0, 0, -1, 0); + } + break; + case 2551: + if (Position.checkPosition(client, 2674, 3303, 0)) { + passThroughDoor(client, objectType, 0, 3, 0, 0, 1, 0); + } + break; + case 1530: + if (Position.checkPosition(client, 2715, 3472, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, 1, 0, 0); + } else if (Position.checkPosition(client, 2716, 3472, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, -1, 0, 0); + } else if (Position.checkPosition(client, 3246, 9892, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, 1, 0, 0); + } else if (Position.checkPosition(client, 3247, 9892, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, -1, 0, 0); + } else if (Position.checkPosition(client, 3108, 9570, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, -1, 0, 0); + } else if (Position.checkPosition(client, 3107, 9570, 0)) { + passThroughDoor(client, objectType, 1, 0, 0, 1, 0, 0); + } else if (Position.checkPosition(client, 3110, 9559, 0)) { + passThroughDoor(client, objectType, 3, 0, 0, 1, 0, 0); + } else if (Position.checkPosition(client, 3111, 9559, 0)) { + passThroughDoor(client, objectType, 3, 0, 0, -1, 0, 0); + } + break; + case 11993: + if (Position.checkPlayerY(client, 3167, 0)) { + passThroughDoor(client, objectType, 0, 3, 0, 0, -1, 0); + } else if (Position.checkPlayerY(client, 3166, 0)) { + passThroughDoor(client, objectType, 0, 3, 0, 0, 1, 0); + } else if (Position.checkPlayerY(client, 3163, 0) && client.absX != 3107) { + passThroughDoor(client, objectType, 2, 1, 0, 0, -1, 0); + } else if (Position.checkPlayerY(client, 3162, 0) && client.absX != 3108 && client.absX != 3106) { + passThroughDoor(client, objectType, 2, 1, 0, 0, 1, 0); + } else if (Position.checkPosition(client, 3107, 3162, 2)) { + passThroughDoor(client, objectType, 1, 2, 0, 1, 0, 2); + } else if (Position.checkPosition(client, 3108, 3162, 2)) { + passThroughDoor(client, objectType, 1, 2, 0, -1, 0, 2); + } else if (Position.checkPosition(client, 3109, 3159, 1)) { + passThroughDoor(client, objectType, 1, 2, 0, 1, 0, 1); + } else if (Position.checkPosition(client, 3110, 3159, 1)) { + passThroughDoor(client, objectType, 1, 2, 0, -1, 0, 1); + } else if (Position.checkPosition(client, 3108, 3159, 1)) { + passThroughDoor(client, objectType, 2, 1, 0, 0, -1, 1); + } else if (Position.checkPosition(client, 3108, 3158, 1)) { + passThroughDoor(client, objectType, 2, 1, 0, 0, 1, 1); + } else if (Position.checkObject(client, 3107, 3162, 0)) { + if (Position.checkPosition(client, 3108, 3162, 0)) { + passThroughDoor(client, objectType, 2, 1, 9, -1, -1, 0); + } else if (Position.checkPosition(client, 3107, 3163, 0)) { + passThroughDoor(client, objectType, 2, 1, 9, -1, -1, 0); + } else { + if (client.heightLevel == 0) { + passThroughDoor(client, objectType, 2, 1, 9, 1, 1, 0); + } + } + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/game/globalworldobjects/SingleGates.java b/2006Redone Server/src/redone/game/globalworldobjects/SingleGates.java new file mode 100644 index 00000000..41370f91 --- /dev/null +++ b/2006Redone Server/src/redone/game/globalworldobjects/SingleGates.java @@ -0,0 +1,23 @@ +package redone.game.globalworldobjects; + +import redone.game.players.Client; + +/** + * SingleGates + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class SingleGates extends GateHandler { + + public static void useSingleGate(Client player, int objectId) { + switch (objectId) { + case 3444: + openSingleGate(player, 3444, 3405, 9894, 3405, 9895, 0, player.absY == 9894 ? 1 : -1, 0, 3); + break; + case 3445: + openSingleGate(player, 3445, 3432, 9897, 3431, 9897, player.absX == 3432 ? -1 : 1, 0, 3, 2); + break; + } + } + +} diff --git a/2006Redone Server/src/redone/game/items/GameItem.java b/2006Redone Server/src/redone/game/items/GameItem.java new file mode 100644 index 00000000..29d63abe --- /dev/null +++ b/2006Redone Server/src/redone/game/items/GameItem.java @@ -0,0 +1,16 @@ +package redone.game.items; + +public class GameItem { + + public int id, amount; + public boolean stackable = false; + + public GameItem(int id, int amount) { + if (Item.itemStackable[id]) { + stackable = true; + } + this.id = id; + this.amount = amount; + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/items/GroundItem.java b/2006Redone Server/src/redone/game/items/GroundItem.java new file mode 100644 index 00000000..7203c866 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/GroundItem.java @@ -0,0 +1,44 @@ +package redone.game.items; + +public class GroundItem { + + public int itemId, itemX, itemY, itemAmount, itemController, hideTicks, + removeTicks; + public String ownerName; + + public GroundItem(int id, int x, int y, int h, int amount, int controller, + int hideTicks, String name) { + itemId = id; + itemX = x; + itemY = y; + itemAmount = amount; + itemController = controller; + this.hideTicks = hideTicks; + ownerName = name; + } + + public int getItemId() { + return itemId; + } + + public int getItemX() { + return itemX; + } + + public int getItemY() { + return itemY; + } + + public int getItemAmount() { + return itemAmount; + } + + public int getItemController() { + return itemController; + } + + public String getName() { + return ownerName; + } + +} diff --git a/2006Redone Server/src/redone/game/items/Item.java b/2006Redone Server/src/redone/game/items/Item.java new file mode 100644 index 00000000..d3216f24 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/Item.java @@ -0,0 +1,268 @@ +package redone.game.items; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +import redone.Constants; +import redone.Server; + +public class Item { + + public static int capes[] = { 2731, 2677, 2683, 2680, 2701, 2686, 2689, + 2692, 2737, 2734, 2716, 2728, 2695, 2713, 2725, 2722, 2707, 2704, + 2710, 2719, 2737, 2698, 14590, 2701, 8102, 8075, 8044, 8045, 8042, + 8043, 8037, 8038, 8025, 8026, 8018, 7858, 7994, 7983, 7984, 7985, + 7986, 7987, 7982, 7978, 3781, 3783, 3785, 3787, 3789, 3777, 3779, + 3759, 3761, 3763, 3765, 6111, 6570, 6568, 1007, 1019, 1021, 1023, + 1027, 1029, 1031, 1052, 2412, 2413, 2414, 4304, 4315, 4317, 4319, + 4321, 4323, 4325, 4327, 4329, 4331, 4333, 4335, 4337, 4339, 4341, + 4343, 4345, 4347, 4349, 4351, 4353, 4355, 4357, 4359, 4361, 4363, + 4365, 4367, 4369, 4371, 4373, 4375, 4377, 4379, 4381, 4383, 4385, + 4387, 4389, 4391, 4393, 4395, 4397, 4399, 4401, 4403, 4405, 4407, + 4409, 4411, 4413, 4514, 4516, 6070, 6568, 6570, 4304, 3759, 3761, + 3763, 3765, 3777, 3779, 3781, 3783, 3785, 3787, 3789 }; + public static int boots[] = { 7596, 8029, 6619, 8017, 7159, 7991, 6666, + 6061, 6106, 88, 89, 626, 628, 630, 632, 634, 1061, 1837, 1846, + 2577, 2579, 2894, 2904, 2914, 2924, 2934, 3061, 3105, 3107, 3791, + 4097, 4107, 4117, 4119, 4121, 4123, 4125, 4127, 4129, 4131, 4310, + 5064, 5345, 5557, 6069, 6106, 6143, 6145, 6147, 6328, 6920, 6349, + 6357, 3393 }; + public static int gloves[] = { 7595, 6629, 8021, 8016, 7964, 2491, 1065, + 2487, 2489, 3060, 1495, 775, 777, 778, 6708, 1059, 1063, 1065, + 1580, 2487, 2489, 2491, 2902, 2912, 2922, 2932, 2942, 3060, 3799, + 4095, 4105, 4115, 4308, 5556, 6068, 6110, 6149, 6151, 6153, 6922, + 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 6330, 3391, + 776 }; + public static int shields[] = { 7676, 7342, 7348, 7354, 7360, 7334, 7340, + 7347, 7352, 7358, 7356, 7350, 7344, 8087, 8058, 8059, 8060, 8061, + 8062, 8063, 6633, 7977, 7976, 7972, 7959, 6591, 7332, 7338, 7336, + 7360, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, + 1191, 1193, 1195, 1197, 1199, 1201, 1540, 2589, 2597, 2603, 2611, + 2621, 2629, 2659, 2667, 2675, 2890, 3122, 3488, 3758, 3839, 3840, + 3841, 3842, 3843, 3844, 4072, 4156, 4224, 4225, 4226, 4227, 4228, + 4229, 4230, 4231, 4232, 4233, 4234, 4302, 4507, 4512, 6215, 6217, + 6219, 6221, 6223, 6225, 6227, 6229, 6231, 6233, 6235, 6237, 6239, + 6241, 6243, 6245, 6247, 6249, 6251, 6253, 6255, 6257, 6259, 6261, + 6263, 6265, 6267, 6269, 6271, 6273, 6275, 6277, 6279, 6524, 6889, + 7051, 7053 }; + public static int hats[] = { 2679, 1025, 2685, 4166, 2682, 2703, 2688, + 2691, 2691, 2733, 2736, 2718, 2730, 2697, 2715, 2727, 2724, 2709, + 2706, 2712, 2721, 2739, 2700, 2518, 2524, 2526, 7319, 7321, 7323, + 7325, 7327, 1167, 8077, 8076, 8074, 4168, 1169, 8034, 8035, 8036, + 8030, 6623, 8024, 8023, 8022, 8013, 1169, 7594, 7995, 7996, 7997, + 7998, 7999, 8000, 8001, 7992, 7990, 7975, 7973, 7971, 7967, 7963, + 6665, 6665, 7321, 6886, 6547, 6548, 2645, 2647, 2649, 4856, 4857, + 4858, 4859, 4880, 4881, 4882, 4883, 4904, 4905, 4906, 4907, 4928, + 4929, 4930, 4931, 4952, 4953, 4954, 4955, 4976, 4977, 4978, 4979, + 4732, 4753, 4611, 6188, 6182, 4511, 4056, 4071, 4724, 2639, 2641, + 2643, 2665, 6109, 5525, 5527, 5529, 5531, 5533, 5535, 5537, 5539, + 5541, 5543, 5545, 5547, 5549, 5551, 74, 579, 656, 658, 660, 662, + 664, 740, 1017, 1037, 1040, 1042, 1044, 1046, 1038, 1048, 1050, + 1053, 1055, 1057, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, + 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1506, 1949, 2422, 2581, + 2587, 2595, 2605, 2613, 2619, 2627, 2631, 2633, 2635, 2637, 2651, + 2657, 2673, 2900, 2910, 2920, 2930, 2940, 2978, 2979, 2980, 2981, + 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, + 2993, 2994, 2995, 3057, 3385, 3486, 3748, 3749, 3751, 3753, 3797, + 4041, 4042, 4071, 4089, 3755, 4099, 4109, 4164, 4302, 4506, 4511, + 4513, 4515, 4551, 4567, 4708, 4716, 4724, 4745, 4753, 4857, 4858, + 4859, 4880, 4881, 4882, 4883, 4904, 4905, 4906, 4907, 4952, 4953, + 4954, 4955, 4976, 4977, 4978, 4979, 5013, 5014, 5554, 5574, 6109, + 6128, 6131, 6137, 6182, 6188, 6335, 6337, 6339, 6345, 6355, 6365, + 6375, 6382, 6392, 6400, 6918, 6656, 2581, 7539, 7394, 7396, 7534, + 5574, 6885, 6858, 6860, 6862, 6856, 6326, 6128, 6137, 7400, 7323, + 7325, 7327, 7003, 4168, 7112, 7124, 7130, 7136 }; + public static int amulets[] = { 1654, 1656, 1658, 1660, 1662, 1664, 8081, + 8033, 7968, 6585, 86, 87, 295, 421, 552, 589, 1478, 1692, 1694, + 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 1725, 1727, + 1729, 1731, 4021, 4081, 4250, 4677, 6040, 6041, 6208, 1718, 1722, + 6859, 6863, 6857, 3853, 3855, 3857, 3859, 3861, 3863, 3865, 3867, + 1718, 4306, 1702 }; + public static int arrows[] = { 11212, 8052, 9211, 9010, 9209, 9208, 9207, + 9206, 9205, 9203, 9301, 8065, 7919, 7906, 7988, 7989, 78, 598, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 942, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, + 2540, 2541, 2866, 4160, 4172, 4173, 4174, 4175, 4740, 5616, 5617, + 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 6061, + 6062 }; + public static int rings[] = { 8082, 773, 1635, 1637, 1639, 1641, 1643, + 1645, 2550, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568, + 2570, 2572, 4202, 4657, 6465, 6737, 6731, 6735, 6735, 6583, 6733 }; + public static int body[] = { 7608, 2520, 430, 7362, 7364, 636, 638, 640, + 642, 644, 8064, 426, 430, 1005, 1757, 7592, 8031, 8027, 6617, 8019, + 8014, 8002, 7376, 544, 7372, 7370, 577, 7974, 7970, 7965, 7961, + 7960, 3793, 3775, 3773, 3771, 3769, 3767, 6139, 1135, 2499, 2501, + 1035, 540, 5553, 4757, 1833, 6388, 6384, 4111, 4101, 4091, 6186, + 6184, 6180, 3058, 4509, 4504, 4069, 4728, 4736, 4712, 6107, 2661, + 3140, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, + 1121, 1123, 1125, 1127, 1129, 1131, 1133, 2583, 2591, 2599, 2607, + 2615, 2623, 2653, 2669, 3481, 4712, 4720, 4728, 4749, 4892, 4893, + 4894, 4895, 4916, 4917, 4918, 4919, 4964, 4965, 4966, 4967, 6107, + 6133, 6322, 6322, 6129, 75, 6916, 6916, 4111, 6654, 6654, 75, 7399, + 7390, 7374, 5575, 2503, 6341, 6351, 3387, 5030, 5032, 5034, 5030, + 5032, 5034, 7392, 546, 581 }; + public static int legs[] = { 7609, 2522, 7378, 7380, 7382, 7368, 7366, + 7388, 646, 648, 650, 652, 654, 428, 1097, 1095, 7593, 8032, 8028, + 6625, 8020, 8015, 7384, 7969, 7966, 7962, 6141, 538, 1033, 5555, + 4759, 6386, 6390, 2497, 2495, 2493, 1099, 4113, 4103, 4093, 6924, + 6187, 6185, 6181, 3059, 4510, 4505, 4070, 6108, 542, 548, 1011, + 1013, 1015, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, + 1085, 1087, 1089, 1091, 1093, 2585, 2593, 2601, 2609, 2617, 2625, + 2655, 2663, 2671, 3059, 3389, 3472, 3473, 3474, 3475, 3476, 3477, + 3478, 3479, 3480, 3483, 3485, 3795, 4087, 4585, 4712, 4714, 4722, + 4730, 4738, 4751, 4759, 4874, 4875, 4876, 4877, 4898, 4899, 4900, + 4901, 4922, 4923, 4924, 4925, 4946, 4947, 4948, 4949, 4970, 4971, + 4972, 4973, 4994, 4995, 4996, 4997, 5048, 5050, 5052, 5576, 6107, + 6130, 6187, 6390, 6386, 6390, 6394, 6396, 6402, 6404, 6135, 6809, 6916, 4091, + 4111, 6655, 6654, 7398, 7398, 7386, 6324, 6343, 6353, 6363, 6373, 3387, 5036, + 5038, 5040, 5042, 5044, 5046, 5050, 5052, 4300, 1835, 7116, 7126, 6752, + 7132, 7138 }; + public static int platebody[] = { 10338, 7608, 2520, 430, 636, 638, 640, + 642, 644, 426, 430, 8031, 8027, 6617, 8019, 8014, 8002, 544, 577, + 7974, 7970, 7965, 7961, 7960, 3793, 3773, 3775, 3771, 3769, 3767, + 6139, 1035, 540, 5553, 4757, 1833, 1835, 6388, 6384, 4111, 4101, + 4868, 4869, 4870, 4871, 4892, 4893, 4894, 4895, 4916, 4917, 4918, + 4919, 4940, 4941, 4942, 4943, 4964, 4965, 4966, 4967, 4988, 4989, + 4990, 0x2f9a0eb, 6186, 6184, 6180, 3058, 4509, 4504, 4069, 4728, + 4736, 4712, 6107, 2661, 3140, 1115, 1117, 1119, 1121, 1123, 1125, + 1127, 2583, 2591, 2599, 2607, 2615, 6322, 2623, 2653, 2669, 3481, + 4720, 4728, 4749, 2661, 6129, 6916, 4091, 6654, 6133, 75, 7399, + 7390, 5575, 6341, 6351, 3387, 5024, 5030, 5032, 5034, 7392, 6786, 6788 }; + + /* Fullbody is an item that covers your arms. */ + private static String[] fullbody = { + "top", "shirt", "platebody", + "Ahrims robetop", "Karils leathertop", "brassard", "Robe top", + "robetop", "platebody (t)", "platebody (g)", "chestplate", "torso", + "hauberk", "Dragon chainbody", "gown", "Shade robe", "Wizard robe", + "Druid's robe", "Black robe", "Fremennik robe", "Robe of elidinis", + "tunic", "blouse" + }; + /* Fullhat covers your head but not your beard. */ + private static String[] fullhat = { "med helm", "coif", "Dharok's helm", + "hood", "Initiate helm", "Coif", "Helm of neitiznot", + "Armadyl helmet", "Berserker helm", "Archer helm", "Farseer helm", + "Warrior helm", "Void" }; + /* Fullmask covers your entire head. */ + private static String[] fullmask = { "full helm", "mask", "Verac's helm", + "Guthan's helm", "Karil's coif", "mask", "Torag's helm", "Void", + "sallet", "Facemask" }; + + public static boolean isFullBody(int itemId) { + String weapon = getItemName(itemId); + if (weapon == null) { + return false; + } + for (String element : fullbody) { + if (weapon.endsWith(element)) { + return true; + } + } + return false; + } + + public static boolean isFullHelm(int itemId) { + String weapon = getItemName(itemId); + if (weapon == null) { + return false; + } + for (String element : fullhat) { + if (weapon.endsWith(element)) { + return true; + } + } + return false; + } + + public static boolean isFullMask(int itemId) { + String weapon = getItemName(itemId); + if (weapon == null) { + return false; + } + for (String element : fullmask) { + if (weapon.endsWith(element)) { + return true; + } + } + return false; + } + + public static String getItemName(int id) { + for (ItemList element : Server.itemHandler.ItemList) { + if (element != null) { + if (element.itemId == id) { + return element.itemName; + } + } + } + return null; + } + + public static boolean[] itemStackable = new boolean[Constants.ITEM_LIMIT]; + public static boolean[] itemIsNote = new boolean[Constants.ITEM_LIMIT]; + public static int[] targetSlots = new int[Constants.ITEM_LIMIT]; + static { + int counter = 0; + int c; + + try { + FileInputStream dataIn = new FileInputStream(new File("./Data/data/stackable.dat")); + while ((c = dataIn.read()) != -1) { + if (c == 0) { + itemStackable[counter] = false; + } else { + itemStackable[counter] = true; + } + counter++; + } + dataIn.close(); + } catch (IOException e) { + System.out.println("Critical error while loading stackabledata! Trace:"); + e.printStackTrace(); + } + + counter = 0; + + try { + FileInputStream dataIn = new FileInputStream(new File("./Data/data/notes.dat")); + while ((c = dataIn.read()) != -1) { + if (c == 0) { + itemIsNote[counter] = true; + } else { + itemIsNote[counter] = false; + } + counter++; + } + dataIn.close(); + } catch (IOException e) { + System.out.println("Critical error while loading notedata! Trace:"); + e.printStackTrace(); + } + + counter = 0; + try { + FileInputStream dataIn = new FileInputStream(new File("./Data/data/equipment.dat")); + while ((c = dataIn.read()) != -1) { + targetSlots[counter++] = c; + } + dataIn.close(); + } catch (IOException e) { + System.out.println("Critical error while loading notedata! Trace:"); + e.printStackTrace(); + } + + /* + * try { BufferedReader in = new BufferedReader(new + * FileReader("./data/data/equipment.dat")); String name = null; while + * ((name = in.readLine()) != null) { int itemId = + * Integer.parseInt(name.substring(0, name.indexOf(":"))); int equipId = + * Integer.parseInt(name.substring(name.indexOf(":") + 1)); + * targetSlots[itemId] = equipId; } in.close(); in = null; } catch + * (Exception e) { System.out.println("Error loading equipment list."); + * } + */ + + } + +} diff --git a/2006Redone Server/src/redone/game/items/ItemAssistant.java b/2006Redone Server/src/redone/game/items/ItemAssistant.java new file mode 100644 index 00000000..8e6d6741 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/ItemAssistant.java @@ -0,0 +1,2875 @@ +package redone.game.items; + +import redone.Constants; +import redone.Server; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.items.impl.Weight; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +public class ItemAssistant { + + private final Client c; + + public ItemAssistant(Client client) { + c = client; + } + + private static int COMMON = Misc.random(5), UNCOMMON = Misc.random(25), + RARE = Misc.random(100); + + private static final int[][] CASKET = { { 995, Misc.random(3000), COMMON }, + { 1621, 1, UNCOMMON }, { 1619, 1, UNCOMMON }, { 1617, 1, RARE }, + { 987, 1, RARE }, { 985, 1, RARE }, { 1454, 1, COMMON }, + { 1452, 1, UNCOMMON }, { 1462, 1, RARE }, { 1623, 1, COMMON } }; + + public void addCasketRewards(int itemId) { + long clickTimer = 0; + c.getActionSender().sendMessage("You search the casket..."); + for (int[] element : CASKET) { + int item = element[0]; + int amount = element[1]; + int chance = element[2]; + if (Misc.random(chance) == 0 && System.currentTimeMillis() - clickTimer > 1800) { + addItem(item, amount); + deleteItem2(itemId, 1); + clickTimer = System.currentTimeMillis(); + c.getActionSender().sendMessage( + "You find " + amount + " " + getItemName(item) + "."); + } else { + if (System.currentTimeMillis() - clickTimer > 1800) { + addItem(995, 100); + deleteItem2(itemId, 1); + clickTimer = System.currentTimeMillis(); + c.getActionSender().sendMessage("You find 100 coins."); + } + } + } + } + + private final int[] TREE_SEEDS = { 5291, 5292, 5293, 5294, 5295, 5296, 5297, + 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5315, 5316, 5313, 5314 }; + + public void handleTreeSeeds(int itemId) { + c.getActionSender().sendMessage("You search the nest..."); + final int reward = TREE_SEEDS[Misc.random(TREE_SEEDS.length)]; + addItem(reward, 1 + Misc.random(1)); + deleteItem(itemId, 1); + addItem(5075, 1); + c.getActionSender().sendMessage("You find a " + getItemName(reward) + "."); + } + + private final int[] SEEDS = { 5291, 5292, 5293, 5294, 5295, 5296, 5297, 298, 5299, 5300, 5301, 5302, 5303, 5304 }; + + public void handleNonTreeSeeds(int itemId) { + c.getActionSender().sendMessage("You search the nest..."); + final int reward = SEEDS[Misc.random(SEEDS.length)]; + addItem(reward, 1 + Misc.random(1)); + deleteItem(itemId, 1); + addItem(5075, 1); + c.getActionSender().sendMessage("You find a " + getItemName(reward) + "."); + } + + public int[] RINGS = { 1635, 1637, 1639, 1641, 1643 }; + + public void handleRings(int itemId) { + c.getActionSender().sendMessage("You search the nest..."); + int reward = RINGS[Misc.random(RINGS.length)]; + addItem(reward, 1); + deleteItem(itemId, 1); + addItem(5075, 1); + c.getActionSender().sendMessage("You find a " + getItemName(reward) + "."); + } + + public void updateInventory() { + this.resetItems(3214); + } + + public void destroyInterface(int itemId) { + itemId = c.droppedItem; + String itemName = getItemName(c.droppedItem); + String[][] info = { + { "Are you sure you want to destroy this item?", "14174" }, + { "Yes.", "14175" }, { "No.", "14176" }, { "", "14177" }, + { "You probably won't be able to", "14182" }, { "get this item back once lost.", "14183" }, + { itemName, "14184" } };// make some kind of c.getItemInfo + c.getPlayerAssistant().sendFrame34(itemId, 0, 14171, 1); + for (int i = 0; i < info.length; i++) + c.getPlayerAssistant().sendFrame126(info[i][0], Integer.parseInt(info[i][1])); + c.getPlayerAssistant().sendChatInterface(14170); + } + + public void destroyItem(int itemId) { + itemId = c.droppedItem; + String itemName = getItemName(itemId); + deleteItem(itemId,getItemSlot(itemId), c.playerItemsN[getItemSlot(itemId)]); + c.getActionSender().sendMessage("Your " + itemName + " vanishes as you destroy it."); + c.getPlayerAssistant().removeAllWindows(); + } + + public void dropItem(int itemId) { + itemId = c.droppedItem; + Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.playerItemsN[getItemSlot(itemId)], c.getId()); + deleteItem(itemId,getItemSlot(itemId), c.playerItemsN[getItemSlot(itemId)]); + c.getPlayerAssistant().removeAllWindows(); + } + + public void addOrDropItem(int item, int amount) { + if (isStackable(item) && hasFreeSlots(1)) { + addItem(item, amount); + } else if (!hasFreeSlots(amount) && !isStackable(item)) { + Server.itemHandler.createGroundItem(c, item, c.absX, c.absY, + amount, c.playerId); + c.getActionSender() + .sendMessage( + "You have no inventory space, so the item(s) appear beneath you."); + } else { + addItem(item, amount); + } + } + + public boolean hasFreeSlots(int slots) { + return freeSlots() >= slots; + } + + public void replaceItem(int itemToReplace, int replaceWith) { + if(playerHasItem(itemToReplace)) { + deleteItem(itemToReplace, 1); + addItem(replaceWith, 1); + } + } + + public static int getTotalAmountEquipment(Client c) { + int total = 0; + for (int element : c.playerEquipment) { + total = (int) Math.floor(c.getShopAssistant().getItemShopValue( + element)); + } + return total; + } + + public static int getTotalAmountItems(Client c) { + int total = 0; + for (int playerItem : c.playerItems) { + total = (int) Math.floor(c.getShopAssistant().getItemShopValue( + playerItem)); + } + return total; + } + + public static int getTotalWealthCarrying(Client c) { + return getTotalAmountItems(c) + getTotalAmountEquipment(c); + } + + public static String getTotalAmount(Client c, int j) { + if (j >= 10000 && j < 10000000) { + return j / 1000 + "K"; + } else if (j >= 10000000 && j < 2147000000) { + return j / 1000000 + "M"; + } else { + return "" + j + " gp"; + } + } + + public int[][] brokenBarrows = { { 4708, 4860 }, { 4710, 4866 }, + { 4712, 4872 }, { 4714, 4878 }, { 4716, 4884 }, { 4720, 4896 }, + { 4718, 4890 }, { 4720, 4896 }, { 4722, 4902 }, { 4732, 4932 }, + { 4734, 4938 }, { 4736, 4944 }, { 4738, 4950 }, { 4724, 4908 }, + { 4726, 4914 }, { 4728, 4920 }, { 4730, 4926 }, { 4745, 4956 }, + { 4747, 4926 }, { 4749, 4968 }, { 4751, 4794 }, { 4753, 4980 }, + { 4755, 4986 }, { 4757, 4992 }, { 4759, 4998 } }; + + public boolean playerHasEquipped(int itemID) { + itemID++; + for (int element : c.playerEquipment) { + if (element == itemID) { + return true; + } + } + return false; + } + + public boolean playerHasEquipped(int slot, int itemID) { + return c.playerEquipment[slot] == itemID; + } + + public void removeItem(int slot) { + // synchronized(c) { + if (c.getOutStream() != null && c != null) { + if (c.playerEquipment[slot] > -1) { + if (addItem(c.playerEquipment[slot], c.playerEquipmentN[slot])) { + c.playerEquipment[slot] = -1; + c.playerEquipmentN[slot] = 0; + sendWeapon(c.playerEquipment[c.playerWeapon], + getItemName(c.playerEquipment[c.playerWeapon])); + resetBonus(); + getBonus(); + writeBonus(); + c.getCombatAssistant().getPlayerAnimIndex(); + c.getOutStream().createFrame(34); + c.getOutStream().writeWord(6); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(slot); + c.getOutStream().writeWord(0); + c.getOutStream().writeByte(0); + c.flushOutStream(); + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + } + } + } + + public void addItemToBank(int itemId, int amount) { + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0 || c.bankItems[i] == itemId + 1 && c.bankItemsN[i] + amount < Integer.MAX_VALUE) { + c.bankItems[i] = itemId + 1; + c.bankItemsN[i] += amount; + resetBank(); + return; + } + } + } + + public void resetItems(int WriteFrame) { + // synchronized(c) { + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(53); + c.getOutStream().writeWord(WriteFrame); + c.getOutStream().writeWord(c.playerItems.length); + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItemsN[i] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord_v2(c.playerItemsN[i]); + } else { + c.getOutStream().writeByte(c.playerItemsN[i]); + } + c.getOutStream().writeWordBigEndianA(c.playerItems[i]); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + } + + public int getItemCount(int itemID) { + int count = 0; + for (int j = 0; j < c.playerItems.length; j++) { + if (c.playerItems[j] == itemID + 1) { + count += c.playerItemsN[j]; + } + } + return count; + } + + public void writeBonus() { + int offset = 0; + String send = ""; + for (int i = 0; i < c.playerBonus.length; i++) { + if (c.playerBonus[i] >= 0) { + send = BONUS_NAMES[i] + ": +" + c.playerBonus[i]; + } else { + send = BONUS_NAMES[i] + ": -" + java.lang.Math.abs(c.playerBonus[i]); + } + + if (i == 10) { + offset = 1; + } + c.getPlayerAssistant().sendFrame126(send, 1675 + i + offset); + } + + } + + public int getTotalCount(int itemID) { + int count = 0; + for (int j = 0; j < c.playerItems.length; j++) { + if (Item.itemIsNote[itemID + 1]) { + if (itemID + 2 == c.playerItems[j]) { + count += c.playerItemsN[j]; + } + } + if (!Item.itemIsNote[itemID + 1]) { + if (itemID + 1 == c.playerItems[j]) { + count += c.playerItemsN[j]; + } + } + } + for (int j = 0; j < c.bankItems.length; j++) { + if (c.bankItems[j] == itemID + 1) { + count += c.bankItemsN[j]; + } + } + return count; + } + + public int getBankItemCount() { + int count = 0; + for (int j = 0; j < c.bankItems.length; j++) { + if (c.bankItems[j] > -1) { + count += c.bankItemsN[j]; + } + } + return count; + } + + public void sendItemsKept() { + // synchronized(c) { + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(53); + c.getOutStream().writeWord(6963); + c.getOutStream().writeWord(c.itemKeptId.length); + for (int i = 0; i < c.itemKeptId.length; i++) { + if (c.playerItemsN[i] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord_v2(1); + } else { + c.getOutStream().writeByte(1); + } + if (c.itemKeptId[i] > 0) { + c.getOutStream().writeWordBigEndianA(c.itemKeptId[i] + 1); + } else { + c.getOutStream().writeWordBigEndianA(0); + } + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + } + + /** + * Item kept on death + **/ + + public void keepItem(int keepItem, boolean deleteItem) { + int value = 0; + int item = 0; + int slotId = 0; + boolean itemInInventory = false; + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] - 1 > 0) { + int inventoryItemValue = c.getShopAssistant().getItemShopValue( + c.playerItems[i] - 1); + if (inventoryItemValue > value && !c.invSlot[i]) { + value = inventoryItemValue; + item = c.playerItems[i] - 1; + slotId = i; + itemInInventory = true; + } + } + } + for (int i1 = 0; i1 < c.playerEquipment.length; i1++) { + if (c.playerEquipment[i1] > 0) { + int equipmentItemValue = c.getShopAssistant().getItemShopValue( + c.playerEquipment[i1]); + if (equipmentItemValue > value && !c.equipSlot[i1]) { + value = equipmentItemValue; + item = c.playerEquipment[i1]; + slotId = i1; + itemInInventory = false; + } + } + } + if (itemInInventory) { + c.invSlot[slotId] = true; + if (deleteItem) { + deleteItem(c.playerItems[slotId] - 1, + getItemSlot(c.playerItems[slotId] - 1), 1); + } + } else { + c.equipSlot[slotId] = true; + if (deleteItem) { + deleteEquipment(item, slotId); + } + } + c.itemKeptId[keepItem] = item; + } + + /** + * Reset items kept on death + **/ + + public void resetKeepItems() { + for (int i = 0; i < c.itemKeptId.length; i++) { + c.itemKeptId[i] = -1; + } + for (int i1 = 0; i1 < c.invSlot.length; i1++) { + c.invSlot[i1] = false; + } + for (int i2 = 0; i2 < c.equipSlot.length; i2++) { + c.equipSlot[i2] = false; + } + } + + /** + * delete all items + **/ + + public void deleteAllItems() { + for (int i1 = 0; i1 < c.playerEquipment.length; i1++) { + deleteEquipment(c.playerEquipment[i1], i1); + } + for (int i = 0; i < c.playerItems.length; i++) { + deleteItem(c.playerItems[i] - 1, getItemSlot(c.playerItems[i] - 1), + c.playerItemsN[i]); + } + } + + /** + * Clear Bank + */ + + public void clearBank() { + try { + for (int i = 0; i < c.bankItems[i]; i++) { + c.bankItems[i] = 0; + c.bankItemsN[i] = 0; + } + resetTempItems(); + resetBank(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Drop all items for your killer + **/ + + public void dropAllItems() { + Client o = (Client) PlayerHandler.players[c.killerId]; + + for (int i = 0; i < c.playerItems.length; i++) { + if (o != null) { + if (tradeable(c.playerItems[i] - 1)) { + Server.itemHandler.createGroundItem(o, + c.playerItems[i] - 1, c.getX(), c.getY(), + c.playerItemsN[i], c.killerId); + } else { + if (specialCase(c.playerItems[i] - 1)) { + Server.itemHandler.createGroundItem(o, 995, c.getX(), + c.getY(), + getUntradePrice(c.playerItems[i] - 1), + c.killerId); + } + Server.itemHandler.createGroundItem(c, + c.playerItems[i] - 1, c.getX(), c.getY(), + c.playerItemsN[i], c.playerId); + } + } else { + Server.itemHandler.createGroundItem(c, c.playerItems[i] - 1, + c.getX(), c.getY(), c.playerItemsN[i], c.playerId); + } + } + for (int e = 0; e < c.playerEquipment.length; e++) { + if (o != null) { + if (tradeable(c.playerEquipment[e])) { + Server.itemHandler.createGroundItem(o, + c.playerEquipment[e], c.getX(), c.getY(), + c.playerEquipmentN[e], c.killerId); + } else { + if (specialCase(c.playerEquipment[e])) { + Server.itemHandler.createGroundItem(o, 995, c.getX(), + c.getY(), + getUntradePrice(c.playerEquipment[e]), + c.killerId); + } + Server.itemHandler.createGroundItem(c, + c.playerEquipment[e], c.getX(), c.getY(), + c.playerEquipmentN[e], c.playerId); + } + } else { + Server.itemHandler.createGroundItem(c, c.playerEquipment[e], + c.getX(), c.getY(), c.playerEquipmentN[e], c.playerId); + } + } + if (o != null) { + Server.itemHandler.createGroundItem(o, 526, c.getX(), c.getY(), 1, + c.killerId); + } + } + + public int getUntradePrice(int item) { + switch (item) { + case 2518: + case 2524: + case 2526: + return 100000; + case 2520: + case 2522: + return 150000; + } + return 0; + } + + public boolean specialCase(int itemId) { + switch (itemId) { + case 2518: + case 2520: + case 2522: + case 2524: + case 2526: + return true; + } + return false; + } + + public void addToVoidList(int itemId) { + switch (itemId) { + case 2518: + c.voidStatus[0]++; + break; + case 2520: + c.voidStatus[1]++; + break; + case 2522: + c.voidStatus[2]++; + break; + case 2524: + c.voidStatus[3]++; + break; + case 2526: + c.voidStatus[4]++; + break; + } + } + + public boolean tradeable(int itemId) { + for (int element : Constants.ITEM_TRADEABLE) { + if (itemId == element) { + return false; + } + } + return true; + } + + /** + * Add Item + **/ + public boolean addItem(int item, int amount) { + // synchronized(c) { + if (item == CastleWars.SARA_BANNER || item == CastleWars.ZAMMY_BANNER) { + return false; + } + if (amount < 1) { + amount = 1; + } + if (item <= 0) { + return false; + } + if ((freeSlots() >= 1 || playerHasItem(item, 1)) + && Item.itemStackable[item] || freeSlots() > 0 + && !Item.itemStackable[item]) { + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] == item + 1 && Item.itemStackable[item] + && c.playerItems[i] > 0) { + c.playerItems[i] = item + 1; + if (c.playerItemsN[i] + amount < Constants.MAXITEM_AMOUNT + && c.playerItemsN[i] + amount > -1) { + c.playerItemsN[i] += amount; + } else { + c.playerItemsN[i] = Constants.MAXITEM_AMOUNT; + } + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(3214); + c.getOutStream().writeByte(i); + c.getOutStream().writeWord(c.playerItems[i]); + if (c.playerItemsN[i] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord(c.playerItemsN[i]); + } else { + c.getOutStream().writeByte(c.playerItemsN[i]); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + i = 30; + Weight.calcWeight(c, item, "additem"); + return true; + } + } + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] <= 0) { + c.playerItems[i] = item + 1; + if (amount < Constants.MAXITEM_AMOUNT && amount > -1) { + c.playerItemsN[i] = 1; + if (amount > 1) { + addItem(item, amount - 1); + return true; + } + } else { + c.playerItemsN[i] = Constants.MAXITEM_AMOUNT; + } + resetItems(3214); + i = 30; + Weight.calcWeight(c, item, "additem"); + return true; + } + } + return false; + } else { + resetItems(3214); + c.getActionSender().sendMessage( + "Not enough space in your inventory."); + return false; + } + } + + /** + * Bonuses + **/ + + public final String[] BONUS_NAMES = { "Stab", "Slash", "Crush", "Magic", + "Range", "Stab", "Slash", "Crush", "Magic", "Range", "Strength", + "Prayer" }; + + public void resetBonus() { + for (int i = 0; i < c.playerBonus.length; i++) { + c.playerBonus[i] = 0; + } + } + + public void getBonus() { + for (int element : c.playerEquipment) { + if (element > -1) { + for (int j = 0; j < Constants.ITEM_LIMIT; j++) { + if (Server.itemHandler.ItemList[j] != null) { + if (Server.itemHandler.ItemList[j].itemId == element) { + for (int k = 0; k < c.playerBonus.length; k++) { + c.playerBonus[k] += Server.itemHandler.ItemList[j].Bonuses[k]; + } + break; + } + } + } + } + } + } + + /** + * Wear Item + **/ + + public void sendWeapon(int Weapon, String WeaponName) { + String WeaponName2 = WeaponName.replaceAll("Bronze", ""); + WeaponName2 = WeaponName2.replaceAll("Iron", ""); + WeaponName2 = WeaponName2.replaceAll("Steel", ""); + WeaponName2 = WeaponName2.replaceAll("Black", ""); + WeaponName2 = WeaponName2.replaceAll("Mithril", ""); + WeaponName2 = WeaponName2.replaceAll("Adamant", ""); + WeaponName2 = WeaponName2.replaceAll("Rune", ""); + WeaponName2 = WeaponName2.replaceAll("Granite", ""); + WeaponName2 = WeaponName2.replaceAll("Dragon", ""); + WeaponName2 = WeaponName2.replaceAll("Drag", ""); + WeaponName2 = WeaponName2.replaceAll("Crystal", ""); + WeaponName2 = WeaponName2.trim(); + if (WeaponName.equals("Unarmed")) { + c.getActionSender().setSidebarInterface(0, 5855); // punch, + // kick, + // block + c.getPlayerAssistant().sendFrame126(WeaponName, 5857); + } else if (WeaponName.endsWith("whip")) { + c.getActionSender().setSidebarInterface(0, 12290); // flick, + // lash, + // deflect + c.getPlayerAssistant().sendFrame246(12291, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 12293); + } else if (WeaponName.endsWith("bow") || WeaponName.endsWith("10") + || WeaponName.endsWith("full") + || WeaponName.startsWith("seercull")) { + c.getActionSender().setSidebarInterface(0, 1764); // accurate, + // rapid, + // longrange + c.getPlayerAssistant().sendFrame246(1765, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 1767); + } else if (WeaponName.startsWith("Staff") + || WeaponName.endsWith("staff") || WeaponName.endsWith("wand")) { + c.getActionSender().setSidebarInterface(0, 328); // spike, + // impale, + // smash, + // block + c.getPlayerAssistant().sendFrame246(329, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 331); + } else if (WeaponName2.startsWith("dart") + || WeaponName2.startsWith("knife") + || WeaponName2.startsWith("javelin") + || WeaponName.equalsIgnoreCase("toktz-xil-ul")) { + c.getActionSender().setSidebarInterface(0, 4446); // accurate, + // rapid, + // longrange + c.getPlayerAssistant().sendFrame246(4447, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 4449); + } else if (WeaponName2.startsWith("dagger") + || WeaponName2.contains("sword")) { + c.getActionSender().setSidebarInterface(0, 2276); // stab, + // lunge, + // slash, + // block + c.getPlayerAssistant().sendFrame246(2277, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 2279); + } else if (WeaponName2.startsWith("pickaxe")) { + c.getActionSender().setSidebarInterface(0, 5570); // spike, + // impale, + // smash, + // block + c.getPlayerAssistant().sendFrame246(5571, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 5573); + } else if (WeaponName2.startsWith("axe") + || WeaponName2.startsWith("battleaxe")) { + c.getActionSender().setSidebarInterface(0, 1698); // chop, + // hack, + // smash, + // block + c.getPlayerAssistant().sendFrame246(1699, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 1701); + } else if (WeaponName2.startsWith("halberd")) { + c.getActionSender().setSidebarInterface(0, 8460); // jab, + // swipe, + // fend + c.getPlayerAssistant().sendFrame246(8461, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 8463); + } else if (WeaponName2.startsWith("Scythe")) { + c.getActionSender().setSidebarInterface(0, 8460); // jab, + // swipe, + // fend + c.getPlayerAssistant().sendFrame246(8461, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 8463); + } else if (WeaponName2.startsWith("spear")) { + c.getActionSender().setSidebarInterface(0, 4679); // lunge, + // swipe, + // pound, + // block + c.getPlayerAssistant().sendFrame246(4680, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 4682); + } else if (WeaponName2.toLowerCase().contains("mace")) { + c.getActionSender().setSidebarInterface(0, 3796); + c.getPlayerAssistant().sendFrame246(3797, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 3799); + + } else if (c.playerEquipment[c.playerWeapon] == 4153) { + c.getActionSender().setSidebarInterface(0, 425); // war hamer + // equip. + c.getPlayerAssistant().sendFrame246(426, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 428); + } else { + c.getActionSender().setSidebarInterface(0, 2423); // chop, + // slash, + // lunge, + // block + c.getPlayerAssistant().sendFrame246(2424, 200, Weapon); + c.getPlayerAssistant().sendFrame126(WeaponName, 2426); + } + + } + + /** + * Weapon Requirements + **/ + + public void getRequirements(String itemName, int itemId) { + c.attackLevelReq = c.defenceLevelReq = c.strengthLevelReq = c.rangeLevelReq = c.magicLevelReq = c.agilityLevelReq = c.slayerLevelReq = 0; + if (itemName.contains("mystic") || itemName.contains("nchanted")) { + if (itemName.contains("staff")) { + c.magicLevelReq = 20; + c.attackLevelReq = 40; + } else { + c.magicLevelReq = 20; + c.defenceLevelReq = 20; + } + } + if (itemName.contains("infinity")) { + c.magicLevelReq = 50; + c.defenceLevelReq = 25; + } + if (itemName.contains("splitbark")) { + c.magicLevelReq = 40; + c.defenceLevelReq = 40; + } + if (itemName.contains("green d'hide")) { + c.rangeLevelReq = 40; + if (itemName.contains("body")) { + c.defenceLevelReq = 40; + } + } + if (itemName.contains("blue d'hide")) { + c.rangeLevelReq = 50; + if (itemName.contains("body")) { + c.defenceLevelReq = 40; + } + return; + } + if (itemName.contains("red d'hide")) { + c.rangeLevelReq = 60; + if (itemName.contains("body")) { + c.defenceLevelReq = 40; + } + return; + } + if (itemName.contains("black d'hide")) { + if (itemName.contains("body")) { + c.defenceLevelReq = 40; + } + c.rangeLevelReq = 70; + } + if (itemName.contains("bronze")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe")) { + c.attackLevelReq = c.defenceLevelReq = 1; + } + return; + } + if (itemName.contains("iron")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe")) { + c.attackLevelReq = c.defenceLevelReq = 1; + } + return; + } + if (itemName.contains("steel")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe")) { + c.attackLevelReq = c.defenceLevelReq = 5; + } + return; + } + if (itemName.contains("black")) { + if (!itemName.contains("knife") + && !itemName.equalsIgnoreCase("Black skirt") + && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe") + && !itemName.contains("vamb") && !itemName.contains("chap") && !itemName.equalsIgnoreCase("Black robe")) { + c.attackLevelReq = c.defenceLevelReq = 10; + } + return; + } + if (itemName.contains("mithril")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe")) { + c.attackLevelReq = c.defenceLevelReq = 20; + } + return; + } + if (itemName.contains("adamant")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe")) { + c.attackLevelReq = c.defenceLevelReq = 30; + } + return; + } + if (itemName.contains("rune")) { + if (!itemName.contains("knife") && !itemName.contains("dart") + && !itemName.contains("javelin") + && !itemName.contains("thrownaxe") + && !itemName.contains("'bow")) { + c.attackLevelReq = c.defenceLevelReq = 40; + } + return; + } + if (itemName.contains("dragon")) { + if (!itemName.contains("nti-") && !itemName.contains("fire")) { + c.attackLevelReq = c.defenceLevelReq = 60; + return; + } + } + if (itemName.contains("crystal")) { + if (itemName.contains("shield")) { + c.defenceLevelReq = 70; + } else { + c.rangeLevelReq = 70; + } + return; + } + if (itemName.contains("ahrim")) { + if (itemName.contains("staff")) { + c.magicLevelReq = 70; + c.attackLevelReq = 70; + } else { + c.magicLevelReq = 70; + c.defenceLevelReq = 70; + } + } + if (itemName.contains("karil")) { + if (itemName.contains("crossbow")) { + c.rangeLevelReq = 70; + } else { + c.rangeLevelReq = 70; + c.defenceLevelReq = 70; + } + } + if (itemName.contains("godsword")) { + c.attackLevelReq = 75; + } + if (itemName.contains("3rd age") && !itemName.contains("amulet")) { + c.defenceLevelReq = 60; + } + if (itemName.contains("Initiate")) { + c.defenceLevelReq = 20; + } + if (itemName.contains("verac") || itemName.contains("guthan") + || itemName.contains("dharok") || itemName.contains("torag")) { + + if (itemName.contains("hammers")) { + c.attackLevelReq = 70; + c.strengthLevelReq = 70; + } else if (itemName.contains("axe")) { + c.attackLevelReq = 70; + c.strengthLevelReq = 70; + } else if (itemName.contains("warspear")) { + c.attackLevelReq = 70; + c.strengthLevelReq = 70; + } else if (itemName.contains("flail")) { + c.attackLevelReq = 70; + c.strengthLevelReq = 70; + } else { + c.defenceLevelReq = 70; + } + } + + switch (itemId) { + case 8839: + case 8840: + case 8842: + case 11663: + case 11664: + case 11665: + c.attackLevelReq = 42; + c.rangeLevelReq = 42; + c.strengthLevelReq = 42; + c.magicLevelReq = 42; + c.defenceLevelReq = 42; + return; + case 10551: + case 2503: + case 2501: + case 2499: + case 1135: + c.defenceLevelReq = 40; + return; + case 1133: + c.defenceLevelReq = 20; + c.rangeLevelReq = 20; + return; + case 11235: + case 6522: + c.rangeLevelReq = 60; + break; + case 1097: + c.rangeLevelReq = 20; + break; + case 864: + case 863: + c.rangeLevelReq = 1; + break; + case 865: + c.rangeLevelReq = 5; + break; + case 866: + c.rangeLevelReq = 20; + break; + case 867: + c.rangeLevelReq = 30; + break; + case 868: + c.rangeLevelReq = 40; + break; + case 6524: + c.defenceLevelReq = 60; + break; + case 11284: + c.defenceLevelReq = 75; + return; + case 6889: + case 6914: + c.magicLevelReq = 60; + break; + case 10828: + c.defenceLevelReq = 55; + break; + case 11724: + case 11726: + case 11728: + c.defenceLevelReq = 65; + break; + case 847: + case 849: + c.rangeLevelReq = 20; + break; + case 843: + case 845: + c.rangeLevelReq = 5; + break; + case 851: + case 853: + c.rangeLevelReq = 30; + break; + case 855: + case 857: + c.rangeLevelReq = 40; + break; + case 859: + case 861: + c.rangeLevelReq = 50; + break; + case 3749: + case 3751: + case 3755: + case 3753: + c.defenceLevelReq = 45; + break; + + case 7462: + case 7461: + c.defenceLevelReq = 40; + break; + case 8846: + c.defenceLevelReq = 5; + break; + case 8847: + c.defenceLevelReq = 10; + break; + case 8848: + c.defenceLevelReq = 20; + break; + case 8849: + c.defenceLevelReq = 30; + break; + case 8850: + c.defenceLevelReq = 40; + break; + + case 7460: + c.defenceLevelReq = 40; + break; + + case 837: + c.rangeLevelReq = 61; + break; + + case 4151: // if you don't want to use names + c.attackLevelReq = 70; + return; + + case 6724: // seercull + c.rangeLevelReq = 60; // idk if that is correct + return; + case 6523: + case 6525: + case 6527: + c.attackLevelReq = 60; + return; + case 6526: + c.attackLevelReq = 60; + c.magicLevelReq = 60; + return; + case 4156: + c.defenceLevelReq = 20; + c.slayerLevelReq = 25; + return; + case 1391: + case 1393: + case 1395: + case 1397: + case 1399: + case 3053: + c.attackLevelReq = 30; + c.magicLevelReq = 30; + return; + case 4158: + c.slayerLevelReq = 55; + c.attackLevelReq = 50; + return; + case 4153: + c.attackLevelReq = 50; + c.strengthLevelReq = 50; + return; + case 6528: + c.strengthLevelReq = 60; + return; + case 4161: + c.slayerLevelReq = 20; + return; + case 4168: + c.slayerLevelReq = 60; + return; + case 6696: + c.slayerLevelReq = 22; + return; + case 8923: + c.slayerLevelReq = 35; + return; + case 7159: + c.slayerLevelReq = 37; + return; + case 6708: + c.slayerLevelReq = 42; + return; + case 4170: + c.slayerLevelReq = 55; + return; + case 4162: + c.slayerLevelReq = 75; + return; + case 7421: + case 7422: + case 7423: + case 7424: + case 7425: + case 7426: + case 7427: + case 7428: + case 7429: + case 7430: + case 7431: + case 7432: + c.slayerLevelReq = 57; + return; + case 4212: + case 4214: + case 4215: + case 4216: + case 4217: + case 4218: + case 4219: + case 4220: + case 4221: + case 4222: + case 4223: + c.agilityLevelReq = 50; + c.rangeLevelReq = 70; + return; + case 4150: + case 4160: + case 4172: + case 4174: + c.slayerLevelReq = 55; + return; + case 1015: + c.defenceLevelReq = 1; + return; + case 6664: + c.slayerLevelReq = 32; + return; + case 4551: + c.defenceLevelReq = 5; + return; + case 7051: + c.slayerLevelReq = 33; + return; + case 4166: + c.slayerLevelReq = 15; + return; + case 4164: + c.slayerLevelReq = 10; + return; + } + } + + /** + * two handed weapon check + **/ + public boolean is2handed(String itemName, int itemId) { + if (itemName.contains("ahrim") || itemName.contains("karil") || itemName.contains("verac") || itemName.contains("guthan") || itemName.contains("dharok") || itemName.contains("torag")) { + return true; + } + if (itemName.contains("claws")) { + return true; + } + if (itemName.contains("longbow") || itemName.contains("shortbow") || itemName.contains("ark bow")) { + return true; + } + if (itemName.contains("crystal")) { + return true; + } + if (itemName.contains("godsword") || itemName.contains("aradomin sword") || itemName.contains("2h") || itemName.contains("spear")) { + return true; + } + switch (itemId) { + case 6724: // seercull + case 11730: + case 4153: + case 6528: + case 14484: + return true; + } + return false; + } + + /** + * Weapons special bar, adds the spec bars to weapons that require them and + * removes the spec bars from weapons which don't require them + **/ + + public void addSpecialBar(int weapon) { + switch (weapon) { + + case 4151: // whip + c.getPlayerAssistant().sendFrame171(0, 12323); + specialAmount(weapon, c.specAmount, 12335); + break; + + case 859: // magic bows + case 861: + case 11235: + c.getPlayerAssistant().sendFrame171(0, 7549); + specialAmount(weapon, c.specAmount, 7561); + break; + + case 4587: // dscimmy + c.getPlayerAssistant().sendFrame171(0, 7599); + specialAmount(weapon, c.specAmount, 7611); + break; + + case 3204: // d hally + c.getPlayerAssistant().sendFrame171(0, 8493); + specialAmount(weapon, c.specAmount, 8505); + break; + + case 1377: // d battleaxe + c.getPlayerAssistant().sendFrame171(0, 7499); + specialAmount(weapon, c.specAmount, 7511); + break; + + case 4153: // gmaul + c.getPlayerAssistant().sendFrame171(0, 7474); + specialAmount(weapon, c.specAmount, 7486); + break; + + case 1249: // dspear + c.getPlayerAssistant().sendFrame171(0, 7674); + specialAmount(weapon, c.specAmount, 7686); + break; + + case 1215:// dragon dagger + case 1231: + case 5680: + case 5698: + case 1305: // dragon long + case 11694: + case 11698: + case 11700: + case 11730: + case 11696: + c.getPlayerAssistant().sendFrame171(0, 7574); + specialAmount(weapon, c.specAmount, 7586); + break; + + case 1434: // dragon mace + c.getPlayerAssistant().sendFrame171(0, 7624); + specialAmount(weapon, c.specAmount, 7636); + break; + + default: + c.getPlayerAssistant().sendFrame171(1, 7624); // mace + // interface + c.getPlayerAssistant().sendFrame171(1, 7474); // hammer, gmaul + c.getPlayerAssistant().sendFrame171(1, 7499); // axe + c.getPlayerAssistant().sendFrame171(1, 7549); // bow interface + c.getPlayerAssistant().sendFrame171(1, 7574); // sword + // interface + c.getPlayerAssistant().sendFrame171(1, 7599); // scimmy sword + // interface, + // for most + // swords + c.getPlayerAssistant().sendFrame171(1, 8493); + c.getPlayerAssistant().sendFrame171(1, 12323); // whip + // interface + break; + } + } + + /** + * Specials bar filling amount + **/ + + public void specialAmount(int weapon, double specAmount, int barId) { + c.specBarId = barId; + c.getPlayerAssistant().sendFrame70(specAmount >= 10 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 9 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 8 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 7 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 6 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 5 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 4 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 3 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 2 ? 500 : 0, 0, + --barId); + c.getPlayerAssistant().sendFrame70(specAmount >= 1 ? 500 : 0, 0, + --barId); + updateSpecialBar(); + sendWeapon(weapon, getItemName(weapon)); + } + + /** + * Special attack text and what to highlight or blackout + **/ + + public void updateSpecialBar() { + if (c.usingSpecial) { + c.getPlayerAssistant() + .sendFrame126( + "" + + (c.specAmount >= 2 ? "@yel@S P" + : "@bla@S P") + + "" + + (c.specAmount >= 3 ? "@yel@ E" + : "@bla@ E") + + "" + + (c.specAmount >= 4 ? "@yel@ C I" + : "@bla@ C I") + + "" + + (c.specAmount >= 5 ? "@yel@ A L" + : "@bla@ A L") + + "" + + (c.specAmount >= 6 ? "@yel@ A" + : "@bla@ A") + + "" + + (c.specAmount >= 7 ? "@yel@ T T" + : "@bla@ T T") + + "" + + (c.specAmount >= 8 ? "@yel@ A" + : "@bla@ A") + + "" + + (c.specAmount >= 9 ? "@yel@ C" + : "@bla@ C") + + "" + + (c.specAmount >= 10 ? "@yel@ K" + : "@bla@ K"), c.specBarId); + } else { + c.getPlayerAssistant().sendFrame126( + "@bla@S P E C I A L A T T A C K", c.specBarId); + } + } + + /** + * Wear Item + **/ + + public boolean wearItem(int wearID, int slot) { + if (!playerHasItem(wearID, 1, slot)) { + // add a method here for logging cheaters(If you want) + return false; + } + if (c.tutorialProgress < 22) { + c.getActionSender().sendMessage( + "You'll be told how to equip items later."); + return false; + } + + if (c.tutorialProgress == 22) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "Clothes, armour, weapons and many other items are equipped", + "like this. You can unequip items by clicking on the item in the", + "worn inventory. You can close this window by clicking on the", + "small x. Speak to the Combat Instructor to continue.", + "You're now holding your dagger"); + c.getActionSender().chatbox(6179); + c.tutorialProgress = 23; + // c.setSidebarInterface(0, -1);// worn + + } else if (c.tutorialProgress == 23) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "", + "Click on the flashing crossed swords icon to see the combat", + "interface.", "", "Combat interface"); + c.getActionSender().chatbox(6179); + c.getActionSender().flashSideBarIcon(0); + // c.getPacketDispatcher().tutorialIslandInterface(50, 11); + } + int targetSlot = 0; + boolean canWearItem = true; + if (c.playerItems[slot] == wearID + 1) { + getRequirements(getItemName(wearID).toLowerCase(), wearID); + targetSlot = Item.targetSlots[wearID]; + + if (c.duelRule[11] && targetSlot == 0) { + c.getActionSender().sendMessage( + "Wearing hats has been disabled in this duel!"); + return false; + } + if (c.duelRule[12] && targetSlot == 1) { + c.getActionSender().sendMessage( + "Wearing capes has been disabled in this duel!"); + return false; + } + if (c.duelRule[13] && targetSlot == 2) { + c.getActionSender().sendMessage( + "Wearing amulets has been disabled in this duel!"); + return false; + } + if (c.duelRule[14] && targetSlot == 3) { + c.getActionSender().sendMessage( + "Wielding weapons has been disabled in this duel!"); + return false; + } + if (c.duelRule[15] && targetSlot == 4) { + c.getActionSender().sendMessage( + "Wearing bodies has been disabled in this duel!"); + return false; + } + if (c.duelRule[16] && targetSlot == 5 || c.duelRule[16] + && is2handed(getItemName(wearID).toLowerCase(), wearID)) { + c.getActionSender().sendMessage( + "Wearing shield has been disabled in this duel!"); + return false; + } + if (c.duelRule[17] && targetSlot == 7) { + c.getActionSender().sendMessage( + "Wearing legs has been disabled in this duel!"); + return false; + } + if (c.duelRule[18] && targetSlot == 9) { + c.getActionSender().sendMessage( + "Wearing gloves has been disabled in this duel!"); + return false; + } + if (c.duelRule[19] && targetSlot == 10) { + c.getActionSender().sendMessage( + "Wearing boots has been disabled in this duel!"); + return false; + } + if (c.duelRule[20] && targetSlot == 12) { + c.getActionSender().sendMessage( + "Wearing rings has been disabled in this duel!"); + return false; + } + if (c.duelRule[21] && targetSlot == 13) { + c.getActionSender().sendMessage( + "Wearing arrows has been disabled in this duel!"); + return false; + } + + if (Constants.itemRequirements) { + if (targetSlot == 10 || targetSlot == 7 || targetSlot == 5 + || targetSlot == 4 || targetSlot == 0 + || targetSlot == 9 || targetSlot == 10) { + if (c.defenceLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[1]) < c.defenceLevelReq) { + c.getActionSender().sendMessage( + "You need a defence level of " + + c.defenceLevelReq + + " to wear this item."); + canWearItem = false; + } + } + if (c.rangeLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[4]) < c.rangeLevelReq) { + c.getActionSender().sendMessage( + "You need a range level of " + + c.rangeLevelReq + + " to wear this item."); + canWearItem = false; + } + } + if (c.magicLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[6]) < c.magicLevelReq) { + c.getActionSender().sendMessage( + "You need a magic level of " + + c.magicLevelReq + + " to wear this item."); + canWearItem = false; + } + } + } + if (c.slayerLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[18]) < c.slayerLevelReq) { + c.getActionSender().sendMessage( + "You need a slayer level of " + + c.slayerLevelReq + + " to wear this item."); + canWearItem = false; + } + } + if (c.agilityLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[16]) < c.agilityLevelReq) { + c.getActionSender().sendMessage( + "You need a agility level of " + + c.agilityLevelReq + + " to wear this item."); + canWearItem = false; + } + } + if (targetSlot == 3) { + if (c.attackLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[0]) < c.attackLevelReq) { + c.getActionSender().sendMessage( + "You need an attack level of " + + c.attackLevelReq + + " to wield this weapon."); + canWearItem = false; + } + } + if (c.rangeLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[4]) < c.rangeLevelReq) { + c.getActionSender().sendMessage( + "You need a range level of " + + c.rangeLevelReq + + " to wield this weapon."); + canWearItem = false; + } + } + if (c.magicLevelReq > 0) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[6]) < c.magicLevelReq) { + c.getActionSender().sendMessage( + "You need a magic level of " + + c.magicLevelReq + + " to wield this weapon."); + canWearItem = false; + } + } + } + } + + switch (wearID) { + case 6181: + case 428:// legs + case 538: + case 6343: + case 6353: + case 6363: + case 6396: + case 6373: + case 6404: + case 5044: + case 5046: + case 5050: + case 5052: + case 5040: + case 5038: + case 6752: + case 5048: + case 5036: + case 5042: + case 4300: + case 1835: + case 7116: + case 7126: + case 7132: + case 7138: + case 548: + case 6185: + targetSlot = 7; + break; + case 4166:// hats + case 1167: + case 5525: + case 4168: + case 1025: + case 7112: + case 7124: + case 7130: + case 7136: + case 4611: + case 5527: + case 5529: + case 5531: + case 5533: + case 5535: + case 5537: + case 5539: + case 5541: + case 5543: + case 5545: + case 5547: + targetSlot = 0; + break; + case 4304:// cape + case 3759: + case 3761: + case 3763: + case 3765: + case 3777: + case 3779: + case 3781: + case 3783: + case 3785: + case 3787: + case 3789: + case 4514: + case 4516: + targetSlot = 1; + break; + case 7051: + case 7053:// shields + targetSlot = 5; + break; + case 577: + case 426:// bodies + case 540: + case 430: + case 6786: + case 581: + case 5024: + case 5030: + case 1757: + case 5034: + case 5032: + case 3793: + case 1005: + case 546: + case 6402: + case 6788: + case 6184: + case 6186: + targetSlot = 4; + break; + case 3853: + case 3855: + case 3857: + case 3859: + case 3861: + case 3863: + case 1718: + case 3865: + case 4306: + case 3867:// necklace/amulet + case 1702: + targetSlot = 2; + break; + case 776:// gloves + targetSlot = 9; + break; + case 1215: + case 1231: + case 5680: + case 5698: + case 1305: + if (c.spiritTree == false && c.playerRights != 3) { + c.getActionSender().sendMessage("You need to beat the tree spirit to wear this."); + return false; + } + } + if (!canWearItem) { + return false; + } + + int wearAmount = c.playerItemsN[slot]; + if (wearAmount < 1) { + return false; + } + + if (targetSlot == c.playerWeapon) { + c.autocasting = false; + c.autocastId = 0; + c.getPlayerAssistant().sendConfig(108, 0); + } + + if (CastleWars.isInCw(c) || CastleWars.isInCwWait(c)) { + if (targetSlot == 1 || targetSlot == 0) { + c.getActionSender().sendMessage("You can't wear your own capes or hats in a Castle Wars Game!"); + return false; + } + } + + /* + * if (slot >= 0 && wearID >= 0) { int toEquip = + * c.playerItems[slot]; int toEquipN = c.playerItemsN[slot]; int + * toRemove = c.playerEquipment[targetSlot]; int toRemoveN = + * c.playerEquipmentN[targetSlot]; + */ + + if (slot >= 0 && wearID >= 0) { + int toEquip = c.playerItems[slot]; + int toEquipN = c.playerItemsN[slot]; + int toRemove = c.playerEquipment[targetSlot]; + int toRemoveN = c.playerEquipmentN[targetSlot]; + if (toEquip == toRemove + 1 && Item.itemStackable[toRemove]) { + deleteItem(toRemove, getItemSlot(toRemove), toEquipN); + c.playerEquipmentN[targetSlot] += toEquipN; + /* + * Castle wars + */ + + if (CastleWars.SARA_BANNER == toRemove + || CastleWars.ZAMMY_BANNER == toRemove) { // alk + // update + CastleWars.dropFlag(c, toRemove); + toRemove = -1; + toRemoveN = 0; + } + } else if (targetSlot != 5 && targetSlot != 3) { + // c.playerItems[slot] = 0; + // c.playerItemsN[slot] = 0; + // c.playerEquipment[targetSlot] = toEquip - 1; + // c.playerEquipmentN[targetSlot] = toEquipN; + + c.playerItems[slot] = 0; + c.playerItemsN[slot] = 0; + if (toRemove > 0 && toRemoveN > 0) { + addItem(toRemove, toRemoveN); + } + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + } else if (targetSlot == 5) { + boolean wearing2h = is2handed( + getItemName(c.playerEquipment[c.playerWeapon]) + .toLowerCase(), + c.playerEquipment[c.playerWeapon]); + if (wearing2h) { + toRemove = c.playerEquipment[c.playerWeapon]; + toRemoveN = c.playerEquipmentN[c.playerWeapon]; + c.playerEquipment[c.playerWeapon] = -1; + c.playerEquipmentN[c.playerWeapon] = 0; + updateSlot(c.playerWeapon); + } + c.playerItems[slot] = toRemove + 1; + c.playerItemsN[slot] = toRemoveN; + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + } else if (targetSlot == 3) { + boolean is2h = is2handed(getItemName(wearID).toLowerCase(), + wearID); + boolean wearingShield = c.playerEquipment[c.playerShield] > 0; + boolean wearingWeapon = c.playerEquipment[c.playerWeapon] > 0; + if (is2h) { + if (wearingShield && wearingWeapon) { + if (freeSlots() > 0) { + c.playerItems[slot] = toRemove + 1; + c.playerItemsN[slot] = toRemoveN; + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + removeItem(c.playerEquipment[c.playerShield], + c.playerShield); + } else { + c.getActionSender() + .sendMessage( + "You do not have enough inventory space to do this."); + return false; + } + } else if (wearingShield && !wearingWeapon) { + c.playerItems[slot] = c.playerEquipment[c.playerShield] + 1; + c.playerItemsN[slot] = c.playerEquipmentN[c.playerShield]; + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + c.playerEquipment[c.playerShield] = -1; + c.playerEquipmentN[c.playerShield] = 0; + updateSlot(c.playerShield); + } else { + c.playerItems[slot] = toRemove + 1; + c.playerItemsN[slot] = toRemoveN; + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + } + } else { + // c.playerItems[slot] = toRemove + 1; + // c.playerItemsN[slot] = toRemoveN; + // c.playerEquipment[targetSlot] = toEquip - 1; + // c.playerEquipmentN[targetSlot] = toEquipN; + + c.playerItems[slot] = 0; + c.playerItemsN[slot] = 0; + + // c.playerItems[slot] = toRemove + 1; + // c.playerItemsN[slot] = toRemoveN; + if (toRemove > 0 && toRemoveN > 0) { + addItem(toRemove, toRemoveN); + } + c.playerEquipment[targetSlot] = toEquip - 1; + c.playerEquipmentN[targetSlot] = toEquipN; + } + } + } + resetItems(3214); + if (targetSlot == 3) { + c.usingSpecial = false; + addSpecialBar(wearID); + } + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(targetSlot); + c.getOutStream().writeWord(wearID + 1); + + if (c.playerEquipmentN[targetSlot] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord(c.playerEquipmentN[targetSlot]); + } else { + c.getOutStream().writeByte(c.playerEquipmentN[targetSlot]); + } + + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + sendWeapon(c.playerEquipment[c.playerWeapon], + getItemName(c.playerEquipment[c.playerWeapon])); + resetBonus(); + getBonus(); + writeBonus(); + c.getCombatAssistant().getPlayerAnimIndex(); + c.getPlayerAssistant().requestUpdates(); + return true; + } else { + return false; + } + } + + public void wearItem(int wearID, int wearAmount, int targetSlot) { + synchronized (c) { + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(targetSlot); + c.getOutStream().writeWord(wearID + 1); + + if (wearAmount > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord(wearAmount); + } else { + c.getOutStream().writeByte(wearAmount); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + c.playerEquipment[targetSlot] = wearID; + c.playerEquipmentN[targetSlot] = wearAmount; + c.getItemAssistant(); + c.getItemAssistant() + .sendWeapon( + c.playerEquipment[c.playerWeapon], + ItemAssistant + .getItemName(c.playerEquipment[c.playerWeapon])); + resetBonus(); + getBonus(); + /*for (int bowId : RangeData.BOWS) { + if (c.playerEquipment[c.playerWeapon] == bowId) { + for (int arrowId : RangeData.ARROWS) { + if (c.playerEquipment[c.playerArrows] == arrowId && c.playerEquipment[c.playerWeapon] == bowId) { + writeBonus(); + } else if (c.playerEquipment[c.playerWeapon] == bowId && c.playerEquipment[c.playerArrows] != arrowId) { + writeBonus(); + } else if (c.playerEquipment[c.playerArrows] != arrowId && c.playerEquipment[c.playerWeapon] != bowId) { + writeBonus(); + } + } + } + }*/ + writeBonus(); + c.getCombatAssistant().getPlayerAnimIndex(); + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + } + } + + public void updateSlot(int slot) { + // synchronized(c) { + if (c.getOutStream() != null && c != null) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(slot); + c.getOutStream().writeWord(c.playerEquipment[slot] + 1); + if (c.playerEquipmentN[slot] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord(c.playerEquipmentN[slot]); + } else { + c.getOutStream().writeByte(c.playerEquipmentN[slot]); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + + } + + /** + * Remove Item + **/ + public void removeItem(int wearID, int slot) { + // synchronized(c) { + if (c.getOutStream() != null && c != null) { + if (c.playerEquipment[slot] > -1) { + if (c.playerEquipment[slot] == CastleWars.SARA_BANNER|| c.playerEquipment[slot] == CastleWars.ZAMMY_BANNER) { + CastleWars.dropFlag(c, c.playerEquipment[slot]); + } + if ((c.playerEquipment[slot] == CastleWars.SARA_CAPE || c.playerEquipment[slot] == CastleWars.ZAMMY_CAPE) && c.inCw()) { + c.getActionSender().sendMessage("You cannot unequip your castle wars cape!"); + return; + } + if (addItem(c.playerEquipment[slot], c.playerEquipmentN[slot])) { + if (c.playerEquipment[slot] == CastleWars.SARA_BANNER || c.playerEquipment[slot] == CastleWars.ZAMMY_BANNER) { + CastleWars.dropFlag(c, c.playerEquipment[slot]); + deleteItem2(c.playerEquipment[slot], 1); + } + c.playerEquipment[slot] = -1; + c.playerEquipmentN[slot] = 0; + sendWeapon(c.playerEquipment[c.playerWeapon], + getItemName(c.playerEquipment[c.playerWeapon])); + resetBonus(); + getBonus(); + writeBonus(); + c.getCombatAssistant().getPlayerAnimIndex(); + c.getOutStream().createFrame(34); + c.getOutStream().writeWord(6); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(slot); + c.getOutStream().writeWord(0); + c.getOutStream().writeByte(0); + c.flushOutStream(); + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + Weight.calcWeight(c, wearID, "deleteitem"); + } + } + } + // } + } + + /** + * BANK + */ + + public void rearrangeBank() { + int totalItems = 0; + int highestSlot = 0; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] != 0) { + totalItems++; + if (highestSlot <= i) { + highestSlot = i; + } + } + } + + for (int i = 0; i <= highestSlot; i++) { + if (c.bankItems[i] == 0) { + boolean stop = false; + + for (int k = i; k <= highestSlot; k++) { + if (c.bankItems[k] != 0 && !stop) { + int spots = k - i; + for (int j = k; j <= highestSlot; j++) { + c.bankItems[j - spots] = c.bankItems[j]; + c.bankItemsN[j - spots] = c.bankItemsN[j]; + stop = true; + c.bankItems[j] = 0; + c.bankItemsN[j] = 0; + } + } + } + } + } + + int totalItemsAfter = 0; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] != 0) { + totalItemsAfter++; + } + } + + if (totalItems != totalItemsAfter) { + c.disconnected = true; + } + } + + public void itemOnInterface(int id, int amount) { + // synchronized(c) { + c.getOutStream().createFrameVarSizeWord(53); + c.getOutStream().writeWord(2274); + c.getOutStream().writeWord(1); + if (amount > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord_v2(amount); + } else { + c.getOutStream().writeByte(amount); + } + c.getOutStream().writeWordBigEndianA(id); + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + + public void resetBank() { + synchronized (c) { + c.getOutStream().createFrameVarSizeWord(53); + c.getOutStream().writeWord(5382); // bank + c.getOutStream().writeWord(Constants.BANK_SIZE); + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItemsN[i] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord_v2(c.bankItemsN[i]); + } else { + c.getOutStream().writeByte(c.bankItemsN[i]); + } + if (c.bankItemsN[i] < 1) { + c.bankItems[i] = 0; + } + if (c.bankItems[i] > Constants.ITEM_LIMIT || c.bankItems[i] < 0) { + c.bankItems[i] = Constants.ITEM_LIMIT; + } + c.getOutStream().writeWordBigEndianA(c.bankItems[i]); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + } + } + + public void resetTempItems() { + // synchronized(c) { + int itemCount = 0; + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] > -1) { + itemCount = i; + } + } + c.getOutStream().createFrameVarSizeWord(53); + c.getOutStream().writeWord(5064); + c.getOutStream().writeWord(itemCount + 1); + for (int i = 0; i < itemCount + 1; i++) { + if (c.playerItemsN[i] > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord_v2(c.playerItemsN[i]); + } else { + c.getOutStream().writeByte(c.playerItemsN[i]); + } + if (c.playerItems[i] > Constants.ITEM_LIMIT || c.playerItems[i] < 0) { + c.playerItems[i] = Constants.ITEM_LIMIT; + } + c.getOutStream().writeWordBigEndianA(c.playerItems[i]); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + // } + } + + public boolean bankItem(int itemID, int fromSlot, int amount) { + if (c.inTrade) { + c.getActionSender().sendMessage("You can't store items while trading!"); + return false; + } + for (int i = 0; i < Constants.ITEM_BANKABLE.length; i++) { + if (itemID == Constants.ITEM_BANKABLE[i]) { + c.getActionSender().sendMessage("You can't bank that item!"); + return false; + } + } + if (!CastleWars.deleteCastleWarsItems(c, itemID)) { + return false; + } + if (c.otherBank == true) { + c.getPlayerAssistant().closeAllWindows(); + c.getActionSender().sendMessage("You can't bank while viewing someones bank!"); + c.otherBank = false; + return false; + } + if (c.playerItemsN[fromSlot] <= 0) { + return false; + } + if (!Item.itemIsNote[c.playerItems[fromSlot] - 1]) { + if (c.playerItems[fromSlot] <= 0) { + return false; + } + if (Item.itemStackable[c.playerItems[fromSlot] - 1] || c.playerItemsN[fromSlot] > 1) { + int toBankSlot = 0; + boolean alreadyInBank = false; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] == c.playerItems[fromSlot]) { + if (c.playerItemsN[fromSlot] < amount) { + amount = c.playerItemsN[fromSlot]; + } + alreadyInBank = true; + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + + if (!alreadyInBank && freeBankSlots() > 0) { + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0) { + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + c.bankItems[toBankSlot] = c.playerItems[fromSlot]; + if (c.playerItemsN[fromSlot] < amount) { + amount = c.playerItemsN[fromSlot]; + } + if (c.bankItemsN[toBankSlot] + amount <= Constants.MAXITEM_AMOUNT + && c.bankItemsN[toBankSlot] + amount > -1) { + c.bankItemsN[toBankSlot] += amount; + } else { + c.getActionSender().sendMessage("Bank full!"); + return false; + } + deleteItem(c.playerItems[fromSlot] - 1, fromSlot, amount); + resetTempItems(); + resetBank(); + return true; + } else if (alreadyInBank) { + if (c.bankItemsN[toBankSlot] + amount <= Constants.MAXITEM_AMOUNT + && c.bankItemsN[toBankSlot] + amount > -1) { + c.bankItemsN[toBankSlot] += amount; + } else { + c.getActionSender().sendMessage("Bank full!"); + return false; + } + deleteItem(c.playerItems[fromSlot] - 1, fromSlot, amount); + resetTempItems(); + resetBank(); + return true; + } else { + c.getActionSender().sendMessage("Your bank is full!"); + return false; + } + } else { + itemID = c.playerItems[fromSlot]; + int toBankSlot = 0; + boolean alreadyInBank = false; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] == c.playerItems[fromSlot]) { + alreadyInBank = true; + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + if (!alreadyInBank && freeBankSlots() > 0) { + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0) { + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + int firstPossibleSlot = 0; + boolean itemExists = false; + while (amount > 0) { + itemExists = false; + for (int i = firstPossibleSlot; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + firstPossibleSlot = i; + itemExists = true; + i = 30; + } + } + if (itemExists) { + c.bankItems[toBankSlot] = c.playerItems[firstPossibleSlot]; + c.bankItemsN[toBankSlot] += 1; + deleteItem(c.playerItems[firstPossibleSlot] - 1, + firstPossibleSlot, 1); + amount--; + } else { + amount = 0; + } + } + resetTempItems(); + resetBank(); + return true; + } else if (alreadyInBank) { + int firstPossibleSlot = 0; + boolean itemExists = false; + while (amount > 0) { + itemExists = false; + for (int i = firstPossibleSlot; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + firstPossibleSlot = i; + itemExists = true; + i = 30; + } + } + if (itemExists) { + c.bankItemsN[toBankSlot] += 1; + deleteItem(c.playerItems[firstPossibleSlot] - 1, + firstPossibleSlot, 1); + amount--; + } else { + amount = 0; + } + } + resetTempItems(); + resetBank(); + return true; + } else { + c.getActionSender().sendMessage("Bank full!"); + return false; + } + } + } else if (Item.itemIsNote[c.playerItems[fromSlot] - 1] && !Item.itemIsNote[c.playerItems[fromSlot] - 2]) { + if (c.playerItems[fromSlot] <= 0) { + return false; + } + if (Item.itemStackable[c.playerItems[fromSlot] - 1] || c.playerItemsN[fromSlot] > 1) { + int toBankSlot = 0; + boolean alreadyInBank = false; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] == c.playerItems[fromSlot] - 1) { + if (c.playerItemsN[fromSlot] < amount) { + amount = c.playerItemsN[fromSlot]; + } + alreadyInBank = true; + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + + if (!alreadyInBank && freeBankSlots() > 0) { + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0) { + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + c.bankItems[toBankSlot] = c.playerItems[fromSlot] - 1; + if (c.playerItemsN[fromSlot] < amount) { + amount = c.playerItemsN[fromSlot]; + } + if (c.bankItemsN[toBankSlot] + amount <= Constants.MAXITEM_AMOUNT && c.bankItemsN[toBankSlot] + amount > -1) { + c.bankItemsN[toBankSlot] += amount; + } else { + return false; + } + deleteItem(c.playerItems[fromSlot] - 1, fromSlot, amount); + resetTempItems(); + resetBank(); + return true; + } else if (alreadyInBank) { + if (c.bankItemsN[toBankSlot] + amount <= Constants.MAXITEM_AMOUNT && c.bankItemsN[toBankSlot] + amount > -1) { + c.bankItemsN[toBankSlot] += amount; + } else { + return false; + } + deleteItem(c.playerItems[fromSlot] - 1, fromSlot, amount); + resetTempItems(); + resetBank(); + return true; + } else { + c.getActionSender().sendMessage("Bank full!"); + return false; + } + } else { + itemID = c.playerItems[fromSlot]; + int toBankSlot = 0; + boolean alreadyInBank = false; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] == c.playerItems[fromSlot] - 1) { + alreadyInBank = true; + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + if (!alreadyInBank && freeBankSlots() > 0) { + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0) { + toBankSlot = i; + i = Constants.BANK_SIZE + 1; + } + } + int firstPossibleSlot = 0; + boolean itemExists = false; + while (amount > 0) { + itemExists = false; + for (int i = firstPossibleSlot; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + firstPossibleSlot = i; + itemExists = true; + i = 30; + } + } + if (itemExists) { + c.bankItems[toBankSlot] = c.playerItems[firstPossibleSlot] - 1; + c.bankItemsN[toBankSlot] += 1; + deleteItem(c.playerItems[firstPossibleSlot] - 1, + firstPossibleSlot, 1); + amount--; + } else { + amount = 0; + } + } + resetTempItems(); + resetBank(); + return true; + } else if (alreadyInBank) { + int firstPossibleSlot = 0; + boolean itemExists = false; + while (amount > 0) { + itemExists = false; + for (int i = firstPossibleSlot; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + firstPossibleSlot = i; + itemExists = true; + i = 30; + } + } + if (itemExists) { + c.bankItemsN[toBankSlot] += 1; + deleteItem(c.playerItems[firstPossibleSlot] - 1, + firstPossibleSlot, 1); + amount--; + } else { + amount = 0; + } + } + resetTempItems(); + resetBank(); + return true; + } else { + c.getActionSender().sendMessage("Bank full!"); + return false; + } + } + } else { + c.getActionSender().sendMessage("Item not supported " + (c.playerItems[fromSlot] - 1)); + return false; + } + } + + public int freeBankSlots() { + int freeS = 0; + for (int i = 0; i < Constants.BANK_SIZE; i++) { + if (c.bankItems[i] <= 0) { + freeS++; + } + } + return freeS; + } + + public void fromBank(int itemID, int fromSlot, int amount) { + if (amount > 0) { + if (c.bankItems[fromSlot] > 0) { + if (!c.takeAsNote) { + if (Item.itemStackable[c.bankItems[fromSlot] - 1]) { + if (c.bankItemsN[fromSlot] > amount) { + if (addItem(c.bankItems[fromSlot] - 1, amount)) { + c.bankItemsN[fromSlot] -= amount; + resetBank(); + resetItems(5064); + } + } else { + if (addItem(c.bankItems[fromSlot] - 1, + c.bankItemsN[fromSlot])) { + c.bankItems[fromSlot] = 0; + c.bankItemsN[fromSlot] = 0; + resetBank(); + resetItems(5064); + } + } + } else { + while (amount > 0) { + if (c.bankItemsN[fromSlot] > 0) { + if (addItem(c.bankItems[fromSlot] - 1, 1)) { + c.bankItemsN[fromSlot] += -1; + amount--; + } else { + amount = 0; + } + } else { + amount = 0; + } + } + resetBank(); + resetItems(5064); + } + } else if (c.takeAsNote && Item.itemIsNote[c.bankItems[fromSlot]]) { + if (c.bankItemsN[fromSlot] > amount) { + if (addItem(c.bankItems[fromSlot], amount)) { + c.bankItemsN[fromSlot] -= amount; + resetBank(); + resetItems(5064); + } + } else { + if (addItem(c.bankItems[fromSlot], c.bankItemsN[fromSlot])) { + c.bankItems[fromSlot] = 0; + c.bankItemsN[fromSlot] = 0; + resetBank(); + resetItems(5064); + } + } + } else { + c.getActionSender().sendMessage("This item can't be withdrawn as a note."); + if (Item.itemStackable[c.bankItems[fromSlot] - 1]) { + if (c.bankItemsN[fromSlot] > amount) { + if (addItem(c.bankItems[fromSlot] - 1, amount)) { + c.bankItemsN[fromSlot] -= amount; + resetBank(); + resetItems(5064); + } + } else { + if (addItem(c.bankItems[fromSlot] - 1, + c.bankItemsN[fromSlot])) { + c.bankItems[fromSlot] = 0; + c.bankItemsN[fromSlot] = 0; + resetBank(); + resetItems(5064); + } + } + } else { + while (amount > 0) { + if (c.bankItemsN[fromSlot] > 0) { + if (addItem(c.bankItems[fromSlot] - 1, 1)) { + c.bankItemsN[fromSlot] += -1; + amount--; + } else { + amount = 0; + } + } else { + amount = 0; + } + } + resetBank(); + resetItems(5064); + } + } + } + } + } + + public int itemAmount(int itemID) { + int tempAmount = 0; + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + tempAmount += c.playerItemsN[i]; + } + } + return tempAmount; + } + + public boolean isStackable(int itemID) { + return Item.itemStackable[itemID]; + } + + /** + * Update Equip tab + **/ + + public void setEquipment(int wearID, int amount, int targetSlot) { + // synchronized(c) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(targetSlot); + c.getOutStream().writeWord(wearID + 1); + if (amount > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord(amount); + } else { + c.getOutStream().writeByte(amount); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + c.playerEquipment[targetSlot] = wearID; + c.playerEquipmentN[targetSlot] = amount; + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + + /** + * Move Items + **/ + + public void moveItems(int from, int to, int moveWindow, boolean insertMode) { + if (moveWindow == 3214) { + int tempI; + int tempN; + tempI = c.playerItems[from]; + tempN = c.playerItemsN[from]; + c.playerItems[from] = c.playerItems[to]; + c.playerItemsN[from] = c.playerItemsN[to]; + c.playerItems[to] = tempI; + c.playerItemsN[to] = tempN; + } + + if (moveWindow == 5382 && from >= 0 && to >= 0 + && from < Constants.BANK_SIZE && to < Constants.BANK_SIZE + && to < Constants.BANK_SIZE) { + if (insertMode) { + int tempFrom = from; + for (int tempTo = to; tempFrom != tempTo;) + if (tempFrom > tempTo) { + swapBankItem(tempFrom, tempFrom - 1); + tempFrom--; + } else if (tempFrom < tempTo) { + swapBankItem(tempFrom, tempFrom + 1); + tempFrom++; + } + } else { + swapBankItem(from, to); + } + } + + if (moveWindow == 5382) { + resetBank(); + } + if (moveWindow == 5064) { + int tempI; + int tempN; + tempI = c.playerItems[from]; + tempN = c.playerItemsN[from]; + + c.playerItems[from] = c.playerItems[to]; + c.playerItemsN[from] = c.playerItemsN[to]; + c.playerItems[to] = tempI; + c.playerItemsN[to] = tempN; + resetItems(3214); + } + resetTempItems(); + if (moveWindow == 3214) { + resetItems(3214); + } + + } + + public void swapBankItem(int from, int to) { + int tempI = c.bankItems[from]; + int tempN = c.bankItemsN[from]; + c.bankItems[from] = c.bankItems[to]; + c.bankItemsN[from] = c.bankItemsN[to]; + c.bankItems[to] = tempI; + c.bankItemsN[to] = tempN; + } + + /** + * delete Item + **/ + + public void deleteEquipment(int i, int j) { + // synchronized(c) { + if (PlayerHandler.players[c.playerId] == null) { + return; + } + if (i < 0) { + return; + } + + c.playerEquipment[j] = -1; + c.playerEquipmentN[j] = c.playerEquipmentN[j] - 1; + c.getOutStream().createFrame(34); + c.getOutStream().writeWord(6); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(j); + c.getOutStream().writeWord(0); + c.getOutStream().writeByte(0); + getBonus(); + if (j == c.playerWeapon) { + sendWeapon(-1, "Unarmed"); + } + resetBonus(); + getBonus(); + writeBonus(); + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + + public void deleteItem(int id, int amount) { + if (id <= 0) { + return; + } + for (int j = 0; j < c.playerItems.length; j++) { + if (amount <= 0) { + break; + } + if (c.playerItems[j] == id + 1) { + c.playerItems[j] = 0; + c.playerItemsN[j] = 0; + amount--; + } + } + resetItems(3214); + Weight.calcWeight(c, id, "deleteitem"); + } + + public void deleteItem(int id, int slot, int amount) { + if (id <= 0 || slot < 0) { + return; + } + if (c.playerItems[slot] == id + 1) { + if (c.playerItemsN[slot] > amount) { + c.playerItemsN[slot] -= amount; + } else { + c.playerItemsN[slot] = 0; + c.playerItems[slot] = 0; + } + resetItems(3214); + Weight.calcWeight(c, id, "deleteitem"); + } + } + + public void deleteItem2(int id, int amount) { + int am = amount; + for (int i = 0; i < c.playerItems.length; i++) { + if (am == 0) { + break; + } + if (c.playerItems[i] == id + 1) { + if (c.playerItemsN[i] > amount) { + c.playerItemsN[i] -= amount; + break; + } else { + c.playerItems[i] = 0; + c.playerItemsN[i] = 0; + am--; + } + } + } + resetItems(3214); + Weight.calcWeight(c, id, "deleteItem"); + } + + /** + * Delete Arrows + **/ + public void deleteArrow() { + // synchronized(c) { + if (c.playerEquipment[c.playerCape] == 10499 && Misc.random(5) != 1 + && c.playerEquipment[c.playerArrows] != 4740) { + return; + } + if (c.playerEquipmentN[c.playerArrows] == 1) { + deleteEquipment( + c.playerEquipment[c.playerArrows], c.playerArrows); + } + if (c.playerEquipmentN[c.playerArrows] != 0) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(c.playerArrows); + c.getOutStream().writeWord(c.playerEquipment[c.playerArrows] + 1); + if (c.playerEquipmentN[c.playerArrows] - 1 > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord( + c.playerEquipmentN[c.playerArrows] - 1); + } else { + c.getOutStream().writeByte( + c.playerEquipmentN[c.playerArrows] - 1); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + c.playerEquipmentN[c.playerArrows] -= 1; + } + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + + public void deleteEquipment() { + // synchronized(c) { + if (c.playerEquipmentN[c.playerWeapon] == 1) { + deleteEquipment( + c.playerEquipment[c.playerWeapon], c.playerWeapon); + } + if (c.playerEquipmentN[c.playerWeapon] != 0) { + c.getOutStream().createFrameVarSizeWord(34); + c.getOutStream().writeWord(1688); + c.getOutStream().writeByte(c.playerWeapon); + c.getOutStream().writeWord(c.playerEquipment[c.playerWeapon] + 1); + if (c.playerEquipmentN[c.playerWeapon] - 1 > 254) { + c.getOutStream().writeByte(255); + c.getOutStream().writeDWord( + c.playerEquipmentN[c.playerWeapon] - 1); + } else { + c.getOutStream().writeByte( + c.playerEquipmentN[c.playerWeapon] - 1); + } + c.getOutStream().endFrameVarSizeWord(); + c.flushOutStream(); + c.playerEquipmentN[c.playerWeapon] -= 1; + } + c.updateRequired = true; + c.setAppearanceUpdateRequired(true); + } + + /** + * Dropping Arrows + **/ + + public void dropArrowNpc() { + if (c.playerEquipment[c.playerCape] == 10499) { + return; + } + int enemyX = NpcHandler.npcs[c.oldNpcIndex].getX(); + int enemyY = NpcHandler.npcs[c.oldNpcIndex].getY(); + if (Misc.random(10) >= 4) { + if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY) == 0) { + Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, 1, c.getId()); + } else if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, + enemyY) != 0) { + int amount = Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, + enemyX, enemyY); + Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, false); + Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, amount + 1, c.getId()); + } + } + } + + public void dropArrowPlayer() { + int enemyX = PlayerHandler.players[c.oldPlayerIndex].getX(); + int enemyY = PlayerHandler.players[c.oldPlayerIndex].getY(); + if (c.playerEquipment[c.playerCape] == 10499) { + return; + } + if (Misc.random(10) >= 4) { + if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY) == 0) { + Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, 1, c.getId()); + } else if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, + enemyY) != 0) { + int amount = Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, + enemyX, enemyY); + Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, false); + Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, + enemyY, amount + 1, c.getId()); + } + } + } + + public void removeAllItems() { + for (int i = 0; i < c.playerItems.length; i++) { + c.playerItems[i] = 0; + } + for (int i = 0; i < c.playerItemsN.length; i++) { + c.playerItemsN[i] = 0; + } + resetItems(3214); + /* + * c.weight = 0; Weight.updateWeight(c); + */ + } + + public int freeSlots() { + int freeS = 0; + for (int playerItem : c.playerItems) { + if (playerItem <= 0) { + freeS++; + } + } + return freeS; + } + + public int findItem(int id, int[] items, int[] amounts) { + for (int i = 0; i < c.playerItems.length; i++) { + if (items[i] - 1 == id && amounts[i] > 0) { + return i; + } + } + return -1; + } + + public static String getItemName(int ItemID) { + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + if (Server.itemHandler.ItemList[i] != null) { + if (Server.itemHandler.ItemList[i].itemId == ItemID) { + return Server.itemHandler.ItemList[i].itemName; + } + } + } + return "Unarmed"; + } + + public int getItemId(String itemName) { + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + if (Server.itemHandler.ItemList[i] != null) { + if (Server.itemHandler.ItemList[i].itemName + .equalsIgnoreCase(itemName)) { + return Server.itemHandler.ItemList[i].itemId; + } + } + } + return -1; + } + + public int getItemSlot(int ItemID) { + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] - 1 == ItemID) { + return i; + } + } + return -1; + } + + public int getItemAmount(int ItemID) { + int itemCount = 0; + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] - 1 == ItemID) { + itemCount += c.playerItemsN[i]; + } + } + return itemCount; + } + + public boolean playerHasItem(int itemID, int amt, int slot) { + itemID++; + int found = 0; + if (c.playerItems[slot] == itemID) { + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + if (c.playerItemsN[i] >= amt) { + return true; + } else { + found++; + } + } + } + if (found >= amt) { + return true; + } + return false; + } + return false; + } + + public boolean playerHasItem(int itemID) { + itemID++; + for (int playerItem : c.playerItems) { + if (playerItem == itemID) { + return true; + } + } + return false; + } + + public boolean playerHasItem(int itemID, int amt) { + itemID++; + int found = 0; + for (int i = 0; i < c.playerItems.length; i++) { + if (c.playerItems[i] == itemID) { + if (c.playerItemsN[i] >= amt) { + return true; + } else { + found++; + } + } + } + if (found >= amt) { + return true; + } + return false; + } + + public int getUnnotedItem(int ItemID) { + int NewID = ItemID - 1; + String NotedName = ""; + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + if (Server.itemHandler.ItemList[i] != null) { + if (Server.itemHandler.ItemList[i].itemId == ItemID) { + NotedName = Server.itemHandler.ItemList[i].itemName; + } + } + } + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + if (Server.itemHandler.ItemList[i] != null) { + if (Server.itemHandler.ItemList[i].itemName == NotedName) { + if (Server.itemHandler.ItemList[i].itemDescription.startsWith("Swap this note at any bank for a") == false) { + NewID = Server.itemHandler.ItemList[i].itemId; + break; + } + } + } + } + return NewID; + } + +} diff --git a/2006Redone Server/src/redone/game/items/ItemDefinitions.java b/2006Redone Server/src/redone/game/items/ItemDefinitions.java new file mode 100644 index 00000000..576a05fb --- /dev/null +++ b/2006Redone Server/src/redone/game/items/ItemDefinitions.java @@ -0,0 +1,340 @@ +package redone.game.items; + +import java.io.DataInputStream; +import java.io.FileInputStream; +import java.io.IOException; + +public class ItemDefinitions { + + + public static ItemDefinitions getDef()[] { + return definitions; + } + + public ItemDefinitions() { + name = null; + itemDescription = null; + shopValue = 0; + lowAlch = 0; + highAlch = 0; + isStackable = false; + isNoteable = false; + weight = 0; + bonuses = null; + stand = -1; + walk = -1; + run = -1; + turn90left = -1; + turn90right = -1; + turn180 = -1; + attack = -1; + block = -1; + id = -1; + } + + private static int id; + + public static int getId() { + return id; + } + + + /** + * Reads the definitions from the file. + */ + public static void read() { + try { + DataInputStream in = new DataInputStream(new FileInputStream("./Data/data/itemdef.gsu")); + total = in.readShort(); + if(definitions == null) + definitions = new ItemDefinitions[total]; + for(int j = 0; j < total; j++) { + if(definitions[j] == null) { + definitions[j] = new ItemDefinitions(); + } + definitions[j].getValues(in); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Reads the stream values. + * @param in + */ + private void getValues(DataInputStream in) { + try { + do { + int opcode = in.readByte(); + if(opcode == 0) + return; + if(opcode == 1) { + name = in.readUTF(); + } else if(opcode == 2) { + itemDescription = in.readUTF(); + } else if(opcode == 3) { + shopValue = in.readInt(); + } else if(opcode == 4) { + lowAlch = in.readInt(); + } else if(opcode == 5) { + highAlch = in.readInt(); + } else if(opcode == 6) { + isStackable = true; + } else if(opcode == 7) { + isNoteable = true; + } else if(opcode == 8) { + weight = in.readDouble(); + } else if(opcode == 9) { + int length = in.readShort(); + bonuses = new double[length]; + for (int index = 0; index < length; index++) { + bonuses[index] = in.readDouble(); + } + } else if(opcode == 10) { + stand = in.readShort(); + } else if(opcode == 11) { + walk = in.readShort(); + } else if(opcode == 12) { + run = in.readShort(); + } else if(opcode == 13) { + turn90left = in.readShort(); + } else if(opcode == 14) { + turn90right = in.readShort(); + } else if(opcode == 15) { + turn180 = in.readShort(); + } else if(opcode == 16) { + attack = in.readShort(); + } else if(opcode == 17) { + block = in.readShort(); + } else { + System.out.println("Unrecognized opcode: " + opcode); + } + } while(true); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * The item definition cache. + */ + public static ItemDefinitions definitions[]; + + /** + * The total items read from the definitions. + */ + public static int total; + + /** + * Returns the total item number. + */ + public static int getTotal() { + return total; + } + + /** + * The item name. + */ + public String name; + + /** + * Returns the name of the item. + * @return + */ + public static String getName(int id) { + return definitions[id].name; + } + + /** + * The item description. + */ + public String itemDescription; + + /** + * Returns the description of an item. + */ + public static String getDescription(int id) { + return definitions[id].itemDescription; + } + + /** + * The item price. + */ + public int shopValue; + + /** + * Returns the price of an item. + */ + public static int getPrice(int id) { + return definitions[id].shopValue; + } + + /** + * The low alch value. + */ + public int lowAlch; + + /** + * Returns the low alch value of an item. + */ + public static int getLow(int id) { + return definitions[id].lowAlch; + } + + /** + * The high alch value. + */ + public int highAlch; + + /** + * Returns the high alch value of an item. + */ + public static int getHigh(int id) { + return definitions[id].highAlch; + } + + /** + * Can the item be stacked? + */ + public boolean isStackable; + + /** + * Returns whether or not the item can be stacked. + */ + public static boolean canStack(int id) { + return definitions[id].isStackable; + } + + /** + * Can the item be noted? + */ + public boolean isNoteable; + + /** + * Returns whether or not the item can be noted. + */ + public static boolean canNote(int id) { + return definitions[id].isNoteable; + } + + /** + * The weight of an item. + */ + public double weight; + + /** + * Returns the weight of an item. + */ + public static double getWeight(int id) { + return definitions[id].weight; + } + + /** + * The bonuses of an item. + */ + public double[] bonuses; + + /** + * Returns the array of bonuses for an item. + */ + public double[] getBonuses(int id) { + return definitions[id].bonuses; + } + + /** + * The stand animation of an item. + */ + public int stand; + + /** + * Returns the stand animation of an item. + */ + public static int getStand(int id) { + return definitions[id].stand; + } + + /** + * The walk animation of an item. + */ + public int walk; + + /** + * Returns the walk animation of an item. + */ + public static int getWalk(int id) { + return definitions[id].walk; + } + + /** + * The run animation of an item. + */ + public int run; + + /** + * Returns the run animation of an item. + */ + public static int getRun(int id) { + return definitions[id].run; + } + + /** + * The 90-degree left turn animation of an item. + */ + public int turn90left; + + /** + * Returns the 90-degree left turn animation of an item. + */ + public static int get90left(int id) { + return definitions[id].turn90left; + } + + /** + * The 90-degree right turn animation of an item. + */ + public int turn90right; + + /** + * Returns the 90-degree right turn animation of an item. + */ + public static int get90right(int id) { + return definitions[id].turn90right; + } + + /** + * The 180-degree turn animation of an item. + */ + public int turn180; + + /** + * Returns the 180-degree turn animation of an item. + */ + public static int get180(int id) { + return definitions[id].turn180; + } + + /** + * The attack animation of an item. + */ + public int attack; + + /** + * Returns the attack animation of an item + */ + public static int getAttack(int id) { + return definitions[id].attack; + } + + /** + * The block animation of an item. + */ + public int block; + + /** + * Returns the block animation of an item + */ + public static int getBlock(int id) { + return definitions[id].block; + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/items/ItemList.java b/2006Redone Server/src/redone/game/items/ItemList.java new file mode 100644 index 00000000..5868fff9 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/ItemList.java @@ -0,0 +1,16 @@ +package redone.game.items; + +public class ItemList { + + public int itemId; + public String itemName; + public String itemDescription; + public double ShopValue; + public double LowAlch; + public double HighAlch; + public int[] Bonuses = new int[100]; + + public ItemList(int _itemId) { + itemId = _itemId; + } +} diff --git a/2006Redone Server/src/redone/game/items/UseItem.java b/2006Redone Server/src/redone/game/items/UseItem.java new file mode 100644 index 00000000..8f3f8489 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/UseItem.java @@ -0,0 +1,379 @@ +package redone.game.items; + +import redone.game.content.skills.cooking.Cooking; +import redone.game.content.skills.crafting.GemCutting; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.content.skills.crafting.LeatherMaking; +import redone.game.content.skills.crafting.SoftClay; +import redone.game.content.skills.firemaking.Firemaking; +import redone.game.content.skills.fletching.ArrowMaking; +import redone.game.content.skills.fletching.LogCutting; +import redone.game.content.skills.fletching.LogCuttingInterface; +import redone.game.content.skills.fletching.Stringing; +import redone.game.content.skills.herblore.GrindingAction; +import redone.game.content.skills.herblore.Herblore; +import redone.game.items.impl.CapeDye; +import redone.game.items.impl.WeaponPoison; +import redone.game.npcs.impl.MilkCow; +import redone.game.objects.impl.CrystalChest; +import redone.game.objects.impl.FlourMill; +import redone.game.objects.impl.Webs; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author Ryan / Lmctruck30 + */ + +public class UseItem { + + public static void ItemonObject(Client c, int objectID, int objectX, + int objectY, int itemId) { + final int goodPosXType1 = objectX - 5; + final int goodPosXType2 = objectX + 5; + final int goodPosYType1 = objectY - 5; + final int goodPosYType2 = objectY + 5; + if (c.absX >= goodPosXType1 && c.absX <= goodPosXType2 && c.absY >= goodPosYType1 && c.absY <= goodPosYType2) { + c.turnPlayerTo(objectX, objectY); + } else { + c.getPlayerAssistant().playerWalk(objectX, objectY); + } + if (!c.getItemAssistant().playerHasItem(itemId, 1)) { + return; + } + switch (objectID) { + case 733: + if (itemId == 946) { + Webs.slashWeb(c, objectID, objectX, objectY); + } + break; + case 8689: + if (c.milking == false) { + MilkCow.milk(c); + } + break; + case 2783: + c.getSmithingInt().showSmithInterface(itemId); + break; + case 2782: + if (c.doricQuest >= 3) { + c.getSmithingInt().showSmithInterface(itemId); + } else { + c.getActionSender().sendMessage( + "You need to beat dorics quest to use his anvils"); + } + break; + case 879: + case 12279: + case 14868: + if (itemId == SoftClay.CLAY) { + SoftClay.makeClay(c); + } + break; + case 2714: + FlourMill.grainOnHopper(c, objectID, itemId); + break; + case 172: + if (itemId == CrystalChest.KEY) { + CrystalChest.searchChest(c, objectID, objectX, objectY); + } + break; + + case 364: + if (itemId == 1919) { + c.getItemAssistant().deleteItem2(1919, 1); + c.getItemAssistant().addItem(1917, 1); + c.getActionSender().sendMessage( + "You refill your beer glass."); + } + break; + + default: + if (c.playerRights == 3) { + Misc.println("Player At Object id: " + objectID + " objectX: " + + objectX + " objectY: " + objectY + " with Item id: " + + itemId); + } + break; + } + + } + + public static void ItemonItem(Client c, int itemUsed, int useWith) { + LogCuttingInterface.handleItemOnItem(c, itemUsed, useWith); + ArrowMaking.makeArrow(c, itemUsed, useWith); + Stringing.StringBow(c, itemUsed, useWith); + WeaponPoison.execute(c, itemUsed, useWith); + c.getGlassBlowing().ItemOnItem(itemUsed, useWith); + //CapeDye.execute(c, itemUsed, useWith); + if (ItemAssistant.getItemName(itemUsed).contains("(") + && ItemAssistant.getItemName(useWith).contains("(")) { + c.getPotMixing().mixPotion2(itemUsed, useWith); + } + GrindingAction.init(c, itemUsed, useWith); + CapeDye.capeOnDye(c, itemUsed, useWith); + if (Herblore.isIngredient(itemUsed) || Herblore.isIngredient(useWith)) { + Herblore.setupPotion(c, itemUsed, useWith); + } + if (itemUsed == 6703 || useWith == 6703) { + c.getPTS().handlePotato(itemUsed, useWith); + } + if (itemUsed == 1755 || useWith == 1755) { + GemCutting.cutGem(c, itemUsed, useWith); + } + if (itemUsed == 1759 || useWith == 1759) { + JewelryMaking.stringAmulet(c, itemUsed, useWith); + } + if (itemUsed == 946 || useWith == 2862) { + LogCutting.makeShafts(c); + } + if (itemUsed == 2862 || useWith == 946) { + LogCutting.makeShafts(c); + } + if (itemUsed == 314 || useWith == 2864) { + LogCutting.flightedArrow(c); + } + if (itemUsed == 2864 || useWith == 314) { + LogCutting.flightedArrow(c); + } + if (itemUsed == 2861 || useWith == 2865) { + LogCutting.ogreArrow(c); + } + if (itemUsed == 2865 || useWith == 2861) { + LogCutting.ogreArrow(c); + } + if (itemUsed == 2859 || useWith == 1755) { + LogCutting.wolfBoneArrow(c); + } + if (itemUsed == 1755 || useWith == 2859) { + LogCutting.wolfBoneArrow(c); + } + if (itemUsed == 771 && useWith == 946 + && c.playerLevel[c.playerCrafting] > 30) { + c.getItemAssistant().deleteItem(771, 1); + c.getItemAssistant().addItem(772, 1); + } else if (c.playerLevel[c.playerCrafting] < 31 && itemUsed == 771 + && useWith == 946) { + c.getActionSender().sendMessage( + "You need 31 crafting to make this."); + } + if (itemUsed == 946 && useWith == 771 + && c.playerLevel[c.playerCrafting] > 30) { + c.getItemAssistant().deleteItem(771, 1); + c.getItemAssistant().addItem(772, 1); + } else if (c.playerLevel[c.playerCrafting] < 31 && itemUsed == 946 + && useWith == 771) { + c.getActionSender().sendMessage( + "You need 31 crafting to make this."); + } + if (useWith == 7051 && itemUsed == 590 || itemUsed == 590 + && useWith == 7051) { + c.getItemAssistant().deleteItem2(7051, 1); + c.getItemAssistant().addItem(7053, 1); + } + int firemakingItems[] = {590, 7329, 7330, 7331}; + for (int i = 0; i < firemakingItems.length; i++) { + if (itemUsed == firemakingItems[i] || useWith == firemakingItems[i] && c.isFiremaking == false) { + Firemaking.attemptFire(c, itemUsed, useWith, c.absX, c.absY, false); + } else if (itemUsed == firemakingItems[i] || useWith == firemakingItems[i] && c.isFiremaking == true) { + c.getActionSender().sendMessage("You can't do that, you are already firemaking."); + } + } + if (itemUsed == 1733 || useWith == 1733) { + LeatherMaking.craftLeatherDialogue(c, itemUsed, useWith); + } + if (itemUsed == 1573 && useWith == 327 || itemUsed == 327 && useWith == 1573) { + c.getItemAssistant().deleteItem2(1573, 1); + c.getItemAssistant().deleteItem2(327, 1); + c.getItemAssistant().addItem(1552, 1); + } + if (itemUsed == 38 && useWith == 590 || useWith == 38 + && itemUsed == 590) {// + c.getItemAssistant().addItem(32, 1); + c.getItemAssistant().deleteItem2(38, 1); + } + if (itemUsed == 36 && useWith == 590 || useWith == 36 + && itemUsed == 590) { + c.getItemAssistant().addItem(33, 1); + c.getItemAssistant().deleteItem2(36, 1); + } + if (itemUsed == 596 && useWith == 590 || useWith == 596 + && itemUsed == 590) { + c.getItemAssistant().addItem(594, 1); + c.getItemAssistant().deleteItem2(596, 1); + } + if (itemUsed == 4537 && useWith == 590 || useWith == 4537 + && itemUsed == 590) { + c.getItemAssistant().addItem(4539, 1); + c.getItemAssistant().deleteItem2(4537, 1); + } + if (itemUsed == 4548 && useWith == 590 || useWith == 4548 + && itemUsed == 590) { + c.getItemAssistant().addItem(4550, 1); + c.getItemAssistant().deleteItem2(4548, 1); + } + if (itemUsed == 1095 && useWith == 2370 || itemUsed == 2370 + && useWith == 1095 && c.playerLevel[c.playerCrafting] > 43) {// chaps + c.getItemAssistant().deleteItem2(2370, 1); + c.getItemAssistant().deleteItem2(1095, 1); + c.getItemAssistant().addItem(1097, 1); + c.getPlayerAssistant().addSkillXP(42, c.playerCrafting); + } else if (itemUsed == 1095 && useWith == 2370 || itemUsed == 2370 && useWith == 1095 && c.playerLevel[c.playerCrafting] < 44) { + c.getActionSender().sendMessage("You need 44 crafting to make this."); + } + if (itemUsed == 946 && useWith == 1963 || itemUsed == 1963 && useWith == 946) { + c.getItemAssistant().deleteItem2(1963, 1); + c.getItemAssistant().addItem(3162, 1); + c.getActionSender().sendMessage("You slice your banana."); + } + if (itemUsed == 946 && useWith == 1973 || itemUsed == 1973 && useWith == 946) { + c.getItemAssistant().deleteItem2(1973, 1); + c.getItemAssistant().addItem(1975, 1); + c.getActionSender().sendMessage("You slice your chocolate bar."); + } + if (itemUsed == 1129 && useWith == 2370 || itemUsed == 2370 && useWith == 1129 && c.playerLevel[c.playerCrafting] > 40) {// body + c.getItemAssistant().deleteItem2(2370, 1); + c.getItemAssistant().deleteItem2(1129, 1); + c.getItemAssistant().addItem(1133, 1); + c.getPlayerAssistant().addSkillXP(40, c.playerCrafting); + } else if (itemUsed == 1129 && useWith == 2370 || itemUsed == 2370 && useWith == 1129 && c.playerLevel[c.playerCrafting] < 41) { + c.getActionSender().sendMessage("You need 41 crafting to make this."); + } + if (itemUsed == 4593 && useWith == 4591 || useWith == 4591 && itemUsed == 4593) { + c.getItemAssistant().deleteItem2(4591, 1); + c.getItemAssistant().deleteItem2(4593, 1); + c.getItemAssistant().addItem(4611, 1); + } + if (itemUsed == 985 && useWith == 987 || itemUsed == 987 && useWith == 985) { + c.getItemAssistant().deleteItem2(985, 1); + c.getItemAssistant().deleteItem2(987, 1); + c.getItemAssistant().addItem(989, 1); + } + if (itemUsed == 2313 && useWith == 1953 || itemUsed == 1953 && useWith == 2313) { + c.getItemAssistant().deleteItem2(2313, 1); + c.getItemAssistant().deleteItem2(1953, 1); + c.getItemAssistant().addItem(2315, 1); + } + + /** + * Pizza Creation + */ + if (itemUsed == 1982 && useWith == 2283 || itemUsed == 2283 + && useWith == 1982) { + Cooking.pastryCreation(c, 1982, 2283, 2285, ""); + } + if (itemUsed == 2285 && useWith == 1985 || itemUsed == 1985 + && useWith == 2285) { + Cooking.pastryCreation(c, 2285, 1985, 2287, ""); + } + if (itemUsed == 2140 && useWith == 2289 || itemUsed == 2289 + && useWith == 2140) { + Cooking.cookingAddon(c, 2140, 2289, 2293, 45, 26); + } + if (itemUsed == 319 && useWith == 2289 || itemUsed == 2289 + && useWith == 319) { + Cooking.cookingAddon(c, 319, 2289, 2297, 55, 39); + } + if (itemUsed == 2116 && useWith == 2289 || itemUsed == 2289 + && useWith == 2116) { + Cooking.cookingAddon(c, 2116, 2289, 2301, 65, 45); + } + /** + * Pie Making + */ + if (itemUsed == 2313 && useWith == 1953 || itemUsed == 1953 + && useWith == 2313) { + Cooking.pastryCreation(c, 2313, 1953, 2315, + "You put the pastry dough into the pie dish to make a pie shell."); + } + if (itemUsed == 2315 && useWith == 1955 || itemUsed == 1955 + && useWith == 2315) { + Cooking.pastryCreation(c, 2315, 1955, 2317, + "You fill the pie with cooking apple."); + } + if (itemUsed == 2315 && useWith == 5504 || itemUsed == 5504 + && useWith == 2315) { + Cooking.pastryCreation(c, 2315, 5504, 7212, ""); + } + if (itemUsed == 7212 && useWith == 5982 || itemUsed == 5982 + && useWith == 7212) { + Cooking.pastryCreation(c, 7212, 5982, 7214, ""); + } + if (itemUsed == 1955 && useWith == 7214 || itemUsed == 7214 + && useWith == 1955) { + Cooking.pastryCreation(c, 1955, 7214, 7216, ""); + } + if (itemUsed == 2315 && useWith == 1951 || itemUsed == 1951 && useWith == 2315) { + Cooking.pastryCreation(c, 1951, 2315, 2321, ""); + } + /** + * Pitta/ Ugthanki Kebab + */ + if (itemUsed == 1865 && useWith == 1881 || itemUsed == 1881 + && useWith == 1865) { + Cooking.cookingAddon(c, 1865, 1881, 1883, 0, 40); + } + + if (c.tutorialProgress < 36) { + if (itemUsed == 1929 && useWith == 1933 || itemUsed == 1933 && useWith == 1929) { + c.getItemAssistant().deleteItem(1929, 1); + c.getItemAssistant().deleteItem(1933, 1); + c.getItemAssistant().addItem(2307, 1); + c.getItemAssistant().addItem(1925, 1); + c.getItemAssistant().addItem(1931, 1); + if (c.tutorialProgress == 8) { + c.getDialogueHandler().sendDialogues(3026, -1); + } + } + } + + if (c.tutorialProgress > 35) { + if (itemUsed == 1929 && useWith == 1933 || itemUsed == 1933 && useWith == 1929) { + c.getDialogueHandler().sendDialogues(3204, -1); + } + } + + if (c.tutorialProgress > 35) { + if (itemUsed == 1933 && useWith == 1937 || itemUsed == 1937 && useWith == 1933) { + c.getDialogueHandler().sendDialogues(3205, -1); + } + } + + if (itemUsed == 1987 && useWith == 1937 || itemUsed == 1937 + && useWith == 1987) { + if (c.playerLevel[c.playerCooking] >= 35) { + c.getItemAssistant().addItem(1993, 1); + c.getItemAssistant().deleteItem(1937, 1); + c.getItemAssistant().deleteItem2(1987, 1); + c.getPlayerAssistant().addSkillXP(200, c.playerCooking); + } else { + c.getActionSender().sendMessage( + "You need grapes and a jug of water to make wine."); + } + } + + switch (itemUsed) { + + default: + if (c.playerRights == 3) { + Misc.println("Player used Item id: " + itemUsed + + " with Item id: " + useWith); + } + break; + } + } + + public static void ItemonNpc(final Client c, final int itemId, + final int npcId, final int slot) { + switch (itemId) { + + default: + if (c.playerRights == 3) { + Misc.println("Player used Item id: " + itemId + + " with Npc id: " + npcId + " With Slot : " + slot); + } + break; + } + + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/CapeDye.java b/2006Redone Server/src/redone/game/items/impl/CapeDye.java new file mode 100644 index 00000000..428d791c --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/CapeDye.java @@ -0,0 +1,82 @@ +package redone.game.items.impl; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * Cape Dye + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class CapeDye { + + /** + * Capes + */ + + private static final int BLUE_CAPE = 1021, RED_CAPE = 1007; + private static final int GREEN_CAPE = 1027, PINK_CAPE = 6959; + private static final int ORANGE_CAPE = 1031, PURPLE_CAPE = 1029; + private static final int YELLOW_CAPE = 1023, BLACK_CAPE = 1019; + + /** + * Dyes + */ + + private static final int RED_DYE = 1763, BLUE_DYE = 1767; + private static final int GREEN_DYE = 1771, PINK_DYE = 6955; + private static final int ORANGE_DYE = 1769, PURPLE_DYE = 1773; + private static final int YELLOW_DYE = 1765; + + /** + * Deleting items used + adding skill xp + */ + + private static void cleanUp(Client c, int itemUsed, int useWith) { + c.getPlayerAssistant().addSkillXP(2.5, c.playerCrafting); + c.getItemAssistant().deleteItem2(itemUsed, 1); + c.getItemAssistant().deleteItem2(useWith, 1); + } + + /** + * Cape on Dye Method + */ + + public static void capeOnDye(Client c, int itemUsed, int useWith) { + if (itemUsed == RED_DYE && useWith == BLUE_CAPE || useWith == PURPLE_CAPE && itemUsed == RED_DYE || useWith == GREEN_CAPE && itemUsed == RED_DYE || useWith == ORANGE_CAPE && itemUsed == RED_DYE || useWith == YELLOW_CAPE && itemUsed == RED_DYE || useWith == PINK_CAPE || useWith == BLACK_CAPE && itemUsed == RED_DYE) { + c.getItemAssistant().addItem(RED_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(RED_CAPE) + "."); + } else if (itemUsed == BLUE_DYE && useWith == RED_CAPE || useWith == PURPLE_CAPE && itemUsed == BLUE_DYE || useWith == GREEN_CAPE && itemUsed == BLUE_DYE || useWith == ORANGE_CAPE && itemUsed == BLUE_DYE || useWith == YELLOW_CAPE && itemUsed == BLUE_DYE || useWith == PINK_CAPE || useWith == BLACK_CAPE && itemUsed == BLUE_DYE) { + c.getItemAssistant().addItem(BLUE_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(BLUE_CAPE) + "."); + } else if (itemUsed == GREEN_DYE && useWith == RED_CAPE || useWith == PURPLE_CAPE && itemUsed == GREEN_DYE || useWith == BLUE_CAPE && itemUsed == GREEN_DYE || useWith == ORANGE_CAPE && itemUsed == GREEN_DYE || useWith == YELLOW_CAPE && itemUsed == GREEN_DYE || useWith == PINK_CAPE || useWith == BLACK_CAPE && itemUsed == GREEN_DYE) { + c.getItemAssistant().addItem(GREEN_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(GREEN_CAPE) + "."); + } else if (itemUsed == PINK_DYE && useWith == RED_CAPE || useWith == PURPLE_CAPE && itemUsed == PINK_DYE || useWith == GREEN_CAPE && itemUsed == PINK_DYE || useWith == ORANGE_CAPE && itemUsed == PINK_DYE || useWith == YELLOW_CAPE && itemUsed == PINK_DYE || useWith == BLUE_CAPE || useWith == BLACK_CAPE && itemUsed == PINK_DYE) { + c.getItemAssistant().addItem(PINK_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(BLUE_CAPE) + "."); + } else if (itemUsed == ORANGE_DYE && useWith == RED_CAPE || useWith == PURPLE_CAPE && itemUsed == ORANGE_DYE || useWith == GREEN_CAPE && itemUsed == ORANGE_DYE || useWith == PINK_CAPE && itemUsed == ORANGE_DYE || useWith == YELLOW_CAPE && itemUsed == ORANGE_DYE || useWith == BLUE_CAPE || useWith == BLACK_CAPE && itemUsed == ORANGE_DYE) { + c.getItemAssistant().addItem(ORANGE_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(ORANGE_CAPE) + "."); + } else if (itemUsed == PURPLE_DYE && useWith == RED_CAPE || useWith == ORANGE_CAPE && itemUsed == PURPLE_DYE || useWith == GREEN_CAPE && itemUsed == PURPLE_DYE || useWith == PINK_CAPE && itemUsed == PURPLE_DYE || useWith == YELLOW_CAPE && itemUsed == PURPLE_DYE || useWith == BLUE_CAPE || useWith == BLACK_CAPE && itemUsed == PURPLE_DYE) { + c.getItemAssistant().addItem(PURPLE_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(PURPLE_CAPE) + "."); + } else if (itemUsed == YELLOW_DYE && useWith == RED_CAPE || useWith == ORANGE_CAPE && itemUsed == YELLOW_DYE || useWith == GREEN_CAPE && itemUsed == YELLOW_DYE || useWith == PINK_CAPE && itemUsed == YELLOW_DYE || useWith == PURPLE_CAPE && itemUsed == YELLOW_DYE || useWith == BLUE_CAPE || useWith == BLACK_CAPE && itemUsed == YELLOW_DYE) { + c.getItemAssistant().addItem(YELLOW_CAPE, 1); + cleanUp(c, itemUsed, useWith); + c.getActionSender().sendMessage("You use your " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + " to make a " + ItemAssistant.getItemName(YELLOW_CAPE) + "."); + } else if (itemUsed == RED_DYE || itemUsed == BLUE_DYE || itemUsed == GREEN_DYE || itemUsed == PINK_DYE || itemUsed == ORANGE_DYE || itemUsed == PURPLE_DYE || itemUsed == YELLOW_DYE && useWith != BLUE_CAPE || useWith != RED_CAPE || useWith != PURPLE_CAPE || useWith != GREEN_CAPE || useWith != ORANGE_CAPE || useWith != YELLOW_CAPE || useWith != PINK_CAPE || useWith != BLACK_CAPE) { + if (ItemAssistant.getItemName(useWith).contains("Cape") && ItemAssistant.getItemName(itemUsed).contains("dye")) { + c.getActionSender().sendMessage("You can't use " + ItemAssistant.getItemName(itemUsed) + " on that " + ItemAssistant.getItemName(useWith) + "!"); + } else if (!ItemAssistant.getItemName(useWith).contains("Cape") && ItemAssistant.getItemName(itemUsed).contains("dye")) { + c.getActionSender().sendMessage("You can't use " + ItemAssistant.getItemName(itemUsed) + " on " + ItemAssistant.getItemName(useWith) + "!"); + } + } + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/ExperienceLamp.java b/2006Redone Server/src/redone/game/items/impl/ExperienceLamp.java new file mode 100644 index 00000000..08fc8719 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/ExperienceLamp.java @@ -0,0 +1,162 @@ +package redone.game.items.impl; + +import redone.game.players.Client; + +public class ExperienceLamp { + + public static int LAMP = 4447, LAMP_2 = 2528, SKILL_MENU = 2808, + skill = -1; + + /** + * Handles the actionbuttons + * + * @param c + * @param id + */ + public static void buttons(Client c, int id) { + switch (id) { + case 10252: + skill = 0; + c.getActionSender().sendMessage("You select Attack."); + break; + case 10253: + skill = 2; + c.getActionSender().sendMessage("You select Strength."); + break; + case 10254: + skill = 4; + c.getActionSender().sendMessage("You select Ranged."); + break; + case 10255: + skill = 6; + c.getActionSender().sendMessage("You select Magic."); + break; + case 11000: + skill = 1; + c.getActionSender().sendMessage("You select Defence."); + break; + case 11001: + skill = 3; + c.getActionSender().sendMessage("You select Hitpoints."); + break; + case 11002: + skill = 5; + c.getActionSender().sendMessage("You select Prayer."); + break; + case 11003: + skill = 16; + c.getActionSender().sendMessage("You select Agility."); + break; + case 11004: + skill = 15; + c.getActionSender().sendMessage("You select Herblore."); + break; + case 11005: + skill = 17; + c.getActionSender().sendMessage("You select Thieving."); + break; + case 11006: + skill = 12; + c.getActionSender().sendMessage("You select Crafting."); + break; + case 11007: + skill = 20; + c.getActionSender().sendMessage("You select Runecrafting."); + break; + case 47002: + skill = 18; + c.getActionSender().sendMessage("You select Slayer."); + break; + case 54090: + skill = -1; + c.getActionSender().sendMessage("You can't select this skill."); + break; + case 11008: + skill = 14; + c.getActionSender().sendMessage("You select Mining."); + break; + case 11009: + skill = 13; + c.getActionSender().sendMessage("You select Smithing."); + break; + case 11010: + skill = 10; + c.getActionSender().sendMessage("You select Fishing."); + break; + case 11011: + skill = 7; + c.getActionSender().sendMessage("You select Cooking."); + break; + case 11012: + skill = 11; + c.getActionSender().sendMessage("You select Firemaking."); + break; + case 11013: + skill = 8; + c.getActionSender().sendMessage("You select Woodcutting."); + break; + case 11014: + skill = 9; + c.getActionSender().sendMessage("You select Fletching."); + break; + case 11015: + if (skill == -1) { + c.getPlayerAssistant().removeAllWindows(); + } + if (c.getItemAssistant().playerHasItem(LAMP, 1) && skill > -1) {// normal + // lamp + int xp = c.getPlayerAssistant() + .getLevelForXP(c.playerXP[skill]) * 10; + c.getPlayerAssistant().addNormalExperienceRate(xp, skill); + c.getItemAssistant().deleteItem2(LAMP, 1); + c.getActionSender().sendMessage( + "@blu@Your wish has been granted!"); + c.getActionSender().sendMessage( + "@blu@You have been awarded " + xp + + " experience in your selected skill!"); + c.getPlayerAssistant().removeAllWindows(); + } else if (c.getItemAssistant().playerHasItem(LAMP_2, 1) + && skill > -1) {// vote + // reward + c.getItemAssistant().deleteItem2(LAMP_2, 1); + c.getActionSender().sendMessage( + "@blu@Your wish has been granted!"); + addExp(c); + c.getPlayerAssistant().removeAllWindows(); + } + break; + } + } + + public static void addExp(Client c) { + if (c.getPlayerAssistant().getLevelForXP(c.playerXP[skill]) < 20) { + c.getPlayerAssistant().addNormalExperienceRate(1000, skill); + c.getActionSender() + .sendMessage( + "@blu@You have been awarded 1000 experience in your selected skill!"); + } else if (c.getPlayerAssistant().getLevelForXP(c.playerXP[skill]) > 19 + && c.getPlayerAssistant().getLevelForXP(c.playerXP[skill]) < 35) { + c.getPlayerAssistant().addNormalExperienceRate(2000, skill); + c.getActionSender() + .sendMessage( + "@blu@You have been awarded 2000 experience in your selected skill!"); + } else { + c.getPlayerAssistant().addNormalExperienceRate(3000, skill); + c.getActionSender() + .sendMessage( + "@blu@You have been awarded 3000 experience in your selected skill!"); + } + } + + /** + * Rubbing the lamp. ClickItem + * + * @param c + * @param id + */ + public static void rubLamp(Client c, int id) { + c.getActionSender().sendMessage("You rub the lamp."); + c.getPlayerAssistant().showInterface(SKILL_MENU); + } + +} diff --git a/2006Redone Server/src/redone/game/items/impl/Fillables.java b/2006Redone Server/src/redone/game/items/impl/Fillables.java new file mode 100644 index 00000000..62a18755 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/Fillables.java @@ -0,0 +1,115 @@ +package redone.game.items.impl; + +public class Fillables { + + public static boolean canFill(int id, int oid) { + return counterpart(id) != -1 && !getObjectName(oid).equals("Error"); + } + + public static String fillMessage(int id, int oid) { + return "You fill the " + getItemName(id) + " from the " + + getObjectName(oid) + "."; + } + + public static int counterpart(int id) { + switch (id) { + case 1925: // bucket + return 1929; + case 1935: // jug + return 1937; + case 229: // vial + return 227; + case 1923: // bowl + return 1921; + case 1980: // cup + return 4458; + case 5331: // watering can + case 5333: + case 5334: + case 5335: + case 5336: + case 5337: + case 5338: + case 5339: + return 5340; + case 1831: // waterskin + case 1825: + case 1827: + case 1829: + return 1823; + case 6667: + return 6668; + } + return -1; + } + + public static String getItemName(int id) { + switch (id) { + case 1925: + return "bucket"; + case 1935: + return "jug"; + case 229: + return "vial"; + case 1923: + return "bowl"; + case 1980: + return "cup"; + case 5331: // watering can + case 5333: + case 5334: + case 5335: + case 5336: + case 5337: + case 5338: + case 5339: + return "watering can"; + case 1831: + case 1825: + case 1827: + case 1829: + return "waterskin"; + case 6667: + return "fishbowl"; + } + return "There was a problem with your current action, please report this to Mod Andrew."; + } + + public static String getObjectName(int id) { + switch (id) { + case 873: + case 874: + case 4063: + case 6151: + case 14917: + return "sink"; + case 14918: + return "washbin"; + case 884: + case 878: + case 3359: + case 3485: + case 4004: + case 4005: + case 5086: + case 6097: + return "well"; + case 2654: + return "Sinclair Family fountain"; + case 12809: + return "Fairy fountain"; + case 11661: + case 3460: + case 6827: + return "waterpump"; + case 879: + case 11759: + case 153: + case 880: + case 6232: + case 2864: + return "fountain"; + } + return "Error"; + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/Flowers.java b/2006Redone Server/src/redone/game/items/impl/Flowers.java new file mode 100644 index 00000000..99319ba4 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/Flowers.java @@ -0,0 +1,184 @@ +package redone.game.items.impl; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.util.Misc; +import redone.world.clip.Region; + +/** + * @author Faris + */ +public class Flowers { + + /** + * Constants & boolean checker + */ + private final int FLOWER_IDS[] = { 2980, 2981, 2982, 2983, 2984, 2985, + 2986, 2987, 2988 }; + + /** + * Checks weather user is currently interacting with flower + */ + public boolean clientFlowering = false; + + /** + * Stores temporary variables for each new instance of flower planted + */ + public static int lastObject; + + /** + * algorithm decides which flower to give. + * + * @param flower + * @return + */ + private static int flowerDecoder(final int flower) { + int modifier = flower - 2980; + return modifier + 2460; + } + + /** + * Constructor creates the place flower event + * + * @param c + */ + public Flowers(final Client c) { + if (c.checkBusy()) { + return; + } + c.setBusy(true); + executeAction(c); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.setBusy(false); + container.stop(); + } + @Override + public void stop() { + + } + }, 1); + } + + /** + * Main block, Spawns the object & starts animation. Moves player to the + * side Clipped + * + * @param c + */ + private void executeAction(final Client c) { + final int newFlower = getRandom(); + final int[] coords = new int[2]; + coords[0] = c.absX; + coords[1] = c.absY; + updateConstants(newFlower, c); + Server.objectHandler.createAnObject(c, newFlower, coords[0], coords[1], + 1); + deleteSeeds(c); + sendOptions(c); + clientFlowering = true; + moveOneStep(c); + c.turnPlayerTo(coords[0], coords[1]); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + Server.objectHandler.createAnObject(c, -1, coords[0], coords[1], 1); + c.getActionSender().sendMessage( "Your flower is no longer flourishing."); + container.stop(); + } + + @Override + public void stop() { + + } + + }, 10); + } + + /** + * Handles movement direction. + * + * @param c + */ + private static void moveOneStep(Client c) { + if (Region.getClipping(c.getX() - 1, c.getY(), c.heightLevel, -1, 0)) { + c.getPlayerAssistant().walkTo(-1, 0); + } else if (Region.getClipping(c.getX() + 1, c.getY(), c.heightLevel, 1, + 0)) { + c.getPlayerAssistant().walkTo(1, 0); + } else if (Region.getClipping(c.getX(), c.getY() - 1, c.heightLevel, 0, + -1)) { + c.getPlayerAssistant().walkTo(0, -1); + } else if (Region.getClipping(c.getX(), c.getY() + 1, c.heightLevel, 0, + 1)) { + c.getPlayerAssistant().walkTo(0, 1); + } + } + + /** + * Selects a random flower ID + * + * @return + */ + private int getRandom() { + return FLOWER_IDS[Misc.random(FLOWER_IDS.length - 1)]; + } + + /** + * Sends the client an option to handle flowers + * + * @param c + */ + private void sendOptions(Client c) { + c.getDialogueHandler().sendOption2("Leave Flowers", "Harvest Flowers"); + } + + /** + * Removes the seeds from invent + * + * @param c + */ + private static void deleteSeeds(Client c) { + c.getItemAssistant().deleteItem2(299, 1); + } + + private void updateConstants(int objectType, Client c) { + lastObject = objectType; + } + + /** + * Method harvests flower from ground + * + * @param c + * @param object + * @param oX + * @param oY + */ + public static void harvestFlower(Client c, int object) { + c.getItemAssistant().addItem(flowerDecoder(object), 1); + c.getActionSender().sendMessage("You receive a random flower."); + c.startAnimation(827); + // c.getPA().checkObjectSpawn(c,-1, c.getX()+1, c.getY(), 1, 10); + // c.getPA().object(c,-1, c.getX()+1, c.getY(), 1, 10); + Server.objectHandler.createAnObject(c, -1, c.getX() + 1, c.getY(), 1); + c.turnPlayerTo(c.getX() + 1, c.getY()); + } + + /** + * Sends the option action + * + * @param option + */ + public void handleOptions(int option, Client c) { + if (option == 0) { + return; + } else { + harvestFlower(c, lastObject); + } + clientFlowering = false; + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/HandleEmpty.java b/2006Redone Server/src/redone/game/items/impl/HandleEmpty.java new file mode 100644 index 00000000..407a8443 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/HandleEmpty.java @@ -0,0 +1,53 @@ +package redone.game.items.impl; + +import redone.game.content.music.sound.SoundList; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Genesis + */ + +public class HandleEmpty { + + public static boolean canEmpty(Client c, int id) { + return filledToEmpty(c, id) != -1; + } + + public static int filledToEmpty(Client c, int id) { + String itemName = ItemAssistant.getItemName(id); + if (!itemName.contains("Ring") && !itemName.contains("necklace")) { + if (itemName.contains("(3)") || itemName.contains("(4)") || itemName.contains("(2)") || itemName.contains("(1)") || itemName.contains("Weapon poison")) { + if (id != 1712 && id != 1710 && id != 1708 && id != 1706) { + c.getItemAssistant().deleteItem(id, + c.getItemAssistant().getItemSlot(id), 1); + c.getItemAssistant().addItem(229, 1); + c.getActionSender().sendMessage("You empty the vial."); + } + } + } + switch (id) { + case 1937: // Jugs + case 1989: + case 1991: + case 1993: + case 3729: + return 1935; + case 227: // Vial of Water + return 229; + case 1927: // Buckets + case 1929: + return 1925; + } + return -1; + } + + public static void handleEmptyItem(Client c, int itemId, int giveItem) { + final String name = ItemAssistant.getItemName(itemId); + c.getActionSender().sendMessage("You empty your " + name + "."); + c.getItemAssistant().deleteItem(itemId, 1); + c.getItemAssistant().addItem(giveItem, 1); + c.getActionSender().sendSound(SoundList.EMPTY, 100, 0); + } + +} diff --git a/2006Redone Server/src/redone/game/items/impl/LightSources.java b/2006Redone Server/src/redone/game/items/impl/LightSources.java new file mode 100644 index 00000000..6763efee --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/LightSources.java @@ -0,0 +1,84 @@ +package redone.game.items.impl; + +import redone.game.players.Client; + +/** + * Lightsources + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class LightSources { + + public static void saveBrightness(Client client) { + if (client.brightness == 1) { + brightness1(client); + } else if (client.brightness == 2) { + brightness2(client); + } else if (client.brightness == 4) { + brightness4(client); + } else { + brightness3(client); + } + } + + public static void brightness1(Client c) { + c.getPlayerAssistant().sendConfig(505, 1); + c.getPlayerAssistant().sendConfig(506, 0); + c.getPlayerAssistant().sendConfig(507, 0); + c.getPlayerAssistant().sendConfig(508, 0); + c.getPlayerAssistant().sendConfig(166, 1); + c.brightness = 1; + } + + public static void brightness2(Client c) { + c.getPlayerAssistant().sendConfig(505, 0); + c.getPlayerAssistant().sendConfig(506, 1); + c.getPlayerAssistant().sendConfig(507, 0); + c.getPlayerAssistant().sendConfig(508, 0); + c.getPlayerAssistant().sendConfig(166, 2); + c.brightness = 2; + } + + public static void brightness3(Client c) { + c.getPlayerAssistant().sendConfig(505, 0); + c.getPlayerAssistant().sendConfig(506, 0); + c.getPlayerAssistant().sendConfig(507, 1); + c.getPlayerAssistant().sendConfig(508, 0); + c.getPlayerAssistant().sendConfig(166, 3); + c.brightness = 3; + } + + public static void brightness4(Client c) { + c.getPlayerAssistant().sendConfig(505, 0); + c.getPlayerAssistant().sendConfig(506, 0); + c.getPlayerAssistant().sendConfig(507, 0); + c.getPlayerAssistant().sendConfig(508, 1); + c.getPlayerAssistant().sendConfig(166, 4); + c.brightness = 4; + } + + public static void setBrightness(Client c) { + if (c.getItemAssistant().playerHasItem(594) || c.getItemAssistant().playerHasItem(32) || c.getItemAssistant().playerHasItem(33)) { + brightness2(c); + } else if (c.getItemAssistant().playerHasItem(4535) || c.getItemAssistant().playerHasItem(4524)) { + brightness3(c); + } else if (c.getItemAssistant().playerHasItem(4550)) { + brightness4(c); + } + } + + public static final int[] lightSources = { 594, 32, 33, 4524, 4539, 4550 }; + + public static boolean playerHasLightSource(Client c) { + for (int lightSource : lightSources) { + if (c.getItemAssistant().playerHasItem(lightSource)) { + setBrightness(c); + return true; + } + } + c.getActionSender().sendMessage("It's recommened that you get a light source to continue."); + brightness1(c); + return false; + } + +} diff --git a/2006Redone Server/src/redone/game/items/impl/PotionMixing.java b/2006Redone Server/src/redone/game/items/impl/PotionMixing.java new file mode 100644 index 00000000..e9d682e1 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/PotionMixing.java @@ -0,0 +1,99 @@ +package redone.game.items.impl; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * @author Sanity + */ + +public class PotionMixing { + + Client c; + + public PotionMixing(Client c) { + this.c = c; + } + + public void mixPotion2(int id, int id2) { + String id11 = ItemAssistant.getItemName(id); + String id22 = ItemAssistant.getItemName(id2); + if (id11.substring(0, id11.indexOf("(")).equalsIgnoreCase( + id22.substring(0, id22.indexOf("(")))) { + try { + int amount1 = Integer.parseInt(id11.substring( + id11.indexOf("(") + 1, id11.indexOf("(") + 2)); + int amount2 = Integer.parseInt(id22.substring( + id22.indexOf("(") + 1, id22.indexOf("(") + 2)); + int totalAmount = amount1 + amount2; + if (totalAmount > 4) { + amount1 = 4; + amount2 = totalAmount - 4; + String item1 = id11.substring(0, id11.indexOf("(") + 1) + + amount1 + ")"; + String item2 = id11.substring(0, id11.indexOf("(") + 1) + + amount2 + ")"; + c.getItemAssistant().deleteItem(id, + c.getItemAssistant().getItemSlot(id), 1); + c.getItemAssistant().deleteItem(id2, + c.getItemAssistant().getItemSlot(id2), 1); + c.getItemAssistant().addItem( + c.getItemAssistant().getItemId(item1), 1); + c.getItemAssistant().addItem( + c.getItemAssistant().getItemId(item2), 1); + } else { + amount1 = totalAmount; + String item1 = id11.substring(0, id11.indexOf("(") + 1) + + amount1 + ")"; + c.getItemAssistant().deleteItem(id, + c.getItemAssistant().getItemSlot(id), 1); + c.getItemAssistant().deleteItem(id2, + c.getItemAssistant().getItemSlot(id2), 1); + c.getItemAssistant().addItem( + c.getItemAssistant().getItemId(item1), 1); + c.getItemAssistant().addItem(229, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private final int[][] potMixing = { { 117, 117, 113, 227 }, + { 119, 115, 113, 227 }, { 115, 119, 113, 227 }, + { 123, 123, 2428, 227 }, { 121, 125, 2428, 227 }, + { 125, 121, 2428, 227 }, { 133, 133, 2432, 227 }, + { 133, 137, 2432, 227 }, { 137, 133, 2432, 227 }, + { 159, 159, 2440, 227 }, { 157, 161, 2440, 227 }, + { 161, 157, 2440, 227 }, { 147, 147, 2436, 227 }, + { 149, 145, 2436, 227 }, { 145, 149, 2436, 227 }, + { 165, 165, 2442, 227 }, { 163, 167, 2442, 227 }, + { 167, 163, 2442, 227 }, { 6689, 6689, 6685, 227 }, + { 6687, 6691, 2442, 227 }, { 6691, 6687, 2442, 227 }, + { 171, 171, 2444, 227 }, { 169, 173, 2444, 227 }, + { 173, 169, 2444, 227 }, { 177, 177, 2446, 227 }, + { 179, 175, 2446, 227 }, { 175, 179, 2446, 227 }, + { 3028, 3028, 3024, 227 }, { 3030, 3026, 3024, 227 }, + { 3026, 3030, 3024, 227 }, { 141, 141, 2434, 227 }, + { 139, 143, 2434, 227 }, { 143, 139, 2434, 227 }, + { 3044, 3044, 3040, 227 }, { 3042, 3046, 3040, 227 }, + { 3046, 3042, 3040, 227 }, { 2456, 2456, 2452, 227 }, + { 2454, 2458, 2452, 227 }, { 2458, 2454, 2452, 227 } }; + + // use id, use id2, new id1, new id2 + public void mixPotion(int id, int id2) { + for (int[] element : potMixing) { + if (element[0] == id && element[1] == id || element[1] == id + && element[0] == id2) { + c.getItemAssistant().deleteItem(id, + c.getItemAssistant().getItemSlot(id), 1); + c.getItemAssistant().deleteItem(id2, + c.getItemAssistant().getItemSlot(id2), 1); + c.getItemAssistant().addItem(element[2], 1); + c.getItemAssistant().addItem(element[3], 1); + break; + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/items/impl/RareProtection.java b/2006Redone Server/src/redone/game/items/impl/RareProtection.java new file mode 100644 index 00000000..089cfd6a --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/RareProtection.java @@ -0,0 +1,87 @@ +package redone.game.items.impl; + +import redone.game.players.Client; + +/** + * Rare Protection + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class RareProtection { + + public static final boolean RARES = false, CRACKERS = false; + private static final int[] RARE_ITEMS = { 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 962, 963, 1959, 1961, 1989 }; + private static final int[] EATABLE_RARES = { 1959, 1961, 1989 }; + + public static boolean equipItem(Client c) {// check when wearing, removing + for (int element : RARE_ITEMS) { + if (!RARES && c.wearId == element && c.playerRights < 3) { + c.getActionSender().sendMessage( + "You shouldn't have that item!"); + int amountToDelete = c.getItemAssistant().getItemCount(element); + c.getItemAssistant().deleteItem(element, amountToDelete); + return false; + } + } + return true; + } + + public static boolean removeItem(Client c, int itemId) {// check when + // wearing, removing + for (int element : RARE_ITEMS) { + if (!RARES && itemId == element && c.playerRights < 3) { + c.getActionSender().sendMessage( + "You shouldn't have that item!"); + c.getItemAssistant().deleteEquipment(element, 0); + return false; + } + } + return true; + } + + public static boolean hasDupedItem(Client c) {// check on login + for (int element : RARE_ITEMS) { + if (!RARES && c.getItemAssistant().playerHasItem(element) + && c.playerRights < 3) { + c.getActionSender().sendMessage( + "You can't have these items!"); + int amountToDelete = c.getItemAssistant().getItemCount(element); + c.getItemAssistant().deleteItem(element, amountToDelete); + return false; + } + } + return true; + } + + public static boolean eatDupedItem(Client c, int itemId) {// check when + // eating + for (int element : EATABLE_RARES) { + if (!RARES && itemId == element && c.playerRights < 3) { + c.getActionSender().sendMessage("You can't eat that item!"); + int amountToDelete = c.getItemAssistant().getItemCount(element); + c.getItemAssistant().deleteItem(element, amountToDelete); + return false; + } + } + return true; + } + + public static boolean doOtherDupe(Client c, int itemId) {// check when + // dropping, + // trading, + // staking, + // dropping + for (int element : RARE_ITEMS) { + if (!RARES && c.getItemAssistant().playerHasItem(element) + && c.playerRights < 3) { + c.getActionSender().sendMessage( + "You shouldnt have that item!"); + int amountToDelete = c.getItemAssistant().getItemCount(element); + c.getItemAssistant().deleteItem(element, amountToDelete); + return false; + } + } + return true; + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/Teles.java b/2006Redone Server/src/redone/game/items/impl/Teles.java new file mode 100644 index 00000000..f3f5d5d3 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/Teles.java @@ -0,0 +1,56 @@ +package redone.game.items.impl; + +import redone.game.players.Client; + +/** + * Teles + * @author Andrew + */ + +public class Teles { + + public static void useAOG(Client player) { + player.getDialogueHandler().sendOption4("Edgeville", "Al Kharid", "Karamja", "Draynor"); + player.dialogueAction = 51; + player.getActionSender().sendMessage("You rub the Amulet of Glory..."); + } + + public static void useROD(Client player) { + player.getDialogueHandler().sendOption2("Duel Arena", "Castle Wars"); + player.dialogueAction = 161; + player.getActionSender().sendMessage("You rub the Ring of Dueling..."); + } + + public static void useGN(Client player) { + player.getDialogueHandler().sendOption2("Burthrope Games Room", "Barbarian Outpost"); + player.dialogueAction = 50; + player.getActionSender().sendMessage("You rub the Games Necklace..."); + } + + private static final int[][] JEWELERY = { + { 3853, 3855, 7 }, { 3855, 3857, 6 }, { 3857, 3859, 5 }, { 3859, 3861, 4 }, { 3861, 3863, 3 },{ 3863, 3865, 2 }, { 3865, 3867, 1 }, { 3867, 0, 0 }, // gn + { 2552, 2554, 7 }, { 2554, 2556, 6 }, { 2556, 2558, 5 }, { 2558, 2560, 4 }, { 2560, 2562, 3 }, { 2562, 2564, 2 }, { 2564, 2566, 1 }, { 2566, 0, 0 }, // rod + { 1712, 1710, 3 }, { 1710, 1708, 2 }, { 1708, 1706, 1 }, { 1706, 1704, 0 } //aog + }; + + public static void necklaces(Client player) { + for (int[] element : JEWELERY) { + if (player.itemUsing == element[0]) { + if (player.isOperate) { + player.playerEquipment[player.playerAmulet] = element[1]; + } else { + player.getItemAssistant().deleteItem(element[0], 1); + player.getItemAssistant().addItem(element[1], 1); + } + if (element[2] > 1) { + player.getActionSender().sendMessage("You have " + element[2] + " charges left."); + } else { + player.getActionSender().sendMessage("You have " + element[2] + " charge left."); + } + } + } + player.getItemAssistant().updateSlot(player.playerAmulet); + player.isOperate = false; + player.itemUsing = -1; + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/Trails.java b/2006Redone Server/src/redone/game/items/impl/Trails.java new file mode 100644 index 00000000..52407c43 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/Trails.java @@ -0,0 +1,724 @@ +package redone.game.items.impl; + + +public class Trails { + + /*public Client c; + + public Trails(Client client) { + this.c = client; + } + + public int clue1[] = { 1077, 1089, 1107, 1125, 1131, 1129, 1133, 1511, + 1168, 1165, 1179, 1195, 1217, 1283, 1297, 1313, 1327, 1341, 1361, + 1367, 1426, 2633, 2635, 2637, 7388, 7386, 7392, 7390, 7396, 7394, + 2631, 7364, 7362, 7368, 7366, 2583, 2585, 2587, 2589, 2591, 2593, + 2595, 2597, 7332, 7338, 7350, 7356, 10404, 10406, 10408, 10410, + 10412, 10414, 10424, 10426, 10428, 10430, 10432, 10434, 10458, + 10460, 10462, 10464, 10466, 10468 }; + + public int clue2[] = { 2599, 2601, 2603, 2605, 2607, 2609, 2611, 2613, + 7334, 7340, 7346, 7352, 7358, 7319, 7321, 7323, 7325, 7327, 7372, + 7370, 7380, 7378, 2645, 2647, 2649, 2577, 2579, 1073, 1091, 1099, + 1111, 1135, 1124, 1145, 1161, 1169, 1183, 1199, 1211, 1245, 1271, + 1287, 1301, 1317, 1332, 1357, 1371, 1430, 6916, 6918, 6920, 6922, + 6924, 10400, 10402, 10416, 10418, 10420, 10422, 10436, 10438, + 10446, 10448, 10450, 10452, 10454, 10456, 6889 }; + + public int clue3[] = { + 1079, 1093, 1113, 1127, 1147, 1163, 1185, 1201, + 1275, 1303, 1319, 1333, 1359, 1373, 2491, 2497, 2503, 861, 859, + 2581, 2651, 1079, 1093, 1113, 1127, 1147, 1163, 1185, 1201, 1275, + 1303, 1319, 1333, 1359, 1373, 2491, 2497, 2503, 861, 859, 2581, + 2651, 2615, 2617, 2619, 2621, 2623, 2625, 2627, 2629, 2639, 2641, + 2643, 2651, 2653, 2655, 2657, 2659, 2661, 2663, 2665, 2667, 2669, + 2671, 2673, 2675, 2581, 7342, 7348, 7454, 7460, 7374, 7376, 7382, + 7384, 7398, 7399, 7400, 3481, 3483, 3485, 3486, 3488, 1079, 1093, + 1113, 1127, 1148, 1164, 1185, 1201, 1213, 1247, 1275, 1289, 1303, + 1319, 1333, 1347, 1359, 1374, 1432, 2615, 2617, 2619, 2621, 2623, + 2625, 2627, 2629, 2639, 2641, 2643, 2651, 2653, 2655, 2657, 2659, + 2661, 2663, 2665, 2667, 2669, 2671, 2673, 2675, 2581, 7342, 7348, + 7454, 7460, 7374, 7376, 7382, 7384, 7398, 7399, 7400, 3481, 3483, + 3485, 3486, 3488, 1079, 1093, 1113, 1127, 1148, 1164, 1185, 1201, + 1213, 1247, 1275, 1289, 1303, 1319, 1333, 1347, 1359, 1374, 1432, + 10330, 10338, 10348, 10332, 10340, 10346, 10334, 10342, 10350, + 10336, 10344, 10352, 10368, 10376, 10384, 10370, 10378, 10386, + 10372, 10380, 10388, 10374, 10382, 10390, 10470, 10472, 10474, + 10440, 10442, 10444, 6914 }; + + public void clueReward(int i1, int a1, int i2, int a2, int i3, int a3, + int i4, int a4) { + c.getPA().showInterface(6960); + c.getPA().sendFrame34(6963, i1, 0, a1); + c.getPA().sendFrame34(6963, i2, 1, a2); + c.getPA().sendFrame34(6963, i3, 2, a3); + c.getPA().sendFrame34(6963, i4, 3, a4); + c.getItems().addItem(i1, a1); + c.getItems().addItem(i2, a2); + c.getItems().addItem(i3, a3); + c.getItems().addItem(i4, a4); + } + + public void Clue(String a, String b, String c1, String d, String e, + String f, String g, String h) { + c.getPA().sendFrame126(a, 6968); + c.getPA().sendFrame126(b, 6969); + c.getPA().sendFrame126(c1, 6970); + c.getPA().sendFrame126(d, 6971); + c.getPA().sendFrame126(e, 6972); + c.getPA().sendFrame126(f, 6973); + c.getPA().sendFrame126(g, 6974); + c.getPA().sendFrame126(h, 6975); + c.getPA().showInterface(6965); + } + + public void showitem(int item, String s1) { + c.getPA().sendFrame246(11860, 150, item); + c.getPA().sendFrame126(s1, 11861); + c.getPA().sendFrame164(11859); + } + + /** + * Puzzle Boxes + */ + + /*public int freeSlot; + public int[] puzzleSlot = new int[26]; // 24 increasing + public boolean canMove; + public boolean doingPuzzle; + public int fourthSlot; + public boolean puzzleDone = false; + public boolean openedAlready = false; + public int puzzleId; + public int[] castlePuzzle = { 2749, 2750, 2751, 2752, 2753, 2754, 2755, + 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, + 2767, 2768, 2769, 2770, 2771, 2772 }; + public int[] treePuzzle = { 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, + 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, + 3638, 3639, 3640, 3641, 3642 }; + public int[] trollPuzzle = { 3643, 3644, 3645, 3646, 3647, 3648, 3649, + 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, + 3661, 3662, 3663, 3664, 3665, 3666 }; + + public void findFreeSlot() { + for (int i = 0; i < 27; i++) { + if (puzzleSlot[i] < 5) { + freeSlot = i; + // c.getActionSender().sendMessage("FreeSlot " + freeSlot + ""); + break; + } + } + } + + public void Hints(int puzzle) { + int v = 0; + switch (puzzle) { + case 1: + for (int i = 2749; i < 2773; i++) { + c.getPA().sendFrame34P2(i, v, 6985, 1); + v += 1; + } + c.getPA().sendFrame34P2(2753, 4, 6985, 1); + break; + case 3: + v = 0; + for (int i = 3619; i < 3643; i++) { + c.getPA().sendFrame34P2(i, v, 6985, 1); + v += 1; + } + c.getPA().sendFrame34P2(3623, 4, 6985, 1); + break; + case 2: + v = 0; + for (int i = 3643; i < 3667; i++) { + c.getPA().sendFrame34P2(i, v, 6985, 1); + v += 1; + } + c.getPA().sendFrame34P2(3647, 4, 6985, 1); + break; + } + } + + public void openPuzzle(int puzzle) { + int v = 0; + int notfilled = Misc.random(22); + puzzleId = puzzle; + switch (puzzle) { + + case 1: + for (int i = 0; i < 24; i++) { + int d = Misc.random(castlePuzzle.length - 1); + if (castlePuzzle[d] == 0) { + i -= 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + if (castlePuzzle[d] != 0) { + c.getPA().sendFrame34P2(castlePuzzle[d], v, 6980, 1); // 11126 + puzzleSlot[v] = castlePuzzle[d]; + castlePuzzle[d] = 0; + if (v != notfilled) { + v += 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + } + } + break; + + case 2: + for (int i = 0; i < 24; i++) { + int d = Misc.random(trollPuzzle.length - 1); + if (trollPuzzle[d] == 0) { + i -= 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + if (trollPuzzle[d] != 0) { + c.getPA().sendFrame34P2(trollPuzzle[d], v, 6980, 1); // 11126 + puzzleSlot[v] = trollPuzzle[d]; + trollPuzzle[d] = 0; + if (v != notfilled) { + v += 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + } + } + break; + + case 3: + for (int i = 0; i < 24; i++) { + int d = Misc.random(treePuzzle.length - 1); + if (treePuzzle[d] == 0) { + i -= 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + if (treePuzzle[d] != 0) { + c.getPA().sendFrame34P2(treePuzzle[d], v, 6980, 1); // 11126 + puzzleSlot[v] = treePuzzle[d]; + treePuzzle[d] = 0; + if (v != notfilled) { + v += 1; + } + if (v == notfilled) { + v = notfilled + 1; + } + } + } + break; + } + c.getPA().sendFrame34P2(puzzleSlot[4], 4, 6980, 1); // 11126 + } + + public void clickPuzzle(int item) { + switch (item) { + case 2795: // castle + if (openedAlready == false) { + openPuzzle(1); + Hints(1); + openedAlready = true; + } + c.getPA().showInterface(6976); + break; + case 3576: // troll + if (openedAlready == false) { + openPuzzle(2); + Hints(2); + openedAlready = true; + } + c.getPA().showInterface(6976); + break; + case 3565: + if (openedAlready == false) { + openPuzzle(3); + Hints(3); + openedAlready = true; + } + c.getPA().showInterface(6976); + break; + } + doingPuzzle = true; + } + + public void clearPuzzle() { + for (int i = 0; i < 25; i++) { + c.getPA().sendFrame34P2(-1, i, 6980, 0); // 11126 + puzzleSlot[i] = -1; + } + int z = 0; + switch (puzzleId) { + case 1: + z = 0; + for (int i = 2749; i < 2773; i++) { + castlePuzzle[z] = i; + z += 1; + } + break; + case 2: + z = 0; + for (int i = 3619; i < 3643; i++) { + treePuzzle[z] = i; + z += 1; + + } + break; + case 3: + z = 0; + for (int i = 3643; i < 3667; i++) { + trollPuzzle[z] = i; + z += 1; + + } + break; + } + openedAlready = false; + doingPuzzle = false; + puzzleDone = false; + puzzleId = -1; + c.getPA().removeAllWindows(); + } + + public void hasDonePuzzle() { + int z = 0; + switch (puzzleId) { + case 1: + z = 0; + for (int i = 2749; i < 2773; i++) { + if (puzzleSlot[z] == i) { + z += 1; + } + } + if (z == 24) { + puzzleDone = true; + } + if (puzzleDone) { + c.getItems().deleteItem2(2795, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "You've find another clue!"); + c.level3 += 1; + clearPuzzle(); + } + break; + case 2: + z = 0; + for (int i = 3643; i < 3667; i++) { + if (puzzleSlot[z] == i) { + z += 1; + } + } + if (z == 24) { + puzzleDone = true; + } + if (puzzleDone) { + c.getItems().deleteItem2(3576, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "You've find another clue!"); + c.level3 += 1; + clearPuzzle(); + } + break; + + case 3: + z = 0; + for (int i = 3619; i < 3643; i++) { + if (puzzleSlot[z] == i) { + z += 1; + } + } + if (z == 24) { + puzzleDone = true; + } + if (puzzleDone) { + c.getItems().deleteItem2(3565, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "You've find another clue!"); + c.level3 += 1; + clearPuzzle(); + } + break; + } + } + + public void findMove(int slot) { + findFreeSlot(); + if (slot == freeSlot - 1) { + canMove = true; + } + if (slot == freeSlot + 1) { + canMove = true; + } + if (slot == freeSlot - 5) { + canMove = true; + } + if (slot - 1 == freeSlot) { + canMove = true; + } + if (slot - 1 == freeSlot) { + canMove = true; + } + if (slot + 1 == freeSlot) { + canMove = true; + } + if (slot - 5 == freeSlot) { + canMove = true; + } + if (slot + 5 == freeSlot) { + canMove = true; + } + } + + /** + * Clue scroll data + */ + + /*public static int trail1[] = { 2677, 2678, 2679, 2680, 2681, 2682, 2683, + 2684 }; + + public static int trail2[] = { 2685, 2686, 2687, 2688, 2689, 2690, 2691, + 2692 }; + + public static int trail3[] = { 2693, 2694, 2695, 2696, 2697, 2698, 2699, + 2700 }; + + public static int puzzles[] = { 3576, 3565 }; + + public static int lvl1() { + return trail1[(int) (Math.random() * trail1.length)]; + } + + public static int lvl2() { + return trail2[(int) (Math.random() * trail2.length)]; + } + + public static int lvl3() { + return trail3[(int) (Math.random() * trail3.length)]; + } + + public int c1() { + return clue1[(int) (Math.random() * clue1.length)]; + } + + public int c2() { + return clue2[(int) (Math.random() * clue2.length)]; + } + + public int c3() { + return clue3[(int) (Math.random() * clue3.length)]; + } + + public int puzzle() { + return puzzles[(int) (Math.random() * puzzles.length)]; + } + + public void searchObject(int x, int y, int ob) { + switch (ob) { + case 299: + if (x == 3249 && y == 3432) { + if (c.getItems().playerHasItem(2677, 1)) { + if (c.level1 >= 5 && Misc.random(2) == 0) { + clueReward(c1(), 1, c1(), 1, c1(), 1, c1(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level1 = 0; + } else { + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "You've found another clue!"); + c.level1 += 1; + } + c.getItems().deleteItem2(2677, 1); + } + } + break; + case 11745: + if (x == 2955 && y == 3390) { + if (c.getItems().playerHasItem(2682, 1)) { + if (c.level1 >= 5 && Misc.random(2) == 0) { + clueReward(c1(), 1, c1(), 1, c1(), 1, c1(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level1 = 0; + } else { + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "You've found another clue!"); + c.level1 += 1; + } + c.getItems().deleteItem2(2682, 1); + } + } + break; + case 356: + if (x == 2804 && y == 3428) { + if (c.getItems().playerHasItem(2686, 1)) { + if (c.level2 >= 8 && Misc.random(2) == 0) { + clueReward(c2(), 1, c2(), 1, c2(), 1, c2(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level2 = 0; + } else { + c.getItems().addItem(lvl2(), 1); + showitem(lvl2(), "You've found another clue!"); + c.level2 += 1; + } + c.getItems().deleteItem2(2686, 1); + } + } + break; + } + } + + public boolean clueNpc(int npc) { + if (npc == 541 && c.getItems().playerHasItem(2678, 1)) { + c.getItems().deleteItem2(2678, 1); + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "Zeke gives you another clue!"); + c.level1 += 1; + return true; + } else if (npc == 0 && c.getItems().playerHasItem(2679, 1)) { + c.getItems().deleteItem2(2679, 1); + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "Hans gives you another clue!"); + c.level1 += 1; + return true; + } else if (npc == 388 && c.getItems().playerHasItem(2680, 1)) { + c.getItems().deleteItem2(2680, 1); + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "The seer gives you another clue!"); + c.level1 += 1; + return true; + } else if (npc == 548 && c.getItems().playerHasItem(2681, 1)) { + c.getItems().deleteItem2(2681, 1); + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "Thessalia gives you another clue!"); + c.level1 += 1; + return true; + } else if (npc == 379 && c.getItems().playerHasItem(2683, 1)) { + c.getItems().deleteItem2(2683, 1); + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "Luthas gives you another clue!"); + c.level1 += 1; + return true; + } else if (npc == 2290 && c.getItems().playerHasItem(2685, 1)) { + c.getItems().deleteItem2(2685, 1); + c.getItems().addItem(lvl2(), 1); + showitem(lvl2(), "Sir Tiffy gives you another clue!"); + c.level2 += 1; + return true; + } else if (npc == 5141 && c.getItems().playerHasItem(2690, 1)) { + c.getItems().deleteItem2(2690, 1); + c.getItems().addItem(2777, 1); + showitem(2777, "Uri gives you a casket."); + return true; + } else if (npc == 3217 && c.getItems().playerHasItem(2691, 1)) { + c.getItems().deleteItem2(2691, 1); + c.getItems().addItem(lvl2(), 1); + showitem(lvl2(), "Kaylee gives you another clue!"); + c.level2 += 1; + return true; + } else if (npc == 538 && c.getItems().playerHasItem(2692, 1)) { + c.getItems().deleteItem2(2692, 1); + c.getItems().addItem(lvl2(), 1); + showitem(lvl2(), "Peska gives you another clue!"); + c.level2 += 1; + return true; + } else if (npc == 5142 && c.getItems().playerHasItem(2694, 1)) { + c.getItems().deleteItem2(2694, 1); + c.getItems().addItem(2779, 1); + showitem(2779, "Uri gives you a casket."); + return true; + } else if (npc == 5143 && c.getItems().playerHasItem(2695, 1)) { + c.getItems().deleteItem2(2695, 1); + c.getItems().addItem(2779, 1); + showitem(2779, "Uri gives you a casket."); + return true; + } else if (npc == 657 && c.getItems().playerHasItem(2696, 1)) { + c.getItems().deleteItem2(2696, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "The monk gives you another clue!"); + c.level3 += 1; + return true; + } else if (npc == 4494 && c.getItems().playerHasItem(2697, 1)) { + c.getItems().deleteItem2(2697, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "General Wartface gives you another clue!"); + c.level3 += 1; + return true; + } else if (npc == 1060 && c.getItems().playerHasItem(2700, 1)) { + c.getItems().deleteItem2(2700, 1); + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "Denulth gives you another clue!"); + c.level3 += 1; + return true; + } + return false; + } + + public void getDigLoc(int x, int y) { + if (c.getItems().playerHasItem(2688, 1)) { + if (x == 2906 && y == 3294) { + c.getItems().deleteItem2(2688, 1); + c.getItems().addItem(2777, 1); + showitem(2777, "You've found a casket!"); + } + } else if (c.getItems().playerHasItem(2689, 1)) { + if (x == 2650 && y == 3229) { + c.getItems().deleteItem2(2689, 1); + c.getItems().addItem(2777, 1); + showitem(2777, "You've found a casket!"); + } + } else if (c.getItems().playerHasItem(2693, 1)) { + if (x == 3092 && y == 3226) { + c.getItems().deleteItem2(2693, 1); + c.getItems().addItem(2779, 1); + showitem(2779, "You've found a casket!"); + } + } + + else if (c.getItems().playerHasItem(2698, 1)) { + if ((x == 3167 && y == 3360) || (x == 3167 && y == 3361)) { + c.getItems().deleteItem2(2698, 1); + c.getItems().addItem(2779, 1); + showitem(2779, "You've found a casket!"); + } + } + } + + public void clues(int clueScroll) { + switch (clueScroll) { + case 2677:// lvl 1 + Clue("", "", "", "Search the haybales in Varrock's", + "training facility.", "", "", "");// obj:299 x:3249 y:3432 + break; + case 2678:// lvl 1 + Clue("", "", "", "Speak to Zeke for your next clue.", "", "", "", + "");// npc:541 + break; + case 2679:// lvl 1 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "SNHA", "", "");// npc:0 + break; + case 2680:// lvl 1 + Clue("", "", "", "Speak with a Seer for your next clue.", "", "", + "", "");// npc:388 + break; + case 2681:// lvl 1 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "ESALITHAS", "", ""); + break; + case 2682:// lvl 1 + Clue("", "", "", "Search the crates in the Falador", + "General Store.", "", "", ""); + break; + case 2683:// lvl 1 + Clue("", "", "", "Speak to Luthas in Edgeville for", + "your next clue.", "", "", ""); + break; + case 2684:// lvl 1 + Clue("", "", "", "Kill a goblin for your next clue.", "", "", "", + ""); + break; + case 2685:// lvl 2 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "RSI FTIYF NEISACH", "", ""); + break; + case 2686:// lvl 2 + Clue("", "", "", "Search a crate on Catherby port.", "", "", "", ""); + break; + case 2687:// lvl 2 + Clue("", "", "The Falador guards, they do not see,", + "my thievery fingers steal all things,", + "though I tend to aim at their pocketries.", "", "", ""); + break; + case 2688:// lvl2 + c.getPA().showInterface(4305); + break; + case 2689:// lvl2 + c.getPA().showInterface(9632); + break; + case 2690:// lvl 2 + Clue("", "", "Jig in the bank of Canifis.", + "Equip a bronze platebody, a iron sword", + "and climbing boots.", "", "", ""); + break; + case 2691:// lvl 2 + Clue("", "", "", "Speak with Kaylee in Falador.", "", "", "", ""); + break; + case 2692:// lvl 2 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "SKEPA", "", ""); + break; + case 2693:// lvl3 + c.getPA().showInterface(7113); + break; + case 2694:// lvl 3 + Clue("", "", "Dance in the Falador General store.", + "Equip a rune scimitar, a mystic hat", "and a blue skirt.", + "", "", ""); + break; + case 2695:// lvl 3 + Clue("", "", "Salute in the Banana Plantation.", + "Beware of double agents!", + "Equip a Iban's Staff, rune platelegs", + "and an adamant kiteshield.", "", ""); + break; + case 2696:// lvl 3 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "NOKM FO NTERNAN", "", ""); + break; + case 2697:// lvl 3 + Clue("", "", "", "Speak with General Wartface for", + "your next clue.", "", "", ""); + break; + case 2698:// lvl3 + c.getPA().showInterface(6994); + break; + case 2699:// lvl 3 + Clue("", "", "", "Kill a green dragon for your next clue.", "", "", + "", ""); + break; + case 2700:// lvl 3 + Clue("", "", "This anagram reveals", "who to speak to next:", "", + "HTENDLU", "", ""); + break; + case 2775:// level1 Chest + if (c.level1 >= 5 && Misc.random(2) == 0) { + clueReward(c1(), 1, c1(), 1, c1(), 1, c1(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level1 = 0; + } else { + c.getItems().addItem(lvl1(), 1); + showitem(lvl1(), "You've found another clue!"); + c.level1 += 1; + } + c.getItems().deleteItem2(2775, 1); + break; + case 2777:// level2 Chest + if (c.level2 >= 8 && Misc.random(2) == 0) { + clueReward(c2(), 1, c2(), 1, c2(), 1, c2(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level2 = 0; + } else { + c.getItems().addItem(lvl2(), 1); + showitem(lvl2(), "You've found another clue!"); + c.level2 += 1; + } + c.getItems().deleteItem2(2777, 1); + break; + case 2779:// level3 Chest + if (c.level3 >= 13 && Misc.random(3) == 0) { + clueReward(c3(), 1, c3(), 1, c3(), 1, c3(), 1); + c.sendMessage("Well done, you've completed the Treasure Trail!"); + c.level3 = 0; + } else { + c.getItems().addItem(lvl3(), 1); + showitem(lvl3(), "You've found another clue!"); + c.level3 += 1; + } + c.getItems().deleteItem2(2779, 1); + break; + } + }*/ +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/items/impl/WeaponPoison.java b/2006Redone Server/src/redone/game/items/impl/WeaponPoison.java new file mode 100644 index 00000000..e5b1bd99 --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/WeaponPoison.java @@ -0,0 +1,149 @@ +package redone.game.items.impl; + +import java.util.HashMap; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; + +/** + * Manages weapon poisoning. + * @author Andew added every single weapon to the enum + * @author Hybris writing the system + */ +public class WeaponPoison { + + /** + * Represents a weapon that can be poisoned. Stores the initial weapon item + * id, the type of poison used on the weapon and the new poisoned weapon + * that will be obtained. + */ + private enum Weapon { + BRONZE_DAGGER(1205, new int[][] {{ 5940, 5688 }, { 5937, 5670 }, { 187, 1221 }}), + IRON_DAGGER(1203, new int[][] {{ 5940, 5686 }, { 5937, 5668 }, { 187, 1219 }}), + STEEL_DAGGER(1207, new int[][] {{ 5940, 5690 }, { 5937, 5672 }, { 187, 1223 }}), + BLACK_DAGGER(1217, new int[][] {{ 5940, 5700 }, { 5937, 5682 }, { 187, 1233 }}), + MITHRIL_DAGGER(1209, new int[][] {{ 5940, 5692 }, { 5937, 5674 }, { 187, 1225 }}), + ADAMANT_DAGGER(1211, new int[][] {{ 5940, 5694 }, { 5937, 5676 }, { 187, 1227 }}), + RUNE_DAGGER(1213, new int[][] {{ 5940, 5696 }, { 5937, 5678 }, { 187, 1229 }}), + DRAGON_DAGGER(1215, new int[][] {{ 5940, 5698 }, { 5937, 5680 }, { 187, 1231 }}), + BRONZE_DART(806, new int[][] {{ 5940, 5635 }, { 5937, 5628 }, { 187, 812 }}), + IRON_DART(807, new int[][] {{ 5940, 5636 }, { 5937, 5629 }, { 187, 813 }}), + STEEL_DART(808, new int[][] {{ 5940, 5637 }, { 5937, 5630 }, { 187, 814 }}), + BLACK_DART(3093, new int[][] {{ 5940, 5638 }, { 5937, 5631 }, { 187, 815 }}), + MITHRIL_DART(809, new int[][] {{ 5940, 5639 }, { 5937, 5632 }, { 187, 816 }}), + ADAMANT_DART(810, new int[][] {{ 5940, 5640 }, { 5937, 5633 }, { 187, 817 }}), + RUNE_DART(811, new int[][] {{ 5940, 5641 }, { 5937, 5634 }, { 187, 818 }}), + BRONZE_SPEAR(1237, new int[][] {{ 5940, 5718 }, { 5937, 5704 }, { 187, 1251 }}), + IRON_SPEAR(1239, new int[][] {{ 5940, 5720 }, { 5937, 5706 }, { 187, 1253 }}), + STEEL_SPEAR(1241, new int[][] {{ 5940, 5722 }, { 5937, 5708 }, { 187, 1255 }}), + MITHRIL_SPEAR(1243, new int[][] {{ 5940, 5724 }, { 5937, 5710 }, { 187, 1257 }}), + ADAMANT_SPEAR(1245, new int[][] {{ 5940, 5726 }, { 5937, 5712 }, { 187, 1259 }}), + RUNE_SPEAR(1247, new int[][] {{ 5940, 5728 }, { 5937, 5714 }, { 187, 1261 }}), + DRAGON_SPEAR(1249, new int[][] {{ 5940, 5730 }, { 5937, 5716 }, { 187, 1263 }}), + BRONZE_JAVELIN(825, new int[][] { { 5940, 5648 }, { 5937, 5642 }, { 187, 831 }}), + IRON_JAVELIN(826, new int[][] { { 5940, 5648 }, { 5937, 5643 }, { 187, 832 }}), + STEEL_JAVELIN(827, new int[][] {{ 5940, 5648 }, { 5937, 5644 }, { 187, 833 }}), + MITHRIL_JAVELIN(828, new int[][] {{ 5940, 5648 }, { 5937, 5645 }, { 187, 834 }}), + ADAMANT_JAVELIN(829, new int[][] {{ 5940, 5648 }, { 5937, 5646 }, { 187, 835 }}), + RUNE_JAVELIN(830, new int[][] {{ 5940, 5648 }, { 5937, 5647 }, { 187, 836 }}), + BRONZE_ARROW(882, new int[][] {{ 5940, 5622 }, { 5937, 5616 }, { 187, 883 }}), + IRON_ARROW(884, new int[][] {{ 5940, 5623 }, { 5937, 5617 }, { 187, 885 }}), + STEEL_ARROW(886, new int[][] {{ 5940, 5624 }, { 5937, 5618 }, { 187, 887 }}), + MITHRIL_ARROW(888, new int[][] {{ 5940, 5625 }, { 5937, 5619 }, { 187, 889 }}), + ADAMANT_ARROW(890, new int[][] {{ 5940, 5626 }, { 5937, 5620 }, { 187, 891 }}), + RUNE_ARROW(892, new int[][] {{ 5940, 5627 }, { 5937, 5621 }, { 187, 893 }}), + BRONZE_KNIFE(864, new int[][] {{ 5940, 5661 }, { 5937, 5654 }, { 187, 870 }}), + IRON_KNIFE(863, new int[][] {{ 5940, 5662 }, { 5937, 5655 }, { 187, 871}}), + STEEL_KNIFE(865, new int[][] {{ 5940, 5663 }, { 5937, 5656 }, { 187, 872 }}), + BLACK_KNIFE(869, new int[][] {{ 5940, 5665 }, { 5937, 5658 }, { 187, 873 }}), + MITHRIL_KNIFE(866, new int[][] {{ 5940, 5664 }, { 5937, 5657 }, { 187, 874 }}), + ADAMANT_KNIFE(867, new int[][] {{ 5940, 5666 }, { 5937, 5659 }, { 187, 875 }}), + RUNE_KNIFE(868, new int[][] {{ 5940, 5667 }, { 5937, 5660 }, { 187, 876 }}); + + /** + * Creates the weapon. + * + * @param itemId + * The weapon item id. + * @param newItemId + * The poisoned weapon item id. + */ + private Weapon(int itemId, int[][] newItemId) { + this.itemId = itemId; + this.newItemId = newItemId; + } + + /** + * Gets the item id. + * + * @return the itemId + */ + public int getItemId() { + return itemId; + } + + /** + * The weapon item id. + */ + private final int itemId; + + /** + * The poisoned weapon item id. + */ + private final int[][] newItemId; + + /** + * Represents a map for the weapon item ids. + */ + public static HashMap weapon = new HashMap(); + + /** + * @return the newItemId + */ + public int[][] getNewItemId() { + return newItemId; + } + + /** + * Populates a map for the weapons. + */ + static { + for (Weapon w : Weapon.values()) { + weapon.put(w.getItemId(), w); + } + + } + } + + /** + * The item id for Vial. + */ + private final static int VIAL = 229; + + /** + * Starts the weapon poison event for each individual weapon item from the + * enumeration Weapon. + * + * @param player + * The Player player. + * @param itemUse + * The first item use. + * @param useWith + * The second item use. + */ + public static void execute(final Client player, int itemUse, int useWith) { + final Weapon weapon = Weapon.weapon.get(useWith); + if (weapon != null) { + for (int element[] : weapon.getNewItemId()) { + if (itemUse == element[0]) { + player.getActionSender().sendMessage("You make a " + ItemAssistant.getItemName(element[1]) + "."); + player.getItemAssistant().deleteItem(element[0], player.getItemAssistant().getItemSlot(element[0]), 1); + player.getItemAssistant().deleteItem(weapon.getItemId(), player.getItemAssistant().getItemSlot(weapon.getItemId()), 1); + player.getItemAssistant().addItem(VIAL, 1); + player.getItemAssistant().addItem(element[1], 1); + } + } + } + + } +} diff --git a/2006Redone Server/src/redone/game/items/impl/Weight.java b/2006Redone Server/src/redone/game/items/impl/Weight.java new file mode 100644 index 00000000..78fe0b0b --- /dev/null +++ b/2006Redone Server/src/redone/game/items/impl/Weight.java @@ -0,0 +1,80 @@ +package redone.game.items.impl; + +import redone.Server; +import redone.game.items.ItemDefinitions; +import redone.game.items.ItemList; +import redone.game.players.Client; + +/** + * @author somedude, credits to Galkon for item weights + */ +public class Weight extends ItemDefinitions { + + /** + * Calculates the weight when doing actions + * + * @param c + * @param item + * @param action + * - deleteitem, additem, equip, unequip. + */ + public static void calcWeight(Client c, int item, String action) { + if (action.equalsIgnoreCase("deleteitem")) { + if (getWeight(item) > 99.20) { + c.weight -= getWeight(item) / 100; + if (c.weight < 0) { + c.weight = 0.0; + } + c.getActionSender().writeWeight((int) c.weight); + return; + } + c.weight -= getWeight(item) / 10; + if (c.weight < 0) { + c.weight = 0.0; + } + c.getActionSender().writeWeight((int) c.weight); + } else if (action.equalsIgnoreCase("additem")) { + if (getWeight(item) > 99.20) { + c.weight += getWeight(item) / 100; + c.getActionSender().writeWeight((int) c.weight); + return; + } + c.weight += getWeight(item) / 10; + c.getActionSender().writeWeight((int) c.weight); + } + } + + /** + * Updates the weight for inventory and equipment. + * + * @param c + */ + public static void updateWeight(Client c) { + if (c != null) { + c.getActionSender().writeWeight((int) c.weight); + for (int playerItem : c.playerItems) { + if (playerItem > -1) {// inventory + for (ItemList i1 : Server.itemHandler.ItemList) { + if (i1 != null) { + if (i1.itemId == playerItem) { + calcWeight(c, playerItem, "addItem"); + } + } + } + } + } // equipment + for (int element : c.playerEquipment) { + if (element > -1) {// equipment + for (ItemList i1 : Server.itemHandler.ItemList) { + if (i1 != null) { + if (i1.itemId == element) { + calcWeight(c, element, "addItem"); + } + } + } + } + } + } + c.getActionSender().writeWeight((int) c.weight); + } +} diff --git a/2006Redone Server/src/redone/game/npcs/Npc.java b/2006Redone Server/src/redone/game/npcs/Npc.java new file mode 100644 index 00000000..b8c63ad9 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/Npc.java @@ -0,0 +1,464 @@ +package redone.game.npcs; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.util.Stream; + +public class Npc { + + public int npcId; + public int npcType; + public int absX, absY; + public int heightLevel; + public static int lastX, lastY; + public int makeX, makeY, maxHit, defence, attack, moveX, moveY, direction, walkingType, hitsToHeal; + public int spawnX, spawnY; + public int viewX, viewY; + public boolean summoner; + public int summonedBy, size; + public int focusPointX, focusPointY, masterId; + public boolean turnUpdateRequired; + + /** + * attackType: 0 = melee, 1 = range, 2 = mage + */ + public int attackType, projectileId, endGfx, spawnedBy, hitDelayTimer, HP, + MaxHP, hitDiff, animNumber, actionTimer, enemyX, enemyY, + combatLevel; + public boolean applyDead, isDead, needRespawn, respawns, aggressive; + public boolean walkingHome, underAttack; + public int freezeTimer, attackTimer, killerId, killedBy, oldIndex, + underAttackBy; + public long lastDamageTaken; + public boolean randomWalk; + public boolean dirUpdateRequired; + public boolean animUpdateRequired; + public boolean hitUpdateRequired; + public boolean updateRequired; + public boolean forcedChatRequired; + public boolean faceToUpdateRequired; + public int firstAttacker; + public String forcedText; + public boolean transformUpdateRequired = false, isTransformed = false; + public int transformId; + + public Npc(int _npcId, int _npcType) { + npcId = _npcId; + npcType = _npcType; + direction = -1; + isDead = false; + applyDead = false; + actionTimer = 0; + randomWalk = true; + } + + public void requestTransform(int id) { + transformId = id; + transformUpdateRequired = true; + updateRequired = true; + } + + public void requestTransformTime(Client player, int itemId, int animation, final int currentId, final int newId, int transformTime) { + if (!player.getItemAssistant().playerHasItem(itemId)) { + player.getActionSender().sendMessage("You need " + ItemAssistant.getItemName(itemId).toLowerCase() + " to do that."); + return; + } + if (NpcHandler.npcs[currentId].isTransformed == true) { + player.getActionSender().sendMessage("This npc is already transformed."); + return; + } + if (animation > 0) { + player.startAnimation(animation); + } + NpcHandler.npcs[currentId].isTransformed = true; + requestTransform(newId); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + requestTransform(currentId); + container.stop(); + } + + @Override + public void stop() { + NpcHandler.npcs[currentId].isTransformed = false; + } + }, transformTime); + } + + public void appendTransformUpdate(Stream str) { + str.writeWordBigEndianA(transformId); + } + + + public void updateNPCMovement(Stream str) { + if (direction == -1) { + + if (updateRequired) { + + str.writeBits(1, 1); + str.writeBits(2, 0); + } else { + str.writeBits(1, 0); + } + } else { + + str.writeBits(1, 1); + str.writeBits(2, 1); + str.writeBits(3, Misc.xlateDirectionToClient[direction]); + if (updateRequired) { + str.writeBits(1, 1); + } else { + str.writeBits(1, 0); + } + } + } + + /** + * Text update + **/ + + public void forceChat(String text) { + forcedText = text; + forcedChatRequired = true; + updateRequired = true; + } + + + /** + * Graphics + **/ + + public int mask80var1 = 0; + public int mask80var2 = 0; + protected boolean mask80update = false; + + public void appendMask80Update(Stream str) { + str.writeWord(mask80var1); + str.writeDWord(mask80var2); + } + + public void gfx100(int gfx) { + mask80var1 = gfx; + mask80var2 = 6553600; + mask80update = true; + updateRequired = true; + } + + public void gfx0(int gfx) { + mask80var1 = gfx; + mask80var2 = 65536; + mask80update = true; + updateRequired = true; + } + + public void appendAnimUpdate(Stream str) { + str.writeWordBigEndian(animNumber); + str.writeByte(1); + } + + public int startAnimation(int anim, int npcId) { + return animNumber; + } + + /** + * + Face + **/ + + public int FocusPointX = -1, FocusPointY = -1; + public int face = 0; + + private void appendSetFocusDestination(Stream str) { + str.writeWordBigEndian(FocusPointX); + str.writeWordBigEndian(FocusPointY); + } + + public void turnNpc(int i, int j) { + FocusPointX = 2 * i + 1; + FocusPointY = 2 * j + 1; + updateRequired = true; + turnUpdateRequired = true; + } + + public int getNextWalkingDirection2() { + int dir; + dir = Misc.direction(absX, absY, absX + moveX, absY + moveY); + dir >>= 1; + absX += moveX; + absY += moveY; + return dir; + } + + public void getRandomAndHomeNPCWalking(int i) { + direction = -1; + if (NpcHandler.npcs[i].freezeTimer == 0) { + direction = getNextWalkingDirection2(); + } + } + + public void appendFaceEntity(Stream str) { + str.writeWord(face); + } + + public void facePlayer(int player) { + face = player + 32768; + dirUpdateRequired = true; + updateRequired = true; + } + + public void appendFaceToUpdate(Stream str) { + str.writeWordBigEndian(viewX); + str.writeWordBigEndian(viewY); + } + + public void appendNPCUpdateBlock(Stream str) { + if (!updateRequired) { + return; + } + int updateMask = 0; + if (animUpdateRequired) { + updateMask |= 0x10; + } + if (hitUpdateRequired2) { + updateMask |= 8; + } + if (mask80update) { + updateMask |= 0x80; + } + if (dirUpdateRequired) { + updateMask |= 0x20; + } + if (forcedChatRequired) { + updateMask |= 1; + } + if (hitUpdateRequired) { + updateMask |= 0x40; + } + if (transformUpdateRequired) { + updateMask |= 2; + } + if (turnUpdateRequired) { + updateMask |= 4; + } + + str.writeByte(updateMask); + + if (animUpdateRequired) { + appendAnimUpdate(str); + } + if (hitUpdateRequired2) { + appendHitUpdate2(str); + } + if (mask80update) { + appendMask80Update(str); + } + if (dirUpdateRequired) { + appendFaceEntity(str); + } + if (forcedChatRequired) { + str.writeString(forcedText); + } + if (hitUpdateRequired) { + appendHitUpdate(str); + } + if (transformUpdateRequired) { + appendTransformUpdate(str); + } + if (turnUpdateRequired) { + appendSetFocusDestination(str); + } + + } + + public void clearUpdateFlags() { + updateRequired = false; + forcedChatRequired = false; + hitUpdateRequired = false; + hitUpdateRequired2 = false; + animUpdateRequired = false; + dirUpdateRequired = false; + transformUpdateRequired = false; + mask80update = false; + forcedText = null; + moveX = 0; + moveY = 0; + direction = -1; + focusPointX = -1; + focusPointY = -1; + turnUpdateRequired = false; + } + + public int getNextWalkingDirection() { + int nextX = absX + moveX; + int nextY = absY + moveY; + int dir; + dir = Misc.direction(absX, absY, absX + moveX, absY + moveY); + for (Npc npc : NpcHandler.npcs) { + if (npc == null) { + continue; + } + if (npc.absX == nextX && npc.absY == nextY + && npc.heightLevel == heightLevel) { + return -1; + } + } + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + if (p.absX == nextX && p.absY == nextY + && p.heightLevel == heightLevel) { + return -1; + } + } + if (dir == -1) { + return -1; + } + dir >>= 1; + absX += moveX; + absY += moveY; + return dir; + } + + public void getNextNPCMovement(int i) { + direction = -1; + if (NpcHandler.npcs[i].freezeTimer == 0) { + direction = getNextWalkingDirection(); + } + } + + public void appendHitUpdate(Stream str) { + if (HP <= 0) { + isDead = true; + } + str.writeByteC(hitDiff); + if (hitDiff > 0) { + str.writeByteS(1); + } else { + str.writeByteS(0); + } + str.writeByteS(HP); + str.writeByteC(MaxHP); + } + + public int hitDiff2 = 0; + public boolean hitUpdateRequired2 = false; + + public void appendHitUpdate2(Stream str) { + if (HP <= 0) { + isDead = true; + } + str.writeByteA(hitDiff2); + if (hitDiff2 > 0) { + str.writeByteC(1); + } else { + str.writeByteC(0); + } + str.writeByteA(HP); + str.writeByte(MaxHP); + } + + public void handleHitMask(int damage) { + if (!hitUpdateRequired) { + hitUpdateRequired = true; + hitDiff = damage; + } else if (!hitUpdateRequired2) { + hitUpdateRequired2 = true; + hitDiff2 = damage; + } + updateRequired = true; + } + + public int getX() { + return absX; + } + + public int getY() { + return absY; + } + + public int getLastX() { + return lastX; + } + + public int getLastY() { + return lastY; + } + + public void setAbsX(int absX) { + Npc.lastX = this.absX; + this.absX = absX; + } + + public void setAbsY(int absY) { + Npc.lastY = this.absY; + this.absY = absY; + } + + public void deleteNPC(Npc npc) { + setAbsX(0); + setAbsY(0); + npc = null; + } + + public boolean inLesserNpc() { + return (absX >= 3108 && absX <= 3112 && absY >= 3156 && absY <= 3158 && heightLevel == 2); + } + + public boolean inMulti() { + if (absX >= 3136 + && absX <= 3327 + && absY >= 3519 + && absY <= 3607 + || absX >= 2625 + && absX <= 2685 + && absY >= 2550 + && absY <= 2620 // Pest + // Control + || absX >= 3190 && absX <= 3327 && absY >= 3648 && absY <= 3839 + || absX >= 3200 && absX <= 3390 && absY >= 3840 && absY <= 3967 + || absX >= 2992 + && absX <= 3007 + && absY >= 3912 + && absY <= 3967 + || absX >= 2946 + && absX <= 2959 + && absY >= 3816 + && absY <= 3831 + || absX >= 3008 + && absX <= 3199 + && absY >= 3856 + && absY <= 3903 + || absX >= 2667 + && absX <= 2685 + && absY >= 3712 + && absY <= 3730 // rock + // crabs + || absX >= 3008 && absX <= 3071 && absY >= 3600 && absY <= 3711 + || absX >= 3072 && absX <= 3327 && absY >= 3608 && absY <= 3647 + || absX >= 2624 && absX <= 2690 && absY >= 2550 && absY <= 2619 + || absX >= 2371 && absX <= 2422 && absY >= 5062 && absY <= 5117 + || absX >= 2896 && absX <= 2927 && absY >= 3595 && absY <= 3630 + || absX >= 2892 && absX <= 2932 && absY >= 4435 && absY <= 4464 + || absX >= 2256 && absX <= 2287 && absY >= 4680 && absY <= 4711) { + return true; + } + return false; + } + + public boolean inWild() {// beg, end, beg, end, beg, end, beg, end + if (absX > 2941 && absX < 3392 && absY > 3518 && absY < 3966 + || absX > 2941 && absX < 3392 && absY > 9918 && absY < 10366) { + return true; + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/npcs/NpcActions.java b/2006Redone Server/src/redone/game/npcs/NpcActions.java new file mode 100644 index 00000000..613488d2 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/NpcActions.java @@ -0,0 +1,1167 @@ +package redone.game.npcs; + +import redone.game.content.quests.QuestAssistant; +import redone.game.content.skills.core.Fishing; +import redone.game.content.skills.crafting.Tanning; +import redone.game.content.skills.thieving.Pickpocket; +import redone.game.content.traveling.Sailing; +import redone.game.players.Client; +import redone.game.players.PlayerAssistant; +import redone.game.shops.ShopAssistant; +import redone.game.shops.Shops; +import redone.util.Misc; + +public class NpcActions { + + private final Client c; + + public NpcActions(Client Client) { + c = Client; + } + + public void firstClickNpc(int npcType) { + c.clickNpcType = 0; + c.npcClickIndex = 0; + Shops.dialogueShop(c, npcType); + if (Pickpocket.isNPC(c, npcType)) { + Pickpocket.attemptPickpocket(c, npcType); + return; + } + if (Fishing.fishingNPC(c, npcType)) { + Fishing.fishingNPC(c, 1, npcType); + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't click any npcs, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + switch (npcType) { + case 209: + c.getDialogueHandler().sendDialogues(3500, 209); + break; + + case 2238: + c.getDialogueHandler().sendDialogues(3214, npcType); + break; + + case 958: + c.getDialogueHandler().sendDialogues(3208, npcType); + break; + + case 606://squire + if (c.knightS == 0) { + c.getDialogueHandler().sendDialogues(610, 606); + } else if (c.knightS == 4) { + c.getDialogueHandler().sendDialogues(654, 606); + } else if (c.knightS == 8) { + c.getDialogueHandler().sendDialogues(682, 606); + } + break; + case 647://reldo + if (c.knightS == 1) { + c.getDialogueHandler().sendDialogues(626, 647); + } + break; + case 604://thurgo + if (c.knightS == 2) { + c.getDialogueHandler().sendDialogues(640, 604); + } else if (c.knightS == 3) { + c.getDialogueHandler().sendDialogues(648, 604); + } else if (c.knightS == 6) { + c.getDialogueHandler().sendDialogues(660, 604); + } else if (c.knightS == 7) { + c.getDialogueHandler().sendDialogues(669, 604); + } else if (c.knightS == 8) { + c.getDialogueHandler().sendDialogues(674, 604); + } + break; + + case 693: //rang guild shots + c.getDialogueHandler().sendDialogues(3201, npcType); + break; + + case 694: //rang guild store + c.getShopAssistant().openShop(111); + break; + + case 1834: + c.getDialogueHandler().sendDialogues(1378, npcType); + break; + + case 537: + case 536: + if (c.questPoints >= QuestAssistant.MAXIMUM_QUESTPOINTS) { + c.getDialogueHandler().sendDialogues(1373, npcType); + } else { + c.getActionSender().sendMessage( + "You need " + QuestAssistant.MAXIMUM_QUESTPOINTS + + " quest points to open this shop."); + } + break; + + case 599: + c.getDialogueHandler().sendDialogues(1369, npcType); + break; + + case 663: + c.getDialogueHandler().sendDialogues(3189, npcType); + break; + + case 802: + c.getDialogueHandler().sendDialogues(1358, npcType); + break; + + case 2205: + c.getDialogueHandler().sendDialogues(1353, npcType); + break; + + case 3830: + c.getDialogueHandler().sendDialogues(1349, npcType); + break; + + case 2270: + if (c.playerLevel[c.playerThieving] > 98) { + c.getShopAssistant().openShop(118); + } else if (c.playerLevel[c.playerThieving] > 49 + && c.playerLevel[c.playerAgility] > 49) { + c.getShopAssistant().openShop(118); + } else { + c.getActionSender().sendMessage( + "You don't have the required skills to open this shop"); + } + break; + + case 1071: + c.getDialogueHandler().sendDialogues(1345, npcType); + break; + + case 666: + c.getDialogueHandler().sendDialogues(3183, npcType); + break; + + case 510: + if (c.absY > 3209 && c.absY < 3215) { + c.getDialogueHandler().sendDialogues(3173, npcType); + } else { + c.getDialogueHandler().sendDialogues(3178, npcType); + } + break; + + case 1042: + c.getDialogueHandler().sendDialogues(3167, npcType); + break; + + case 735: + c.getDialogueHandler().sendDialogues(3167, npcType); + break; + + case 36: + c.getDialogueHandler().sendDialogues(3158, npcType); + break; + + case 844: + if (c.runeMist < 4) { + c.getDialogueHandler().sendStatement( + "You need to beat rune mysteries first to do this."); + c.nextChat = 0; + return; + } + c.getDialogueHandler().sendDialogues(3144, npcType); + break; + + case 798: + c.getDialogueHandler().sendDialogues(3133, npcType); + break; + + case 736: + case 3217: + case 3218: + c.getDialogueHandler().sendDialogues(3118, npcType); + break; + + /* + * tutorial island + */ + case 945: + if (c.tutorialProgress == 0) { + c.getDialogueHandler().sendDialogues(3001, npcType); + } + if (c.tutorialProgress == 1) { + c.getDialogueHandler().sendDialogues(3008, npcType); + } + if (c.tutorialProgress == 2) { + c.getDialogueHandler().sendNpcChat1("You should move on now.", + npcType, "Runescape Guide"); + } + break; + + case 943:// survival + if (c.tutorialProgress == 2) { + c.getDialogueHandler().sendDialogues(3012, npcType); + } + if (c.tutorialProgress == 5) { + c.getDialogueHandler().sendDialogues(3017, npcType); + } + break; + + case 942: // master chef + if (c.tutorialProgress == 7) { + c.getDialogueHandler().sendDialogues(3021, npcType); + } + break; + + case 949: // quest guide + if (c.tutorialProgress == 12) { + c.getDialogueHandler().sendDialogues(3043, npcType); + } + if (c.tutorialProgress == 13) { + c.getDialogueHandler().sendDialogues(3045, npcType); + } + break; + case 948: // mining tutor + if (c.tutorialProgress == 14) { + c.getDialogueHandler().sendDialogues(3052, npcType); + } + if (c.tutorialProgress == 16) { + c.getDialogueHandler().sendDialogues(3056, npcType); + } + if (c.tutorialProgress == 20) { + c.getDialogueHandler().sendDialogues(3063, npcType); + } + break; + case 944: // Combat deud + if (c.tutorialProgress == 21) { + c.getDialogueHandler().sendDialogues(3067, npcType); + } else if (c.tutorialProgress == 23 + && !c.getItemAssistant().playerHasItem(1171) + && !c.getItemAssistant().playerHasItem(1277)) { + c.getDialogueHandler().sendDialogues(3072, npcType); + } else if (c.getItemAssistant().playerHasItem(1171) + && c.getItemAssistant().playerHasItem(1277) && c.tutorialProgress == 23) { + c.getActionSender().sendMessage( + "I already gave you a sword and shield."); + c.nextChat = 0; + c.getDialogueHandler() + .chatboxText( + c, + "In your worn inventory panel, right click on the dagger and", + "select the remove option from the drop down list. After you've", + "unequipped the dagger, wield the sword and shield. As you", + "pass the mouse over an item you will see its name.", + "Unequipping items"); + PlayerAssistant.removeHintIcon(c); + } else if (c.tutorialProgress == 25) { + c.getDialogueHandler().sendDialogues(3074, npcType); + } + break; + + case 947: // fiancial dude + if (c.tutorialProgress == 27) { + c.getDialogueHandler().sendDialogues(3079, npcType); + } + // c.getPacketDispatcher().createArrow(1, 7); + break; + + case 954: // prayer dude + if (c.tutorialProgress == 28) { + c.getDialogueHandler().sendDialogues(3089, npcType); + } + if (c.tutorialProgress == 29) { + c.getDialogueHandler().sendDialogues(3092, npcType); + } + if (c.tutorialProgress == 31) { + c.getDialogueHandler().sendDialogues(3097, npcType); + } + break; + case 946:// mage + if (c.tutorialProgress == 32) { + c.getDialogueHandler().sendDialogues(3105, npcType); + } + if (c.tutorialProgress == 33) { + c.getDialogueHandler().sendDialogues(3108, npcType); + } + if (c.tutorialProgress == 34) { + c.getDialogueHandler().sendDialogues(3110, npcType); + } + if (c.tutorialProgress == 35) { + c.getDialogueHandler().sendDialogues(3112, npcType); + } + break; + + case 922: + c.getDialogueHandler().sendDialogues(1312, npcType); + break; + + case 805: + c.getDialogueHandler().sendDialogues(1317, npcType); + break; + + case 519: + c.getDialogueHandler().sendDialogues(15, npcType); // barrows fix + // barrows + break; + + case 598: + c.getDialogueHandler().sendDialogues(1300, npcType); + break; + + case 70: + case 1596: + case 1597: + case 1598: + case 1599: + c.getDialogueHandler().sendDialogues(1228, npcType); + c.SlayerMaster = npcType; + break; + + case 1595: + c.getDialogueHandler().sendDialogues(1036, npcType); + break; + + case 170: + c.getDialogueHandler().sendDialogues(591, npcType); + break; + + case 925: + case 926: + c.getDialogueHandler().sendDialogues(1018, npcType); + break; + + case 2728: + case 2729: + c.getDialogueHandler().sendDialogues(1011, npcType); + break; + + case 376: + case 377: + case 378: + if (c.getItemAssistant().playerHasItem(995, 30)) { + c.getDialogueHandler().sendDialogues(33, npcType); + } else { + c.getDialogueHandler().sendStatement( + "You need 30 coins to travel on this ship."); + } + break; + + case 380: + if (c.getItemAssistant().playerHasItem(995, 30)) { + c.getDialogueHandler().sendDialogues(584, npcType); + } else { + c.getDialogueHandler().sendStatement( + "You need 30 coins to travel on this ship."); + } + break; + + /** + * Start of Quests + */ + + case 557: + if (c.ptjob == 0) { + c.getDialogueHandler().sendDialogues(37, npcType); + } else if (c.ptjob == 1) { + c.getDialogueHandler().sendDialogues(47, npcType); + } else if (c.ptjob == 2) { + c.getDialogueHandler().sendDialogues(1000, npcType); + } + break; + + case 375: + if (c.pirateTreasure == 0) { + c.getDialogueHandler().sendDialogues(554, npcType); + } else if (c.pirateTreasure == 1) { + c.getDialogueHandler().sendStatement( + "Talk to lucas and help him transport the bannanas."); + } else if (c.pirateTreasure == 2) { + c.getDialogueHandler().sendDialogues(569, npcType); + } else if (c.pirateTreasure == 3) { + c.getDialogueHandler().sendDialogues(580, npcType); + } else { + c.getActionSender().sendMessage( + "Arr! Thanks for me helping me."); + } + break; + + case 307: + if (c.witchspot == 0) { + c.getDialogueHandler().sendDialogues(532, npcType); + } else if (c.witchspot == 1) { + c.getDialogueHandler().sendDialogues(546, npcType); + } else if (c.witchspot == 2) { + c.getDialogueHandler().sendDialogues(548, npcType); + } else if (c.witchspot == 3) { + c.getDialogueHandler().sendNpcChat1( + "Welcome back, thank you again for helping me.", + c.talkingNpc, "Hetty"); + } + break; + + case 755:// morgan + if (c.vampSlayer == 3) { + c.getDialogueHandler().sendDialogues(531, npcType); + } else if (c.vampSlayer == 4) { + c.getDialogueHandler().sendDialogues(529, npcType); + } else if (c.vampSlayer == 0) { + c.getDialogueHandler().sendDialogues(476, npcType); + } + break; + + case 743:// ned + if (c.vampSlayer == 0) { + c.getDialogueHandler().sendDialogues(211, npcType); + } else if (c.vampSlayer == 1) { + c.getDialogueHandler().sendStatement("I should go find harlow."); + } else if (c.vampSlayer > 1) { + c.getDialogueHandler().sendDialogues(1337, npcType); + } + break; + + case 756:// harlow + if (c.vampSlayer == 1) { + c.getDialogueHandler().sendDialogues(510, npcType); + } else if (c.vampSlayer == 3) { + c.getDialogueHandler().sendDialogues(531, npcType); + } else { + c.getDialogueHandler().sendStatement("I'm not on this step yet."); + } + break; + + case 456: + if (c.restGhost == 0) { + c.getDialogueHandler().sendDialogues(338, 456); + } + break; + + case 457: + if (c.restGhost == 2) { + c.getDialogueHandler().sendDialogues(371, npcType); + } + break; + + case 458: + if (c.restGhost == 1) { + c.getDialogueHandler().sendDialogues(352, npcType); + } + break; + + case 759: + if (c.getItemAssistant().playerHasItem(1927, 1) && c.gertCat == 2) { + c.getDialogueHandler().sendDialogues(319, npcType); + c.getItemAssistant().deleteItem2(1927, 1); + c.getItemAssistant().addItem(1925, 1); + c.gertCat = 3; + } else if (c.getItemAssistant().playerHasItem(1552, 1) + && c.gertCat == 3) { + c.getDialogueHandler().sendDialogues(323, npcType); + c.getItemAssistant().deleteItem2(1552, 1); + c.gertCat = 4; + } else if (c.gertCat == 4) { + c.getDialogueHandler().sendStatement("Hiss!"); + c.getDialogueHandler().sendDialogues(325, npcType); + c.gertCat = 5; + } else if (c.getItemAssistant().playerHasItem(1554, 1) + && c.gertCat == 6) { + c.getItemAssistant().deleteItem2(1554, 1); + c.getDialogueHandler().sendDialogues(326, npcType); + c.gertCat = 6; + } else if (c.gertCat == 2) { + c.getActionSender().sendMessage("Hiss!"); + c.getDialogueHandler().sendStatement("Fluffs hisses but clearly wants something - maybe she is thirsty?"); + } + break; + + case 780: + if (c.playerLevel[10] < 4) { + c.getDialogueHandler().sendStatement( + "You don't have the requirements to do this quest."); + return; + } + if (c.gertCat == 0) { + c.getDialogueHandler().sendDialogues(269, npcType); + } else if (c.gertCat == 1) { + c.getDialogueHandler().sendDialogues(276, npcType); + } else if (c.gertCat == 6) { + c.getDialogueHandler().sendDialogues(328, npcType); + } else { + c.getDialogueHandler() + .sendStatement("She has nothing to say to you."); + } + break; + + case 783: + if (c.gertCat == 1) { + c.getDialogueHandler().sendDialogues(286, npcType); + } else if (c.gertCat == 2) { + c.getDialogueHandler().sendDialogues(314, npcType); + } + break; + + case 639: + if (c.romeojuliet == 0) { + c.getDialogueHandler().sendDialogues(389, npcType); + } else if (c.romeojuliet == 1) { + c.getDialogueHandler().sendDialogues(408, npcType); + } else if (c.romeojuliet == 3) { + c.getDialogueHandler().sendDialogues(415, npcType); + } else if (c.romeojuliet == 4) { + c.getDialogueHandler().sendDialogues(424, npcType); + } else if (c.romeojuliet == 5) { + c.getDialogueHandler().sendDialogues(431, npcType); + } else if (c.romeojuliet == 6) { + c.getDialogueHandler().sendDialogues(443, npcType); + } else if (c.romeojuliet == 8) { + c.getDialogueHandler().sendDialogues(469, npcType); + } else if (c.romeojuliet == 9) { + c.getActionSender().sendMessage("Thanks for helping me!"); + } + if (c.romeojuliet == 2 + && c.getItemAssistant().playerHasItem(755, 1)) { + c.getDialogueHandler().sendDialogues(415, npcType); + } + if (c.romeojuliet == 2 + && !c.getItemAssistant().playerHasItem(755, 1)) { + c.getDialogueHandler().sendDialogues(421, npcType); + } + break; + + case 276: + if (c.romeojuliet == 5) { + c.getDialogueHandler().sendDialogues(432, npcType); + } + if (c.romeojuliet == 6 + && c.getItemAssistant().playerHasItem(300, 1) + && c.getItemAssistant().playerHasItem(227, 1) + && c.getItemAssistant().playerHasItem(526, 1)) { + c.getDialogueHandler().sendDialogues(448, npcType); + } else { + if (c.romeojuliet == 6) { + c.getDialogueHandler().sendDialogues(439, npcType); + } + } + break; + + case 637: + if (c.romeojuliet == 0) { + c.getDialogueHandler().sendDialogues(409, npcType); + } else if (c.romeojuliet == 1) { + c.getDialogueHandler().sendDialogues(410, npcType); + } else if (c.romeojuliet == 2) { + c.getDialogueHandler().sendDialogues(414, npcType); + } else if (c.romeojuliet == 7) { + c.getDialogueHandler().sendDialogues(457, npcType); + } else if (c.romeojuliet == 8) { + c.getDialogueHandler().sendDialogues(468, npcType); + } + break; + + case 741: + c.getDialogueHandler().sendDialogues(190, npcType); + break; + + case 553: + if (c.runeMist == 2) { + c.getDialogueHandler().sendDialogues(229, npcType); + } else if (c.runeMist == 3) { + c.getDialogueHandler().sendDialogues(237, npcType); + } + break; + + case 300: + if (c.runeMist == 1) { + c.getDialogueHandler().sendDialogues(201, npcType); + } else if (c.runeMist == 2) { + c.getDialogueHandler().sendDialogues(213, npcType); + } else if (c.runeMist == 3) { + c.getDialogueHandler().sendDialogues(238, npcType); + } else if (c.runeMist > 3 || c.runeMist < 1) { + c.getActionSender().sendMessage( + "He has nothing to say to you."); + } + break; + + case 284: + if (c.playerLevel[14] < 14) { + c.getDialogueHandler().sendStatement( + "You don't have the requirements to do this quest."); + return; + } + if (c.doricQuest == 0) { + c.getDialogueHandler().sendDialogues(89, npcType); + } else if (c.doricQuest == 1) { + c.getDialogueHandler().sendDialogues(84, npcType); + } else if (c.doricQuest == 2) { + c.getDialogueHandler().sendDialogues(86, npcType); + } else if (c.doricQuest == 3) { + c.getDialogueHandler().sendDialogues(100, npcType); + } + break; + + case 706: + if (c.impsC == 0) { + c.getDialogueHandler().sendDialogues(145, npcType); + } else if (c.impsC == 1) { + c.getDialogueHandler().sendDialogues(156, npcType); + } + if (c.impsC == 1 && c.getItemAssistant().playerHasItem(1470, 1) + && c.getItemAssistant().playerHasItem(1472, 1) + && c.getItemAssistant().playerHasItem(1474, 1) + && c.getItemAssistant().playerHasItem(1476, 1)) { + c.getDialogueHandler().sendDialogues(158, npcType); + } else if (c.impsC == 1) { + c.getDialogueHandler().sendDialogues(157, npcType); + } + break; + + case 278: + if (c.cookAss == 0) { + c.getDialogueHandler().sendDialogues(50, npcType); + } else if (c.cookAss == 1) { + c.getDialogueHandler().sendDialogues(67, npcType); + } else if (c.cookAss == 2) { + c.getDialogueHandler().sendDialogues(69, npcType); + } else if (c.cookAss == 3) { + c.getDialogueHandler().sendDialogues(76, npcType); + } + break; + + case 758: + if (c.sheepShear == 0) { + c.getDialogueHandler().sendDialogues(164, npcType); + } else if (c.sheepShear == 1) { + c.getDialogueHandler().sendDialogues(185, 1); + } else { + c.getActionSender().sendMessage( + "He has nothing to say to you."); + } + break; + + case 379: + if (c.bananas == 0 || c.luthas == false) { + c.getDialogueHandler().sendDialogues(8, npcType); + } else if (c.bananas > 0) { + c.getDialogueHandler().sendDialogues(4, npcType); + } else { + c.getActionSender() + .sendMessage( + "You may now talk to Luthas your bananna task has been reset."); + c.luthas = false; + c.bananas = 0; + } + break; + + /** + * End of Quests + */ + + case 2294: + c.getDialogueHandler().sendDialogues(24, npcType); + break; + + case 2296: + c.getDialogueHandler().sendDialogues(26, npcType); + break; + + case 500: + c.getDialogueHandler().sendDialogues(21, npcType); + break; + + case 659: + c.getDialogueHandler().sendDialogues(18, npcType); + break; + + case 2244: + c.getDialogueHandler().sendDialogues(14, npcType); + break; + + case 641: + c.getDialogueHandler().sendDialogues(11, npcType); + break; + + case 2458: + c.getDialogueHandler().sendDialogues(2, npcType); + break; + + case 731: + c.getDialogueHandler().sendDialogues(19, npcType); + break; + + case 732: + c.getDialogueHandler().sendDialogues(3150, npcType); + break; + + /** + * Bankers + */ + case 953: + case 166: + case 1702: + case 495: + case 496: + case 497: + case 498: + case 499: + case 567: + case 1036: + case 1360: + case 2163: + case 2164: + case 2354: + case 2355: + case 2568: + case 2569: + case 2570: + case 2271: + case 494: + case 2619: + c.getDialogueHandler().sendDialogues(1013, npcType); + break; + + case 1152: + c.getDialogueHandler().sendDialogues(16, npcType); + break; + + case 905: + c.getDialogueHandler().sendDialogues(5, npcType); + break; + + case 460: + c.getDialogueHandler().sendDialogues(3, npcType); + break; + + case 462: + c.getDialogueHandler().sendDialogues(3149, npcType); + break; + + case 658: + Sailing.startTravel(c, 2); + break; + + case 2437: + case 2438: + if (!c.getItemAssistant().playerHasItem(995, 1000)) { + c.getDialogueHandler().sendStatement("You need 1000 coins to go here!"); + c.nextChat = 0; + return; + } + if (c.absX > 2619 && c.absX < 2622 && c.absY > 3680 && c.absY < 3689 && c.getItemAssistant().playerHasItem(995, 1000)) { + //Sailing.startTravel(c, 18); + c.getPlayerAssistant().startTeleport(2551, 3759, 0, "modern"); + c.getItemAssistant().deleteItem2(995, 1000); + c.getDialogueHandler().sendStatement("You arrive safely."); + c.nextChat = 0; + } else { + if (c.getItemAssistant().playerHasItem(995, 1000)) { + //Sailing.startTravel(c, 17); + c.getPlayerAssistant().startTeleport(2620, 3686, 0, "modern"); + c.getItemAssistant().deleteItem2(995, 1000); + c.getDialogueHandler().sendStatement("You arrive safely."); + c.nextChat = 0; + } + } + break; + + case 381: + if (c.absY > 3230 && c.absY < 3236) { + Sailing.startTravel(c, 8); + } else { + Sailing.startTravel(c, 7); + } + break; + + case 3506: + case 3507: + case 761: + case 760: + case 762: + case 763: + case 764: + case 765: + case 766: + case 767: + case 768: + case 769: + case 770: + case 771: + case 772: + case 773: + case 3505: + c.getSummon().pickUpClean(c, c.summonId); + c.hasNpc = false; + c.summonId = 0; + break; + + case 804: + case 1041: + Tanning.sendTanningInterface(c); + break; + + case 657: + Sailing.startTravel(c, 1); + break; + + case 8689: + if (System.currentTimeMillis() - c.buryDelay > 1500) { + if (c.getItemAssistant().playerHasItem(1925, 1)) { + c.turnPlayerTo(c.objectX, c.objectY); + c.startAnimation(2292); + c.getItemAssistant().addItem(1927, 1); + c.getItemAssistant().deleteItem2(1925, 1); + c.buryDelay = System.currentTimeMillis(); + } else { + c.getActionSender().sendMessage( + "You need a bucket to milk a cow!"); + } + } + break; + + case 3789: + c.getActionSender().sendMessage( + new StringBuilder().append("You currently have ") + .append(c.pcPoints).append(" pest control points.") + .toString()); + break; + + /* Shops */ + + /* + * case 588: c.getShops().openShop(2); break; case 550: + * c.getShops().openShop(3); break; case 575: c.getShops().openShop(4); + * break; case 2356: c.getShops().openShop(5); break; case 3796: + * c.getShops().openShop(6); break; case 1860: c.getShops().openShop(7); + * break; case 559: c.getShops().openShop(9); break; case 562: + * c.getShops().openShop(10); break; case 581: + * c.getShops().openShop(11); break; case 548: + * c.getShops().openShop(12); break; case 554: + * c.getShops().openShop(13); break; case 601: + * c.getShops().openShop(14); break; case 1301: + * c.getShops().openShop(15); break; case 1039: + * c.getShops().openShop(16); break; case 2353: + * c.getShops().openShop(17); break; case 3166: + * c.getShops().openShop(18); break; case 2161: + * c.getShops().openShop(19); break; case 2162: + * c.getShops().openShop(20); break; case 600: + * c.getShops().openShop(21); break; case 603: + * c.getShops().openShop(22); break; case 593: + * c.getShops().openShop(23); break; case 545: + * c.getShops().openShop(24); break; case 585: + * c.getShops().openShop(25); break; case 2305: + * c.getShops().openShop(26); break; case 2307: + * c.getShops().openShop(27); break; case 2304: + * c.getShops().openShop(28); break; case 2306: + * c.getShops().openShop(29); break; case 517: + * c.getShops().openShop(30); break; case 558: + * c.getShops().openShop(31); break; case 576: + * c.getShops().openShop(32); break; case 1369: + * c.getShops().openShop(33); break; case 1038: + * c.getShops().openShop(35); break; case 1433: + * c.getShops().openShop(36); break; case 584: + * c.getShops().openShop(37); break; case 540: + * c.getShops().openShop(38); break; case 2157: + * c.getShops().openShop(39); break; case 538: + * c.getShops().openShop(40); break; case 1303: + * c.getShops().openShop(41); break; case 578: + * c.getShops().openShop(42); break; case 587: + * c.getShops().openShop(43); break; case 1398: + * c.getShops().openShop(44); break; case 556: + * c.getShops().openShop(45); break; case 1865: + * c.getShops().openShop(46); break; case 543: + * c.getShops().openShop(47); break; case 2198: + * c.getShops().openShop(48); break; case 580: + * c.getShops().openShop(49); break; case 1862: + * c.getShops().openShop(50); break; case 583: + * c.getShops().openShop(51); break; case 553: + * c.getShops().openShop(52); break; case 461: + * c.getShops().openShop(53); break; case 903: + * c.getShops().openShop(54); break; case 1435: + * c.getShops().openShop(56); break; case 3800: + * c.getShops().openShop(57); break; case 2623: + * c.getShops().openShop(58); break; case 594: + * c.getShops().openShop(59); break; case 579: + * c.getShops().openShop(60); break; case 2160: + * c.getShops().openShop(61); break; case 2191: + * c.getShops().openShop(61); break; case 589: + * c.getShops().openShop(62); break; case 549: + * c.getShops().openShop(63); break; case 542: + * c.getShops().openShop(64); break; case 3038: + * c.getShops().openShop(65); break; case 544: + * c.getShops().openShop(66); break; case 541: + * c.getShops().openShop(67); break; case 1434: + * c.getShops().openShop(68); break; case 577: + * c.getShops().openShop(69); break; case 539: + * c.getShops().openShop(70); break; case 1980: + * c.getShops().openShop(71); break; case 546: + * c.getShops().openShop(72); break; case 382: + * c.getShops().openShop(73); break; case 3541: + * c.getShops().openShop(74); break; case 520: + * c.getShops().openShop(75); break; case 1436: + * c.getShops().openShop(76); break; case 590: + * c.getShops().openShop(77); break; case 971: + * c.getShops().openShop(78); break; case 1917: + * c.getShops().openShop(79); break; case 1040: + * c.getShops().openShop(80); break; case 563: + * c.getShops().openShop(81); break; case 522: + * c.getShops().openShop(82); break; case 524: + * c.getShops().openShop(83); break; case 526: + * c.getShops().openShop(84); break; case 2154: + * c.getShops().openShop(85); break; case 1334: + * c.getShops().openShop(86); break; case 2552: + * c.getShops().openShop(87); break; case 528: + * c.getShops().openShop(88); break; case 1254: + * c.getShops().openShop(89); break; case 2086: + * c.getShops().openShop(90); break; case 3824: + * c.getShops().openShop(91); break; case 1866: + * c.getShops().openShop(92); break; case 1699: + * c.getShops().openShop(93); break; case 1282: + * c.getShops().openShop(94); break; case 530: + * c.getShops().openShop(95); break; case 516: + * c.getShops().openShop(96); break; case 560: + * c.getShops().openShop(97); break; case 471: + * c.getShops().openShop(98); break; case 1208: + * c.getShops().openShop(99); break; case 532: + * c.getShops().openShop(100); break; case 555: + * c.getShops().openShop(101); break; case 534: + * c.getShops().openShop(102); break; case 551: + * c.getShops().openShop(104); break; case 586: + * c.getShops().openShop(105); break; case 564: + * c.getShops().openShop(106); break; case 747: + * c.getShops().openShop(107); break; case 573: + * c.getShops().openShop(108); break; case 1316: + * c.getShops().openShop(108); break; case 1787: + * c.getShops().openShop(110); break; case 694: + * c.getShops().openShop(111); break; case 1526: + * c.getShops().openShop(112); break; case 568: + * c.getShops().openShop(113); break; case 1079: + * c.getShops().openShop(114); break; + */ + + } + } + + public void secondClickNpc(int npcType) { + String type = c.playerMagicBook == 0 ? "modern" : "ancient"; + c.clickNpcType = 0; + c.rememberNpcIndex = c.npcClickIndex; + c.npcClickIndex = 0; + Shops.openShop(c, npcType); + if (Pickpocket.isNPC(c, npcType)) { + Pickpocket.attemptPickpocket(c, npcType); + return; + } + if (Fishing.fishingNPC(c, npcType)) { + Fishing.fishingNPC(c, 2, npcType); + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't click any npcs, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (npcType >= 761 && npcType <= 773 || npcType > 3504 + && npcType < 3508 && npcType != 767) { + c.getDialogueHandler().sendDialogues(908, npcType); + } + + switch (npcType) { + + case 209: + c.getShopAssistant().openShop(144); + break; + + + case 2437: + case 2438: + if (!c.getItemAssistant().playerHasItem(995, 1000)) { + c.getDialogueHandler().sendStatement("You need 1000 coins to go here!"); + return; + } + if (c.absX > 2619 && c.absX < 2622 && c.absY > 3680 && c.absY < 3689 && c.getItemAssistant().playerHasItem(995, 1000)) { + //Sailing.startTravel(c, 18); + c.getPlayerAssistant().startTeleport(2551, 3759, 0, "modern"); + c.getItemAssistant().deleteItem2(995, 1000); + c.getDialogueHandler().sendStatement("You arrive safely."); + c.nextChat = 0; + } else { + if (c.getItemAssistant().playerHasItem(995, 1000)) { + //Sailing.startTravel(c, 17); + c.getPlayerAssistant().startTeleport(2620, 3686, 0, "modern"); + c.getItemAssistant().deleteItem2(995, 1000); + c.getDialogueHandler().sendStatement("You arrive safely."); + c.nextChat = 0; + } + } + break; + + case 537: + case 536: + if (c.questPoints >= QuestAssistant.MAXIMUM_QUESTPOINTS) { + c.getShopAssistant().openShop(npcType); + } else { + c.getActionSender().sendMessage( + "You need 19 quest points to open this shop."); + } + break; + + case 300: + if (c.runeMist < 4) { + c.getDialogueHandler().sendStatement( + "You need to beat rune mysteries first to do this."); + c.nextChat = 0; + return; + } + c.getPlayerAssistant().startTeleport(2911, 4832, 0, type); + break; + + case 557: + c.getShopAssistant().openShop(34); + break; + + case 804: + case 1041: + Tanning.sendTanningInterface(c); + break; + + case 2270: + if (c.playerLevel[c.playerThieving] > 98) { + c.getShopAssistant().openShop(118); + } else if (c.playerLevel[c.playerThieving] > 49 + && c.playerLevel[c.playerAgility] > 49) { + c.getShopAssistant().openShop(118); + } else { + c.getActionSender().sendMessage( + "You don't have the required skills to open this shop"); + } + break; + + case 1042: + if (c.getItemAssistant().playerHasItem(995, 5)) { + c.getItemAssistant().addItem(2955, 1); + c.getItemAssistant().deleteItem2(995, 5); + } else { + c.getDialogueHandler().sendNpcChat1( + "You need 5 coins to buy a moonlight mead.", + c.talkingNpc, "Roavar"); + c.nextChat = 0; + } + break; + + case 844: + case 462: + if (c.runeMist < 4) { + c.getDialogueHandler().sendStatement( + "You need to beat rune mysteries first to do this."); + c.nextChat = 0; + return; + } + c.getPlayerAssistant().startTeleport(2911, 4832, 0, type); + break; + + case 519: + c.getShopAssistant().openShop(8); + break; + + case 1595: + c.getDialogueHandler().sendDialogues(1053, npcType); + break; + + /** + * Bankers + */ + case 953: + case 166: + case 1702: + case 495: + case 496: + case 497: + case 498: + case 499: + case 567: + case 1036: + case 1360: + case 2163: + case 2164: + case 2354: + case 2355: + case 2568: + case 2569: + case 2570: + case 2271: + case 494: + case 2619: + c.getPlayerAssistant().openUpBank(); + break; + } + } + + public void thirdClickNpc(int npcType) { + c.clickNpcType = 0; + c.rememberNpcIndex = c.npcClickIndex; + c.npcClickIndex = 0; + if (Pickpocket.isNPC(c, npcType)) { + Pickpocket.attemptPickpocket(c, npcType); + return; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't click any npcs, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (npcType >= 761 && npcType <= 773 && npcType != 767) { + if (NpcHandler.npcs[c.rememberNpcIndex].spawnedBy == c.playerId) + c.getDialogueHandler().sendDialogues(910, npcType); + else + c.getActionSender().sendMessage("This isn't your cat."); + } + switch (npcType) { + + /** + * Banker + */ + case 3824: + c.getPlayerAssistant().openUpBank(); + break; + + case 958: + c.getShopAssistant().openShop(143); + break; + + case 1526: + c.getShopAssistant().openShop(ShopAssistant.CASTLE_SHOP); + break; + + case 70: + case 1596: + case 1597: + case 1598: + case 1599: + c.getShopAssistant().openShop(109); + break; + + case 836: + if (c.getItemAssistant().playerHasItem(995, 5)) { + c.getActionSender().sendMessage( + "You buy a shantay pass quickly."); + c.getItemAssistant().deleteItem2(995, 5); + c.getItemAssistant().addItem(1854, 1); + } else { + c.getActionSender().sendMessage( + "You need 5 coins to buy a pass."); + } + break; + case 553: + if (c.runeMist < 4) { + c.getDialogueHandler().sendStatement( + "You need to beat rune mysteries first to do this."); + return; + } + String type = c.playerMagicBook == 0 ? "modern" : "ancient"; + c.getPlayerAssistant().startTeleport(2911, 4832, 0, type); + break; + default: + if (c.playerRights == 3) { + Misc.println("Third Click NPC : " + npcType); + } + break; + + } + } + +} diff --git a/2006Redone Server/src/redone/game/npcs/NpcData.java b/2006Redone Server/src/redone/game/npcs/NpcData.java new file mode 100644 index 00000000..c1c36203 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/NpcData.java @@ -0,0 +1,471 @@ +package redone.game.npcs; + +import java.util.ArrayList; + +import redone.game.content.minigames.FightCaves; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.world.clip.Region; + +public class NpcData { + + public static final int[] npcsOnlyMage = { 907, 908, 909, 910, 911, 912, + 913, 914 };// done + public static final int[][] transformNpc = { { 3223, 6006 }, + { 3224, 6007 }, { 3225, 6008 }, { 3226, 6009 } };// done + public static final int[] npcsCantKillYou = { 41, 951, 1017, 1401, 1402, + 1692, 2313, 2314, 2315 };// done + public static final int[] npcCantAttack = { 1532, 1533, 1534, 1535 }; + public static final int[] npcDontGiveXp = { 2459, 2460, 2461, 2462 }; + + public static boolean cantKillYou(int npcType) { + for (int n : npcsCantKillYou) { + if (n == npcType) { + return true; + } + } + return false; + } + + public static boolean onlyMage(int npcType) { + for (int element : npcsOnlyMage) { + if (npcType == element) { + return true; + } + } + return false; + } + + public static boolean cantAttack(int npcType) { + for (int n : npcCantAttack) { + if (n == npcType) { + return true; + } + } + return false; + } + + public static boolean dontGiveXp(int npcType) { + for (int n : npcDontGiveXp) { + if (n == npcType) { + return true; + } + } + return false; + } + + /* + * public static boolean isAggressive(int i) { if + * (NPCHandler.npcs[i].aggressive && !onlyMage(NPCHandler.npcs[i].npcType)) + * { return true; } if (NPCHandler.npcs[i].inWild() && + * NPCHandler.npcs[i].MaxHP > 0 && !onlyMage(NPCHandler.npcs[i].npcType)) { + * return true; } return false; } + */ + + public static int getNpcKillerId(int npcId) { + int oldDamage = 0; + int killerId = 0; + for (int p = 1; p < PlayerHandler.players.length; p++) { + if (PlayerHandler.players[p] != null) { + if (PlayerHandler.players[p].lastNpcAttacked == npcId) { + if (PlayerHandler.players[p].totalDamageDealt > oldDamage) { + oldDamage = PlayerHandler.players[p].totalDamageDealt; + killerId = p; + } + PlayerHandler.players[p].totalDamageDealt = 0; + } + } + } + return killerId; + } + + public static int getCloseRandomPlayer(int i) { + ArrayList players = new ArrayList(); + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + if (NpcHandler.goodDistance( + PlayerHandler.players[j].absX, + PlayerHandler.players[j].absY, + NpcHandler.npcs[i].absX, + NpcHandler.npcs[i].absY, + 2 + NpcHandler.distanceRequired(i) + + NpcHandler.followDistance(i)) + || FightCaves.isFightCaveNpc(i)) { + if (PlayerHandler.players[j].underAttackBy <= 0 + && PlayerHandler.players[j].underAttackBy2 <= 0 + || PlayerHandler.players[j].inMulti()) { + if (PlayerHandler.players[j].heightLevel == NpcHandler.npcs[i].heightLevel) { + players.add(j); + } + } + } + } + } + if (players.size() > 0) { + return players.get(Misc.random(players.size() - 1)); + } else { + return 0; + } + } + + public static void startAnimation(int animId, int i) { + NpcHandler.npcs[i].animNumber = animId; + NpcHandler.npcs[i].animUpdateRequired = true; + NpcHandler.npcs[i].updateRequired = true; + } + + public static void handleClipping(int i) { + Npc npc = NpcHandler.npcs[i]; + if (npc.moveX == 1 && npc.moveY == 1) { + if ((Region + .getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) { + npc.moveY = 1; + } else { + npc.moveX = 1; + } + } + } else if (npc.moveX == -1 && npc.moveY == -1) { + if ((Region + .getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) { + npc.moveY = -1; + } else { + npc.moveX = -1; + } + } + } else if (npc.moveX == 1 && npc.moveY == -1) { + if ((Region + .getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) { + npc.moveY = -1; + } else { + npc.moveX = 1; + } + } + } else if (npc.moveX == -1 && npc.moveY == 1) { + if ((Region + .getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) { + npc.moveY = 1; + } else { + npc.moveX = -1; + } + } + } // Checking Diagonal movement. + + if (npc.moveY == -1) { + if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0) { + npc.moveY = 0; + } + } else if (npc.moveY == 1) { + if ((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0) { + npc.moveY = 0; + } + } // Checking Y movement. + if (npc.moveX == 1) { + if ((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) { + npc.moveX = 0; + } + } else if (npc.moveX == -1) { + if ((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0) { + npc.moveX = 0; + } + } // Checking X movement. + } + + + /** + * Attack delays + **/ + public static int getNpcDelay(int i) { + switch (NpcHandler.npcs[i].npcType) { + case 2025: + case 2028: + return 7; + + case 2745: + return 8; + + case 2558: + case 2559: + case 2560: + case 2561: + case 2550: + return 6; + // saradomin gw boss + case 2562: + return 2; + + default: + return 5; + } + } + + /** + * Hit delays + **/ + public static int getHitDelay(int i) { + switch (NpcHandler.npcs[i].npcType) { + case 2881: + case 2882: + case 3200: + case 2892: + case 2894: + return 3; + + case 2743: + case 2631: + case 2558: + case 2559: + case 2560: + return 3; + + case 2745: + if (NpcHandler.npcs[i].attackType == 1 + || NpcHandler.npcs[i].attackType == 2) { + return 5; + } else { + return 2; + } + + case 2025: + return 4; + case 2028: + return 3; + + default: + return 2; + } + } + + /** + * Npc respawn time + **/ + public static int getRespawnTime(int i) { + switch (NpcHandler.npcs[i].npcType) { + case 2881: + case 2882: + case 2883: + case 2558: + case 2559: + case 2560: + case 2561: + case 2562: + case 2563: + case 2564: + case 2550: + case 2551: + case 2552: + case 2553: + return 100; + case 3777: + case 3778: + case 3779: + case 3780: + return 500; + case 1532: + case 1534: + return -1; + default: + return 25; + } + } + + public static int distanceRequired(int i) { + int distanceNeeded = 1; + if (NpcHandler.npcs[i].attackType == 1) { + return distanceNeeded += 7; + } else if (NpcHandler.npcs[i].attackType == 2) { + return distanceNeeded += 9; + } else if (NpcHandler.npcs[i].attackType > 2) { + return distanceNeeded += 4; + } + switch (NpcHandler.npcs[i].npcType) { + case 2562: + return distanceNeeded += 1; + case 2881:// dag kings + case 2882: + case 3200:// chaos ele + return distanceNeeded += 7; + case 2552: + case 2553: + case 2556: + case 2557: + case 2558: + case 2559: + case 2560: + case 2564: + case 2565: + return distanceNeeded += 8; + // things around dags + case 2892: + case 2894: + return distanceNeeded += 9; + case 907 : // Kolodian + case 908 : + case 909 : + case 910 : + case 911 : + case 912 : // Zammy battlemage + case 913 : // Sara battlemage + case 914 : // Guthix battlemage + case 2591 : // TzHaar-Mej (Tzhaar mage guy) + case 2743 : // Ket-Zek (Tzhaar mage guy) + case 2745 : // TzTok-Jad + case 1158 : // Kalphite queen form 1 + case 1160 : // Kalphite queen form 2 + case 2025 : // Ahrim + return distanceNeeded += 9; + case 2028 : // Karil + case 2631 : // Tok-Xil (Tzhaar ranging guy) + case 1183 : // Elf ranger + return distanceNeeded += 7; + case 941 : // Green drag + case 50 : // Kbd + return distanceNeeded += 5; + } + return distanceNeeded; + } + + + public static boolean goodDistanceNpc(int i, int x2, int y2, int distance) { + for (int x = NpcHandler.npcs[i].getX(); x <= NpcHandler.npcs[i].getX() + NpcHandler.npcs[i].size; x++) { + for (int y = NpcHandler.npcs[i].getY(); y <= NpcHandler.npcs[i].getY() + NpcHandler.npcs[i].size; y++) { + if (Misc.goodDistance(x, y, x2, y2, distance)) { + return true; + } + } + } + return false; + } + + + public static boolean checkClip(Npc n) { + int x2 = 0, y2 = 0, x3 = 0, y3 = 0; + if (n.killerId > 0) { + if (PlayerHandler.players[n.killerId] == null) { + return false; + } + x2 = PlayerHandler.players[n.killerId].getX(); + y2 = PlayerHandler.players[n.killerId].getY(); + } else if (n.masterId > 0) { + if (PlayerHandler.players[n.masterId] == null) { + return false; + } + x2 = PlayerHandler.players[n.masterId].getX(); + y2 = PlayerHandler.players[n.masterId].getY(); + } else { + return false; + } + int x = n.getX(); // -1 + int y = n.getY(); // 1 + final int dis = distanceRequired(n.npcId) + n.size; + int dis2 = 0; + final boolean melee = distanceRequired(n.npcId) < 2; + if (n.size < 1 && x != x2 && y != y2) { + return false; + } + // Algorithm starts here + int w = x2 - x; + int h = y2 - y; + int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0; + if (w < 0) { + dx1 = -1; + } else if (w > 0) { + dx1 = 1; + } + if (h < 0) { + dy1 = -1; + } else if (h > 0) { + dy1 = 1; + } + if (w < 0) { + dx2 = -1; + } else if (w > 0) { + dx2 = 1; + } + int longest = Math.abs(w); + int shortest = Math.abs(h); + if (!(longest > shortest)) { + longest = Math.abs(h); + shortest = Math.abs(w); + if (h < 0) { + dy2 = -1; + } else if (h > 0) { + dy2 = 1; + } + dx2 = 0; + } + int numerator = longest >> 1; + boolean firstCheck = false; + for (int i = 0; i <= longest; i++) { + if (dis2 > dis) { + return false; + } + dis2++; + x3 = x; + y3 = y; + numerator += shortest; + if (!(numerator < longest)) { + numerator -= longest; + x += dx1; + y += dy1; + } else { + x += dx2; + y += dy2; + } + if (!firstCheck) { + if (melee) { + if (!Region.getClipping(x, y, n.heightLevel, x - x3, y - y3)) { + return false; + } + } + if (x == x2 && y == y2) { + break; + } + firstCheck = true; + } + if (melee) { + if (!Region.getClipping(x, y, n.heightLevel, x - x3, y - y3)) { + return false; + } + } + if (x == x2 && y == y2) { + return true; + } + } + return true; + } + + public static boolean inNpc(int i, int x2, int y2) { + if (NpcHandler.npcs[i].size < 1) { + if (x2 == NpcHandler.npcs[i].getX() && y2 == NpcHandler.npcs[i].getY()) { + return true; + } + } else { + for (int x = NpcHandler.npcs[i].getX(); x <= NpcHandler.npcs[i].getX() + NpcHandler.npcs[i].size; x++) { + for (int y = NpcHandler.npcs[i].getY(); y <= NpcHandler.npcs[i].getY() + NpcHandler.npcs[i].size; y++) { + if (x2 == x && y2 == y) { + return true; + } + } + } + } + return false; + } + + +} diff --git a/2006Redone Server/src/redone/game/npcs/NpcHandler.java b/2006Redone Server/src/redone/game/npcs/NpcHandler.java new file mode 100644 index 00000000..2d79e896 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/NpcHandler.java @@ -0,0 +1,1397 @@ +package redone.game.npcs; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +import redone.Constants; +import redone.Server; +import redone.game.content.combat.npcs.NpcAggressive; +import redone.game.content.combat.npcs.NpcCombat; +import redone.game.content.combat.npcs.NpcEmotes; +import redone.game.content.minigames.FightCaves; +import redone.game.content.minigames.PestControl; +import redone.game.content.music.sound.CombatSounds; +import redone.game.content.randomevents.FreakyForester; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.randomevents.RiverTroll; +import redone.game.npcs.drops.NPCDropsHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.world.clip.Region; + +// Facetypes: 1-Walk, 2-North, 3-South, 4-East, 5-West + +public class NpcHandler { + + public static int maxNPCs = 5000; + public static int maxListedNPCs = 5000; + public static Npc npcs[] = new Npc[maxNPCs]; + public static NpcList NpcList[] = new NpcList[maxListedNPCs]; + + public NpcHandler() { + for (int i = 0; i < maxNPCs; i++) { + npcs[i] = null; + } + for (int i = 0; i < maxListedNPCs; i++) { + NpcList[i] = null; + } + loadNPCList("./Data/CFG/npc.cfg"); + loadAutoSpawn("./Data/CFG/spawn-config.cfg"); + } + + public static boolean isUndead(int index) { + String name = getNpcListName(npcs[index].npcType); + for(String s : Constants.UNDEAD) + if(s.equalsIgnoreCase(name)) + return true; + return false; + } + + public void spawnNpc3(Client c, int npcType, int x, int y, int heightLevel, + int WalkingType, int HP, int maxHit, int attack, int defence, + boolean attackPlayer, boolean headIcon, boolean summonFollow) { + int slot = -1; + for (int i = 1; i < maxNPCs; i++) { + if (npcs[i] == null) { + slot = i; + break; + } + } + if (slot == -1) { + return; + } + Npc newNPC = new Npc(slot, npcType); + newNPC.absX = x; + newNPC.absY = y; + newNPC.makeX = x; + newNPC.makeY = y; + newNPC.heightLevel = heightLevel; + newNPC.walkingType = WalkingType; + newNPC.HP = HP; + newNPC.MaxHP = HP; + newNPC.maxHit = maxHit; + newNPC.attack = attack; + newNPC.defence = defence; + newNPC.spawnedBy = c.getId(); + newNPC.facePlayer(c.playerId); + if (headIcon) { + c.getActionSender().drawHeadicon(1, slot, 0, 0); + } + if (summonFollow) { + newNPC.summoner = true; + newNPC.summonedBy = c.playerId; + c.summonId = npcType; + c.hasNpc = true; + } + if (attackPlayer) { + newNPC.underAttack = true; + if (c != null) { + newNPC.killerId = c.playerId; + } + } + npcs[slot] = newNPC; + } + + public boolean switchesAttackers(int i) { + switch (npcs[i].npcType) { + case 2551: + case 2552: + case 2553: + case 2559: + case 2560: + case 2561: + case 2563: + case 2564: + case 2565: + case 2892: + case 2894: + return true; + } + return false; + } + + public int getClosePlayer(Client c, int i) { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + if (j == npcs[i].spawnedBy) { + return j; + } + if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || FightCaves.isFightCaveNpc(i)) { + if (PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0 || PlayerHandler.players[j].inMulti()) { + if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) { + return j; + } + } + } + } + } + return 0; + } + + public int npcSize(int i) { + switch (npcs[i].npcType) { + case 2883: + case 2882: + case 2881: + return 3; + } + return 0; + } + + /** + * Summon npc, barrows, etc + **/ + public static void spawnNpc(Client c, int npcType, int x, int y, + int heightLevel, int WalkingType, int HP, int maxHit, int attack, + int defence, boolean attackPlayer, boolean headIcon) { + // first, search for a free slot + int slot = -1; + for (int i = 1; i < maxNPCs; i++) { + if (npcs[i] == null) { + slot = i; + break; + } + } + if (slot == -1) { + // Misc.println("No Free Slot"); + return; // no free slot found + } + Npc newNPC = new Npc(slot, npcType); + newNPC.absX = x; + newNPC.absY = y; + newNPC.makeX = x; + newNPC.makeY = y; + newNPC.heightLevel = heightLevel; + newNPC.walkingType = WalkingType; + newNPC.HP = HP; + newNPC.MaxHP = HP; + newNPC.maxHit = maxHit; + newNPC.attack = attack; + newNPC.defence = defence; + newNPC.spawnedBy = c.getId(); + if (newNPC.npcType == FightCaves.TZTOK_JAD) { + c.setSpecialTarget(newNPC); + } + if (headIcon) { + c.getActionSender().drawHeadicon(1, slot, 0, 0); + } + if (attackPlayer) { + newNPC.underAttack = true; + if (c != null) { + for (int anim = 4277; anim < 4285; anim++) { + if (npcType == anim) { + newNPC.forceChat("I'M ALIVE!"); + } + } + + newNPC.killerId = c.playerId; + } + } + npcs[slot] = newNPC; + } + + public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) { + // first, search for a free slot + int slot = -1; + for (int i = 1; i < maxNPCs; i++) { + if (npcs[i] == null) { + slot = i; + break; + } + } + if (slot == -1) { + // Misc.println("No Free Slot"); + return; // no free slot found + } + Npc newNPC = new Npc(slot, npcType); + newNPC.absX = x; + newNPC.absY = y; + newNPC.makeX = x; + newNPC.makeY = y; + newNPC.heightLevel = heightLevel; + newNPC.walkingType = WalkingType; + newNPC.HP = HP; + newNPC.MaxHP = HP; + newNPC.maxHit = maxHit; + newNPC.attack = attack; + newNPC.defence = defence; + npcs[slot] = newNPC; + } + + private void killedBarrow(int i) { + Client c = (Client)PlayerHandler.players[npcs[i].killedBy]; + if(c != null) { + for(int o = 0; o < c.barrowsNpcs.length; o++){ + if(npcs[i].npcType == c.barrowsNpcs[o][0]) { + c.barrowsNpcs[o][1] = 2; // 2 for dead + c.barrowsKillCount++; + } + } + } + } + + private void killedCrypt(int i) { + Client c = (Client)PlayerHandler.players[npcs[i].killedBy]; + if(c != null) { + for(int o = 0; o < c.barrowCrypt.length; o++){ + if(npcs[i].npcType == c.barrowCrypt[o][0]) { + c.barrowsKillCount++; + c.getPlayerAssistant().sendFrame126(""+c.barrowsKillCount, 4536); + } + } + } + } + + public void newNPC(int npcType, int x, int y, int heightLevel, + int WalkingType, int HP, int maxHit, int attack, int defence) { + // first, search for a free slot + int slot = -1; + for (int i = 1; i < maxNPCs; i++) { + if (npcs[i] == null) { + slot = i; + break; + } + } + + if (slot == -1) { + return; // no free slot found + } + + Npc newNPC = new Npc(slot, npcType); + newNPC.absX = x; + newNPC.absY = y; + newNPC.makeX = x; + newNPC.makeY = y; + newNPC.heightLevel = heightLevel; + newNPC.walkingType = WalkingType; + newNPC.HP = HP; + newNPC.MaxHP = HP; + newNPC.maxHit = maxHit; + newNPC.attack = attack; + newNPC.defence = defence; + npcs[slot] = newNPC; + } + + public void newNPCList(int npcType, String npcName, int combat, int HP) { + // first, search for a free slot + int slot = -1; + for (int i = 0; i < maxListedNPCs; i++) { + if (NpcList[i] == null) { + slot = i; + break; + } + } + + if (slot == -1) { + return; // no free slot found + } + + NpcList newNPCList = new NpcList(npcType); + newNPCList.npcName = npcName; + newNPCList.npcCombat = combat; + newNPCList.npcHealth = HP; + NpcList[slot] = newNPCList; + } + + public String[] voidKnightTalk = { "We must not fail!", + "Take down the portals", "The Void Knights will not fall!", + "Hail the Void Knights!", "We are beating these scum!", + "Don't let these creatures leech my health!!", + "Do not let me die!!!", "Please....help me!", + "For the knights we shall prevail!" }; + + public int getKillerId(int playerId) { + int oldDamage = 0; + int killerId = 0; + for (int i = 1; i < PlayerHandler.players.length; i++) { + if (PlayerHandler.players[i] != null) { + if (PlayerHandler.players[i].killedBy == playerId) { + if (PlayerHandler.players[i] + .withinDistance(PlayerHandler.players[playerId])) { + if (PlayerHandler.players[i].totalPlayerDamageDealt > oldDamage) { + oldDamage = PlayerHandler.players[i].totalPlayerDamageDealt; + killerId = i; + } + } + PlayerHandler.players[i].totalPlayerDamageDealt = 0; + PlayerHandler.players[i].killedBy = 0; + } + } + } + return killerId; + } + + public void process() { + for (Npc i : NpcHandler.npcs) { + if (i == null) { + continue; + } + i.clearUpdateFlags(); + } + + for (int i = 0; i < maxNPCs; i++) { + if (npcs[i] != null) { + + Client slaveOwner = (Client) PlayerHandler.players[npcs[i].summonedBy]; + if (slaveOwner == null && npcs[i].summoner) { + npcs[i].absX = 0; + npcs[i].absY = 0; + } + if (slaveOwner != null + && slaveOwner.hasNpc + && !slaveOwner.goodDistance(npcs[i].getX(), + npcs[i].getY(), slaveOwner.absX, + slaveOwner.absY, 15) && npcs[i].summoner) { + npcs[i].absX = slaveOwner.absX; + npcs[i].absY = slaveOwner.absY - 1; + } + + if (npcs[i].actionTimer > 0) { + npcs[i].actionTimer--; + } + + if (npcs[i].freezeTimer > 0) { + npcs[i].freezeTimer--; + } + + if (npcs[i].hitDelayTimer > 0) { + npcs[i].hitDelayTimer--; + } + + if (npcs[i].hitDelayTimer == 1) { + npcs[i].hitDelayTimer = 0; + NpcCombat.registerNpcHit(i); + } + + if (npcs[i].attackTimer > 0) { + npcs[i].attackTimer--; + } + + if (npcs[i].npcType == 3782 && PestControl.gameStarted) { + if (Misc.random(10) == 4) { + npcs[i].forceChat(voidKnightTalk[Misc + .random3(voidKnightTalk.length)]); + } + } + + if (npcs[i].spawnedBy > 0) { // delete summons npc + if (PlayerHandler.players[npcs[i].spawnedBy] == null + || PlayerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel + || PlayerHandler.players[npcs[i].spawnedBy].respawnTimer > 0 + || !PlayerHandler.players[npcs[i].spawnedBy] + .goodDistance( + npcs[i].getX(), + npcs[i].getY(), + PlayerHandler.players[npcs[i].spawnedBy] + .getX(), + PlayerHandler.players[npcs[i].spawnedBy] + .getY(), 20)) { + + if (npcs[i].npcType == FightCaves.YT_HURKOT) { + Client c = ((Client)PlayerHandler.players[npcs[i].spawnedBy]); + int ranHeal = Misc.random(19); + if (ranHeal == 19) + FightCaves.healJad(c, i); + } + + if (PlayerHandler.players[npcs[i].spawnedBy] != null) { + for (int o = 0; o < PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++) { + if (npcs[i].npcType == PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) { + if (PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1) { + PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] = 0; + } + } + } + } + npcs[i] = null; + } + } + if (npcs[i] == null) { + continue; + } + + /** + * Attacking player + **/ + + if (NpcAggressive.isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) { + Client client = (Client) PlayerHandler.players[NpcData.getCloseRandomPlayer(i)]; + if (client != null && getNpcListCombat(npcs[i].npcType) * 2 > client.combatLevel || npcs[i].npcType == 1265 || npcs[i].npcType == 1267 || npcs[i].npcType == 96 || npcs[i].npcType == 97 || npcs[i].npcType == 141) { + npcs[i].killerId = NpcData.getCloseRandomPlayer(i); + } + } else if (NpcAggressive.isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) { + Client c = (Client) PlayerHandler.players[NpcData.getCloseRandomPlayer(i)]; + if (c != null && getNpcListCombat(npcs[i].npcType) * 2 > c.combatLevel) { + npcs[i].killerId = NpcData.getCloseRandomPlayer(i); + } + } + /* + * Attacking player + */ + + if (System.currentTimeMillis() - npcs[i].lastDamageTaken > 5000) { + npcs[i].underAttackBy = 0; + } + + if ((npcs[i].killerId > 0 || npcs[i].underAttack) + && !npcs[i].walkingHome && retaliates(npcs[i].npcType)) { + if (!npcs[i].isDead) { + int p = npcs[i].killerId; + if (PlayerHandler.players[p] != null) { + Client c = (Client) PlayerHandler.players[p]; + followPlayer(i, c.playerId); + if (npcs[i] == null) { + continue; + } + stepAway(c,i); + if (npcs[i].attackTimer == 0) { + NpcCombat.attackPlayer(c, i); + } + } else { + npcs[i].killerId = 0; + npcs[i].underAttack = false; + npcs[i].facePlayer(0); + } + } + } + + /** + * Random walking and walking home + **/ + if (npcs[i] == null) { + continue; + } + if ((!npcs[i].underAttack || npcs[i].walkingHome) + && npcs[i].randomWalk && !npcs[i].isDead) { + npcs[i].facePlayer(0); + npcs[i].killerId = 0; + if (npcs[i].spawnedBy == 0) { + if (npcs[i].absX > npcs[i].makeX + + Constants.NPC_RANDOM_WALK_DISTANCE + || npcs[i].absX < npcs[i].makeX + - Constants.NPC_RANDOM_WALK_DISTANCE + || npcs[i].absY > npcs[i].makeY + + Constants.NPC_RANDOM_WALK_DISTANCE + || npcs[i].absY < npcs[i].makeY + - Constants.NPC_RANDOM_WALK_DISTANCE) { + npcs[i].walkingHome = true; + } + } + + if (npcs[i].walkingHome && npcs[i].absX == npcs[i].makeX + && npcs[i].absY == npcs[i].makeY) { + npcs[i].walkingHome = false; + } else if (npcs[i].walkingHome) { + npcs[i].moveX = GetMove(npcs[i].absX, npcs[i].makeX); + npcs[i].moveY = GetMove(npcs[i].absY, npcs[i].makeY); + handleClipping(i); + npcs[i].getNextNPCMovement(i); + npcs[i].updateRequired = true; + } + if (npcs[i].walkingType == 1) { + if (Misc.random(3) == 1 && !npcs[i].walkingHome) { + int MoveX = 0; + int MoveY = 0; + int Rnd = Misc.random(9); + if (Rnd == 1) { + MoveX = 1; + MoveY = 1; + } else if (Rnd == 2) { + MoveX = -1; + } else if (Rnd == 3) { + MoveY = -1; + } else if (Rnd == 4) { + MoveX = 1; + } else if (Rnd == 5) { + MoveY = 1; + } else if (Rnd == 6) { + MoveX = -1; + MoveY = -1; + } else if (Rnd == 7) { + MoveX = -1; + MoveY = 1; + } else if (Rnd == 8) { + MoveX = 1; + MoveY = -1; + } + + if (MoveX == 1) { + if (npcs[i].absX + MoveX < npcs[i].makeX + 1) { + npcs[i].moveX = MoveX; + } else { + npcs[i].moveX = 0; + } + } + + if (MoveX == -1) { + if (npcs[i].absX - MoveX > npcs[i].makeX - 1) { + npcs[i].moveX = MoveX; + } else { + npcs[i].moveX = 0; + } + } + + if (MoveY == 1) { + if (npcs[i].absY + MoveY < npcs[i].makeY + 1) { + npcs[i].moveY = MoveY; + } else { + npcs[i].moveY = 0; + } + } + + if (MoveY == -1) { + if (npcs[i].absY - MoveY > npcs[i].makeY - 1) { + npcs[i].moveY = MoveY; + } else { + npcs[i].moveY = 0; + } + } + handleClipping(i); + // NpcData.handleClipping(i); + npcs[i].getNextNPCMovement(i); + npcs[i].updateRequired = true; + } + } + } + + if (npcs[i].walkingType >= 0) { + switch (npcs[i].walkingType) { + + case 5: + npcs[i].turnNpc(npcs[i].absX - 1, npcs[i].absY); + break; + + case 4: + npcs[i].turnNpc(npcs[i].absX + 1, npcs[i].absY); + break; + + case 3: + npcs[i].turnNpc(npcs[i].absX, npcs[i].absY - 1); + break; + + case 2: + npcs[i].turnNpc(npcs[i].absX, npcs[i].absY + 1); + break; + + default: + if (npcs[i].walkingType >= 0) { + npcs[i].turnNpc(npcs[i].absX, npcs[i].absY); + } + break; + } + } + + if (npcs[i].isDead) { + if (npcs[i].actionTimer == 0 && npcs[i].applyDead == false + && npcs[i].needRespawn == false) { + npcs[i].updateRequired = true; + npcs[i].facePlayer(0); + npcs[i].killedBy = NpcData.getNpcKillerId(i); + npcs[i].animNumber = NpcEmotes.getDeadEmote(i); // dead + // emote + Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + if (Constants.combatSounds + && NpcHandler.npcs[i].npcType < 3177 + && NpcHandler.npcs[i].npcType > 3180) { + c.getActionSender() + .sendSound( + CombatSounds + .getNpcDeathSounds(npcs[i].npcType), + 100, 0); + } + } + npcs[i].animUpdateRequired = true; + npcs[i].freezeTimer = 0; + npcs[i].applyDead = true; + killedBarrow(i); + killedCrypt(i); + npcs[i].actionTimer = 4; // delete time + resetPlayersInCombat(i); + } else if (npcs[i].actionTimer == 0 + && npcs[i].applyDead == true + && npcs[i].needRespawn == false) { + npcs[i].needRespawn = true; + npcs[i].actionTimer = NpcData.getRespawnTime(i); // respawn + // time + dropItems(i); // npc drops items! + FightCaves.tzhaarDeathHandler(i); + if (npcs[i].npcType == 2745) { + FightCaves.handleJadDeath(i); + if (PlayerHandler.players[npcs[i].killerId] != null) { + PlayerHandler.players[npcs[i].killerId].spawnedHealers = 0; + PlayerHandler.players[npcs[i].killerId].canHealersRespawn = true; + } + } + if (npcs[i].npcType == FightCaves.YT_HURKOT) { + if (PlayerHandler.players[npcs[i].killerId] != null) { + if (PlayerHandler.players[npcs[i].killerId].spawnedHealers != 0) { + PlayerHandler.players[npcs[i].killerId].spawnedHealers -= 1; + if (PlayerHandler.players[npcs[i].killerId].spawnedHealers <= 0) { + PlayerHandler.players[npcs[i].killerId].spawnedHealers = 0; + } + } + } + } + appendSlayerExperience(i); + resetEvent(i); + Client player = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (player != null) { + if (player.tutorialProgress == 24) { + handleratdeath(i); + } else if (player.tutorialProgress == 25 + && player.ratdied2 == true) { + handleratdeath2(i); + } + } + if (npcs[i].npcType > 3726 && npcs[i].npcType < 3732) { + int damage = 10 + Misc.random(10); + player.playerLevel[player.playerHitpoints] = player.getPlayerAssistant().getLevelForXP(player.playerXP[player.playerHitpoints]) - damage; + player.getPlayerAssistant().refreshSkill(player.playerHitpoints); + player.handleHitMask(damage); + } + if (npcs[i].npcType == 655) { + player.spiritTree = true; + player.getActionSender().sendMessage( + "You have defeated the tree spirit."); + } + if (npcs[i].npcType > 412 && npcs[i].npcType < 419) { + player.golemSpawned = false; + } + if (npcs[i].npcType == 757 && player.vampSlayer == 3) { + player.vampSlayer = 4; + } + if (npcs[i].npcType > 390 && npcs[i].npcType < 397) { + RiverTroll.hasRiverTroll = false; + } + if (npcs[i].npcType > 418 && npcs[i].npcType < 425) { + player.zombieSpawned = false; + } + if (npcs[i].npcType > 424 && npcs[i].npcType < 431) { + player.shadeSpawned = false; + } + if (npcs[i].npcType > 437 && npcs[i].npcType < 444) { + player.treeSpiritSpawned = false; + } + if (npcs[i].npcType > 2462 && npcs[i].npcType < 2469) { + player.chickenSpawned = false; + } + npcs[i].absX = npcs[i].makeX; + npcs[i].absY = npcs[i].makeY; + npcs[i].HP = npcs[i].MaxHP; + npcs[i].animNumber = 0x328; + npcs[i].updateRequired = true; + npcs[i].animUpdateRequired = true; + if (npcs[i].npcType >= 2440 && npcs[i].npcType <= 2446) { + Server.objectManager.removeObject(npcs[i].absX, + npcs[i].absY); + } + } else if (npcs[i].actionTimer == 0 + && npcs[i].needRespawn == true) { + if (npcs[i].spawnedBy > 0) { + npcs[i] = null; + } else { + int old1 = npcs[i].npcType; + int old2 = npcs[i].makeX; + int old3 = npcs[i].makeY; + int old4 = npcs[i].heightLevel; + int old5 = npcs[i].walkingType; + int old6 = npcs[i].MaxHP; + int old7 = npcs[i].maxHit; + int old8 = npcs[i].attack; + int old9 = npcs[i].defence; + + npcs[i] = null; + newNPC(old1, old2, old3, old4, old5, old6, old7, + old8, old9); + } + } + } + } + } + } + + private void handleratdeath(int i) { + final Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "", + "Pass through the gate and talk to the Combat Instructor, he", + "will give you your next task.", "", + "Well done, you've made your first kill!"); + c.getActionSender().chatbox(6179); + c.getActionSender().drawHeadicon(1, 6, 0, 0); // draws + // headicon to + // combat ude + c.tutorialProgress = 25; + } + } + + private void handleratdeath2(int i) { + Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "You have completed the tasks here. To move on, click on the", + "ladder shown. If you need to go over any of what you learnt", + "here, just talk to the Combat Instructor and he'll tell you what", + "he can.", "Moving on"); + c.getActionSender().chatbox(6179); + c.tutorialProgress = 26; + c.getActionSender().createArrow(3111, 9525, c.getH(), 2); // send + // hint + // to + // furnace + } + } + + public boolean getsPulled(Client c, int i) { + switch (npcs[i].npcType) { + case 2550: + if (npcs[i].firstAttacker > 0) { + return false; + } + break; + case 87: + if (c.isInTut() || c.tutorialProgress < 36) { + return false; + } + break; + } + return true; + } + + public static boolean multiAttacks(int i) { + switch (npcs[i].npcType) { + case 2558: + return true; + case 2562: + if (npcs[i].attackType == 2) { + return true; + } + case 2550: + if (npcs[i].attackType == 1) { + return true; + } + default: + return false; + } + + } + + private void stepAway(Client c, int i) { + int otherX = NpcHandler.npcs[i].getX(); + int otherY = NpcHandler.npcs[i].getY(); + if (otherX == c.getX() && otherY == c.getY()) { + if (Region.getClipping(c.getX() - 1, c.getY(), c.heightLevel, -1, 0)) { + npcs[i].moveX = -1; + } else if (Region.getClipping(c.getX() + 1, c.getY(), c.heightLevel, 1, 0)) { + npcs[i].moveX = 1; + } else if (Region.getClipping(c.getX(), c.getY() - 1, c.heightLevel, 0, -1)) { + npcs[i].moveY = -1; + } else if (Region.getClipping(c.getX(), c.getY() + 1, c.heightLevel, 0, 1)) { + npcs[i].moveY = 1; + } + npcs[i].getNextNPCMovement(i); + npcs[i].updateRequired = true; + } + } + + public static void handleClipping(int i) { + Npc npc = npcs[i]; + if (npc.moveX == 1 && npc.moveY == 1) { + if ((Region + .getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) { + npc.moveY = 1; + } else { + npc.moveX = 1; + } + } + } else if (npc.moveX == -1 && npc.moveY == -1) { + if ((Region + .getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) { + npc.moveY = -1; + } else { + npc.moveX = -1; + } + } + } else if (npc.moveX == 1 && npc.moveY == -1) { + if ((Region + .getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) { + npc.moveY = -1; + } else { + npc.moveX = 1; + } + } + } else if (npc.moveX == -1 && npc.moveY == 1) { + if ((Region + .getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0) { + npc.moveX = 0; + npc.moveY = 0; + if ((Region + .getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) { + npc.moveY = 1; + } else { + npc.moveX = -1; + } + } + } // Checking Diagonal movement. + + if (npc.moveY == -1) { + if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0) { + npc.moveY = 0; + } + } else if (npc.moveY == 1) { + if ((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0) { + npc.moveY = 0; + } + } // Checking Y movement. + if (npc.moveX == 1) { + if ((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) { + npc.moveX = 0; + } + } else if (npc.moveX == -1) { + if ((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0) { + npc.moveX = 0; + } + } // Checking X movement. + } + + /** + * Dropping Items! + **/ + + // [npc][0] = item dropped + // [npc][1] = amount + // [npc][2] = rarity + // [j][2] = rarity + // [j][1] = amount + // [j][0] = drop + + public void dropItems(int i) {// ring of wealth to add + int npc = 0; + Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + for (npc = 0; npc < NPCDropsHandler.NPC_DROPS(getNpcListName(npcs[i].npcType).toLowerCase(), npcs[i].npcType).length; npc++) { + if (Misc.random(NPCDropsHandler.NPC_DROPS(getNpcListName(npcs[i].npcType).toLowerCase(), npcs[i].npcType)[npc][2]) == 0 && npcs[i].npcType != 2627 && npcs[i].npcType != 2638 && npcs[i].npcType != 2630 && npcs[i].npcType != 2631 && npcs[i].npcType != 2641 && npcs[i].npcType != 2643 && npcs[i].npcType != 2645 && npcs[i].npcType != 1532 && npcs[i].npcType != 153 && !PestControl.npcIsPCMonster(npcs[i].npcType)) { + Server.itemHandler.createGroundItem(c, NPCDropsHandler.NPC_DROPS(getNpcListName(npcs[i].npcType).toLowerCase(), npcs[i].npcType)[npc][0], npcs[i].absX, npcs[i].absY, NPCDropsHandler.NPC_DROPS(getNpcListName(npcs[i].npcType).toLowerCase(), npcs[i].npcType)[npc][1], c.playerId); + + } + } + switch (npcs[i].npcType) { + case 2459: + FreakyForester.killedPheasant(c, 0); + Server.itemHandler.createGroundItem(c, 6178, npcs[i].absX, npcs[i].absY, 1, c.playerId); + break; + case 2460: + FreakyForester.killedPheasant(c, 1); + Server.itemHandler.createGroundItem(c, 6178, npcs[i].absX, npcs[i].absY, 1, c.playerId); + break; + case 2461: + FreakyForester.killedPheasant(c, 2); + Server.itemHandler.createGroundItem(c, 6178, npcs[i].absX, npcs[i].absY, 1, c.playerId); + break; + case 2462: + FreakyForester.killedPheasant(c, 3); + Server.itemHandler.createGroundItem(c, 6178, npcs[i].absX, npcs[i].absY, 1, c.playerId); + break; + case 92: + if (c.restGhost == 3) { + Server.itemHandler.createGroundItem(c, 553, npcs[i].absX, npcs[i].absY, 1, c.playerId); + c.restGhost = 4; + } + break; + case 47: + if (c.witchspot == 1 || c.romeojuliet > 0 && c.romeojuliet < 9) { + Server.itemHandler.createGroundItem(c, 300, npcs[i].absX, npcs[i].absY, 1, c.playerId); + } + break; + } + } + } + /** + * Slayer Experience + **/ + public void appendSlayerExperience(int i) { + Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + // if (c.getSlayer().isSlayerTask(i)) { + if (c.slayerTask == npcs[i].npcType) { + c.taskAmount--; + c.getPlayerAssistant().addSkillXP(c.getSlayer().getTaskExp(c.slayerTask), 18); + if (c.taskAmount <= 0) { + int points = c.getSlayer().getDifficulty(c.slayerTask) * 4; + c.slayerTask = -1; + c.slayerPoints += points; + c.getActionSender().sendMessage("You completed your slayer task. You obtain " + points + " slayer points. Please talk to your slayer master."); + } + } + } + } + + // } + + public void resetEvent(int i) { + Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; + if (c != null) { + RandomEventHandler.addRandom(c); + } + } + + /** + * Resets players in combat + */ + + public void resetPlayersInCombat(int i) { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + if (PlayerHandler.players[j].underAttackBy2 == i) { + PlayerHandler.players[j].underAttackBy2 = 0; + } + } + } + } + + /** + * Npc Follow Player + **/ + + public static int GetMove(int Place1, int Place2) { + if (Place1 - Place2 == 0) { + return 0; + } else if (Place1 - Place2 < 0) { + return 1; + } else if (Place1 - Place2 > 0) { + return -1; + } + return 0; + } + + public static boolean followPlayer(int i) { + if (NpcHandler.npcs[i].inLesserNpc()) { + return false; + } + switch (npcs[i].npcType) { + case 1456: + case 2892: + case 2894: + case 1532: + case 1534: + return false; + } + return true; + } + + public static void followPlayer(int i, int playerId) { + if (PlayerHandler.players[playerId] == null) { + return; + } + if (PlayerHandler.players[playerId].respawnTimer > 0) { + npcs[i].facePlayer(0); + npcs[i].randomWalk = true; + npcs[i].underAttack = false; + return; + } + + if (npcs[i].npcType == 1532 || npcs[i].npcType == 1534) { + return; + } + + if (!followPlayer(i) && npcs[i].npcType != 1532 && npcs[i].npcType != 1534) { + npcs[i].facePlayer(playerId); + return; + } + + int playerX = PlayerHandler.players[playerId].absX; + int playerY = PlayerHandler.players[playerId].absY; + npcs[i].randomWalk = false; + if (goodDistance(npcs[i].getX(), npcs[i].getY(), playerX, playerY, + distanceRequired(i))) { + return; + } + + Npc npc = npcs[i]; + int x = npc.absX; + int y = npc.absY; + Player player = PlayerHandler.players[playerId]; + if (npcs[i].spawnedBy > 0 + || x < npc.makeX + Constants.NPC_FOLLOW_DISTANCE + && x > npc.makeX - Constants.NPC_FOLLOW_DISTANCE + && y < npc.makeY + Constants.NPC_FOLLOW_DISTANCE + && y > npc.makeY - Constants.NPC_FOLLOW_DISTANCE) { + if (npc.heightLevel == player.heightLevel) { + if (player != null && npc != null) { + if (playerY < y) { + npc.moveX = GetMove(x, playerX); + npc.moveY = GetMove(y, playerY); + } else if (playerY > y) { + npc.moveX = GetMove(x, playerX); + npc.moveY = GetMove(y, playerY); + } else if (playerX < x) { + npc.moveX = GetMove(x, playerX); + npc.moveY = GetMove(y, playerY); + } else if (playerX > x) { + npc.moveX = GetMove(x, playerX); + npc.moveY = GetMove(y, playerY); + } + npc.facePlayer(playerId); + handleClipping(i); + npc.getRandomAndHomeNPCWalking(i); + npc.updateRequired = true; + } + } + } else { + npc.facePlayer(0); + npc.randomWalk = true; + npc.underAttack = false; + } + } + + /** + * Distanced required to attack + **/ + public static int distanceRequired(int i) { + switch (npcs[i].npcType) { + case 2025: + case 2028: + return 6; + case 50: + case 2562: + return 2; + case 2881:// dag kings + case 2882: + case 3200:// chaos ele + case 2743: + case 2631: + case 2745: + return 8; + case 2883:// rex + return 1; + case 2552: + case 2553: + case 2556: + case 2557: + case 2558: + case 2559: + case 2560: + case 2564: + case 2565: + return 9; + // things around dags + case 2892: + case 2894: + return 10; + default: + return 1; + } + } + + public static int followDistance(int i) { + switch (npcs[i].npcType) { + case 2550: + case 2551: + case 2562: + case 2563: + return 8; + case 2883: + return 4; + case 2881: + case 2882: + return 1; + } + return 0; + } + + public static int getProjectileSpeed(int i) { + switch (npcs[i].npcType) { + case 2881: + case 2882: + case 3200: + return 85; + + case 2745: + return 130; + + case 50: + return 90; + + case 2025: + return 85; + + case 2028: + return 80; + + default: + return 85; + } + } + + public static int offset(int i) { + switch (npcs[i].npcType) { + case 50: + case 110: + case 941: + case 1590: + case 1591: + case 1592: + case 2642: + case 55: + case 54: + case 53: + return 2; + case 2881: + case 2882: + return 1; + case 2745: + case 2743: + return 1; + } + return 0; + } + + public boolean specialCase(Client c, int i) { // responsible for npcs that + // much + if (goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), 8) + && !goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), + c.getY(), distanceRequired(i))) { + return true; + } + return false; + } + + public boolean retaliates(int npcType) { + return npcType < 3777 || npcType > 3780 + && !(npcType >= 2440 && npcType <= 2446); + } + + public static void handleSpecialEffects(Client c, int i, int damage) { + if (npcs[i].npcType == 2892 || npcs[i].npcType == 2894) { + if (damage > 0) { + if (c != null) { + if (c.playerLevel[5] > 0) { + c.playerLevel[5]--; + c.getPlayerAssistant().refreshSkill(5); + c.getPlayerAssistant().appendPoison(12); + } + } + } + } + } + + public static boolean goodDistance(int objectX, int objectY, int playerX, + int playerY, int distance) { + return objectX - playerX <= distance && objectX - playerX >= -distance + && objectY - playerY <= distance + && objectY - playerY >= -distance; + } + + public static int getMaxHit(int i) { + switch (npcs[i].npcType) { + case 2558: + if (npcs[i].attackType == 2) { + return 28; + } else { + return 68; + } + case 1265: + case 1267: + return 2; + case 2562: + return 31; + case 2550: + return 36; + } + return 1; + } + + public static int getNpcListCombat(int npcId) { + for (int i = 0; i < maxListedNPCs; i++) { + if (NpcList[i] != null) { + if (NpcList[i].npcId == npcId) { + return NpcList[i].npcCombat; + } + } + } + return 0; + } + + public boolean loadAutoSpawn(String FileName) { + String line = ""; + String token = ""; + String token2 = ""; + String token2_2 = ""; + String[] token3 = new String[10]; + boolean EndOfFile = false; + // int ReadMode = 0; + BufferedReader characterfile = null; + try { + characterfile = new BufferedReader(new FileReader("./" + FileName)); + } catch (FileNotFoundException fileex) { + Misc.println(FileName + ": file not found."); + return false; + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception) { + Misc.println(FileName + ": error loading file."); + // return false; + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token2_2 = token2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token3 = token2_2.split("\t"); + if (token.equals("spawn")) { + newNPC(Integer.parseInt(token3[0]),// npc + Integer.parseInt(token3[1]),// x + Integer.parseInt(token3[2]),// y + Integer.parseInt(token3[3]),// height + Integer.parseInt(token3[4]),// walk + getNpcListHP(Integer.parseInt(token3[0])),// health + Integer.parseInt(token3[5]),// maxhit + Integer.parseInt(token3[6]),// attack + Integer.parseInt(token3[7]));// str + + } + } else { + if (line.equals("[ENDOFSPAWNLIST]")) { + try { + characterfile.close(); + } catch (IOException ioexception) { + } + //return true; + } + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return false; + } + + public static int getNpcListHP(int npcId) { + for (int i = 0; i < maxListedNPCs; i++) { + if (NpcList[i] != null) { + if (NpcList[i].npcId == npcId) { + return NpcList[i].npcHealth; + } + } + } + return 0; + } + + public static String getNpcListName(int npcId) { + for (int i = 0; i < maxListedNPCs; i++) { + if (NpcList[i] != null) { + if (NpcList[i].npcId == npcId) { + return NpcList[i].npcName; + } + } + } + return "nothing"; + } + + public boolean loadNPCList(String FileName) { + String line = ""; + String token = ""; + String token2 = ""; + String token2_2 = ""; + String[] token3 = new String[10]; + boolean EndOfFile = false; + BufferedReader characterfile = null; + try { + characterfile = new BufferedReader(new FileReader("./" + FileName)); + } catch (FileNotFoundException fileex) { + Misc.println(FileName + ": file not found."); + return false; + } + try { + line = characterfile.readLine(); + // characterfile.close(); + } catch (IOException ioexception) { + Misc.println(FileName + ": error loading file."); + // return false; + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token2_2 = token2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token3 = token2_2.split("\t"); + if (token.equals("npc")) { + newNPCList(Integer.parseInt(token3[0]), token3[1], + Integer.parseInt(token3[2]), + Integer.parseInt(token3[3])); + } + } else { + if (line.equals("[ENDOFNPCLIST]")) { + try { + characterfile.close(); + } catch (IOException ioexception) { + } + //return true; + } + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return false; + } + + public static boolean checkSpawn(Client player, int i) { + return npcs[i] != null && npcs[i].spawnedBy != -1 + && npcs[i].npcType == i; + } + +} diff --git a/2006Redone Server/src/redone/game/npcs/NpcList.java b/2006Redone Server/src/redone/game/npcs/NpcList.java new file mode 100644 index 00000000..78c48634 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/NpcList.java @@ -0,0 +1,13 @@ +package redone.game.npcs; + +public class NpcList { + + public int npcId; + public String npcName; + public int npcCombat; + public int npcHealth; + + public NpcList(int _npcId) { + npcId = _npcId; + } +} diff --git a/2006Redone Server/src/redone/game/npcs/NpcSize.java b/2006Redone Server/src/redone/game/npcs/NpcSize.java new file mode 100644 index 00000000..40b6ca9e --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/NpcSize.java @@ -0,0 +1,143 @@ +package redone.game.npcs; + +/** + * NPC Sizes. + * + * @author Primadude. + */ +public class NpcSize { + + /** + * Gets the size of the specified NPC. + * + * @param npcType + * The type of the NPC. + * @return The NPC size. + */ + public static int getNPCSize(int npcType) { + int NPC_TYPE = 0; + int NPC_SIZE = 1; + for (int[] element : NPC_SIZES) { + if (npcType == element[NPC_TYPE]) { + return element[NPC_SIZE]; + } + } + return 1; + } + + /** + * NPC Sizes. {NPC TYPE, SIZE}. + */ + private static final int[][] NPC_SIZES = { { 49, 2 }, { 50, 5 }, { 51, 2 }, + { 52, 2 }, { 53, 4 }, { 54, 4 }, { 55, 4 }, { 69, 2 }, { 78, 2 }, + { 79, 2 }, { 80, 2 }, { 81, 2 }, { 82, 2 }, { 83, 3 }, { 84, 3 }, + { 85, 2 }, { 86, 2 }, { 87, 2 }, { 88, 2 }, { 89, 2 }, { 95, 2 }, + { 96, 2 }, { 97, 2 }, { 105, 2 }, { 106, 2 }, { 107, 2 }, + { 108, 2 }, { 110, 2 }, { 111, 2 }, { 112, 2 }, { 113, 2 }, + { 114, 2 }, { 115, 2 }, { 116, 2 }, { 117, 2 }, { 130, 3 }, + { 133, 2 }, { 135, 3 }, { 136, 2 }, { 137, 2 }, { 138, 2 }, + { 141, 2 }, { 142, 2 }, { 143, 2 }, { 144, 2 }, { 146, 2 }, + { 147, 2 }, { 148, 2 }, { 149, 2 }, { 150, 2 }, { 269, 2 }, + { 270, 2 }, { 271, 2 }, { 374, 2 }, { 397, 2 }, { 446, 2 }, + { 667, 3 }, { 677, 3 }, { 742, 4 }, { 752, 2 }, { 839, 2 }, + { 840, 2 }, { 852, 2 }, { 853, 2 }, { 854, 2 }, { 855, 2 }, + { 856, 2 }, { 857, 2 }, { 858, 2 }, { 859, 2 }, { 860, 2 }, + { 861, 2 }, { 862, 2 }, { 863, 2 }, { 864, 2 }, { 865, 2 }, + { 866, 2 }, { 867, 2 }, { 868, 2 }, { 869, 2 }, { 870, 2 }, + { 871, 2 }, { 873, 2 }, { 874, 2 }, { 875, 2 }, { 876, 2 }, + { 879, 2 }, { 880, 2 }, { 899, 2 }, { 909, 3 }, { 911, 3 }, + { 934, 3 }, { 939, 2 }, { 941, 4 }, { 950, 2 }, { 955, 2 }, + { 978, 2 }, { 986, 2 }, { 987, 2 }, { 991, 2 }, { 997, 3 }, + { 998, 3 }, { 999, 3 }, { 1000, 3 }, { 1003, 2 }, { 1005, 2 }, + { 1010, 2 }, { 1047, 2 }, { 1052, 2 }, { 1053, 2 }, { 1069, 2 }, + { 1095, 2 }, { 1096, 2 }, { 1097, 2 }, { 1098, 2 }, { 1099, 2 }, + { 1100, 2 }, { 1115, 2 }, { 1116, 2 }, { 1117, 2 }, { 1125, 3 }, + { 1126, 2 }, { 1127, 2 }, { 1128, 2 }, { 1129, 2 }, { 1135, 2 }, + { 1136, 2 }, { 1137, 2 }, { 1139, 2 }, { 1151, 2 }, { 1153, 2 }, + { 1154, 3 }, { 1155, 4 }, { 1156, 2 }, { 1157, 4 }, { 1158, 5 }, + { 1159, 5 }, { 1160, 5 }, { 1172, 3 }, { 1173, 3 }, { 1179, 2 }, + { 1180, 2 }, { 1181, 2 }, { 1195, 2 }, { 1196, 2 }, { 1197, 2 }, + { 1198, 2 }, { 1213, 2 }, { 1222, 2 }, { 1224, 2 }, { 1326, 2 }, + { 1328, 2 }, { 1329, 2 }, { 1330, 2 }, { 1335, 2 }, { 1341, 2 }, + { 1342, 2 }, { 1343, 2 }, { 1344, 2 }, { 1345, 2 }, { 1346, 2 }, + { 1347, 2 }, { 1348, 3 }, { 1349, 3 }, { 1350, 3 }, { 1351, 3 }, + { 1352, 3 }, { 1353, 3 }, { 1354, 3 }, { 1355, 3 }, { 1356, 3 }, + { 1373, 2 }, { 1431, 2 }, { 1432, 2 }, { 1438, 2 }, { 1459, 2 }, + { 1460, 2 }, { 1461, 2 }, { 1462, 2 }, { 1472, 3 }, { 1505, 2 }, + { 1506, 2 }, { 1507, 2 }, { 1508, 2 }, { 1509, 2 }, { 1516, 3 }, + { 1521, 2 }, { 1522, 2 }, { 1542, 3 }, { 1555, 2 }, { 1556, 2 }, + { 1558, 2 }, { 1559, 2 }, { 1575, 2 }, { 1578, 3 }, { 1580, 2 }, + { 1581, 2 }, { 1582, 2 }, { 1583, 2 }, { 1584, 2 }, { 1585, 2 }, + { 1586, 2 }, { 1587, 2 }, { 1588, 2 }, { 1589, 2 }, { 1590, 4 }, + { 1591, 4 }, { 1592, 4 }, { 1600, 2 }, { 1601, 2 }, { 1602, 2 }, + { 1603, 2 }, { 1604, 2 }, { 1605, 2 }, { 1606, 2 }, { 1607, 2 }, + { 1608, 3 }, { 1609, 3 }, { 1610, 3 }, { 1611, 3 }, { 1612, 2 }, + { 1616, 2 }, { 1617, 2 }, { 1618, 2 }, { 1619, 2 }, { 1620, 2 }, + { 1621, 3 }, { 1627, 2 }, { 1628, 2 }, { 1631, 2 }, { 1632, 2 }, + { 1653, 2 }, { 1654, 2 }, { 1655, 2 }, { 1656, 2 }, { 1657, 2 }, + { 1676, 2 }, { 1677, 2 }, { 1681, 2 }, { 1689, 3 }, { 1691, 2 }, + { 1693, 2 }, { 1719, 2 }, { 1720, 2 }, { 1721, 2 }, { 1722, 2 }, + { 1723, 2 }, { 1728, 2 }, { 1730, 2 }, { 1731, 2 }, { 1732, 2 }, + { 1733, 2 }, { 1734, 2 }, { 1735, 2 }, { 1736, 2 }, { 1737, 2 }, + { 1738, 2 }, { 1739, 3 }, { 1740, 3 }, { 1741, 2 }, { 1742, 3 }, + { 1743, 3 }, { 1744, 3 }, { 1745, 2 }, { 1746, 2 }, { 1747, 3 }, + { 1748, 3 }, { 1750, 2 }, { 1766, 2 }, { 1767, 2 }, { 1768, 2 }, + { 1778, 2 }, { 1779, 2 }, { 1780, 2 }, { 1781, 2 }, { 1782, 2 }, + { 1783, 2 }, { 1784, 2 }, { 1785, 2 }, { 1786, 2 }, { 1787, 2 }, + { 1792, 2 }, { 1802, 2 }, { 1803, 2 }, { 1804, 2 }, { 1811, 2 }, + { 1812, 2 }, { 1813, 2 }, { 1821, 2 }, { 1828, 2 }, { 1873, 2 }, + { 1943, 2 }, { 1944, 2 }, { 1945, 2 }, { 1946, 2 }, { 1951, 2 }, + { 1952, 2 }, { 1953, 2 }, { 1954, 2 }, { 1955, 2 }, { 1956, 2 }, + { 1970, 2 }, { 1971, 2 }, { 1990, 2 }, { 1993, 2 }, { 1996, 2 }, + { 1998, 2 }, { 1999, 2 }, { 2000, 2 }, { 2022, 3 }, { 2033, 2 }, + { 2038, 2 }, { 2039, 2 }, { 2040, 2 }, { 2041, 2 }, { 2042, 2 }, + { 2043, 2 }, { 2044, 2 }, { 2045, 2 }, { 2046, 2 }, { 2047, 2 }, + { 2048, 2 }, { 2049, 2 }, { 2050, 2 }, { 2051, 2 }, { 2052, 2 }, + { 2053, 2 }, { 2054, 2 }, { 2055, 2 }, { 2056, 2 }, { 2057, 2 }, + { 2060, 3 }, { 2063, 2 }, { 2064, 2 }, { 2065, 2 }, { 2240, 2 }, + { 2252, 2 }, { 2254, 2 }, { 2255, 2 }, { 2289, 2 }, { 2317, 2 }, + { 2417, 2 }, { 2418, 2 }, { 2419, 2 }, { 2434, 2 }, { 2452, 2 }, + { 2453, 2 }, { 2482, 2 }, { 2534, 3 }, { 2554, 3 }, { 2555, 3 }, + { 2556, 3 }, { 2557, 3 }, { 2558, 3 }, { 2559, 3 }, { 2560, 3 }, + { 2561, 3 }, { 2562, 3 }, { 2563, 3 }, { 2629, 2 }, { 2630, 2 }, + { 2631, 3 }, { 2632, 3 }, { 2637, 2 }, { 2640, 2 }, { 2641, 3 }, + { 2642, 5 }, { 2644, 2 }, { 2651, 2 }, { 2722, 2 }, { 2723, 2 }, + { 2736, 2 }, { 2737, 2 }, { 2739, 3 }, { 2740, 3 }, { 2741, 4 }, + { 2742, 4 }, { 2743, 5 }, { 2744, 5 }, { 2745, 5 }, { 2783, 3 }, + { 2801, 2 }, { 2803, 3 }, { 2804, 2 }, { 2805, 2 }, { 2806, 2 }, + { 2809, 2 }, { 2810, 2 }, { 2811, 2 }, { 2812, 2 }, { 2813, 2 }, + { 2814, 2 }, { 2815, 2 }, { 2849, 2 }, { 2850, 2 }, { 2880, 2 }, + { 2881, 3 }, { 2882, 3 }, { 2883, 3 }, { 2885, 2 }, { 2886, 2 }, + { 2889, 2 }, { 2890, 2 }, { 2919, 3 }, { 2920, 3 }, { 2921, 3 }, + { 3051, 2 }, { 3052, 2 }, { 3053, 2 }, { 3054, 2 }, { 3055, 2 }, + { 3056, 2 }, { 3058, 2 }, { 3063, 2 }, { 3064, 2 }, { 3066, 2 }, + { 3068, 3 }, { 3069, 3 }, { 3070, 3 }, { 3071, 3 }, { 3072, 2 }, + { 3076, 2 }, { 3077, 2 }, { 3100, 2 }, { 3101, 2 }, { 3103, 2 }, + { 3124, 2 }, { 3125, 2 }, { 3129, 2 }, { 3130, 2 }, { 3132, 2 }, + { 3133, 2 }, { 3134, 2 }, { 3135, 2 }, { 3140, 3 }, { 3154, 2 }, + { 3200, 3 }, { 3203, 3 }, { 3301, 3 }, { 3309, 2 }, { 3332, 5 }, + { 3333, 5 }, { 3334, 5 }, { 3337, 3 }, { 3338, 3 }, { 3339, 4 }, + { 3340, 3 }, { 3347, 2 }, { 3376, 2 }, { 3398, 2 }, { 3419, 2 }, + { 3420, 2 }, { 3421, 2 }, { 3423, 2 }, { 3443, 2 }, { 3444, 2 }, + { 3445, 3 }, { 3446, 2 }, { 3447, 2 }, { 3448, 3 }, { 3463, 2 }, + { 3464, 2 }, { 3466, 2 }, { 3467, 2 }, { 3468, 2 }, { 3469, 5 }, + { 3470, 5 }, { 3471, 5 }, { 3472, 5 }, { 3476, 3 }, { 3477, 3 }, + { 3484, 2 }, { 3493, 3 }, { 3494, 5 }, { 3497, 3 }, { 3498, 3 }, + { 3499, 3 }, { 3500, 3 }, { 3501, 3 }, { 3502, 3 }, { 3519, 2 }, + { 3530, 3 }, { 3556, 2 }, { 3558, 2 }, { 3585, 2 }, { 3586, 2 }, + { 3587, 2 }, { 3588, 2 }, { 3589, 3 }, { 3590, 3 }, { 3591, 3 }, + { 3592, 3 }, { 3593, 3 }, { 3594, 2 }, { 3599, 3 }, { 3600, 4 }, + { 3601, 5 }, { 3602, 3 }, { 3603, 3 }, { 3604, 4 }, { 3605, 5 }, + { 3606, 2 }, { 3607, 2 }, { 3608, 2 }, { 3609, 2 }, { 3610, 2 }, + { 3611, 2 }, { 3612, 3 }, { 3613, 3 }, { 3614, 3 }, { 3636, 2 }, + { 3637, 4 }, { 3645, 2 }, { 3646, 2 }, { 3647, 2 }, { 3649, 2 }, + { 3650, 2 }, { 3651, 2 }, { 3652, 2 }, { 3653, 2 }, { 3654, 2 }, + { 3655, 2 }, { 3656, 2 }, { 3657, 2 }, { 3658, 3 }, { 3659, 3 }, + { 3660, 3 }, { 3661, 2 }, { 3662, 2 }, { 3664, 2 }, { 3665, 2 }, + { 3666, 2 }, { 3667, 2 }, { 3668, 2 }, { 3669, 2 }, { 3670, 2 }, + { 3675, 2 }, { 3676, 2 }, { 3681, 3 }, { 3772, 2 }, { 3773, 2 }, + { 3774, 2 }, { 3775, 2 }, { 3776, 2 }, { 6142, 3 }, { 6143, 3 }, + { 6144, 3 }, { 6145, 3 }, { 3808, 3 }, { 3819, 3 }, { 3835, 5 }, + { 3836, 5 } }; + +} diff --git a/2006Redone Server/src/redone/game/npcs/drops/NPCDrops.java b/2006Redone Server/src/redone/game/npcs/drops/NPCDrops.java new file mode 100644 index 00000000..d485dd66 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/drops/NPCDrops.java @@ -0,0 +1,1521 @@ +package redone.game.npcs.drops; + +/** + * Npc Drops + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class NPCDrops extends NPCDropsHandler { + + public static final int[][] DEFAULT = { { i("bones"), 1, ALWAYS }, + { 995, r(10), COINSRATE } }; + + public static final int[][] rivertroll = { {i("bones"), 1, ALWAYS}, + {405, 1, COMMON}, {i("spinach roll"), 1, COMMON}, + {i("fishing bait"), 1+r(49), UNCOMMON}, + {985, 1, RARE}, {987, 1, RARE}, + {i("feather"), 2+r(3), COMMON}, {151, 1, UNCOMMON}, + {i("raw tuna"), 1, UNCOMMON}, {i("raw salmon"), 1, UNCOMMON}, + {i("raw trout"), 1, UNCOMMON}, {i("raw herring"), 1, UNCOMMON}, + {i("raw pike"), 1, UNCOMMON}, {i("raw sardine"), 1, UNCOMMON}, + {i("raw shrimps"), 1, UNCOMMON}, {i("raw anchovies"), 1, UNCOMMON}, + {i("raw swordfish"), 1, UNCOMMON}, {i("raw shark"), 1, UNCOMMON}}; + + public static final int[][] darkbeast = { + {i("rune 2h sword"), 1, UNCOMMON}, {i("black 2h sword"), 1, COMMON}, + {i("black battleaxe"), 1, COMMON}, {i("black axe"), 1, UNCOMMON}, + {i("rune battleaxe"), 1, RARE}, {i("adamant sq shield"), 1, COMMON}, + {i("rune chainbody"), 1, UNCOMMON}, {i("rune full helm"), 1, RARE}, + {i("rune sq shield"), 1, RARE}, {i("chaos rune"), 10, COMMON}, + {i("blood rune"), 7, COMMON}, {i("air rune"), 47, UNCOMMON}, + {i("death rune"), 3+r(2), UNCOMMON}, {i("law rune"), 3, UNCOMMON}, + {995, 64+r(2936), COMMON}, {121, 1, UNCOMMON}, + {385, 1+r(1), UNCOMMON}, {i("death talisman"), 1, UNCOMMON}, + {i("adamant bar"), 1, UNCOMMON}, + {199, 1+r(1), COMMON}, + {201, 1+r(1), COMMON}, + {203, 1+r(1), COMMON}, + {205, 1+r(1), UNCOMMON}, + {207, 1+r(1), UNCOMMON}, + {209, 1+r(1), UNCOMMON}, + {211, 1+r(1), UNCOMMON}, + {215, 1+r(1), UNCOMMON}, + {2485, 1+r(1), UNCOMMON}, + {213, 1+r(1), UNCOMMON}, + {217, 1+r(1), UNCOMMON}, + }; + + public static final int[][] ogre = { { i("big bones"), 1, ALWAYS }, + { i("strawberry seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("belladonna seed"), 1, UNCOMMON }, { 5282, 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("harralander seed"), 1, UNCOMMON }, + { i("irit seed"), 1, UNCOMMON }, + { i("jangerberry seed"), 1, UNCOMMON }, + { i("limpwurt seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("spirit weed seed"), 1, UNCOMMON }, + { i("tarromin seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("wildblood seed"), 1, UNCOMMON }, + { i("whiteberry seed"), 1, UNCOMMON }, + { i("marentill seed"), 1, UNCOMMON }, + { i("ranarr seed"), 1, RARE }, { i("dwarf weed seed"), 1, RARE }, + { i("lantadyme seed"), 1, RARE }, + { i("watermelon seed"), 1, RARE }, { i("kwuarm seed"), 1, RARE } }; + + public static final int[][] shade = { { 546, 1, COMMON }, + { 548, 1, COMMON } }; + + public static final int[][] babybluedragon = { { i("babydragon bones"), 1, + ALWAYS } }; + + public static final int[][] bear = { { 526, 1, ALWAYS }, + { i("bear fur"), 1, ALWAYS }, { i("raw bear meat"), 1, ALWAYS } }; + + public static final int[][] monk = { { 526, 1, ALWAYS }, { 542, 1, RARE }, + { 544, 1, RARE } }; + + public static final int[][] tzhaarxil = { { 6522, 9 + r(11), RARE }, + { 6523, 1, RARE }, { 6525, 1, RARE }, { 6524, 1, RARE }, + { 6568, 1, RARE }, { 161, 1, UNCOMMON }, { 149, 1, UNCOMMON }, + { 167, 1, UNCOMMON }, { i("tokkul"), 100 + r(1400), COMMON }, + { i("lobster"), 1, UNCOMMON } }; + + public static final int[][] tzhaarket = { { 6527, 1, RARE }, + { i("fire battlestaff"), 1, RARE }, { 6524, 1, RARE }, + { 6568, 1, RARE }, { 167, 1, UNCOMMON }, { 161, 1, UNCOMMON }, + { i("tokkul"), 100 + r(1800), COMMON }, + { i("lobster"), 1, UNCOMMON }, + { i("chilli potato"), 1 + r(1), UNCOMMON }, + { i("pure essence"), 5, VERY_RARE } }; + + public static final int[][] tzhaarhur = { { i("gold ore"), 1, COMMON }, + { 443, 1 + r(1), COMMON }, { 1762, 3, UNCOMMON }, + { i("steel bar"), 1, UNCOMMON }, + { i("tokkul"), 150 + r(650), COMMON }, + { i("molten glass"), 2, UNCOMMON }, { 149, 1, UNCOMMON }, + { 161, 1, UNCOMMON }, { 1780, 4 + r(8), UNCOMMON }, + { i("battlestaff"), 1, RARE }, { 1744, 3, RARE }, + { i("leather"), 3, RARE }, { 1738, 2 + r(6), RARE }, + { 7937, 2 + r(4), RARE }, { i("lobster"), 1, RARE } }; + + public static final int[][] thief = { { 526, 1, ALWAYS }, + { 199, 1, COMMON }, { 201, 1, COMMON }, { 203, 1, COMMON }, + { 205, 1, COMMON }, { 207, 1, UNCOMMON }, { 209, 1, VERY_RARE }, + { 211, 1, VERY_RARE }, { 213, 1, VERY_RARE }, + { 217, 1, VERY_RARE }, { 2485, 1, VERY_RARE }, + { i("bronze arrow"), 3 + r(5), UNCOMMON }, + { i("staff of air"), 1, UNCOMMON }, + { i("iron knife"), 3 + r(7), UNCOMMON }, + { i("chaos rune"), 3 + r(5), RARE }, + { i("mind rune"), 5 + r(5), VERY_RARE }, + { i("earth rune"), 5 + r(5), VERY_RARE }, + { i("fire rune"), 5 + r(5), VERY_RARE }, + { 995, 3 + r(22), COMMON }, { i("earth talisman"), 1, RARE }, + { i("copper ore"), 1, RARE } }; + + public static final int[][] tzhaarmej = { + { i("fire battlestaff"), 1, UNCOMMON }, + { i("staff of fire"), 1, UNCOMMON }, + { 6568, 1, RARE }, { 6526, 1, VERY_RARE }, + { i("earth rune"), 10 + r(70), COMMON }, + { i("fire rune"), 10 + r(70), COMMON }, + { i("air rune"), 10 + r(70), UNCOMMON }, + { i("water rune"), 10 + r(70), UNCOMMON }, + { i("choas rune"), 5 + r(5), UNCOMMON }, + { i("nature rune"), 1 + r(7), UNCOMMON }, + { i("law rune"), 2 + r(3), UNCOMMON }, + { i("death rune"), 1 + r(5), RARE }, + { i("blood rune"), 1 + r(5), RARE }, + { i("smoke rune"), 1 + r(9), RARE }, + { i("lava rune"), 1 + r(39), RARE }, + { i("fire talisman"), 1, VERY_RARE }, + { i("tokkul"), 1 + r(699), COMMON }, + { i("pure essence"), 4 + r(6), COMMON } }; + + public static final int[][] watchman = { { i("bones"), 1, ALWAYS }, + { i("bread"), 1, COMMON }, }; + + public static final int[][] treespirit = { { i("knife"), 1, ALWAYS }, + { i("bronze axe"), 1, COMMON }, { i("iron axe"), 1, COMMON }, + { i("steel axe"), 1, COMMON }, { i("black axe"), 1, UNCOMMON }, + { i("mithril axe"), 1, UNCOMMON }, + { i("adamant axe"), 1, UNCOMMON + r(50) }, + { i("rune axe"), 1, RARE }, + { i("nature rune"), 5 + r(23), COMMON }, + { i("banana"), 1, COMMON }, { i("uncut ruby"), 1, UNCOMMON }, + { i("uncut emerald"), 1, UNCOMMON }, + { i("uncut diamond"), 1, RARE }, + { i("uncut sapphire"), 1, UNCOMMON }, + { i("rune javelin"), 5, UNCOMMON }, { i("rune spear"), 1, RARE }, + { i("dragon spear"), 1, VERY_RARE }, + { i("cactus seed"), 1, COMMON }, + { i("poison ivy seed"), 1, COMMON }, + { i("belladonna seed"), 1, COMMON }, + { i("kwuarm seed"), 1, COMMON }, { i("half of a key"), 1, RARE }, + { i("nature talisman"), 1, UNCOMMON }, + { i("shield left half"), 1, VERY_RARE }, { 199, 1, COMMON }, + { 3049, 1, UNCOMMON }, { 3051, 1, RARE }, { 211, 1, UNCOMMON } }; + + public static final int[][] cockatrice = { { 526, 1, ALWAYS }, + { i("iron sword"), 1, COMMON }, { i("steel dagger"), 1, COMMON }, + { i("steel longsword"), 1, COMMON }, + { i("iron javelin"), 5, UNCOMMON }, + { i("steel platelegs"), 1, UNCOMMON }, { 4097, 1, RARE }, + { i("iron boots"), 1, RARE }, { i("rune med helm"), 1, VERY_RARE }, + { i("rune chainbody"), 1, VERY_RARE }, + { i("water rune"), 1 + r(1), COMMON }, + { i("fire rune"), 7, COMMON }, + { i("nature rune"), 2 + r(4), COMMON }, + { i("law rune"), 2 + r(1), COMMON }, + { i("death rune"), 50, UNCOMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 209, 1, COMMON }, { 211, 1, COMMON }, { 207, 1, RARE }, + { 213, 1, RARE }, { 215, 1, RARE }, { 2485, 1, RARE }, + { 217, 1, VERY_RARE }, { i("potato seed"), 4, COMMON }, + { i("onion seed"), 4, COMMON }, { i("cabbage seed"), 4, COMMON }, + { i("tomato seed"), 3, COMMON }, + { i("asgarnian seed"), 2, COMMON }, + { i("yanillian seed"), 2, COMMON }, + { i("sweetcorn seed"), 3, COMMON }, + { i("strawberry seed"), 2, COMMON }, + { i("watermelon seed"), 2, RARE }, { i("ranarr seed"), 1, RARE }, + { i("marigold seed"), 1, RARE }, { 995, 1 + r(308), COMMON }, + { i("limpwurt root"), 1, COMMON }, { i("mithril ore"), 1, RARE } }; + + public static final int[][] unicorn = { { i("bones"), 1, ALWAYS }, + { i("unicorn horn"), 1, ALWAYS } }; + + public static final int[][] giantrat = { { i("bones"), 1, ALWAYS }, + {2134, 1, ALWAYS } }; + + public static final int[][] jogre = { { i("jogre bones"), 1, ALWAYS }, + { i("bronze spear"), 1, COMMON }, { i("iron spear"), 1, COMMON }, + { i("steel javelin"), 3 + r(2), UNCOMMON }, + { i("nature rune"), 2 + r(8), COMMON }, { i("knife"), 1, COMMON }, + { i("pineapple"), 2, COMMON }, { 6306, 22, COMMON }, + { 995, 22, COMMON }, { 3125, 1, COMMON }, + { i("big bones"), 1 + r(5), COMMON }, { 526, 1 + r(1), COMMON }, + { i("banana"), 1, UNCOMMON }, { i("limpwurt seed"), 1, COMMON }, + { i("marentill seed"), 1, COMMON }, + { i("tarromin seed"), 1, COMMON }, + { i("harralander seed"), 1, UNCOMMON }, + { i("strawberry sed"), 1, UNCOMMON }, + { i("watermelon seeed"), 1, UNCOMMON }, + { i("wildblood seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("jangerberry seed"), 1, UNCOMMON }, + { i("whiteberry seed"), 1, UNCOMMON }, + { i("belladonna seed"), 1, UNCOMMON }, + { 5282, 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("ranarr seed"), 1, RARE }, { i("lantadyme seed"), 1, RARE }, + { i("dwarf weed seed"), 1, RARE }, { 1533, 1, COMMON }, + { 1525, 1, COMMON }, { 203, 1, COMMON }, { 201, 1, COMMON }, + { 205, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 217, 1, RARE }, { 2485, 1, RARE } }; + + public static final int[][] blackdemon = { + { i("steel battleaxe"), 1, COMMON }, { i("black axe"), 1, COMMON }, + { i("black sword"), 1, COMMON }, + { i("black 2h sword"), 1, COMMON }, + { i("rune battleaxe"), 1, RARE }, + { i("rune 2h sword"), 1, VERY_RARE }, + { i("black full helm"), 1, COMMON }, + { i("mithril kiteshield"), 1, COMMON }, + { i("rune med helm"), 1, RARE }, { i("rune full helm"), 1, RARE }, + { i("rune chainbody"), 1, RARE }, { i("rune sq shield"), 1, RARE }, + { i("air rune"), 50 + r(25), COMMON }, + { i("blood rune"), 7, UNCOMMON }, + { i("fire rune"), 37 + r(3), COMMON }, + { i("chaos rune"), 10, COMMON }, + { i("law rune"), 3 + r(42), COMMON }, + { i("adamant bar"), 1, COMMON }, { 454, 20, RARE }, + { 995, 132 + r(968), COMMON }, { i("lobster"), 1, UNCOMMON }, + { 133, 1, UNCOMMON }, { 199, 1, COMMON }, { 201, 1, COMMON }, + { 203, 1, COMMON }, { 205, 1, COMMON }, { 207, 1, UNCOMMON }, + { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, { 213, 1, UNCOMMON }, + { 215, 1, UNCOMMON }, { 2485, 1, RARE }, { 217, 1, RARE }, + { i("ashes"), 1, ALWAYS }}; + + public static final int[][] firegiant = { { i("big bones"), 1, ALWAYS }, + { i("steel axe"), 1, COMMON }, + { i("fire battlestaff"), 1, UNCOMMON }, + { i("rune scimitar"), 1, RARE }, + { i("mithril sq shield"), 1, COMMON }, + { i("rune arrow"), 12, UNCOMMON }, + { i("fire rune"), 37 + r(167), COMMON }, + { i("chaos rune"), 5, UNCOMMON }, { i("blood rune"), 5, UNCOMMON }, + { i("law rune"), 2 + r(2), UNCOMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 211, 1, COMMON }, + { 205, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 215, 1, UNCOMMON }, { 217, 1, UNCOMMON }, + { 995, 15 + r(345), COMMON }, { i("lobster"), 1, UNCOMMON }, + { i("steel bar"), 1, UNCOMMON }, { 117, 1, UNCOMMON } }; + + public static final int[][] evilchicken = { + { i("raw chicken"), 1, ALWAYS }, { 526, 1, ALWAYS }, + { i("feather"), 32 + r(718), ALWAYS } }; + + public static final int[][] pyrefiend = { + { i("fire rune"), 30 + r(60), COMMON }, + { i("chaos rune"), 12, COMMON }, { i("law rune"), 1, UNCOMMON }, + { i("death rune"), 3, UNCOMMON }, + { i("steel full helm"), 1, COMMON }, + { i("staff of fire"), 1, COMMON }, { i("steel axe"), 1, COMMON }, + { i("steel battleaxe"), 1, UNCOMMON }, + { i("steel arrow"), 1, UNCOMMON }, + { i("mithril chainbody"), 1, UNCOMMON }, + { i("steel boots"), 1, RARE }, { i("adamant med helm"), 1, RARE }, + { 995, 10 + r(464), COMMON }, { i("gold ore"), 1, COMMON }, + { i("jug of wine"), 1, UNCOMMON } }; + + public static final int[][] jelly = { { i("choas rune"), 15, UNCOMMON }, + { i("death rune"), 5, UNCOMMON }, + { i("water rune"), 5 + r(16), RARE }, { i("blood rune"), 7, RARE }, + { i("steel battleaxe"), 1, COMMON }, + { i("steel 2h sword"), 1, COMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("mithril boots"), 1, UNCOMMON }, + { i("rune full helm"), 1, RARE }, + { i("steel platebody"), 1, RARE }, + { i("rune battleaxe"), 1, VERY_RARE }, + { 995, 11 + r(486), COMMON }, { i("gold bar"), 1, UNCOMMON }, + { i("thread"), 10, RARE } }; + + public static final int[][] rockslug = { + { i("earth rune"), 5 + r(37), COMMON }, + { i("pure essence"), 1, COMMON }, + { i("chaos rune"), 2 + r(3), UNCOMMON }, + { i("tin ore"), 1, COMMON }, { i("copper ore"), 1, COMMON }, + { i("bronze bar"), 1, COMMON }, { i("iron ore"), 1, COMMON }, + { i("iron bar"), 1, COMMON }, { i("coal"), 1, COMMON }, + { i("mithril ore"), 1, UNCOMMON }, { i("potato seed"), 4, COMMON }, + { i("onion seed"), 4, COMMON }, { i("cabbage seed"), 4, COMMON }, + { i("tomato seed"), 3, UNCOMMON }, + { i("sweetcorn seed"), 3, UNCOMMON }, { 5308, 3, UNCOMMON }, + { i("strawberry seed"), 2, RARE }, + { i("watermelon seed"), 2, RARE }, { i("hammer"), 1, COMMON }, + { i("dwarven stout"), 1, COMMON }, { 995, 23, UNCOMMON }, + { 4115, 1, RARE } }; + + public static final int[][] kurask = { { i("bones"), 1, ALWAYS }, + { i("nature rune"), 5 + r(25), UNCOMMON }, + { i("death rune"), 1 + r(5), UNCOMMON }, + { i("mind rune"), 4 + r(12), UNCOMMON }, + { i("mithril axe"), 1, UNCOMMON }, + { i("broad arrow"), 1 + r(9), UNCOMMON }, + { i("rune longsword"), 1, RARE }, + { i("adamant platebody"), 1, UNCOMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, { 4111, 1, VERY_RARE }, + { i("white berries"), 1, COMMON }, + { i("limpwurt root"), 2, COMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, { 213, 1, UNCOMMON }, + { 215, 1, UNCOMMON }, { 217, 1, UNCOMMON }, { 207, 1, RARE }, + { 2485, 1, RARE }, { i("irit seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("belladonna seed"), 1, UNCOMMON }, + { i("lantadyme seed"), 1, UNCOMMON }, + { i("snapdragon seed"), 1, RARE }, + { i("dwarf weed seed"), 1, RARE }, + { i("torstol seed"), 1, VERY_RARE }, + { i("plain pizza"), 1, UNCOMMON }, + { i("banana"), 1 + r(1), COMMON }, { 2115, 2 + r(6), COMMON }, + { 995, 22 + r(726), COMMON }, { 1780, 20 + r(10), COMMON }, + { 161, 1, COMMON }, { 173, 1, UNCOMMON }, + { i("bones"), 1 + r(1), UNCOMMON }, + { i("big bones"), 1 + r(1), UNCOMMON } }; + + public static final int[][] earthwarrior = { { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, UNCOMMON }, { 215, 1, RARE }, { 2485, 1, RARE }, + { 217, 1, RARE }, { i("earth rune"), 12 + r(48), COMMON }, + { i("law rune"), 2, COMMON }, + { i("nature rune"), 3 + r(3), COMMON }, + { i("chaos rune"), 3, UNCOMMON }, { i("death rune"), 2, UNCOMMON }, + { i("blood rune"), 2, RARE }, { i("air rune"), 45, VERY_RARE }, + { i("fire rune"), 6, VERY_RARE }, + { i("limpwurt seed"), 1, COMMON }, + { i("jangerberry seed"), 1, COMMON }, + { i("marrentill seed"), 1, COMMON }, + { 5282, 1, COMMON }, + { i("strawberry seed"), 1, COMMON }, + { i("tarromin seed"), 1, COMMON }, + { i("toadflax seed"), 1, COMMON }, + { i("wildblood seed"), 1, COMMON }, + { i("belladonna seed"), 1, UNCOMMON }, + { i("harralander seed"), 1, UNCOMMON }, + { i("irit seed"), 1, UNCOMMON }, { i("avantoe seed"), 1, RARE }, + { i("cactus seed"), 1, RARE }, { i("dwarf weed seed"), 1, RARE }, + { i("kwuarm seed"), 1, RARE }, { i("lantadyme seed"), 1, RARE }, + { i("poison ivy seed"), 1, RARE }, { i("ranarr seed"), 1, RARE }, + { i("cadantine seed"), 1, VERY_RARE }, + { i("snapdragon seed"), 1, VERY_RARE }, + { 995, 1 + r(478), COMMON }, { i("steel spear"), 1, COMMON }, + { i("staff of earth"), 1, UNCOMMON } }; + + public static final int[][] basilisk = { { i("bones"), 1, ALWAYS }, + { i("water rune"), 75 + r(100), COMMON }, + { i("nature rune"), 15 + r(30), UNCOMMON }, + { i("chaos rune"), 12, UNCOMMON }, { i("law rune"), 3, UNCOMMON }, + { i("steel battleaxe"), 1, COMMON }, + { i("mithril spear"), 1, UNCOMMON }, + { i("mithril axe"), 1, UNCOMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("rune dagger"), 1, UNCOMMON }, + { i("adamant full helm"), 1, UNCOMMON }, { 4109, 1, RARE }, + { 4117, 1, VERY_RARE }, { 199, 1, COMMON }, { 201, 1, COMMON }, + { 203, 1, COMMON }, { 205, 1, COMMON }, { 207, 1 + r(1), COMMON }, + { 209, 1, RARE }, { 2485, 1, RARE }, { 211, 1, RARE }, + { 215, 1, RARE }, { 213, 1, RARE }, { 217, 1, RARE } }; + + public static final int[][] abberantspectre = { + { i("belladonna seed"), 1, COMMON }, + { i("cactus seed"), 1, COMMON }, { i("irit seed"), 1, COMMON }, + { i("toadflax seed"), 1, COMMON }, + { i("avantoe seed"), 1, COMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("lantadyme seed"), 1, UNCOMMON }, + { i("dwarf weed seed"), 1, RARE }, + { i("snapdragon seed"), 1, RARE }, + { i("torstol seed"), 1, VERY_RARE }, { 199, 1 + r(2), COMMON }, + { 201, 1 + r(2), COMMON }, { 203, 1 + r(2), COMMON }, + { 205, 1 + r(2), COMMON }, { 207, 1 + r(2), COMMON }, + { 209, 1 + r(2), COMMON }, { 211, 1 + r(2), COMMON }, + { 213, 1 + r(2), COMMON }, { 5302, 1 + r(2), UNCOMMON }, + { 215, 1 + r(2), UNCOMMON }, { 217, 1 + r(2), UNCOMMON }, + { 3051, 1 + r(1), VERY_RARE }, { i("steel axe"), 1, UNCOMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("lava battlestaff"), 1, UNCOMMON }, + { i("adamant platelegs"), 1, UNCOMMON }, + { i("rune full helm"), 1, RARE }, { 4103, 1, RARE }, + { 995, 278 + r(209), UNCOMMON } }; + + public static final int[][] turoth = { { i("bones"), 1, ALWAYS }, + { i("mithril axe"), 1, COMMON }, + { i("steel platelegs"), 1, COMMON }, + { i("mithril kiteshield"), 1, COMMON }, + { i("adamant full helm"), 1, UNCOMMON }, + { i("rune dagger"), 1, UNCOMMON }, { 4113, 1, RARE }, + { i("law rune"), 3, COMMON }, + { i("nature rune"), 15 + r(30), UNCOMMON }, + { i("poision ivy seed"), 1, COMMON }, + { i("cactus seed"), 1, COMMON }, + { i("belladonna seed"), 1, COMMON }, + { i("toadflax seed"), 1, COMMON }, { i("irit seed"), 1, COMMON }, + { i("snapdragon seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("lantadyme seed"), 1, RARE }, + { i("dwarf weed seed"), 1, RARE }, { i("ranarr seed"), 1, RARE }, + { i("torstol seed"), 1, VERY_RARE }, { 199, 1 + r(2), COMMON }, + { 201, 1 + r(2), COMMON }, { 203, 1 + r(2), COMMON }, + { 205, 1 + r(2), COMMON }, { 207, 1 + r(2), UNCOMMON }, + { 209, 1 + r(2), UNCOMMON }, { 211, 1 + r(2), UNCOMMON }, + { 213, 1 + r(2), UNCOMMON }, { 5302, 1 + r(2), RARE }, + { 217, 1 + r(2), RARE }, { 215, 1 + r(2), RARE }, + { 995, 44 + r(396), COMMON }, { i("limpwurt root"), 1, COMMON } }; + + public static final int[][] elfwarrior = { { i("bones"), 1, ALWAYS }, + { i("water rune"), 70, COMMON }, { i("fire rune"), 37, UNCOMMON }, + { i("law rune"), 1 + r(2), UNCOMMON }, + { i("nature rune"), 12, UNCOMMON }, + { i("mithril spear"), 1, COMMON }, + { i("rune dagger"), 1, UNCOMMON }, + { i("mithril kiteshield"), 1, COMMON }, { 1099, 1, COMMON }, + { 1135, 1, COMMON }, { 1065, 1, COMMON }, + { i("adamant med helm"), 1, UNCOMMON }, + { i("rune med helm"), 1, RARE }, { i("bass"), 1, UNCOMMON }, + { i("shark"), 1, UNCOMMON }, { i("lobster"), 1, UNCOMMON }, + { i("sea turtle"), 1, RARE }, { i("manta ray"), 1, VERY_RARE }, + { i("kwuarm seed"), 1, UNCOMMON }, { i("irit seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("belladonna seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("dwarf weed seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("lantadyme seed"), 1, RARE }, + { i("snapdragon seed"), 1, RARE }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 209, 1, COMMON }, { 211, 1, COMMON }, { 213, 1, COMMON }, + { 215, 1, RARE }, { 2485, 1, RARE }, { 207, 1, RARE }, + { 217, 1, RARE }, { 995, 20 + r(407), COMMON }, + { i("adamantite ore"), 1, UNCOMMON } }; + + public static final int[][] man = { { 526, 1, ALWAYS }, + { 995, 1 + r(39), COMMON }, { i("water rune"), 7, UNCOMMON }, + { i("earth rune"), 4, UNCOMMON }, { i("fire rune"), 6, UNCOMMON }, + { i("mind rune"), 9, UNCOMMON }, + { i("bronze arrow"), 7, UNCOMMON }, + { i("iron dagger"), 1, UNCOMMON }, + { i("bronze full helm"), 1, UNCOMMON }, + { i("air talisman"), 1, UNCOMMON }, + { i("earth talisman"), 1, UNCOMMON }, + { i("fishing bait"), 1, UNCOMMON }, + { i("copper ore"), 1, UNCOMMON }, { i("tin ore"), 1, UNCOMMON }, + { i("chaos rune"), 2, RARE }, { i("body rune"), 7, RARE }, + { i("staff of air"), 1, RARE + r(5) }, { 199, 1, COMMON }, + { 201, 1, UNCOMMON }, { 203, 1, UNCOMMON }, { 205, 1, UNCOMMON }, + { 207, 1, UNCOMMON }, { 213, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 211, 1, RARE }, { 215, 1, RARE }, { 217, 1, RARE }, + { 2485, 1, RARE } }; + + public static final int[][] dagannoth = { { 526, 1, ALWAYS }, + { i("bronze spear"), 1, COMMON }, { i("bronze axe"), 1, COMMON }, + { i("iron spear"), 1, COMMON }, + { i("mithril spear"), 1, UNCOMMON }, + { i("cactus seed"), 1, COMMON }, + { i("poison ivy seed"), 1, COMMON }, + { i("belladonna seed"), 1, COMMON }, { i("irit seed"), 1, COMMON }, + { i("avantoe seed"), 1, COMMON }, + { i("toadflax seed"), 1, COMMON }, + { i("ranarr seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("lantadyme seed"), 1, UNCOMMON }, + { i("dwarf weed seed"), 1, UNCOMMON }, + { i("snapdragon seed"), 1, UNCOMMON }, + { i("torstol seed"), 1, UNCOMMON }, + { i("steel arrow"), 15, COMMON }, + { i("mithril javelin"), 2 + r(2), UNCOMMON }, + { i("harpoon"), 1, COMMON }, { i("lobster pot"), 1, COMMON }, + { i("fishing bait"), 50, COMMON }, { i("feather"), 15, COMMON }, + { i("raw sardine"), 5, COMMON }, { i("raw herring"), 4, COMMON }, + { 402, 10, COMMON }, { 411, 1 + r(1), COMMON }, + { i("raw lobster"), 1, COMMON }, { i("raw tuna"), 1, UNCOMMON }, + { 995, 1 + r(84), COMMON }, + { i("water rune"), 15 + r(15), COMMON }, + { 46, 12, COMMON }, {405, 1, UNCOMMON }, + { 45, 12, UNCOMMON } }; + + public static final int[][] chaoselemental = { + { i("rune sword"), 1, UNCOMMON }, + { i("dragon 2h sword"), 1, RARE }, + { i("iron arrow"), 500 + r(500), COMMON }, + { i("mithril dart"), 400, COMMON }, + { i("rune arrow"), 200, COMMON }, { i("air rune"), 500, UNCOMMON }, + { i("chaos rune"), 250 + r(2250), COMMON }, + { i("death rune"), 500, RARE }, { i("blood rune"), 500, RARE }, + { 119, 1, COMMON }, { 2446, 1, COMMON }, { 125, 1, COMMON }, + { 137, 1, COMMON }, { 2289, 3, COMMON }, { 361, 5, COMMON }, + { 464, 1 + r(5), COMMON }, { i("shark"), 10, COMMON }, + { 187, 1, UNCOMMON }, { 2003, 10, UNCOMMON }, + { 6689, 4 + r(2), UNCOMMON }, { 995, 3000 + r(9000), UNCOMMON }, + { i("bones"), 4, COMMON }, { i("bat bones"), 5, COMMON }, + { i("big bones"), 3, COMMON }, { i("dragon bones"), 1, UNCOMMON }, + { i("babydragon bones"), 1 + r(1), UNCOMMON }, + { i("wildblood seed"), 1 + r(2), COMMON }, + { i("avantoe seed"), 1 + r(2), UNCOMMON }, + { i("limpwurt seed"), 1 + r(2), UNCOMMON }, + { i("strawberry seed"), 1 + r(2), UNCOMMON }, + { i("tarromin seed"), 1 + r(2), UNCOMMON }, + { i("ranarr seed"), 1 + r(2), UNCOMMON }, + { i("toadflax seed"), 1 + r(2), UNCOMMON }, + { i("jangerberry seed"), 1 + r(2), UNCOMMON }, + { i("irit seed"), 1 + r(2), UNCOMMON }, + { i("poison ivy seed"), 1 + r(2), UNCOMMON }, + { i("marrentill seed"), 1 + r(2), UNCOMMON }, + { i("cactus seed"), 1 + r(2), UNCOMMON }, + { i("kwuarm seed"), 1 + r(2), UNCOMMON }, + { i("harralander seed"), 1 + r(2), UNCOMMON }, + { i("belladonna seed"), 1 + r(2), UNCOMMON }, + { i("cadantine seed"), 1 + r(2), UNCOMMON }, + { i("whiteberry seed"), 1 + r(2), COMMON }, + { i("lantadyme seed"), 1, RARE } }; + + public static final int[][] dagannothsupereme = { + { i("dragon bones"), 1, ALWAYS }, + { i("steel bar"), 5, ALWAYS }, + { i("adamant axe"), 1, UNCOMMON }, + { i("rune longsword"), 1, RARE }, + { i("fremennik blade"), 1, RARE }, + { i("rune battleaxe"), 1, RARE },// fremennik + // blade + // not + // tradeable + { i("rune 2h sword"), 1, RARE }, + { i("seercull"), 1, RARE }, + { i("dragon axe"), 1, RARE }, + { i("iron arrow"), 218 + r(372), COMMON }, + { i("steel arrow"), 54 + r(44), COMMON }, + { i("iron knife"), 214 + r(286), UNCOMMON }, + { i("steel knife"), 54 + r(36), UNCOMMON }, + { i("mithril knife"), 31 + r(38), UNCOMMON }, + { i("rune throwing axe"), 7, UNCOMMON }, + { i("rune javelin"), 1 + r(9), UNCOMMON }, + { 2489, 1, UNCOMMON }, + { i("spined body"), 1, UNCOMMON }, + { i("spined chaps"), 1, UNCOMMON }, + { i("fremennik shield"), 1, UNCOMMON }, + { i("fremennik helm"), 1, UNCOMMON }, // fremennik shield + helm not + // tradeable + { i("archer helm"), 1, RARE }, { i("archers' ring"), 1, RARE }, + { i("shark"), 5, UNCOMMON }, { i("belladonna seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("irit seed"), 1, UNCOMMON }, { i("toadflax seed"), UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, { i("kwuarm seed"), 1, RARE }, + { i("cadantine seed"), 1, RARE }, { i("lantadyme seed"), 1, RARE }, + { i("dwarf weed seed"), 1, RARE }, { i("air talisman"), 1, RARE }, + { i("mind talisman"), 1, RARE }, { i("earth talisman"), 1, RARE }, + { i("fire talisman"), 1, RARE }, { i("body talisman"), 1, RARE }, + { i("cosmic talisman"), 1, RARE }, { 995, 900 + r(2100), COMMON }, + { i("opal bolt tips"), 1 + r(2), COMMON }, { 1516, 94, UNCOMMON }, + { 1518, 91 + r(31), UNCOMMON }, { i("oyster pearls"), 1, COMMON }, + { 207, 1, UNCOMMON }, { i("feather"), 1 + r(199), RARE }, + { i("runite limbs"), 1, RARE } }; + + public static final int[][] giantmole = { { i("big bones"), 1, ALWAYS }, + { i("mole claw"), 1, ALWAYS }, + { i("mole skin"), 1 + r(5), ALWAYS }, + { i("air rune"), 105, COMMON }, { i("fire rune"), 105, COMMON }, + { i("blood rune"), 15, COMMON }, { i("death rune"), 7, COMMON }, + { i("law rune"), 15, UNCOMMON }, + { i("iron arrow"), 690 + r(690), UNCOMMON }, + { i("adamant longsword"), 1, COMMON }, + { i("mithril axe"), 1, COMMON }, + { i("mithril battleaxe"), 1, COMMON }, + { i("mithril 2h sword"), 1, COMMON }, + { i("rune battleaxe"), 1, UNCOMMON }, + { i("rune 2h sword"), 1, RARE }, + { i("mithril platebody"), 1, COMMON }, + { i("rune med helm"), 1, COMMON }, + { i("amulet of strength"), 1, COMMON }, + { i("rune sq shield"), 1, UNCOMMON }, { 441, 100, UNCOMMON }, + { i("mithril bar"), 1, RARE }, { 995, 360 + r(10640), UNCOMMON }, + { i("shark"), 1 + r(4), UNCOMMON }, + { i("oyster pearls"), 1, RARE }, { 1516, 50 + r(50), UNCOMMON } }; + + public static final int[][] dagannothprime = { + { i("dagganoth bones"), 1, ALWAYS }, + { i("dagganoth hide"), 1, ALWAYS }, + { i("air battlestaff"), 1, COMMON }, + { i("earth battlestaff"), 1, COMMON }, + { i("water battlestaff"), 1, COMMON }, + { i("mud battlestaff"), 1, RARE }, + { 1392, 1 + r(9), RARE }, + { i("dragon axe"), 1, RARE }, + { i("air talisman"), 1 + r(79), UNCOMMON }, + { i("earth talisman"), 1 + r(79), UNCOMMON }, + { i("water talisman"), 1 + r(79), UNCOMMON }, + { i("air rune"), 155, UNCOMMON }, + { i("mud rune"), 32, UNCOMMON }, + { i("death rune"), 63, UNCOMMON }, + { i("fremennik shield"), 1, UNCOMMON }, + { i("fremennik helm"), 1, UNCOMMON }, // shield + // + + // helm + // not + // tradeable + { i("seers' ring"), 1, RARE }, { i("skeletal top"), 1, RARE }, + { i("skeletal bottoms"), 1, RARE }, { i("farseer helm"), 1, RARE }, + { 995, 972 + r(2022), COMMON }, { 7937, 150, UNCOMMON }, + { 207, 1, UNCOMMON }, { i("belladonna seed"), 1, UNCOMMON }, + { i("cactus seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("irit seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, { i("kwuarm seed"), 1, RARE }, + { i("cadantine seed"), 1, RARE }, { i("lantadyme seed"), 1, RARE }, + { i("dwarf weed seed"), 1, RARE } }; + + public static final int[][] daggannothrex = { + { i("dagganoth bones"), 1, ALWAYS }, + { i("dagganoth hide"), 1, ALWAYS }, + { i("fremennik blade"), 1, COMMON }, + { i("mithril warhammer"), 1, COMMON }, // fremy + // blade + // not + // tradeable + { i("adamant axe"), 1, COMMON }, + { i("mithril 2h sword"), 1, UNCOMMON }, + { i("rune axe"), UNCOMMON }, + { i("dragon axe"), 1, RARE }, + { i("steel kiteshield"), 1, COMMON }, + { i("steel platebody"), 1, COMMON }, + { i("adamant platebody"), 1, UNCOMMON }, + { i("fremennik shield"), 1, UNCOMMON },// fremmy helm + shield not + // tradeable + { i("fremennik helm"), 1, UNCOMMON }, + { i("berserker ring"), 1, RARE }, { i("warrior ring"), 1, RARE }, + { i("ring of life"), 1, RARE }, { i("rock-shell plate"), 1, RARE }, + { i("rock-shell legs"), 1, RARE }, { 147, 1, UNCOMMON }, + { 159, 1, UNCOMMON }, { 165, 1, UNCOMMON }, { 141, 1, UNCOMMON }, + { 2456, 1, UNCOMMON }, { 191, 1, UNCOMMON }, { 129, 1, UNCOMMON }, + { i("adamant bar"), 1, UNCOMMON }, { 4448, 25, UNCOMMON }, + { 454, 100, UNCOMMON }, { 441, 150, UNCOMMON }, + { 2354, 17 + r(21), UNCOMMON }, { 365, 5, UNCOMMON }, + { 373, 5, UNCOMMON }, { 385, 5, UNCOMMON }, { 207, 1, UNCOMMON }, + { i("body talisman"), 1, COMMON }, + { i("earth talisman"), 1, COMMON }, + { 995, 995 + r(2844), UNCOMMON } }; + + public static final int[][] monkeyguard = { { 3182, 1, ALWAYS } }; + + public static final int[][] bandit = { { 526, 1, ALWAYS }, + { i("chaos rune"), 2, COMMON }, { i("death rune"), 2, UNCOMMON }, + { i("nature rune"), 2, UNCOMMON }, { i("law rune"), 2, UNCOMMON }, + { i("cosmic rune"), 2, UNCOMMON }, { 205, 1, UNCOMMON }, + { 203, 1, UNCOMMON }, { 201, 1, UNCOMMON }, { 199, 1, UNCOMMON }, + { 217, 1, RARE }, { 2485, 1, RARE }, { 215, 1, RARE }, + { 213, 1, RARE }, { 211, 1, RARE }, { 209, 1, RARE }, + { 207, 1, UNCOMMON + r(200) }, { i("steel axe"), 1, COMMON }, + { i("iron battleaxe"), 1, UNCOMMON }, + { i("iron scimitar"), 1, UNCOMMON }, + { i("steel sq shield"), 1, UNCOMMON }, { 995, 12 + r(37), COMMON }, + { i("coal"), 1, COMMON }, { i("steel bar"), 1, UNCOMMON } }; + + public static final int[][] abyssaldemon = { + { i("black sword"), 1, COMMON }, { i("black axe"), 1, COMMON }, + { i("steel battleaxe"), 1, COMMON }, + { i("abyssal whip"), 1, VERY_RARE }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("rune chainbody"), 1, UNCOMMON }, + { i("rune med helm"), 1, UNCOMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, UNCOMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 215, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, { 213, 1, UNCOMMON }, + { 217, 1, UNCOMMON }, { i("air rune"), 50, COMMON }, + { i("blood rune"), 7, COMMON }, { i("chaos rune"), 10, COMMON }, + { i("law rune"), 3, UNCOMMON }, { 995, 9 + r(2991), COMMON }, + { i("lobster"), 1, COMMON }, { i("cosmic talisman"), 1, COMMON }, + { 7937, 60, UNCOMMON }, { i("earth talisman"), 1, UNCOMMON }, + { i("adamant bar"), 1, UNCOMMON }, { 133, 1, UNCOMMON } }; + + public static final int[][] nechryael = { + { i("rune full helm"), 1, UNCOMMON }, + { i("adamant platelegs"), 1, UNCOMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("rune boots"), 1, UNCOMMON }, + { i("rune sq shield"), 1, VERY_RARE }, + { i("steel 2h sword"), 1, COMMON }, + { i("steel battleaxe"), 1, COMMON }, { i("steel axe"), 1, COMMON }, + { i("rune longsword"), 1, VERY_RARE }, + { i("rune battleaxe"), 1, VERY_RARE }, + { i("rune 2h sword"), 1, VERY_RARE }, + { i("death rune"), 5 + r(5), COMMON }, + { i("chaos rune"), 3 + r(34), UNCOMMON }, + { i("belladonna seed"), 1, COMMON }, { i("irit seed"), 1, COMMON }, + { i("cactus seed"), 1, COMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("kwuarm seed"), 1, UNCOMMON }, + { i("poison ivy seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("dwarf weed seed"), 1, RARE }, + { i("lantadyme seed"), 1, RARE }, { 995, 11 + r(8981), COMMON }, + { i("tuna"), 1, COMMON }, { i("thread"), 10, UNCOMMON }, + { i("gold bar"), 1, UNCOMMON }, { i("rune bar"), 1, RARE } }; + + public static final int[][] gargoyle = { + { i("steel 2h sword"), 1, COMMON }, + { i("steel battleaxe"), 1, COMMON }, { i("steel axe"), 1, COMMON }, + { i("granite maul"), 1, VERY_RARE + r(50) }, + { i("rune full helm"), 1, UNCOMMON }, + { i("adamant boots"), 1, UNCOMMON }, + { i("steel full helm"), 1, RARE }, { 4101, 1, RARE }, + { i("fire rune"), 37 + r(38), COMMON }, + { i("chaos rune"), 15, COMMON }, { i("death rune"), 5, UNCOMMON }, + { 995, 11 + r(487), COMMON }, { 7937, 35, UNCOMMON }, + { i("mithril bar"), 3, UNCOMMON }, { i("steel bar"), 3, UNCOMMON }, + { i("gold bar"), 1, UNCOMMON }, { i("thread"), 10, UNCOMMON } }; + + public static final int[][] dustdevil = { { 526, 1, ALWAYS }, + { i("steel axe"), 1, COMMON }, { i("rune arrow"), 12, COMMON }, + { 2489, 1, COMMON }, { i("earth battlestaff"), 1, RARE }, + { i("rune dagger"), 1, RARE }, { i("rune javelin"), 5, RARE }, + { i("dragon chainbody"), 1, VERY_RARE + r(30000) }, + { i("fire rune"), 3 + r(263), COMMON }, + { i("chaos rune"), 5, UNCOMMON }, + { i("soul rune"), 1 + r(4), UNCOMMON }, + { i("law rune"), 1, VERY_RARE }, { 995, 15 + r(381), COMMON }, + { i("mithril bar"), 1, COMMON }, { 1883, 1 + r(1), UNCOMMON }, + { 199, 1, COMMON }, { 201, 1, COMMON }, { 203, 1, COMMON }, + { 205, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 211, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 2485, 1, RARE }, + { 213, 1, RARE }, { 217, 1, RARE }}; + + public static final int[][] banshee = { { i("iron mace"), 1, UNCOMMON }, + { i("iron dagger"), 1, RARE }, { i("iron kiteshield"), 1, RARE }, + { i("adamant kiteshield"), 1, VERY_RARE }, { 4105, 1, VERY_RARE }, + { 556, 3, COMMON }, { i("chaos rune"), 3 + r(14), COMMON }, + { i("cosmic rune"), 2, UNCOMMON }, + { i("fire rune"), 5 + r(2), UNCOMMON }, + { 995, 13 + r(22), COMMON }, { 7937, 23, COMMON }, + { 313, 7 + r(8), COMMON }, { i("iron ore"), 1, UNCOMMON }, + { i("eye of newt"), 1, UNCOMMON }, { 199, 1, COMMON }, + { 203, 1, COMMON }, { 201, 1, COMMON }, { 205, 1, COMMON }, + { 213, 1, COMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 211, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, { 217, 1, UNCOMMON }, + { 215, 1, UNCOMMON } }; + + public static final int[][] infernalmage = { { 526, 1, ALWAYS }, + { i("staff"), 1, COMMON }, { i("staff of fire"), 1, UNCOMMON }, + { i("lava battlestaff"), 1, RARE }, + { i("mystic fire staff"), 1, RARE }, { 4099, 1, RARE }, + { 4107, 1, RARE }, { i("earth rune"), 5 + r(31), COMMON }, + { i("fire rune"), 10 + r(8), COMMON }, + { i("death rune"), 7, COMMON }, + { i("blood rune"), 4 + r(3), UNCOMMON }, + { i("air rune"), 10 + r(8), UNCOMMON }, + { i("mind rune"), 18, UNCOMMON }, + { i("water rune"), 10 + r(8), UNCOMMON }, + { i("body rune"), 18, UNCOMMON }, { 995, 1 + r(28), COMMON } }; + + public static final int[][] bloodveld = { { 526, 1, ALWAYS }, + { i("steel axe"), 1, COMMON }, + { i("steel scimitar"), 1, UNCOMMON }, + { i("steel full helm"), 1, COMMON }, + { i("mithril sq shield"), 1, UNCOMMON }, + { i("mithril chainbody"), 1, UNCOMMON }, + { i("black boots"), 1, RARE }, { i("rune med helm"), 1, RARE }, + { i("rune full helm"), 1, RARE }, { i("fire rune"), 60, COMMON }, + { i("blood rune"), 3 + r(27), UNCOMMON }, + { 995, 10 + r(450), COMMON }, { i("gold ore"), 1, UNCOMMON }, + { 526, 1 + r(2), UNCOMMON }, + { i("big bones"), 1 + r(4), UNCOMMON }, + { i("meat pizza"), 1, UNCOMMON }, { i("gold ring"), 1, RARE }, + { 199, 1, UNCOMMON }, { 201, 1, UNCOMMON }, { 203, 1, UNCOMMON }, + { 205, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 211, 1, UNCOMMON }, { 213, 1, UNCOMMON }, { 215, 1, UNCOMMON }, + { 2485, 1, UNCOMMON }, { 217, 1, UNCOMMON } }; + + public static final int[][] dwarf = { { 526, 1, ALWAYS }, + { i("bronze pickaxe"), 1, COMMON }, { i("tin ore"), 1, COMMON }, + { i("bronze bar"), 1, COMMON }, { i("copper ore"), 1, COMMON }, + { i("iron ore"), 1, COMMON }, { i("iron pickaxe"), 1, UNCOMMON }, + { i("coal"), 1, UNCOMMON }, { i("iron bar"), 1, UNCOMMON }, + { i("nature rune"), 2, RARE }, { i("chaos rune"), 2, RARE }, + { i("bronze med helm"), 1, COMMON }, + { i("bronze battleaxe"), 1, UNCOMMON }, + { i("iron battleaxe"), 1, UNCOMMON }, + { 995, 3 + r(27), COMMON }, { i("hammer"), 1, UNCOMMON }, + { i("dwarven stout"), 1, UNCOMMON } }; + + public static final int[][] mossgiant = { { i("big bones"), 1, ALWAYS }, + { i("magic staff"), 1, COMMON }, { i("mithril spear"), 1, COMMON }, + { i("mithril sword"), 1, COMMON }, + { i("steel arrow"), 30, COMMON }, { i("iron arrow"), 15, COMMON }, + { i("adamant sword"), 1, RARE }, + { i("black full helm"), 1, COMMON }, + { i("black sq shield"), 1, COMMON }, + { i("steel med helm"), 1, COMMON }, + { i("steel kiteshield"), 1, UNCOMMON }, + { i("air rune"), 18, COMMON }, { i("cosmic rune"), 3, COMMON }, + { i("earth rune"), 27, COMMON }, { i("nature rune"), 6, COMMON }, + { i("law rune"), 2 + r(4), UNCOMMON }, + { i("blood rune"), 1, UNCOMMON }, { i("chaos rune"), 7, UNCOMMON }, + { i("death rune"), 1 + r(2), RARE }, + { i("strawberry seed"), 1, COMMON }, + { i("wildblood seed"), 1, COMMON }, + { i("tarromin seed"), 1, COMMON }, + { i("harralander seed"), 1, COMMON }, + { i("jangerberry seed"), 1, COMMON }, + { i("marentill seed"), 1, COMMON }, + { i("belladonna seed"), 1, UNCOMMON }, + { i("limpwurt seed"), 1, UNCOMMON }, + { i("toadflax seed"), 1, UNCOMMON }, + { i("whiteberry seed"), 1, UNCOMMON }, + { 5282, 1, UNCOMMON }, + { i("avantoe seed"), 1, RARE }, { i("cactus seed"), 1, RARE }, + { i("irit seed"), 1, RARE }, { i("kwuarm seed"), 1, RARE }, + { i("poison ivy seed"), 1, RARE }, { i("ranarr seed"), 1, RARE }, + { i("cadantine seed"), 1, RARE }, { i("lantadyme seed"), 1, RARE }, + { i("watermelon seed"), 1, RARE }, + { i("dwarf weed seed"), 1, VERY_RARE }, { 205, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 199, 1, COMMON }, + { 211, 1, RARE }, { 215, 1, RARE }, { 217, 1, RARE }, + { 209, 1, RARE }, { 2485, 1, RARE }, { 207, 1, RARE }, + { 995, 2 + r(498), COMMON }, { i("steel bar"), 1, COMMON }, + { i("coal"), 1, UNCOMMON }, { i("spinach roll"), 1, UNCOMMON }, + { i("fire talisman"), 1, RARE } }; + + public static final int[][] goblin = { { 526, 1, ALWAYS }, + { 995, 1 + r(23), COMMON }, { i("iron dagger"), 1, COMMON }, + { i("bronze arrow"), 4 + r(16), COMMON }, + { i("bronze med helm"), 1, COMMON }, + { i("bronze sq shield"), 1, COMMON }, + { i("air rune"), 2 + r(4), COMMON }, + { i("body rune"), 2 + r(7), COMMON }, + { i("earth rune"), 4, COMMON }, { i("water rune"), 6, COMMON }, + { i("air talisman"), 1, COMMON }, { i("chef's hat"), 1, COMMON }, + { i("goblin mail"), 1, COMMON }, + { i("bronze full helm"), 1, UNCOMMON }, + { i("bronze sword"), 1, UNCOMMON }, + { i("bronze longsword"), 1, UNCOMMON }, + { i("iron arrow"), 3 + r(3), UNCOMMON }, + { i("bronze chainbody"), 1, UNCOMMON }, + { i("staff of air"), 1, RARE }, + { i("bronze kiteshield"), 1, UNCOMMON }, + { i("raw chicken"), 1, UNCOMMON }, + { i("fire talisman"), 1, UNCOMMON }, + { i("mind rune"), 2 + r(17), UNCOMMON }, + { i("earth talisman"), 1, UNCOMMON }, { i("bronze axe"), 1, RARE }, + { i("bronze scimitar"), 1, RARE }, + { i("iron full helm"), 1, RARE }, { i("leather body"), 1, RARE }, + { i("cape"), 1, RARE }, { i("chaos rune"), 1, RARE }, + { i("nature rune"), 1, RARE }, { i("mind talisman"), 1, RARE }, + { 946, 1, RARE }, { i("tin ore"), 1, RARE } }; + + public static final int[][] lesserdemon = { { i("ashes"), 1, ALWAYS }, + { 995, 10 + r(640), COMMON }, { i("steel axe"), 1, COMMON }, + { i("steel scimitar"), 1, COMMON }, + { i("steel full helm"), 1, COMMON }, + { i("black 2h sword"), 1, COMMON }, + { i("mithril sq shield"), 1, UNCOMMON }, + { i("mithril chainbody"), 1, UNCOMMON }, + { i("fire rune"), 6 + r(114), UNCOMMON }, + { i("chaos rune"), 7 + r(17), UNCOMMON }, + { 445, 2 + r(2), UNCOMMON }, { i("jug of wine"), 1, UNCOMMON }, + { i("death rune"), 3 + r(3), RARE }, + { i("black kiteshield"), 1, RARE }, + { i("rune med helm"), 1, VERY_RARE } }; + + public static final int[][] greaterdemon = { { i("steel axe"), 1, COMMON }, + { i("steel battleaxe"), 1, COMMON }, + { i("steel 2h sword"), 1, COMMON }, + { i("mithril kitesiheld"), 1, UNCOMMON }, + { i("black 2h sword"), 1, UNCOMMON }, + { i("rune full helm"), 1, RARE }, + { i("adamant platelegs"), 1, RARE }, + { i("adamant 2h sword"), 1, VERY_RARE }, + { 995, 9 + r(621), COMMON }, { i("fire rune"), 75, COMMON }, + { i("chaos rune"), 15, COMMON }, { i("death rune"), 5, COMMON }, + { i("thread"), 10, UNCOMMON }, { i("tuna"), 1, UNCOMMON }, + { i("gold bar"), 1, UNCOMMON }, { i("ashes"), 1, ALWAYS } }; + + public static final int[][] guard = { { i("bones"), 1, ALWAYS }, + { 995, 1 + r(24), COMMON }, { i("grapes"), 1, COMMON }, + { i("air rune"), 6, COMMON }, + { i("earth rune"), 3 + r(3), COMMON }, + { i("fire rune"), 2, COMMON }, { i("body talisman"), 1, COMMON }, + { i("iron dagger"), 1, COMMON }, { i("law talisman"), 1, RARE }, + { i("iron arrow"), 1 + r(2), COMMON }, + { i("bronze arrow"), 1 + r(4), UNCOMMON }, + { i("steel arrow"), 1 + r(10), UNCOMMON }, + { i("law rune"), 2, RARE }, { i("nature rune"), 1, RARE }, + { i("chaos rune"), 1 + r(1), RARE }, + { i("steel warhammer"), 1, RARE }, { 1947, 1 + r(3), RARE }, + { i("iron ore"), 1, RARE }, { i("iron platebody"), 1, RARE }, + { i("steel bar"), 1, RARE }, + { i("potato seed"), 4 + r(2), COMMON }, + { i("onion seed"), 4, COMMON }, { i("cabbage seed"), 4, UNCOMMON }, + { i("tomato seed"), 3 + r(1), UNCOMMON }, + { i("strawberry seed"), 1 + r(3), RARE }, + { i("watermelon seed"), 2 + r(2), RARE }, { 199, 1, RARE } }; + + public static final int[][] alkharidwarrior = { { i("bones"), 1, ALWAYS }, + { i("air rune"), 5, UNCOMMON }, { i("mind rune"), 9, COMMON }, + { i("fire rune"), 6, COMMON }, { i("earth rune"), 4, COMMON }, + { i("chaos rune"), 2, RARE }, { i("law rune"), 1, VERY_RARE }, + { i("bronze med helm"), 1, COMMON }, + { i("bronze arrow"), 7, COMMON }, + { i("iron dagger"), 1, UNCOMMON }, + { i("iron med helm"), 1, UNCOMMON }, + { i("staff of air"), 1, UNCOMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, UNCOMMON }, { 205, 1, UNCOMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, + { 217, 1, UNCOMMON } }; + + public static final int[][] icewarrior = { { i("bones"), 1, ALWAYS }, + { 995, 1 + r(14), COMMON }, { i("iron battleaxe"), 1, COMMON }, + { i("mithril arrow"), 3, COMMON }, { i("cosmic rune"), 2, COMMON }, + { i("chaos rune"), 3, COMMON }, { i("nature rune"), 4, COMMON }, + { i("law rune"), 2, COMMON }, { i("mithril mace"), 1, UNCOMMON }, + { i("adamant arrow"), 2, UNCOMMON }, + { i("tarromin seed"), 1, COMMON }, + { i("death rune"), 2, UNCOMMON }, { i("mind rune"), 24, RARE }, + { i("mithril ore"), 1, RARE }, { i("guam seed"), 1, COMMON }, + { i("iron 2h sword"), 1, UNCOMMON }, + { i("harralander seed"), 1, COMMON }, + { i("steel sword"), 1, VERY_RARE }, + { i("limpwurt seed"), 1, COMMON }, + { i("black kiteshield"), 1, VERY_RARE }, + { i("wildblood seed"), 1, COMMON }, + { i("mithril sq shield"), 1, VERY_RARE }, + { i("strawberry seed"), 1, COMMON }, + { i("rune longsword"), 1, VERY_RARE }, + { i("jangerberry seed"), 1, COMMON }, + { i("marentill seed"), 1, UNCOMMON }, + { i("cadantine seed"), 1, UNCOMMON }, + { i("bittecape mushroom spore"), 1, UNCOMMON }, + { i("irit seed"), 1, UNCOMMON }, + { i("avantoe seed"), 1, UNCOMMON }, + { i("dwarf weed seed"), 1, RARE }, { i("toadflax seed"), 1, RARE }, + { i("ranarr seed"), 1, RARE }, { i("whiteberry seed"), 1, RARE }, + { i("poison ivy seed"), 1, RARE }, { i("kwuarm seed"), 1, RARE }, + { i("cactus seed"), 1, RARE }, { i("watermelon seed"), 1, RARE }, + { i("belladonna seed"), 1, VERY_RARE }, + { i("lantadyme seed"), 1, VERY_RARE }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, RARE }, { 215, 1, RARE }, { 217, 1, RARE }, + { 2485, 1, RARE } }; + + public static final int[][] blackknight = { { 526, 1, ALWAYS }, + { i("iron sword"), 1, COMMON }, { i("iron full helm"), 1, COMMON }, + { i("steel mace"), 1, COMMON }, { i("black full helm"), 1, RARE }, + { i("mithril arrow"), 3, UNCOMMON }, + { i("black 2h sword"), 1, RARE }, { i("black sword"), 1, RARE }, + { i("mind rune"), 2 + r(7), UNCOMMON }, + { i("earth rune"), 10, UNCOMMON }, { i("body rune"), 9, UNCOMMON }, + { i("cosmic rune"), 7, UNCOMMON }, + { i("chaos rune"), 4 + r(2), UNCOMMON }, + { i("death rune"), 2, UNCOMMON }, + { i("law rune"), 2 + r(2), UNCOMMON }, + { i("nature rune"), 6, RARE }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, + { 217, 1, UNCOMMON } }; + + public static final int[][] whiteknight = { + { 526, 1, ALWAYS }, + { i("water rune"), 20 + r(27), COMMON }, + { i("body rune"), 9 + r(15), COMMON }, + { i("mind rune"), 5 + r(7), COMMON }, + { i("choas rune"), 2 + r(3), UNCOMMON }, + { i("nature rune"), 4 + r(3), UNCOMMON }, + { i("law rune"), 2 + r(1), RARE }, + { i("blood rune"), 2 + r(1), RARE }, // members + { i("iron longsword"), 1, COMMON }, + { i("steel sword"), 1, COMMON }, + { i("mithril arrow"), 5 + r(4), COMMON }, + { i("adamant arrow"), 2 + r(5), UNCOMMON }, + { i("steel med helm"), 1, COMMON }, + { i("potato seed"), 4, COMMON }, { i("tomato seed"), 3, COMMON }, + { i("cabbage seed"), 4, COMMON }, { i("onion seed"), 4, COMMON }, + { i("sweetcorn seed"), 3, UNCOMMON }, + { i("watermelon seed"), 2, UNCOMMON }, + { i("strawberry seed"), 2, RARE }, { 995, 1 + r(199), COMMON }, + { i("pot of flour"), 1, RARE }, { 2335, 1, UNCOMMON }, + { i("iron ore"), 1, UNCOMMON }, + { i("iron bar"), 1 + r(1), COMMON }, { 199, 1, UNCOMMON }, + { 201, 1, UNCOMMON }, { 203, 1, UNCOMMON }, { 205, 1, UNCOMMON }, + { 207, 1, UNCOMMON }, { 209, 1, RARE }, { 211, 1, RARE }, + { 213, 1, RARE }, { 215, 1, RARE }, { 2485, 1, RARE }, + { 217, 1, RARE } }; + + public static final int[][] icegiant = { { i("big bones"), 1, ALWAYS }, + { i("iron battleaxe"), 1, COMMON }, + { i("iron platelegs"), 1, COMMON }, + { i("iron 2h sword"), 1, COMMON }, { i("steel axe"), 1, COMMON }, + { i("steel sword"), 1, COMMON }, + { i("black kiteshield"), 1, COMMON }, + { i("water rune"), 12, COMMON }, { i("mind rune"), 24, COMMON }, + { i("body rune"), 37, COMMON }, + { i("cosmic rune"), 2 + r(2), COMMON }, + { 995, 8 + r(446), COMMON }, { i("adamant arrow"), 5, UNCOMMON }, + { i("law rune"), 3, UNCOMMON }, { i("nature rune"), 6, UNCOMMON }, + { i("banana"), 1, UNCOMMON }, { i("jug of wine"), 1, UNCOMMON }, + { i("mithril ore"), 1, UNCOMMON }, + { i("mithril sq shield"), 1, RARE }, + { i("mithril mace"), 1, RARE }, { i("death rune"), 2 + r(2), RARE } }; + + public static final int[][] hobgoblin = { { i("bones"), 1, ALWAYS }, + { 995, 1 + r(70), COMMON }, { i("iron sword"), 1, COMMON }, + { i("iron longsword"), 1, UNCOMMON }, + { i("steel longsword"), 1, UNCOMMON }, + { i("steel dagger"), 1, UNCOMMON }, + { i("limpwurt root"), 1, 2 + r(18) }, + { i("water rune"), 2, UNCOMMON }, { i("body rune"), 6, UNCOMMON }, + { i("fire rune"), 7, UNCOMMON }, { i("cosmic rune"), 2, UNCOMMON }, + { i("chaos rune"), 3, UNCOMMON }, + { i("nature rune"), 4, UNCOMMON }, { i("law rune"), 2, UNCOMMON } }; + + public static final int[][] pirate = { { i("bones"), 1, ALWAYS }, + { i("air rune"), 10, COMMON }, { i("earth rune"), 9, COMMON }, + { i("fire rune"), 5, COMMON }, { i("chaos rune"), 2, COMMON }, + { i("nature rune"), 2, COMMON }, { i("law rune"), 2, RARE }, + { i("bronze scimitar"), 1, COMMON }, + { i("bronze arrow"), 9 + r(3), COMMON }, + { i("iron dagger"), 1, COMMON }, + { i("staff of air"), 1, UNCOMMON }, { 995, 4 + r(51), COMMON }, + { i("iron bar"), 1, RARE }, { i("chef's hat"), 1, RARE }, + { i("limpwurt root"), 1, RARE }, { i("tinderbox"), 1, RARE }, + { i("iron platebody"), 1, VERY_RARE }, + { i("eye patch"), 1, COMMON }, { i("knife"), 1, RARE } }; + + public static final int[][] zombie = { { i("bones"), 1, ALWAYS }, + { 995, 1 + r(25), COMMON }, { i("fishing bait"), 7, COMMON }, + { i("bronze axe"), 1, UNCOMMON }, { i("iron axe"), 1, UNCOMMON }, + { i("bronze med helm"), 1, UNCOMMON }, + { i("iron mace"), 1, UNCOMMON }, + { i("bronze kiteshield"), 1, UNCOMMON }, + { i("iron arrow"), 5, UNCOMMON }, + { i("iron dagger"), 1, UNCOMMON }, + { i("steel arrow"), 5 + r(27), UNCOMMON }, + { i("mithril arrow"), 2, UNCOMMON }, + { i("chaos rune"), 4, UNCOMMON }, { i("air rune"), 3, UNCOMMON }, + { i("fire rune"), 7, UNCOMMON }, { i("mind rune"), 5, UNCOMMON }, + { i("body rune"), 3 + r(5), UNCOMMON }, + { i("nature rune"), 5, UNCOMMON }, { i("law rune"), 3, UNCOMMON }, + { i("cosmic rune"), 2, UNCOMMON }, { i("tinderbox"), 1, UNCOMMON }, + { i("copper ore"), 1, UNCOMMON }, { i("iron ore"), 1, UNCOMMON }, + { i("tin ore"), 1, UNCOMMON }, { i("eye of newt"), 1, UNCOMMON }, + { i("ashes"), 1, UNCOMMON }, { i("half a meat pie"), 1, VERY_RARE } }; + + public static final int[][] skeleton = { { i("bones"), 1, ALWAYS }, + { i("iron dagger"), 1, COMMON }, { i("iron med helm"), 1, COMMON }, + { i("air rune"), 12, COMMON }, { i("water rune"), 5, COMMON }, + { i("earth rune"), 3, COMMON }, { i("fire rune"), 2, COMMON }, + { i("mind rune"), 1 + r(24), COMMON }, { 995, 10, COMMON }, + { i("bronze arrow"), 1 + r(10), COMMON }, + { i("iron mace"), 1, COMMON }, { i("iron axe"), 1, UNCOMMON }, + { i("cosmic rune"), 2, UNCOMMON }, + { i("iron arrow"), 5, UNCOMMON }, { i("iron sword"), 1, UNCOMMON }, + { i("chaos rune"), 4, UNCOMMON }, + { i("nature rune"), 1 + r(2), UNCOMMON }, + { i("iron sword"), 1, UNCOMMON }, { i("law rune"), 2, UNCOMMON }, + { i("bucket"), 1, UNCOMMON }, { 1947, 1, UNCOMMON }, + { i("iron ore"), 1, UNCOMMON }, { i("bronze bar"), 1, UNCOMMON }, + { i("iron scimitar"), 1, RARE }, { i("steel arrow"), 1, RARE }, + { i("fire talisman"), 1, RARE }, + { i("adamant kiteshield"), 1, VERY_RARE }, }; + + public static final int[][] hillgiant = { { i("big bones"), 1, ALWAYS }, + { i("limpwurt root"), 1, 2 + r(23) }, { i("beer"), 1, COMMON }, + { i("iron arrow"), 3, COMMON }, { i("iron full helm"), 1, COMMON }, + { i("water rune"), 7, COMMON }, { 995, 8 + r(15), COMMON }, + { i("body talisman"), 1, UNCOMMON }, + { i("fire rune"), 15, UNCOMMON }, + { i("law rune"), 1 + r(2), UNCOMMON }, + { i("nature rune"), 6, UNCOMMON }, { i("mind rune"), 3, UNCOMMON }, + { i("steel longsword"), 1, UNCOMMON }, + { i("steel arrow"), 10 + r(5), UNCOMMON }, + { i("iron kiteshield"), 1, UNCOMMON }, + { i("iron 2h sword"), 1, RARE }, { i("mithril arrow"), 1, RARE }, + { i("steel dagger"), 1, RARE }, { i("death rune"), 2, RARE }, + { i("chaos rune"), 2, RARE }, + { i("steel platebody"), 1, VERY_RARE }, + { i("adamant arrow"), 1 + r(4), VERY_RARE }, }; + + public static final int[][] deadlyredspider = { { i("red spiders' eggs"), + 1, UNCOMMON } }; + + public static final int[][] reddragon = { { i("dragon bones"), 1, ALWAYS }, + { i("red dragonhide"), 1, ALWAYS }, + { i("mithril 2h sword"), 1, COMMON }, + { i("mithril javelin"), 1, COMMON }, + { i("mithril axe"), 1, COMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("adamant platebody"), 1, UNCOMMON }, + { i("mithril battleaxe"), 1, UNCOMMON }, + { i("rune arrow"), 4, UNCOMMON }, { i("rune dart"), 8, UNCOMMON }, + { i("rune longsword"), 1, UNCOMMON }, + { i("law rune"), 4, UNCOMMON }, { i("death rune"), 5, UNCOMMON }, + { i("blood rune"), 2, UNCOMMON }, { 199, 1, COMMON }, + { 201, 1, COMMON }, { 203, 1, COMMON }, { 205, 1, COMMON }, + { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, + { 217, 1, UNCOMMON }, { 995, 30 + r(630), COMMON }, + { i("chocolate cake"), 3, UNCOMMON }, + { i("adamant bar"), 1, UNCOMMON } }; + + public static final int[][] rat = { { i("bones"), 1, ALWAYS }}; + + public static final int[][] cow = { { i("bones"), 1, ALWAYS }, + { i("cowhide"), 1, ALWAYS }, { i("raw beef"), 1, ALWAYS }, }; + + public static final int[][] chicken = { { i("bones"), 1, ALWAYS }, + { i("feather"), 5 + r(10), ALWAYS }, + { i("raw chicken"), 1, ALWAYS }, { i("egg"), 1, UNCOMMON }, }; + + public static final int[][] rockcrab = { { 207, 1, RARE }, + { 211, 1, RARE }, { i("tarromin seed"), 1, RARE }, + { i("ranarr seed"), 1, RARE }, { i("irit seed"), 1, VERY_RARE }, + { i("bronze pickaxe"), 1, COMMON }, + { i("iron pickaxe"), 1, COMMON }, { i("bronze axe"), 1, UNCOMMON }, + { i("fire rune"), 7, COMMON }, { i("nature rune"), 4, UNCOMMON }, + { i("chaos rune"), 1, RARE }, { i("cosmic talisman"), 1, RARE }, + { 995, 3 + r(495), COMMON }, { i("oyster"), 1 + r(1), COMMON }, + { 402, 1 + r(4), COMMON }, { i("edible seaweed"), 2, RARE }, + { i("oyster pearl"), 1, COMMON }, { i("empty oyster"), 1, COMMON }, + { i("spinach roll"), 1, UNCOMMON }, { i("knife"), 1, UNCOMMON }, + { i("iron ore"), 1, UNCOMMON }, { i("coal"), 2, UNCOMMON }, + { i("copper ore"), 3, UNCOMMON }, { i("tin ore"), 3, UNCOMMON }, + { i("fishing bait"), 1 + r(9), UNCOMMON }, + { 45, 5, UNCOMMON }, { i("limpwurt root"), 1, RARE } }; + + public static final int[][] kingblackdragon = { + { i("dragon bones"), 1, ALWAYS }, + { i("black dragonhide"), 1, ALWAYS }, + { i("rune longsword"), 1, UNCOMMON }, + { i("rune battleaxe"), 1, UNCOMMON }, + { i("blood rune"), 50, COMMON }, { i("death rune"), 50, COMMON }, + { i("law rune"), 50, UNCOMMON }, + { i("mithril arrow"), 250, UNCOMMON }, + { i("rune arrow"), 50, UNCOMMON }, + { i("rune sq shield"), 1, UNCOMMON }, + { i("rune platebody"), 1, UNCOMMON }, + { i("dragon med helm"), 1, RARE }, { 2361, 1 + r(4), UNCOMMON }, + { 2363, 1 + r(1), UNCOMMON }, { 443, 100, UNCOMMON }, + { 445, 50, UNCOMMON }, { 453, 3, UNCOMMON }, + { 995, 1000 + r(2000), COMMON }, { 1516, 50, COMMON }, + { 1514, 10, COMMON } }; + + public static final int[][] greendragon = { + { i("dragon bones"), 1, ALWAYS }, + { i("green dragonhide"), 1, ALWAYS }, + { i("steel platelegs"), 1, COMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("adamant full helm"), 1, RARE }, + { i("steel battleaxe"), 1, COMMON }, + { i("mithril axe"), 1, COMMON }, + { i("mithril spear"), 1, UNCOMMON }, + { i("rune dagger"), 1, UNCOMMON }, + { i("water rune"), 75 + r(75), COMMON }, + { i("fire rune"), 37, COMMON }, + { i("nature rune"), 15 + r(60), COMMON }, + { i("law rune"), 3, COMMON }, { 995, 11 + r(429), COMMON }, + { i("bass"), 1, COMMON }, { i("adamantite ore"), 1, UNCOMMON }, + { 209, 1, COMMON }, { 205, 1, COMMON }, { 199, 1, UNCOMMON }, + { 211, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 201, 1, UNCOMMON }, + { 203, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 213, 1, UNCOMMON }, + { 2485, 1, UNCOMMON }, { 217, 1, UNCOMMON }, { i("nature talisman"), 1, RARE} }; + + public static final int[][] bluedragon = { + { i("dragon bones"), 1, ALWAYS }, + { i("blue dragonhide"), 1, ALWAYS }, + { i("steel platelegs"), 1, COMMON }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("adamant full helm"), 1, UNCOMMON }, + { i("steel battleaxe"), 1, COMMON }, + { i("mithril axe"), 1, COMMON }, + { i("mithril spear"), 1, UNCOMMON }, + { i("adamant dagger"), 1, UNCOMMON }, + { i("rune dagger"), 1, RARE }, { i("water rune"), 75, COMMON }, + { i("fire rune"), 37, UNCOMMON }, + { i("nature rune"), 15, UNCOMMON }, { i("law rune"), 3, UNCOMMON }, + { i("death rune"), 5, VERY_RARE }, { 995, 11 + r(443), COMMON }, + { i("bass"), 1, COMMON }, { i("adamantite ore"), 1, UNCOMMON }, + { 199, 1, COMMON }, { 201, 1, COMMON }, { 203, 1, COMMON }, + { 205, 1, COMMON }, { 207, 1, UNCOMMON }, { 211, 1, UNCOMMON }, + { 213, 1, UNCOMMON }, { 215, 1, UNCOMMON }, { 2485, 1, UNCOMMON }, + { 217, 1, RARE } }; + + public static final int[][] kalphiteworker = { + { i("water rune"), 2, UNCOMMON }, { i("fire rune"), 7, UNCOMMON }, + { i("body rune"), 6, UNCOMMON }, { i("cosmic rune"), 2, UNCOMMON }, + { i("chaos rune"), 3, UNCOMMON }, + { i("nature rune"), 4, UNCOMMON }, { i("law rune"), 2, UNCOMMON }, + { i("blood rune"), 1, VERY_RARE }, + { i("hard leather body"), 1, UNCOMMON }, + { i("iron sword"), 1, UNCOMMON }, + { i("iron dagger"), 1, UNCOMMON }, + { i("steel dagger"), 1, UNCOMMON }, + { i("mithril sq shield"), 1, UNCOMMON }, + { i("steel sword"), 1, RARE }, { i("steel longsword"), 1, RARE }, + { i("rune dagger"), 1, RARE }, { 995, 1 + r(999), COMMON }, + { 1823, 1, COMMON }, { i("bucket of sand"), 1, UNCOMMON }, + { 199, 1, COMMON }, { 201, 1, COMMON }, { 203, 1, COMMON }, + { 205, 1, UNCOMMON }, { 207, 1, UNCOMMON }, { 209, 1, UNCOMMON }, + { 211, 1, RARE }, { 213, 1, RARE }, { 215, 1, RARE }, + { 2485, 1, RARE }, { 217, 1, RARE } }; + + public static final int[][] kalphitesolider = { + { i("steel full helm"), 1, COMMON }, + { i("steel scimitar"), 1, COMMON }, { i("steel axe"), 1, COMMON }, + { i("steel sword"), 1, UNCOMMON }, + { i("steel dagger"), 1, UNCOMMON }, + { i("hard leather body"), 1, UNCOMMON }, + { i("adamant chain body"), 1, UNCOMMON }, + { i("adamant sq shield"), 1, UNCOMMON }, + { i("rune dagger"), 1, RARE }, { i("adamant scimitar"), 1, RARE }, + { i("adamant axe"), 1, RARE }, { i("adamant med helm"), 1, RARE }, + { i("adamant full helm"), 1, RARE }, + { i("adamant dagger"), 1, RARE }, { i("rune chainbody"), 1, RARE }, + { i("air rune"), 15 + r(12), COMMON }, + { i("fire rune"), 6 + r(54), COMMON }, + { i("water rune"), 2, UNCOMMON }, { i("body rune"), 2, UNCOMMON }, + { i("chaos rune"), 12, UNCOMMON }, + { i("cosmic rune"), 2, UNCOMMON }, + { i("death rune"), 3 + r(9), UNCOMMON }, + { i("law rune"), 1 + r(2), UNCOMMON }, + { i("nature rune"), 1 + r(5), RARE }, { 995, 10 + r(440), COMMON }, + { 3139, 1 + r(1), UNCOMMON }, { i("lobster"), 1, UNCOMMON }, + { 1823, 1, UNCOMMON }, { i("uncut diamond"), 1, RARE }, + { i("uncut dragonstone"), 1, RARE }, { 205, 1, COMMON }, + { 203, 1, RARE }, { 201, 1, RARE }, { 199, 1, RARE }, + { 207, 1, RARE }, { 213, 1, RARE }, { 211, 1, RARE }, + { 2485, 1, RARE }, { 209, 1, RARE } }; + + public static final int[][] kalphiteguardian = { + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("adamant sq shield"), 1, UNCOMMON }, + { i("rune med helm"), 1, UNCOMMON }, + { i("rune chainbody"), 1, RARE }, + { i("rune platebody"), 1, VERY_RARE }, + { i("rune sq shield"), 1, VERY_RARE }, + { i("steel axe"), 1, COMMON }, { i("steel battleaxe"), 1, COMMON }, + { i("mithril longsword"), 1, COMMON }, + { i("mithril sword"), 1, COMMON }, + { i("adamant dagger"), 1, UNCOMMON }, + { i("rune 2h sword"), 1, UNCOMMON }, + { i("rune battleaxe"), 1, UNCOMMON }, + { i("rune dagger"), 1, UNCOMMON }, { i("rune sword"), 1, RARE }, + { i("air rune"), 50, UNCOMMON }, { i("blood rune"), 7, UNCOMMON }, + { i("fire rune"), 37, UNCOMMON }, + { i("law rune"), 3 + r(43), UNCOMMON }, + { i("death rune"), 18 + r(27), UNCOMMON }, + { i("chaos rune"), 10, UNCOMMON }, + { i("adamant javelin"), 1, UNCOMMON }, + { i("cosmic rune"), 2, UNCOMMON }, + { i("rune arrow"), 42 + r(108), UNCOMMON }, + { 995, 28 + r(2972), COMMON }, + { i("lobster"), 1 + r(1), UNCOMMON }, { 163, 1, UNCOMMON }, + { 145, 1, UNCOMMON }, { 157, 1, UNCOMMON }, + { 3138, 2 + r(2), UNCOMMON }, { 199, 1, COMMON }, + { 215, 1, COMMON }, { 203, 1, COMMON }, { 201, 1, COMMON }, + { 205, 1, COMMON }, { 211, 1, UNCOMMON }, { 207, 1, UNCOMMON }, + { 209, 1, UNCOMMON }, { 213, 1, UNCOMMON }, { 2485, 1, RARE }, + { 217, 1, RARE } }; + + public static final int[][] kalphitequeen = { + { i("rune spear"), 2, COMMON }, { i("rune axe"), 1, COMMON }, + { i("rune battleaxe"), 1, UNCOMMON }, + { i("rune 2h sword"), 1, UNCOMMON }, + { i("rune warhammer"), 1 + r(1), UNCOMMON }, + { i("adamant longsword"), 1, UNCOMMON }, + { i("lava battlestaff"), 2, UNCOMMON }, + { i("dragon 2h sword"), 1, VERY_RARE + r(20) }, + { i("rune chainbody"), 1 + r(3), COMMON }, + { i("dragon chainbody"), 1, VERY_RARE + r(30000) }, + { i("mithril arrow"), 500, COMMON }, + { i("iron arrow"), 1 + r(354), UNCOMMON }, + { i("steel arrow"), 1 + r(149), UNCOMMON }, + { i("rune arrow"), 100, UNCOMMON }, + { i("blood rune"), 250 + r(50), UNCOMMON }, + { i("nature rune"), 200 + r(50), COMMON }, + { i("fire rune"), 600, COMMON }, + { i("law rune"), 20 + r(230), UNCOMMON }, + { i("death rune"), 200 + r(100), UNCOMMON }, + { i("cosmic rune"), 200 + r(100), UNCOMMON }, + { i("sapphire"), 1, UNCOMMON }, { i("emerald"), 1, UNCOMMON }, + { i("ruby"), 1, UNCOMMON }, { 414, 40, UNCOMMON }, + { 246, 20 + r(20), COMMON }, { i("amulet of power"), 1, COMMON }, + { 995, 3000 + r(72000), UNCOMMON }, { i("lobster"), 7, UNCOMMON }, + { i("shark"), 7, UNCOMMON } }; + + public static final int[][] imp = { { i("ashes"), 1, ALWAYS }, + { i("red bead"), 1, UNCOMMON }, { i("yellow bead"), 1, UNCOMMON }, + { i("black bead"), 1, UNCOMMON }, { i("white bead"), 1, UNCOMMON }, + { i("tinderbox"), 1, UNCOMMON }, {i("ball of wool"), 1, COMMON}, + {i("hammer"), 1, COMMON}, {i("mind talisman"), 1, UNCOMMON}, + {i("burnt meat"), 1, UNCOMMON}, {1947, 1, UNCOMMON}, + {753, 1, UNCOMMON}, {i("tinder"), 1, UNCOMMON}, + {i("shears"), 1, UNCOMMON}, {i("bucket"), 1, UNCOMMON}, + {i("bucket of water"), 1, RARE}, {i("jug"), 1, RARE}, + {i("jug of water"), 1, RARE}, {i("jug of wine"), 1, RARE}, + {1931, 1, RARE}, {2311, 1, RARE}, {i("flier"), 1, RARE}}; + + public static final int[][] cavecrawler = { + {i("potato seed"), 1+r(3), COMMON}, {i("watermelon seed"), 1, UNCOMMON}, + {i("tomato seed"), 1+r(1), COMMON}, {i("onion seed"), 1+r(2), COMMON}, + {i("sweetcorn seed"), 1+r(1), COMMON}, {i("cabbage seed"), 1+r(1), COMMON}, + {i("strawberry seed"), 1, COMMON}, {239, 1, COMMON}, + {i("snape grass"), 1, RARE}, {235, 1, UNCOMMON}, + {223, 1, UNCOMMON}, {i("eye of newt"), 1, COMMON}, + {i("limpwurt root"), 1, COMMON}, {i("vial of water"), 1, COMMON}, + {i("earth rune"), 9+r(1), COMMON}, {i("nature rune"), 3, COMMON}, + {i("fire rune"), 12, COMMON}, {995, 3+r(26), COMMON}, + {i("bronze boots"), 1, UNCOMMON}, {187, 1, UNCOMMON}, + {199, 1+r(1), COMMON}, {201, 1+r(1), COMMON}, + {203, 1+r(1), COMMON}, {205, 1+r(1), COMMON}, + {207, 1+r(1), UNCOMMON}, {209, 1+r(1), UNCOMMON}, + {211, 1+r(1), UNCOMMON}, {213, 1+r(1), UNCOMMON}, + {215, 1+r(1), RARE}, {217, 1+r(1), RARE}, + {2485, 1+r(1), RARE}}; + + public static final int[][] crawlinghand = { { 526, 1, ALWAYS }, + { i("leather gloves"), 1, COMMON }, + { i("gold ring"), 1, UNCOMMON }, + { i("sapphire ring"), 1, UNCOMMON }, + { i("emerald ring"), 1, UNCOMMON }, + { i("ruby ring"), 1, UNCOMMON }, { 995, 5 + r(437), COMMON }, + { i("ashes"), 1, UNCOMMON }, { 2902, 1, COMMON }, + { 2912, 1, UNCOMMON }, { 2922, 1, UNCOMMON }, + { 2932, 1, UNCOMMON }, { 2942, 1, UNCOMMON }, + { 4115, 1, VERY_RARE + r(20) } }; + + public static final int[][] bronzedragon = { + { i("dragon bones"), 1, ALWAYS }, { i("bronze bar"), 5, ALWAYS }, + { i("adamant javelin"), 30 + r(30), COMMON }, + { i("adamant dart"), 16, UNCOMMON }, + { i("mithril axe"), 1, UNCOMMON }, + { i("mithril 2h sword"), 1, UNCOMMON }, + { i("mithril battleaxe"), 1, UNCOMMON }, + { i("rune knife"), 2 + r(3), UNCOMMON }, + { i("rune javelin"), 1, RARE }, { i("rune longsword"), 1, RARE }, + { i("rune battleaxe"), 1, RARE }, + { i("dragon dagger"), 1, VERY_RARE }, + { i("mithril kiteshield"), 1, UNCOMMON }, + { i("adamant platebody"), 1, RARE }, + { i("rune sq shield"), 1, RARE }, + { i("dragon plateskirt"), 1, VERY_RARE + 1498 }, + { i("dragon platelegs"), 1, VERY_RARE + 1599 }, + { i("law rune"), 10 + r(35), COMMON }, + { i("fire rune"), 50 + r(100), UNCOMMON }, + { i("blood rune"), 15 + r(15), UNCOMMON }, + { i("nature rune"), 67, UNCOMMON }, + { i("death rune"), 25 + r(20), UNCOMMON }, + { i("adamant bar"), 1, RARE }, { i("runite bar"), 1, RARE } }; + + public static final int[][] blackdragon = { + { i("dragon bones"), 1, ALWAYS }, + { i("black dragonhide"), 1, ALWAYS }, + { i("mithril axe"), 1, UNCOMMON }, { i("black axe"), 1, UNCOMMON }, + { i("mithril battleaxe"), 1, UNCOMMON }, + { i("mithril 2h sword"), 1, UNCOMMON }, + { i("adamant platebody"), 1, UNCOMMON }, + { i("rune longsword"), 1, RARE }, { i("rune sq shield"), 1, RARE }, + { i("rune battleaxe"), 1, VERY_RARE }, + { i("rune 2h sword"), 1, VERY_RARE }, + { i("adamant dart"), 16, COMMON }, + { i("rune knife"), 2, UNCOMMON }, { i("rune dart"), 10, UNCOMMON }, + { i("air rune"), 75, UNCOMMON }, { i("blood rune"), 15, UNCOMMON }, + { i("death rune"), 5 + r(45), UNCOMMON }, + { i("fire rune"), 50, UNCOMMON }, + { i("law rune"), 10 + r(35), UNCOMMON }, + { i("nature rune"), 67 + r(12), UNCOMMON }, + { i("chaos rune"), 90, UNCOMMON }, + { i("adamant bar"), 1 + r(1), UNCOMMON }, + { i("steel bar"), 1, VERY_RARE }, { 995, 129 + r(2771), COMMON }, + { i("chocolate cake"), 1, UNCOMMON } }; + + public static final int[][] irondragon = { + { i("dragon bones"), 1, ALWAYS }, { i("iron bar"), 5, ALWAYS }, + { i("adamant 2h sword"), 1, UNCOMMON }, + { i("adamant battleaxe"), 1, UNCOMMON }, + { i("adamant axe"), 1, UNCOMMON }, { i("rune axe"), 1, RARE }, + { i("rune mace"), 1, RARE }, { i("rune longsword"), 1, RARE }, + { i("rune battleaxe"), 1, UNCOMMON }, + { i("rune 2h sword"), 1, VERY_RARE }, + { i("adamant sq shield"), 1, UNCOMMON }, + { i("rune med helm"), 1, RARE }, { i("rune full helm"), 1, RARE }, + { i("rune sq shield"), 1, RARE }, + { i("rune kiteshield"), 1, RARE }, + { i("dragon plateskirt"), 1, VERY_RARE + 592 }, + { i("dragon platelegs"), 1, VERY_RARE + 541 }, + { i("rune javelin"), 4 + r(4), COMMON }, + { i("rune dart"), 9, UNCOMMON }, + { i("rune knife"), 1 + r(6), UNCOMMON }, + { i("steel arrow"), 150, RARE }, { i("blood rune"), 15, COMMON }, + { i("soul rune"), 3 + r(2), UNCOMMON }, + { i("death rune"), 15 + r(30), RARE }, + { i("chaos rune"), 25 + r(25), RARE }, + { i("nature rune"), 60 + r(19), RARE }, + { i("law rune"), 45 + r(45), RARE }, + { i("adamant bar"), 2, UNCOMMON }, { i("runite bar"), 1, RARE }, + { 161, 1, COMMON }, { 145, 1, RARE }, { 2442, 1, RARE }, + { 995, 270 + r(2730), COMMON }, { i("curry"), 1 + r(1), UNCOMMON } }; + + public static final int[][] steeldragon = { + { i("dragon bones"), 1, ALWAYS }, { i("steel bar"), 5, ALWAYS }, + { i("rune axe"), 1, UNCOMMON }, { i("rune mace"), 1, COMMON }, + { i("rune battleaxe"), 1, RARE }, { i("rune 2h sword"), 1, RARE }, + { i("adamant kiteshield"), 1, UNCOMMON }, + { i("rune full helm"), 1, UNCOMMON }, + { i("rune sq shield"), 1, VERY_RARE }, + { i("dragon plateskirt"), 1, VERY_RARE + 30 }, + { i("dragon platelegs"), 1, VERY_RARE + 18 }, + { i("blood rune"), 20, COMMON }, { i("rune javelin"), 7, COMMON }, + { i("soul rune"), 5, UNCOMMON }, + { i("rune dart"), 9 + r(3), UNCOMMON }, + { i("rune knife"), 7, UNCOMMON }, { 995, 470 + r(12180), COMMON }, + { 145, 3, COMMON }, { 165, 2, UNCOMMON }, { 161, 1, UNCOMMON }, + { i("runite bar"), 1, UNCOMMON }, { 2011, 1 + r(1), UNCOMMON } }; + + public static final int[][] darkwizard = { { i("bones"), 1, ALWAYS }, + { i("earth rune"), 10 + r(26), COMMON }, + { i("air rune"), 10 + r(8), COMMON }, + { i("water rune"), 10 + r(8), COMMON }, + { i("fire rune"), 10 + r(8), COMMON }, + { i("mind rune"), 10 + r(8), COMMON }, + { i("body rune"), 10 + r(8), COMMON }, + { i("chaos rune"), 3 + r(2), COMMON }, + { i("nature rune"), 2 + r(3), UNCOMMON }, + { i("law rune"), 3, COMMON }, + { i("cosmic rune"), 2 + r(2), UNCOMMON }, + { i("blood rune"), 2 + r(2), COMMON }, { 995, 1 + r(29), COMMON }, + { i("staff"), 1, COMMON }, { i("staff of air"), 1, COMMON }, + { 1017, 1, COMMON }, { 581, 1, COMMON }, + { i("fire talisman"), 1, COMMON }, + { i("earth talisman"), 1, VERY_RARE }, + { i("mind talisman"), 1, RARE }, + { i("staff of water"), 1, VERY_RARE } }; + + public static final int[][] highwayman = { { i("bones"), 1, ALWAYS }, + { 1019, 1, ALWAYS } }; + + public static final int[][] chaosdruid = { { 526, 1, ALWAYS }, + { 199, 1 + r(1), COMMON }, { 201, 1 + r(1), COMMON }, + { 203, 1 + r(1), COMMON }, { 205, 1 + r(1), COMMON }, + { 211, 1 + r(1), UNCOMMON }, { 209, 1 + r(1), UNCOMMON }, + { 213, 1 + r(1), UNCOMMON }, { 207, 1 + r(1), UNCOMMON }, + { 2485, 1 + r(1), UNCOMMON }, { 217, 1 + r(1), UNCOMMON }, + { 215, 1 + r(1), UNCOMMON }, { 219, 1 + r(1), VERY_RARE }, + { i("law rune"), 2, COMMON }, { i("body rune"), 9, COMMON }, + { i("air rune"), 9 + r(27), COMMON }, + { i("earth rune"), 9, COMMON }, { i("mind rune"), 12, COMMON }, + { i("nature rune"), 3, UNCOMMON }, { 995, 2 + r(483), COMMON }, + { i("vail of water"), 1, COMMON }, { 540, 1, COMMON }, + { 538, 1, COMMON }, { i("bronze longsword"), 1, UNCOMMON }, + { i("snape grass"), 1, RARE }, { i("unholy mould"), 1, RARE }, + { i("cosmic talisman"), 1, VERY_RARE }, + { i("iron med helm"), 1, VERY_RARE }, + { i("uncut jade"), 1, VERY_RARE } }; + + public static final int[][] jailer = { { 526, 1, ALWAYS }, + { i("jail key"), 1, ALWAYS }}; + + public static final int[][] wyvern = {{ 6812, 1, ALWAYS}, + {i("mithril sword"), 1, COMMON}, {i("black axe"), 1, UNCOMMON}, + {i("adamant axe"), 1, UNCOMMON}, {i("snakeskin chaps"), 1, UNCOMMON}, + {i("earth battlesatff"), 1, RARE}, {i("granite legs"), 1, RARE}, + {7937, 60, RARE}, {i("air rune"), 10+r(54), UNCOMMON}, + {i("water rune"), 11+r(22), UNCOMMON}, {i("chaos rune"), 10, UNCOMMON}, + {i("law rune"), 2+r(3), UNCOMMON}, {i("blood rune"), 2+r(9), UNCOMMON}, + {i("soul rune"), 5+r(9), UNCOMMON}, {i("death rune"), 1+r(4), UNCOMMON}, + {i("belladonna seed"), 1, UNCOMMON}, {i("cadantine seed"), 1, UNCOMMON}, + {i("dwarf weed seed"), 1, UNCOMMON}, {i("snapdragon seed"), 1, UNCOMMON}, + {i("jangerberry seed"), 1, UNCOMMON}, {i("limpwurt seed"), 1, UNCOMMON}, + {i("marentill seed"), 1, UNCOMMON}, {5282, 1, UNCOMMON}, + {i("ranarr seed"), 1, UNCOMMON}, {i("strawberry seed"), 1, UNCOMMON}, + {i("tarromin seed"), 1, UNCOMMON}, {i("watermelon seed"), 1, UNCOMMON}, + {i("whiteberry seed"), 1, UNCOMMON}, {i("wildblood seed"), 1, UNCOMMON}, + {i("toadflax seed"), 1, UNCOMMON}, {i("harralander seed"), 1, UNCOMMON}, + {995, 20+r(400), COMMON}, {i("lobster"), 3, UNCOMMON}, + {i("bass"), 1, UNCOMMON}, {149, 1, UNCOMMON}, + {133, 1, UNCOMMON}, {199, 1, UNCOMMON}, + {201, 1, UNCOMMON}, {203, 1, UNCOMMON}, + {205, 1, UNCOMMON}, {207, 1, UNCOMMON}, + {209, 1, UNCOMMON}, {211, 1, UNCOMMON}, + {213, 1, UNCOMMON}, {215, 1, UNCOMMON}, + {217, 1, UNCOMMON}, {2485, 1, UNCOMMON}, + }; + + public static final int[][] alwaysbones = { { 526, 1, ALWAYS } }; + + public static final int[][] bat = { { i("batbones"), 1, ALWAYS } }; +} diff --git a/2006Redone Server/src/redone/game/npcs/drops/NPCDropsHandler.java b/2006Redone Server/src/redone/game/npcs/drops/NPCDropsHandler.java new file mode 100644 index 00000000..67913236 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/drops/NPCDropsHandler.java @@ -0,0 +1,249 @@ +package redone.game.npcs.drops; + +import redone.Server; +import redone.game.items.ItemList; +import redone.util.Misc; + +/** + * Npc Drops Handler + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class NPCDropsHandler { + + public static int // found on http://runescape.wikia.com/wiki/Drop_rate + ALWAYS = 0, + COINSRATE = 3, CHICKEN_RATE = 75 / 100, + COMMON = 2 + r(48), + UNCOMMON = 51 + r(49), RARE = 101 + r(411), VERY_RARE = 513; + + /** + * Handles the npc drops for the npc names. + * + * @param NPCId + * @return + */ + public static final int[][] NPC_DROPS(String npc, int NPCId) { + if (npc.equals("man") || npc.equals("woman") || npc.equals("drunken_man")) { + return NPCDrops.man; + } else if (npc.equals("skeletal_wyvern")) { + return NPCDrops.wyvern; + } else if (npc.equals("dark_beast")) { + return NPCDrops.darkbeast; + } else if (npc.equals("shade")) { + return NPCDrops.shade; + } else if (npc.equals("watchman")) { + return NPCDrops.watchman; + } else if (npc.equals("river_troll")) { + return NPCDrops.rivertroll; + } else if (npc.equals("cave_crawler")) { + return NPCDrops.cavecrawler; + } else if (npc.equals("thief")) { + return NPCDrops.thief; + } else if (npc.equals("tzhaar-xil") || npc.equals("Tzhaar-Xil")) { + return NPCDrops.tzhaarxil; + } else if (npc.equals("tzhaar-ket") || npc.equals("Tzhaar-Ket")) { + return NPCDrops.tzhaarket; + } else if (npc.equals("tzhaar-hur") || npc.equals("Tzhaar-Hur")) { + return NPCDrops.tzhaarhur; + } else if (npc.equals("tzhaar-mej") || npc.equals("Tzhaar-Mej")) { + return NPCDrops.tzhaarmej; + } else if (npc.equals("tree_spirit")) { + return NPCDrops.treespirit; + } else if (npc.equals("unicorn")) { + return NPCDrops.unicorn; + } else if (npc.equals("evil_chicken")) { + return NPCDrops.evilchicken; + } else if (npc.equals("white_knight")) { + return NPCDrops.whiteknight; + } else if (npc.equals("black_knight")) { + return NPCDrops.blackknight; + } else if (npc.equals("bear")) { + return NPCDrops.bear; + } else if (npc.equals("jogre")) { + return NPCDrops.jogre; + } else if (npc.equals("ogre")) { + return NPCDrops.ogre; + } else if (npc.equals("chaos_druid")) { + return NPCDrops.chaosdruid; + } else if (npc.equals("jailer")) { + return NPCDrops.jailer; + } else if (npc.equals("fire_giant") || npc.equals("Fire_giant")) { + return NPCDrops.firegiant; + } else if (npc.equals("basilisk")) { + return NPCDrops.basilisk; + } else if (npc.equals("baby_blue_dragon") + || npc.equals("baby_red_dragon") || npc.equals("baby_dragon")) { + return NPCDrops.babybluedragon; + } else if (npc.equals("red_dragon")) { + return NPCDrops.reddragon; + } else if (npc.equals("elf_warrior")) { + return NPCDrops.elfwarrior; + } else if (npc.equals("dagannoth")) { + return NPCDrops.dagannoth; + } else if (npc.equals("giant_mole")) { + return NPCDrops.giantmole; + } else if (npc.equals("dagannoth_supreme")) { + return NPCDrops.dagannothsupereme; + } else if (npc.equals("chaos_elemental")) { + return NPCDrops.chaoselemental; + } else if (npc.equals("dagannoth_prime")) { + return NPCDrops.dagannothprime; + } else if (npc.equals("dagannoth_rex")) { + return NPCDrops.daggannothrex; + } else if (npc.equals("monkey_guard")) { + return NPCDrops.monkeyguard; + } else if (npc.equals("monk")) { + return NPCDrops.monk; + } else if (npc.equals("abyssal_demon")) { + return NPCDrops.abyssaldemon; + } else if (npc.equals("pyrefiend")) { + return NPCDrops.pyrefiend; + } else if (npc.equals("aberrant_spectre") + || npc.equals("aberrant_specter") + || npc.equals("Aberant_specter")) { + return NPCDrops.abberantspectre; + } else if (npc.equals("earth_warrior")) { + return NPCDrops.earthwarrior; + } else if (npc.equals("gargoyle")) { + return NPCDrops.gargoyle; + } else if (npc.equals("dust_devil") || npc.equals("dustdevil")) { + return NPCDrops.dustdevil; + } else if (npc.equals("cockatrice")) { + return NPCDrops.cockatrice; + } else if (npc.equals("infernal_mage")) { + return NPCDrops.infernalmage; + } else if (npc.equals("nechryael")) { + return NPCDrops.nechryael; + } else if (npc.equals("bloodveld")) { + return NPCDrops.bloodveld; + } else if (npc.equals("turoth")) { + return NPCDrops.turoth; + } else if (npc.equals("banshee")) { + return NPCDrops.banshee; + } else if (npc.equals("crawling_hand")) { + return NPCDrops.crawlinghand; + } else if (npc.equals("highwayman")) { + return NPCDrops.highwayman; + } else if (npc.equals("wild_dog") || npc.equals("battle_mage")) { + return NPCDrops.alwaysbones; + } else if (npc.equals("kalphite_queen")) { + return NPCDrops.kalphitequeen; + } else if (npc.equals("kalphite_worker")) { + return NPCDrops.kalphiteworker; + } else if (npc.equals("kalphite_soldier")) { + return NPCDrops.kalphitesolider; + } else if (npc.equals("kalphite_guardian")) { + return NPCDrops.kalphiteguardian; + } else if (npc.equals("bat") || npc.equals("giant_bat")) { + return NPCDrops.bat; + } else if (npc.equals("bronze_dragon")) { + return NPCDrops.bronzedragon; + } else if (npc.equals("black_dragon")) { + return NPCDrops.blackdragon; + } else if (npc.equals("iron_dragon")) { + return NPCDrops.irondragon; + } else if (npc.equals("steel_dragon")) { + return NPCDrops.steeldragon; + } else if (npc.equals("moss_giant")) { + return NPCDrops.mossgiant; + } else if (npc.equals("greater_demon")) { + return NPCDrops.greaterdemon; + } else if (npc.equals("black_demon")) { + return NPCDrops.blackdemon; + } else if (npc.equals("dwarf")) { + return NPCDrops.dwarf; + } else if (npc.equals("jelly")) { + return NPCDrops.jelly; + } else if (npc.equals("rock_crab")) { + return NPCDrops.rockcrab; + } else if (npc.equals("rockslug")) { + return NPCDrops.rockslug; + } else if (npc.equals("king_black_dragon")) { + return NPCDrops.kingblackdragon; + } else if (npc.equals("green_dragon")) { + return NPCDrops.greendragon; + } else if (npc.equals("blue_dragon")) { + return NPCDrops.bluedragon; + } else if (npc.equals("goblin")) { + return NPCDrops.goblin; + } else if (npc.equals("lesser_demon") || npc.equals("Lesser_demon") + || npc.equals("lesserdemon")) { + return NPCDrops.lesserdemon; + } else if (npc.equals("guard") || npc.equals("jail_guard")) { + return NPCDrops.guard; + } else if (npc.equals("al-kharid_warrior")) { + return NPCDrops.alkharidwarrior; + } else if (npc.equals("ice_warrior")) { + return NPCDrops.icewarrior; + } else if (npc.equals("kurask")) { + return NPCDrops.kurask; + } else if (npc.equals("ice_giant")) { + return NPCDrops.icegiant; + } else if (npc.equals("hobgoblin")) { + return NPCDrops.hobgoblin; + } else if (npc.equals("pirate")) { + return NPCDrops.pirate; + } else if (npc.equals("zombie")) { + return NPCDrops.zombie; + } else if (npc.equals("skeleton")) { + return NPCDrops.skeleton; + } else if (npc.equals("deadly_red_spider")) { + return NPCDrops.deadlyredspider; + } else if (npc.equals("rat")) { + return NPCDrops.rat; + } else if (npc.equals("imp")) { + return NPCDrops.imp; + } else if (npc.equals("cow") || npc.equals("cow_calf")) { + return NPCDrops.cow; + } else if (npc.equals("chicken") || npc.equals("rooster")) { + return NPCDrops.chicken; + } else if (npc.equals("hill_giant")) { + return NPCDrops.hillgiant; + } else if (npc.equals("giant_rat")) { + return NPCDrops.giantrat; + } else if (npc.equals("dark_wizard")) { + return NPCDrops.darkwizard; + } else { + return NPCDrops.DEFAULT; + } + } + + /** + * Gets the item name + * + * @param ItemID + * @return + */ + public static int i(String ItemName) { + return getItemId(ItemName); + } + + /** + * Item name main method + * + * @param itemName + * @return + */ + public static int getItemId(String itemName) { + for (ItemList i : Server.itemHandler.ItemList) { + if (i != null) { + if (i.itemName.equalsIgnoreCase(itemName)) { + return i.itemId; + } + } + } + return -1; + } + + /** + * Misc.random in shorter form + * + * @param random + * @return + */ + public static int r(int random) { + return Misc.random(random); + } + +} diff --git a/2006Redone Server/src/redone/game/npcs/impl/MilkCow.java b/2006Redone Server/src/redone/game/npcs/impl/MilkCow.java new file mode 100644 index 00000000..9528889e --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/impl/MilkCow.java @@ -0,0 +1,50 @@ +package redone.game.npcs.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; + +/** + * @author Tom + */ + +public class MilkCow { + + /** + * The empty bucket Id + */ + private static int BUCKET = 1925; + + /** + * The bucket of milk Id + */ + private static int BUCKET_OF_MILK = 1927; + + public static void milk(final Client c) { + if (!c.getItemAssistant().playerHasItem(BUCKET)) { + c.getActionSender().sendMessage("You need a bucket in order to milk this cow."); + return; + } else { + c.startAnimation(2305); + c.milking = true; + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + + @Override + public void execute(CycleEventContainer container) { + c.getItemAssistant().deleteItem2(BUCKET, 1); + c.getActionSender().sendMessage("You milk the cow."); + c.getItemAssistant().addItem(BUCKET_OF_MILK, 1); + container.stop(); + } + + @Override + public void stop() { + c.milking = false; + } + }, 7); + return; + } + } + +} diff --git a/2006Redone Server/src/redone/game/npcs/impl/Pets.java b/2006Redone Server/src/redone/game/npcs/impl/Pets.java new file mode 100644 index 00000000..071dc284 --- /dev/null +++ b/2006Redone Server/src/redone/game/npcs/impl/Pets.java @@ -0,0 +1,90 @@ +package redone.game.npcs.impl; + +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; + +public class Pets { + + private final int[][] catArray = { { 3505, 7583 }, { 3506, 7584 }, + { 766, 1560 }, { 3507, 7585 }, { 765, 1559 }, { 764, 1558 }, + { 763, 1557 }, { 762, 1556 }, { 761, 1555 }, { 768, 1561 }, + { 769, 1562 }, { 770, 1563 }, { 771, 1564 }, { 772, 1565 }, + { 773, 1566 } }; + + public static final int[] CAT_ITEMS = { 1555, 1556, 1557, 1558, 1559, 1560, + 1561, 1562, 1563, 1564, 1565, 7585, 7584 }; + + public void pickUp(Client c, int Type) { + for (Npc i : NpcHandler.npcs) { + if (i == null) { + continue; + } + } + for (Npc i : NpcHandler.npcs) { + if (i != null) { + if (i.npcType == Type) { + if (i.spawnedBy == c.playerId && i.spawnedBy > 0) { + i.absX = 0; + i.absY = 0; + i = null; + break; + } + } + } + } + } + + public void pickUpClean(Client c, int id) { + for (int[] element : catArray) { + if (element[0] == id) { + c.getItemAssistant().addItem(element[1], 1); + } + } + for (Npc i : NpcHandler.npcs) { + if (i == null) { + continue; + } + if (i.npcType == id) { + i.absX = 0; + i.absY = 0; + } + } + c.hasNpc = false; + } + + public static int summonItemId(int itemId) { + if (itemId == 1555) { + return 761; + } else if (itemId == 1556) { + return 762; + } else if (itemId == 1557) { + return 763; + } else if (itemId == 1558) { + return 764; + } else if (itemId == 1559) { + return 765; + } else if (itemId == 1560) { + return 766; + } else if (itemId == 1561) { + return 768; + } else if (itemId == 1562) { + return 769; + } else if (itemId == 1563) { + return 770; + } else if (itemId == 1564) { + return 771; + } else if (itemId == 1565) { + return 772; + } else if (itemId == 1566) { + return 773; + } else if (itemId == 7585) { + return 3507; + } else if (itemId == 7584) { + return 3506; + } else if (itemId == 7583) { + return 3505; + } + return 0; + } +} diff --git a/2006Redone Server/src/redone/game/objects/Object.java b/2006Redone Server/src/redone/game/objects/Object.java new file mode 100644 index 00000000..e557104c --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/Object.java @@ -0,0 +1,34 @@ +package redone.game.objects; + +import redone.Server; + +public class Object { + + public int objectId; + public int objectX; + public int objectY; + public int height; + public int face, faceOriginal; + public int type; + public int newId; + public int tick; + + public Object(int ID, int X, int Y, int Height, int Face, int Type, int NewId, int Tick) { + Object p = Server.objectManager.getObject(X, Y, Height); + if (p != null) { + if (ID == p.objectId) { + return; + } + } + objectId = ID; + objectX = X; + objectY = Y; + height = Height; + face = Face; + type = Type; + newId = NewId; + tick = Tick; + Server.objectManager.addObject(this); + } + +} diff --git a/2006Redone Server/src/redone/game/objects/ObjectDefaults.java b/2006Redone Server/src/redone/game/objects/ObjectDefaults.java new file mode 100644 index 00000000..4dee71c9 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/ObjectDefaults.java @@ -0,0 +1,61 @@ +package redone.game.objects; + +import redone.game.players.Client; +import redone.world.clip.ObjectDef; + +/** + * ObjectDefaults + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class ObjectDefaults { + + private static int + SOUTH = 0, + NORTH = 1, + EAST = 2, + WEST = 3; + + public static int getObjectType(Client player, int objectType) { + String objectName = ObjectDef.getObjectDef(objectType).name; + if (objectName.contains("Wardrobe") || objectName.contains("chest") || objectName.contains("Cupboard") || objectName.contains("Coffin")) { + return 10; + } + return 0; + } + + public static int getObjectFace(Client player, int objectType) { + switch (objectType) { + case 388: + case 389: + if (player.objectX == 3112 || player.objectX == 3104 || player.objectX == 3096) { + return EAST; + } else { + return SOUTH; + } + case 1528: + case 1529: + return player.objectX == 3172 ? WEST : EAST; + case 14879: + return 1; + case 1568: + return player.objectX == 3405 ? EAST : SOUTH; + case 375: + case 376: + case 377: + return player.objectX == 3096 ? NORTH : SOUTH; + case 399: + return player.objectX == 3096 && player.objectY == 3469 ? WEST : player.objectX == 3096 ? SOUTH : EAST; + case 398: + return player.objectX == 3096 && player.objectY == 3469 ? WEST : player.objectX == 3096 ? SOUTH : EAST; + case 3193: + return player.objectX == 3381 ? EAST : NORTH; + case 378: + return player.objectX == 3096 ? NORTH : SOUTH; + case 3194: + return player.objectX == 3381 ? EAST : NORTH; + } + return SOUTH; + } + +} diff --git a/2006Redone Server/src/redone/game/objects/Objects.java b/2006Redone Server/src/redone/game/objects/Objects.java new file mode 100644 index 00000000..65822c68 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/Objects.java @@ -0,0 +1,51 @@ +package redone.game.objects; + +public class Objects { + + public long delay, oDelay; + public int xp, item, owner, target, times; + public boolean bait; + public String belongsTo; + public int objectId; + public int objectX; + public int objectY; + public int objectHeight; + public int objectFace; + public int objectType; + public int objectTicks; + + public int getObjectId() { + return objectId; + } + + public int getObjectX() { + return objectX; + } + + public int getObjectY() { + return objectY; + } + + public Objects(int id, int x, int y, int height, int face, int type, int ticks) { + objectId = id; + objectX = x; + objectY = y; + objectHeight = height; + objectFace = face; + objectType = type; + objectTicks = ticks; + } + + public int getObjectHeight() { + return objectHeight; + } + + public int getObjectFace() { + return objectFace; + } + + public int getObjectType() { + return objectType; + } + +} diff --git a/2006Redone Server/src/redone/game/objects/ObjectsActions.java b/2006Redone Server/src/redone/game/objects/ObjectsActions.java new file mode 100644 index 00000000..660617fb --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/ObjectsActions.java @@ -0,0 +1,2939 @@ +package redone.game.objects; + +import redone.Constants; +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.guilds.Guilds; +import redone.game.content.minigames.FightPits; +import redone.game.content.minigames.PestControl; +import redone.game.content.minigames.castlewars.CastleWarObjects; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.quests.QuestRewards; +import redone.game.content.random.Balloons; +import redone.game.content.random.PartyRoom; +import redone.game.content.randomevents.FreakyForester; +import redone.game.content.skills.agility.AgilityShortcut; +import redone.game.content.skills.core.Mining; +import redone.game.content.skills.core.Woodcutting; +import redone.game.content.skills.crafting.Spinning; +import redone.game.content.skills.farming.Farming; +import redone.game.content.skills.fletching.LogCutting; +import redone.game.content.skills.runecrafting.RuneCraftingActions; +import redone.game.content.skills.smithing.Smelting; +import redone.game.content.skills.thieving.Stalls; +import redone.game.content.skills.thieving.ThieveOther; +import redone.game.content.traveling.Desert; +import redone.game.globalworldobjects.ClimbOther; +import redone.game.globalworldobjects.DoubleGates; +import redone.game.globalworldobjects.PassDoor; +import redone.game.globalworldobjects.SingleGates; +import redone.game.globalworldobjects.ClimbOther.ClimbData; +import redone.game.items.impl.LightSources; +import redone.game.npcs.NpcHandler; +import redone.game.npcs.impl.MilkCow; +import redone.game.objects.impl.AxeInLog; +import redone.game.objects.impl.BrimhavenVines; +import redone.game.objects.impl.Climbing; +import redone.game.objects.impl.FlourMill; +import redone.game.objects.impl.Levers; +import redone.game.objects.impl.OtherObjects; +import redone.game.objects.impl.Pickable; +import redone.game.objects.impl.Searching; +import redone.game.objects.impl.SpecialObjects; +import redone.game.objects.impl.UseOther; +import redone.game.objects.impl.Webs; +import redone.game.players.Client; +import redone.game.players.Position; +import redone.util.Misc; +import redone.world.clip.Region; + +public class ObjectsActions { + + private final Client player; + + public ObjectsActions(Client Client) { + player = Client; + } + + public void firstClickObject(int objectType, int objectX, int objectY) { + player.faceUpdate(0); + player.clickObjectType = 0; + player.turnPlayerTo(objectX, objectY); + if (!Region.objectExists(objectType, objectX, objectY, player.heightLevel)) { + player.getActionSender().sendMessage("This object does not exist. Please report this to a staff member."); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't click any objects until you confirm you are not botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (Webs.webs(player, objectType)) { + Webs.slashWeb(player, objectType, objectX, objectY); + return; + } + if (player.stopPlayerPacket == true) { + return; + } + LogCutting.resetFletching(player); + if (player.getGnomeStrongHold().gnomeCourse(objectType)) { + return; + } + if (player.getWildernessAgility().wildernessCourse(objectType)) { + return; + } + if (player.getBarbarianAgility().barbarianCourse(objectType)) { + return; + } + if (player.getPyramidAgility().pyramidCourse(objectType)) { + return; + } + if (player.getApeAtollAgility().apeAtollCourse(objectType)) { + return; + } + if (player.getWerewolfAgility().werewolfCourse(objectType)) { + return; + } + if (objectType >= 115 && objectType <= 121) { + Balloons.popBalloon(player, objectX, objectY); + return; + } + if (objectType >= 5103 && objectType <= 5107) { + BrimhavenVines.handleBrimhavenVines(player, objectType); + return; + } + ClimbOther.handleOpenOther(player, objectType); + for (ClimbData t: ClimbData.values()) { + if (objectType == t.getOpen()) { + ClimbOther.useOther(player, objectType); + } + } + OtherObjects.searchSpecialObject(player, objectType); + Searching.searchObject(player, objectType); + Levers.pullLever(player, objectType); + ThieveOther.lockedDoor(player, objectType); + SingleGates.useSingleGate(player, objectType); + DoubleGates.useDoubleGate(player, objectType); + PassDoor.processDoor(player, objectType); + switch (objectType) { + case 6: + player.getCannon().clickCannon(objectX, objectY); + break; + case 2091: + player.getMining().startMining(player, 0, player.objectX, player.objectY, player.clickObjectType); + break; + case 2095: + player.getMining().startMining(player, 1, player.objectX, player.objectY, player.clickObjectType); + break; + case 2093: + player.getMining().startMining(player, 2, player.objectX, player.objectY, player.clickObjectType); + break; + case 2097: + player.getMining().startMining(player, 3, player.objectX, player.objectY, player.clickObjectType); + break; + case 2103: + player.getMining().startMining(player, 4, player.objectX, player.objectY, player.clickObjectType); + break; + case 2105: + player.getMining().startMining(player, 5, player.objectX, player.objectY, player.clickObjectType); + break; + case 2107: + player.getMining().startMining(player, 6, player.objectX, player.objectY, player.clickObjectType); + break; + case 2090: + player.getMining().startMining(player, 7, player.objectX, player.objectY, player.clickObjectType); + break; + case 2094: + player.getMining().startMining(player, 8, player.objectX, player.objectY, player.clickObjectType); + break; + case 2092: + player.getMining().startMining(player, 9, player.objectX, player.objectY, player.clickObjectType); + break; + case 2096: + player.getMining().startMining(player, 10, player.objectX, player.objectY, player.clickObjectType); + break; + case 2102: + player.getMining().startMining(player, 11, player.objectX, player.objectY, player.clickObjectType); + break; + case 2104: + player.getMining().startMining(player, 12, player.objectX, player.objectY, player.clickObjectType); + break; + case 2106: + player.getMining().startMining(player, 13, player.objectX, player.objectY, player.clickObjectType); + break; + case 2100: + player.getMining().startMining(player, 14, player.objectX, player.objectY, player.clickObjectType); + break; + case 2101: + player.getMining().startMining(player, 15, player.objectX, player.objectY, player.clickObjectType); + break; + case 2098: + player.getMining().startMining(player, 16, player.objectX, player.objectY, player.clickObjectType); + break; + case 2099: + player.getMining().startMining(player, 17, player.objectX, player.objectY, player.clickObjectType); + break; + case 3042: + player.getMining().startMining(player, 18, player.objectX, player.objectY, player.clickObjectType); + break; + case 3043: + player.getMining().startMining(player, 19, player.objectX, player.objectY, player.clickObjectType); + break; + + case 6702: + case 6703: + case 6704: + case 6705: + case 6706: + case 6707: + player.getBarrows().useStairs(); + break; + + case 10284: + player.getBarrows().useChest(); + break; + + case 6823: + if(player.barrowsNpcs[0][1] == 0) { + NpcHandler.spawnNpc(player, 2030, player.getX(), player.getY()-1, 3, 0, 120, 25, 200, 200, true, true); + player.barrowsNpcs[0][1] = 1; + } else { + player.getActionSender().sendMessage("You have already searched in this sarcophagus."); + } + break; + + case 6772: + if(player.barrowsNpcs[1][1] == 0) { + NpcHandler.spawnNpc(player, 2029, player.getX()+1, player.getY(), 3, 0, 120, 20, 200, 200, true, true); + player.barrowsNpcs[1][1] = 1; + } else { + player.getActionSender().sendMessage("You have already searched in this sarcophagus."); + } + break; + + case 6822: + if(player.barrowsNpcs[2][1] == 0) { + NpcHandler.spawnNpc(player, 2028, player.getX(), player.getY()-1, 3, 0, 90, 17, 200, 200, true, true); + player.barrowsNpcs[2][1] = 1; + } else { + player.getActionSender().sendMessage("You have already searched in this sarcophagus."); + } + break; + + case 6773: + if(player.barrowsNpcs[3][1] == 0) { + NpcHandler.spawnNpc(player, 2027, player.getX(), player.getY()-1, 3, 0, 120, 23, 200, 200, true, true); + player.barrowsNpcs[3][1] = 1; + } else { + player.getActionSender().sendMessage("You have already searched in this sarcophagus."); + } + break; + + case 6771: + player.getDialogueHandler().sendDialogues(3222, 2026); + break; + + case 6821: + if(player.barrowsNpcs[5][1] == 0) { + NpcHandler.spawnNpc(player, 2025, player.getX()-1, player.getY(), 3, 0, 90, 19, 200, 200, true, true); + player.barrowsNpcs[5][1] = 1; + } else { + player.getActionSender().sendMessage("You have already searched in this sarcophagus."); + } + break; + + case 2145: + if (player.objectX == 3249 && player.objectY == 3192) { + player.getActionSender().object(2146, 3249, 3192, 0, 0, 10); + Region.addObject(2146, 3249, 3192, 0, 10, 0, false); + } + break; + + case 2146: + if (player.objectX == 3249 && player.objectY == 3192) { + player.getActionSender().object(2145, 3249, 3192, 0, 0, 10); + } + break; + + case 399: + if (player.objectX == 3096 && player.objectY == 3469) { + player.getActionSender().object(398, 3096, 3469, 0, 3, 10); + Region.addObject(398, 3096, 3469, 0, 10, 3, false); + } + break; + + case 398: + if (player.objectX == 3096 && player.objectY == 3469) { + player.getActionSender().object(399, 3096, 3469, 0, 3, 10); + } + break; + + case 3828: + if (player.objectX == 3509 && player.objectY == 9497) { + player.getPlayerAssistant().movePlayer(3507, 9494, 0); + } else { + player.getPlayerAssistant().movePlayer(3484, 9509, 2); + } + break; + + case 2271: + player.getActionSender().object(2272, 2984, 3336, 1, 10); + Region.addObject(2272, 2984, 336, 0, 10, 1, false); + player.getActionSender().sendMessage("You open the cupboard."); + break; + + case 2272: + if (player.knightS == 5) { + player.getActionSender().sendMessage("You search the cupboard..."); + player.getDialogueHandler().sendDialogues(659, -1); + player.knightS = 6; + } else { + player.getActionSender().sendMessage("You search the cupboard..."); + player.getActionSender().sendMessage("and don't find anything interesting."); + } + break; + + case 9038: + case 9039: + if (!player.getItemAssistant().playerHasItem(6306, 100) && player.absX == 2816) { + player.getDialogueHandler().sendStatement("You need 100 trading sticks to enter here."); + player.nextChat = 0; + return; + } + if (player.absY == 3082 || player.absY == 3085) { + player.getDialogueHandler().sendStatement("You can't enter from here."); + player.nextChat = 0; + return; + } + if (player.absX == 2816 && player.getItemAssistant().playerHasItem(6306, 100)) { + player.getPlayerAssistant().movePlayer(player.absX+1, player.absY, 0); + player.getItemAssistant().deleteItem2(6306, 100); + } else if (player.absX == 2817) { + player.getPlayerAssistant().movePlayer(player.absX+1, player.absY, 0); + } + break; + + case 12047: + case 12045: + if (player.absY == 4439 || player.absY == 4436 || player.absX == 2467 || player.absX == 2464) { + player.getDialogueHandler().sendStatement("You can't enter the gate from here."); + player.nextChat = 0; + return; + } + if (!player.getItemAssistant().playerHasItem(1601, 1)) { + if (player.absX == 2469 || player.absY == 4434) { + player.getDialogueHandler().sendStatement("You need 1 cut diamond to enter."); + player.nextChat = 0; + return; + } + } else if (player.absX == 2470) { + player.getPlayerAssistant().movePlayer(player.absX-1, player.absY, 0); + player.getActionSender().sendMessage("You pass through the gate."); + } else if (player.absY == 4433) { + player.getPlayerAssistant().movePlayer(player.absX, player.absY+1, 0); + player.getActionSender().sendMessage("You pass through the gate."); + } else if (player.absX == 2469) { + player.getItemAssistant().deleteItem(1601, 1); + player.getPlayerAssistant().movePlayer(player.absX+1, player.absY, 0); + player.getActionSender().sendMessage("You pass through the gate."); + } else if (player.absY == 4434) { + player.getItemAssistant().deleteItem(1601, 1); + player.getPlayerAssistant().movePlayer(player.absX, player.absY-1, 0); + player.getActionSender().sendMessage("You pass through the gate."); + } + break; + + case 69: + case 2178: + //if (c.objectX == 2675 && c.objectY == 3170) { + //c.getDH().sendDialogues(79, 0); + //} else { + if (player.playerLevel[player.playerFishing] <= 50) { + player.getActionSender().sendMessage("You need a fishing level of 50 or higher to play Fishing Trawler."); + return; + } + Server.trawler.getWaitingRoom().join(player); + //} + break; + + case 2179: + case 70: + Server.trawler.getWaitingRoom().leave(player); + break; + case 2167: + Server.trawler.fixHole(player, objectX, objectY); + break; + case 2166: + Server.trawler.showReward(player); + break; + case 2159: + case 2160: + player.trawlerFade(2676, 3170, 0); + break; + case 2175: + Server.trawler.downLadder(player, objectX, objectY); + break; + case 2174: + Server.trawler.upLadder(player, objectX, objectY); + break; + + case 2230: + case 2265: + player.getActionSender().sendMessage("You look at hajedys cart."); + break; + + case 10041: + player.getActionSender().sendMessage("You can't chop this tree."); + break; + + case 12163: + case 12164: + case 12165: + case 12166: + Woodcutting.handleCanoe(player, player.objectId); + break; + + case 5947: + if (player.inWild()) { + return; + } + if (player.getItemAssistant().playerHasItem(954) + && LightSources.playerHasLightSource(player)) { + player.getItemAssistant().deleteItem2(954, 1); + player.getPlayerAssistant().movePlayer(3168, 9572, 0); + return; + } else if (player.getItemAssistant().playerHasItem(954) + && !LightSources.playerHasLightSource(player)) { + player.getItemAssistant().deleteItem2(954, 1); + player.getPlayerAssistant().movePlayer(3168, 9572, 0); + return; + } else { + player.getActionSender().sendMessage( + "You need a rope to go down there."); + } + break; + + case 5946: + if (player.inWild()) { + return; + } + LightSources.brightness3(player); + player.getPlayerAssistant().movePlayer(3168, 3172, 0); + break; + + case 4490: + case 4487:// slayer tower doors + if (player.absY == 3535) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3536) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 5163: + player.getActionSender().sendMessage("This chest is empty."); + break; + + case 1506: + case 1508: + if (player.absX == 3291 || player.absX == 3294) { + return; + } + if (player.absY == 3167) { + player.getPlayerAssistant().movePlayer(player.absX, 3166, 0); + } else if (player.absY == 3166) { + player.getPlayerAssistant().movePlayer(player.absX, 3167, 0); + } + break; + + case 3832: + player.getPlayerAssistant().movePlayer(3509, 9496, 2); + break; + + case 2896: + case 2897: + if (player.playerRights < 3) { + player.getActionSender() + .sendMessage("You can't open that!"); + player.getPlayerAssistant().movePlayer(2728, 3349, 0); + } + break; + + case 5581: // take axe from log + AxeInLog.pullAxeFromLog(player, objectX, objectY); + break; + + case 2112: + if (player.absY == 9756 + && player.playerLevel[player.playerMining] >= 60) { + player.getPlayerAssistant().movePlayer(3046, 9757, 0); + player.getActionSender() + .sendMessage("You enter the guild."); + } else if (player.absY == 9757 + && player.playerLevel[player.playerMining] >= 60) { + player.getPlayerAssistant().movePlayer(3046, 9756, 0); + player.getActionSender() + .sendMessage("You enter the guild."); + } else if (player.playerLevel[player.playerMining] < 60) { + player.getActionSender().sendMessage( + "You need 60 mining to enter this guild"); + } + break; + + case 5008: + player.getPlayerAssistant().movePlayer(2838, 10124, 0); + break; + + case 5998: + player.getPlayerAssistant().movePlayer(2730, 3713, 0); + break; + + case 7258: + player.getPlayerAssistant().movePlayer(2906, 3537, 0); + break; + + case 10177: + player.getPlayerAssistant().movePlayer(1798, 4407, 3); + break; + + case 10193: + player.getPlayerAssistant().movePlayer(2545, 10143, 0); + break; + + case 8966: + player.getPlayerAssistant().movePlayer(2523, 3740, 0); + break; + + case 10194: + player.getPlayerAssistant().movePlayer(2542, 3740, 0); + break; + + case 10195: + player.getPlayerAssistant().movePlayer(1809, 4405, 2); + break; + + case 10196: + player.getPlayerAssistant().movePlayer(1807, 4405, 3); + break; + + case 10197: + player.getPlayerAssistant().movePlayer(1823, 4404, 2); + break; + + case 10198: + player.getPlayerAssistant().movePlayer(1825, 4404, 3); + break; + + case 10199: + player.getPlayerAssistant().movePlayer(1834, 4388, 2); + break; + + case 10200: + player.getPlayerAssistant().movePlayer(1834, 4390, 3); + break; + + case 10201: + player.getPlayerAssistant().movePlayer(1811, 4394, 1); + break; + + case 10202: + player.getPlayerAssistant().movePlayer(1812, 4394, 2); + break; + + case 10203: + player.getPlayerAssistant().movePlayer(1799, 4386, 2); + break; + + case 10204: + player.getPlayerAssistant().movePlayer(1799, 4388, 1); + break; + + case 10205: + player.getPlayerAssistant().movePlayer(1796, 4382, 1); + break; + + case 10206: + player.getPlayerAssistant().movePlayer(1796, 4382, 2); + break; + + case 10207: + player.getPlayerAssistant().movePlayer(1800, 4369, 2); + break; + + case 10208: + player.getPlayerAssistant().movePlayer(1802, 4370, 1); + break; + + case 10209: + player.getPlayerAssistant().movePlayer(1827, 4362, 1); + break; + + case 10210: + player.getPlayerAssistant().movePlayer(1825, 4362, 2); + break; + + case 10211: + player.getPlayerAssistant().movePlayer(1863, 4373, 2); + break; + + case 10212: + player.getPlayerAssistant().movePlayer(1863, 4371, 1); + break; + + case 10213: + player.getPlayerAssistant().movePlayer(1864, 4389, 1); + break; + + case 10214: + player.getPlayerAssistant().movePlayer(1864, 4387, 2); + break; + + case 10215: + player.getPlayerAssistant().movePlayer(1890, 4407, 0); + break; + + case 10216: + player.getPlayerAssistant().movePlayer(1890, 4406, 1); + break; + + case 10217: + player.getPlayerAssistant().movePlayer(1957, 4373, 1); + break; + + case 10218: + player.getPlayerAssistant().movePlayer(1957, 4371, 0); + break; + + case 10219: + player.getPlayerAssistant().movePlayer(1824, 4379, 3); + break; + + case 10220: + player.getPlayerAssistant().movePlayer(1824, 4381, 2); + break; + + case 10221: + player.getPlayerAssistant().movePlayer(1838, 4375, 2); + break; + + case 10222: + player.getPlayerAssistant().movePlayer(1838, 4377, 3); + break; + + case 10223: + player.getPlayerAssistant().movePlayer(1850, 4386, 1); + break; + + case 10224: + player.getPlayerAssistant().movePlayer(1850, 4387, 2); + break; + + case 10225: + player.getPlayerAssistant().movePlayer(1932, 4378, 1); + break; + + case 10226: + player.getPlayerAssistant().movePlayer(1932, 4380, 2); + break; + + case 10227: + if (player.objectX == 1961 && player.objectY == 4392) + player.getPlayerAssistant().movePlayer(1961, 4392, 2); + else + player.getPlayerAssistant().movePlayer(1932, 4377, 1); + break; + + case 10228: + player.getPlayerAssistant().movePlayer(1961, 4393, 3); + break; + + case 10229: + player.getPlayerAssistant().movePlayer(1912, 4367, 0); + break; + + case 10230: + player.getPlayerAssistant().movePlayer(2899, 4449, 0); + break; + + case 2620: + if (player.gertCat == 6) { + player.getActionSender().sendMessage("You have already found fluffs kitten."); + return; + } + if (player.gertCat == 5) { + player.getActionSender().sendMessage("You search the crate..."); + if (Misc.random(25) == 1) { + player.getItemAssistant().addItem(1554, 1); + player.gertCat = 6; + player.getActionSender().sendMessage("You find the kitten you should go back to fluffs."); + } else { + player.getActionSender().sendMessage("and find nothing..."); + } + player.getActionSender().sendMessage("and find nothing..."); + } + break; + + case 14921: + case 9390: + case 2781: + case 2785: + case 2966: + case 3294: + case 3413: + case 4304: + case 4305: + case 6189: + case 6190: + case 11009: + case 11010: + case 11666: + case 12100: + case 12809: + Smelting.startSmelting(player, objectType); + break; + + case 2156:// wizard tower (draynor) + player.getPlayerAssistant().startTeleport(3109, 3168, 0, "modern"); + break; + + case 2157:// dark wizard tower (falador) + player.getPlayerAssistant().startTeleport(2906, 3335, 0, "modern"); + break; + + case 2158:// thormac sorcer tower (cammy) + player.getPlayerAssistant().startTeleport(2702, 3398, 0, "modern"); + break; + + case 10596: + if (player.playerLevel[player.playerSlayer] < 72) { + player.getActionSender().sendMessage( + "You need 72 slayer to enter."); + return; + } else { + player.getActionSender().sendMessage( + "You enter the icy cavern."); + player.getPlayerAssistant().movePlayer(3056, 9555, 0); + } + break; + + case 10595: + player.getActionSender().sendMessage( + "You leave the icy cavern."); + player.getPlayerAssistant().movePlayer(3056, 9562, 0); + break; + + case 12982: + if (player.absY == 3278) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 3, 0); + } else if (player.absY == 3275) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 3, 0); + } + break; + + case 2266: + if (player.absY == 2963) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 2964) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 2606: + if (player.absY == 9599) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 9600) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 2634: + if (player.absX == 2837 + && player.playerLevel[player.playerMining] >= 50) { + player.getPlayerAssistant().movePlayer(player.absX + 3, + player.absY, 0); + } else if (player.absX == 2840 + && player.playerLevel[player.playerMining] >= 50) { + player.getPlayerAssistant().movePlayer(player.absX - 3, + player.absY, 0); + } else if (player.playerLevel[player.playerMining] < 50) { + player.getDialogueHandler().sendStatement("You need 50 mining to pass to this rock slide."); + player.nextChat = 0; + return; + } + break; + + case 1967: + case 1968: + if (player.absX == 2464 || player.absX == 2467) { + return; + } + if (player.absY == 3491) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 2, 0); + } else if (player.absY == 3493) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 2, 0); + } + break; + + case 4577: + if (player.absY == 3635) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3636) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 4551: + if (player.objectX == 2522 && player.objectY == 3597) { + player.getPlayerAssistant().movePlayer(2514, 3619, 0); + player.startAnimation(3067); + } + break; + + case 4558: + if (player.objectX == 2514 && player.objectY == 3617) { + player.getPlayerAssistant().movePlayer(2522, 3595, 0); + player.startAnimation(3067); + } + break; + + case 2216: + if (player.absX == 2876) { + player.getPlayerAssistant().movePlayer(2880, 2952, 0); + } else if (player.absX == 2880) { + player.getPlayerAssistant().movePlayer(2876, 2952, 0); + } + break; + + case 1804: + if (player.absY == 3449 + && player.getItemAssistant().playerHasItem(983, 1)) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3450 + && player.getItemAssistant().playerHasItem(983, 1)) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } else if (!player.getItemAssistant().playerHasItem(983, 1)) { + player.getDialogueHandler().sendStatement("You need a brass key to enter here."); + player.nextChat = 0; + } + break; + + case 135: + if (player.absY == 3353) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3354) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 1528:// curtain varrock pray altar + if (player.absY == 3390) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3391) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 95: + case 94: + case 90: + case 89: + case 5812: + case 2341: + player.getActionSender().sendMessage( + "Will be added later with the quest!"); + break; + + case 8689: + if (player.milking == false) { + MilkCow.milk(player); + } + break; + + case 24: + if (player.absX == 2764) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, 1); + } else if (player.absX == 2765) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 1); + } + break; + + case 2706: + if (player.absY == 3321) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3322) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 102: + if (player.absY == 3480) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absY == 3481) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } + break; + + case 9330: + case 9328: + case 9293: + case 11844: + case 9301: + case 9302: + case 2322: + case 2323: + case 2296: + case 5100: + case 5110: + case 5111: + case 14922: + case 3067: + case 9309: + case 9310: + case 2618: + case 2332: + case 5088: + case 5090: + case 4615: + case 4616: + case 3933: + case 12127: + case 9294: + case 9326: + case 9321: + case 993: + AgilityShortcut.processAgilityShortcut(player); + break; + + case 2612: + player.getActionSender().object(2613, 3096, 3269, 1, 0, 10); + Region.addObject(2613, 3096, 3269, 1, 10, 0, false); + player.getActionSender().sendMessage("You open the cupboard."); + break; + + case 2613: + player.getItemAssistant().addItem(1550, 1); + break; + + + case 9391: + case 62: + case 416: + case 6545: + case 3500: + player.getActionSender().sendMessage( + "This feature is currently disabled."); + break; + + case 2670: + Desert.cutCactus(player, Desert.getCacCutter(player), objectType, + objectX, objectY); + break; + + /** + * tutorial island objects + */ + + case 1519: + case 1516: + if (player.tutorialProgress == 28 && player.absX == 3129) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, player.heightLevel); + } else if (player.tutorialProgress == 28 && player.absX == 3128) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, player.heightLevel); + } + break; + + case 3015: + case 3016: + if (player.tutorialProgress == 7 || player.diedOnTut == true) { + if (player.diedOnTut == true) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + player.getActionSender().createArrow(3078, 3084, + player.getH(), 2); + player.getDialogueHandler().sendStatement2( + "You have died and have already beat this step", + "you may continue."); + } else if (player.diedOnTut == false) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + player.getDialogueHandler().sendDialogues(3020, -1); + } else { + player.getActionSender().sendMessage( + "You aren't on this part yet."); + return; + } + } + break; + + case 3018: // door again + if (player.tutorialProgress > 9) { + PassDoor.passThroughDoor(player, 3018, 1, 2, 0, -1, 0, 0); + if (player.diedOnTut) { + player.getDialogueHandler().sendStatement2( + "You have died and have already beat this step", + "you may continue."); + player.getActionSender().createArrow(3086, 3126, + player.getH(), 2); + } else { + player.getDialogueHandler().sendDialogues(3038, -1); + } + } + break; + + case 3017:// door tutorial island + if (player.tutorialProgress > 6 || player.diedOnTut) { + if (player.diedOnTut && Position.checkPosition(player, 3079, 3084, 0)) { + PassDoor.passThroughDoor(player, 3017, 3, 0, 0, -1, 0, 0); + player.getDialogueHandler().sendStatement2("You have died and have already beat this step", "you may continue."); + player.getActionSender().createArrow(3072, 3090, player.getH(), 2); + } else if (player.diedOnTut == false && Position.checkPosition(player, 3079, 3084, 0)) { + PassDoor.passThroughDoor(player, 3017, 3, 0, 0, -1, 0, 0); + player.getActionSender().drawHeadicon(1, 3, 0, 0); + } + } else { + player.getActionSender().sendMessage("You aren't on this part yet."); + return; + } + break; + + case 3025: + if (player.tutorialProgress >= 28) { + if (Position.checkPosition(player, 3129, 3124, 0)) { + PassDoor.passThroughDoor(player, 3025, 3, 0, 0, 1, 0, 0); + } + // client.getPacketDispatcher().tutorialIslandInterface(70, + // 15); + player.getActionSender().chatbox(6180); + player.getDialogueHandler() + .chatboxText( + player, + "Follow the path to the chapel and enter it.", + "Once inside talk to the monk. He'll tell you all about the skill.", + "", "", "Prayer"); + player.getActionSender().chatbox(6179); + player.getActionSender().drawHeadicon(1, 8, 0, 0); // sends + // to + // prayer + // dude + } + + break; + case 3026: + if (player.tutorialProgress >= 32) { + // client.getPacketDispatcher().tutorialIslandInterface(80, + // 17); + player.getActionSender().drawHeadicon(1, 9, 0, 0); // sends + // to + // prayer + // dude + if (Position.checkPosition(player, 3122, 3103, 0)) { + PassDoor.passThroughDoor(player, 3026, 0, 1, 0, 0, -1, 0); + } + } + break; + + case 3024: + if (player.tutorialProgress >= 27) { + if (Position.checkPosition(player, 3124, 3124, 0)) { + PassDoor.passThroughDoor(player, 3024, 3, 0, 0, 1, 0, 0); + } + // client.getPacketDispatcher().tutorialIslandInterface(65, + // 14); + player.getActionSender().chatbox(6180); + player.getDialogueHandler() + .chatboxText( + player, + "The guide here will tell you all about making cash. Just click on", + "him to hear what he's got to say.", "", "", + "Financial advice"); + player.getActionSender().chatbox(6179); + player.getActionSender().drawHeadicon(1, 7, 0, 0); + } + break; + + case 3045: + if (player.tutorialProgress == 26) { + player.getPlayerAssistant().openUpBank(); + // client.getPacketDispatcher().tutorialIslandInterface(60, + // 13); + player.getActionSender().createArrow(3125, 3124, + player.getH(), 2); + player.getActionSender().chatbox(6180); + player.getDialogueHandler() + .chatboxText( + player, + "You can store stuff here for safekeeping. If you die anything", + "in your bank will be saved. To deposit something, rich click it", + "and select 'store'. Once you've had a good look, close the", + "window and move on through the door indicated.", + "This is your bank box"); + player.getActionSender().chatbox(6179); + player.tutorialProgress = 27; + player.getActionSender().createArrow(1, 7); + } else if (player.tutorialProgress >= 27) { + player.getDialogueHandler().sendDialogues(1013, 494); + } + break; + + case 3039: + if (player.getItemAssistant().playerHasItem(2307) && player.tutorialProgress >= 8) { + player.startAnimation(896); + player.getPlayerAssistant().requestUpdates(); + player.getItemAssistant().deleteItem(2307, 1); + player.getItemAssistant().addItem(2309, 1); + player.getDialogueHandler().sendDialogues(3037, -1); + } + break; + + case 3019: + if (player.tutorialProgress >= 11 || player.diedOnTut) { + if (player.diedOnTut && Position.checkPosition(player, 3086, 3126, 0)) { + PassDoor.passThroughDoor(player, 3019, 2, 3, 0, 0, -1, 0); + player.getDialogueHandler().sendStatement2( + "You have died and have already beat this step", + "you may continue."); + player.getActionSender().createArrow(3088, 3119, + player.getH(), 2); + } else { + if (Position.checkPosition(player, 3086, 3126, 0)) { + player.getDialogueHandler().sendDialogues(3042, -1); + } + } + } + break; + + + case 3014: + if (Position.checkPosition(player, 3097, 3107, 0) && player.tutorialProgress >= 2) { + PassDoor.passThroughDoor(player, 3014, 1, 0, 0, 1, 0, 0); + player.getDialogueHandler().sendDialogues(3011, -1); + player.getActionSender().createArrow(1, 2); + } else if (Position.checkPosition(player, 3097, 3107, 0) && player.diedOnTut) { + player.getActionSender().createArrow(3089, 3092, player.getH(), 2); + player.getDialogueHandler().sendStatement2("You have died and have already beat this step", "you may continue."); + } else if (player.tutorialProgress < 2 && player.diedOnTut != true) { + player.getActionSender().sendMessage("You aren't on this step yet."); + return; + } + break; + + case 9299: + if (player.absX == 3240) { + if (player.absY == 3191) { + player.getPlayerAssistant().walkTo(0, -1); + player.getPlayerAssistant().sendFrame36(173, 0); + player.playerWalkIndex = 749; + player.getPlayerAssistant().requestUpdates(); + //PlayerAssistant.sendFrame36(c, 173,1); + + } else { + player.getPlayerAssistant().walkTo(0, 1); + player.playerWalkIndex = 749; + player.getPlayerAssistant().requestUpdates(); + } + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + // TODO Auto-generated method stub + player.getPlayerAssistant().setAnimationBack(); + player.stopPlayerPacket = false; + container.stop(); + } + + @Override + public void stop() { + // TODO Auto-generated method stub + + } + + }, 1); + } else { + player.getActionSender().sendMessage("You can't do that from here."); + } + break; + + case 3020: + case 3021: + if (player.diedOnTut == true && (player.getY() == 9502 || player.getY() == 9503)) { + player.getDialogueHandler() + .sendStatement2( + "You have died so now all you need to do is continue", + "onto the next step."); + player.getActionSender().createArrow(3111, 9518, + player.getH(), 2); + } else if (player.diedOnTut == false && player.tutorialProgress >= 21 && (player.getY() == 9502 || player.getY() == 9503)) { + player.getActionSender().chatbox(6180); + player.getDialogueHandler() + .chatboxText( + player, + "In this area you will find out about combat with swords and", + "bows. Speak to the guide and he will tell you all about it.", + "", "", "Combat"); + player.getActionSender().chatbox(6179); + player.getActionSender().object(-1, 3094, 9502, 0, 0); + player.getActionSender().object(3021, 3095, 9502, 7, 0); + + player.getActionSender().object(-1, 3094, 9503, 0, 0); + player.getActionSender().object(3020, 3095, 9503, 1, 0); + + player.getPlayerAssistant().walkTo(1, 0); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getActionSender().object(3020, 3094, 9503, + 2, 0); + player.getActionSender().object(3021, 3094, 9502, + 2, 0); + // others + player.getActionSender().object(-1, 3095, 9502, 0, + 0); + player.getActionSender().object(-1, 3095, 9503, 0, + 0); + player.getActionSender().createArrow(1, 6); // draws + // headicon + // to + // combat dude + + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + } + break; + + case 3023: + case 3022: + if (player.tutorialProgress >= 24 + && (player.getY() == 9519 || player.getY() == 9518) + || player.diedOnTut == true) { + if (player.diedOnTut == true) { + player.getDialogueHandler() + .sendStatement2("Be more careful this time", + "now continue to kill the rat and talk to the guide."); + } + player.getActionSender().chatbox(6180); + player.getDialogueHandler() + .chatboxText( + player, + "", + "To attack the rat, right click it and select the attack option. you", + "will then walk over to it and start hitting it.", + "", "Attacking"); + player.getActionSender().chatbox(6179); + player.getActionSender().object(-1, 3111, 9518, 0, 0); + player.getActionSender().object(3022, 3110, 9518, 7, 0); + + player.getActionSender().object(-1, 3111, 9519, 0, 0); + player.getActionSender().object(3023, 3110, 9519, 1, 0); + + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + + player.getActionSender().object(3022, 3111, 9518, + 0, 0); + player.getActionSender().object(3023, 3111, 9519, + 0, 0); + // others + player.getActionSender().object(-1, 3110, 9518, 7, + 0); + player.getActionSender().object(-1, 3110, 9519, 1, + 0); + player.getActionSender().createArrow(1, 6); // draws + // headicon + // to combat ude + + container.stop(); + } + @Override + public void stop() { + + } + }, 4); + } else if (player.tutorialProgress >= 25 + && (player.getY() == 9519 || player.getY() == 9518)) { + player.getActionSender().object(-1, 3111, 9518, 0, 0); + player.getActionSender().object(3022, 3110, 9518, 7, 0); + + player.getActionSender().object(-1, 3111, 9519, 0, 0); + player.getActionSender().object(3023, 3110, 9519, 1, 0); + + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + + player.getActionSender().object(3022, 3111, 9518, + 0, 0); + player.getActionSender().object(3023, 3111, 9519, + 0, 0); + // others + player.getActionSender().object(-1, 3110, 9518, 7, + 0); + player.getActionSender().object(-1, 3110, 9519, 1, + 0); + + container.stop(); + } + @Override + public void stop() { + + } + }, 4); + } + break; + + // tutorial stuff end + + case 12349: + case 12350: + if (player.absX == 3213) { + if (player.absY == 3221 || player.absY == 3222) { + player.getPlayerAssistant().movePlayer(player.absX - 1, player.absY, 0); + } + } else if (player.absX == 3212) { + if (player.absY == 3221 || player.absY == 3222) { + player.getPlayerAssistant().movePlayer(player.absX + 1, player.absY, 0); + } + } + break; + + case 11716: + case 11721: + if (player.absX == 2964) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, 0); + } else if (player.absX == 2965) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + } else if (player.absY == 3337) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } else if (player.absY == 3338) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absX == 2981) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, 0); + } else if (player.absX == 2982) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + } + break; + + case 11717: + case 11719: + if (player.absY == 3342) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 2); + } else if (player.absY == 3343) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 2); + } else if (player.absY == 3335) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 2); + } else if (player.absY == 3334) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 2); + } + break; + + case 4500:// fremennik dung + if (player.objectX == 2809 && player.objectY == 10001) { + player.getPlayerAssistant().movePlayer(2796, 3615, 0); + } + break; + + // case 5008://near rock crabs not sure where it leads to think its + // the boating place somewhere + case 4499: + if (player.objectX == 2797 && player.objectY == 3614) { + player.getPlayerAssistant().movePlayer(2808, 10002, 0); + } + break; + + case 9295: + if (player.playerLevel[player.playerAgility] < 51) { + player.getActionSender().sendMessage( + "You need 51 agility to use this shortcut."); + return; + } else if (player.absX == 3155) { + player.turnPlayerTo(player.objectX, player.objectY); + player.getPlayerAssistant().movePlayer(3149, 9906, 0); + player.startAnimation(844); + } else if (player.absX == 3149) { + player.turnPlayerTo(player.objectX, player.objectY); + player.getPlayerAssistant().movePlayer(3155, 9906, 0); + player.startAnimation(844); + } + break; + + case 8717: + player.getActionSender() + .sendMessage( + "Feature currently disabled will be added in a later release."); + break; + + case 7057: + if (player.absY == 3250) { + return; + } + player.getPlayerAssistant().movePlayer(3093, 3251, 1); + break; + + case 7056: + player.getPlayerAssistant().movePlayer(3089, 3251, 0); + break; + + case 2186: + if (player.absY == 3161) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } else if (player.absY == 3160) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } + break; + + case 3029: + if (player.tutorialProgress >= 14 || player.diedOnTut == true) { + if (player.diedOnTut == true) { + player.startAnimation(828); + player.getPlayerAssistant().movePlayer(3088, 9520, 0); + player.getActionSender().createArrow(3094, 9503, + player.getH(), 2); + player.getDialogueHandler().sendStatement2( + "You have died and have already beat this step", + "you may continue."); + } else if (player.diedOnTut == false) { + player.getDialogueHandler().sendDialogues(3051, -1); + player.startAnimation(828); + player.getPlayerAssistant().movePlayer(3088, 9520, 0); + } else { + player.getActionSender().sendMessage( + "You aren't on this part yet."); + return; + } + } + break; + + case 3028: + if (player.tutorialProgress >= 14) { + player.getActionSender().sendMessage( + "You have already completed this step."); + return; + } + break; + + case 9300: + if (player.absY == 3335) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } else if (player.absY == 3334) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } + break; + + case 2492: + if (player.objectX == 2911 && player.objectY == 3614) { + return; + } + player.getPlayerAssistant().movePlayer(3253, 3399, 0); + break; + + case 5083: + if (!player.hasPaidBrim) { + player.getDialogueHandler().sendDialogues(1048, 1595); + } else { + player.getPlayerAssistant().movePlayer(2709, 9564, 0); + player.hasPaidBrim = false; + } + break; + + case 5084: + player.getPlayerAssistant().movePlayer(2744, 3152, 0); + break; + case 5094: + player.getPlayerAssistant().movePlayer(2643, 9594, 2); + break; + case 5098: + player.getPlayerAssistant().movePlayer(2637, 9517, 0); + break; + case 5097: + player.getPlayerAssistant().movePlayer(2636, 9510, 2); + break; + + case 2287: + if (player.playerLevel[16] < 35) { + player.getActionSender().sendMessage( + "You need 35 agility to enter here!"); + return; + } + if (player.absX == 2552 && player.absY == 3561) { + player.getPlayerAssistant().movePlayer(2552, 3558, 0); + player.startAnimation(844); + } else if (player.absX == 2552 && player.absY == 3558) { + player.getPlayerAssistant().movePlayer(2552, 3561, 0); + player.startAnimation(844); + } + break; + + case 2514: + case 1600: + case 1601: + case 2025: + case 2113: + case 2647: + case 2712: + case 2391: + case 2392: + case 2624: + case 2625: + case 2641: + case 1805: + Guilds.attemptGuild(player, objectType); + break; + + case 14315: + if (!PestControl.waitingBoat.containsKey(player) && player.absX == 2657 && player.absY > 2638 && player.absY < 264) { + PestControl.addToWaitRoom(player); + } else { + if (player.absX == 2657 && player.absY > 2638 && player.absY < 2641) { + player.getPlayerAssistant().movePlayer(2661, 2639, 0); + } + } + break; + case 14314: + if (player.inPcBoat()) { + if (PestControl.waitingBoat.containsKey(player)) { + PestControl.leaveWaitingBoat(player); + } else { + if (player.absX == 2661 && player.absY > 2637 && player.absY < 2641) { + player.getPlayerAssistant().movePlayer(2657, 2639, 0); + } + } + } + break; + case 9369: + if (player.absX == 2399 && player.absY == 5177) { + FightPits.addPlayer(player); + } else if (player.absX == 2399 && player.absY == 5175) { + FightPits.removePlayer(player, false); + } + break; + + case 9368: + if (player.absX > 2397 && player.absX < 2401 && player.absY == 5167) { + FightPits.removePlayer(player, false); + } + break; + + case 3031: + if (player.tutorialProgress == 26) { + player.getActionSender().sendMessage( + "You have already completed this step."); + return; + } else if (player.tutorialProgress > 35) { + UseOther.useDown(player, objectType); + } + break; + + case 3030: + if (player.tutorialProgress == 26) { + // client.getPacketDispatcher().tutorialIslandInterface(55, + // 12); + player.getDialogueHandler().sendDialogues(3078, -1); + player.getPlayerAssistant().movePlayer(3111, 3125, 0); + player.startAnimation(828); + } else if (player.tutorialProgress > 35) { + UseOther.useUp(player, objectType); + } + break; + + case 5493: + player.getPlayerAssistant().movePlayer(3165, 3251, 0); + player.getActionSender() + .sendMessage("You climb up the ladder."); + player.startAnimation(828); + player.getPlayerAssistant().removeAllWindows(); + break; + + case 4881: + player.getPlayerAssistant().movePlayer(2806, 2785, 0); + player.getActionSender().sendMessage("You climb up the rope."); + player.startAnimation(828); + player.getPlayerAssistant().removeAllWindows(); + break; + + case 4411: + case 4415: + case 4417: + case 4418: + case 4419: + case 4420: + case 4469: + case 4470: + case 4911: + case 4912: + case 4437: + case 6281: + case 6280: + case 4472: + case 4471: + case 4406: + case 4407: + case 4458: + case 4902: + case 4903: + case 4900: + case 4901: + case 4377: + case 4378: + if (!CastleWars.isInCw(player)) { + player.getActionSender().sendMessage("You have to be in castle wars to use these objects."); + CastleWars.resetPlayer(player); + return; + } + CastleWarObjects.handleObject(player, objectType, objectX, objectY); + break; + + case 1757: + if (CastleWars.isInCw(player)) { + CastleWarObjects.handleObject(player, objectType, objectX, objectY); + } else if (player.objectX == 2892 && player.objectY == 9907) { + player.getPlayerAssistant().movePlayer(2893, 3507, 0); + } else { + UseOther.useUp(player, objectType); + } + break; + + case 4031: + SpecialObjects.initShantay(player, objectType); + break; + + case 2693: + SpecialObjects.openShantayChest(player, objectType, objectX, objectY, + "open"); + break; + + case 2883: + case 2882: + player.getDialogueHandler().sendDialogues(1018, 925); + break; + + case 2320: + long clickTimer = 0; + if (player.absY <= 9963 && player.playerLevel[player.playerAgility] > 14 && System.currentTimeMillis() - clickTimer > 2000) { + player.getPlayerAssistant().movePlayer(3120, 9970, 0); + player.startAnimation(744); + player.turnPlayerTo(player.objectX, player.objectY); + player.getActionSender().sendMessage("You swing on the monkey bars."); + player.getPlayerAssistant().addSkillXP(25, player.playerAgility); + clickTimer = System.currentTimeMillis(); + } else if (player.absY <= 9970 && player.playerLevel[player.playerAgility] > 14 && System.currentTimeMillis() - clickTimer > 2000) { + player.getPlayerAssistant().movePlayer(3120, 9963, 0); + player.startAnimation(744); + player.turnPlayerTo(player.objectX, player.objectY); + player.getActionSender().sendMessage("You swing on the monkey bars."); + player.getPlayerAssistant().addSkillXP(25, player.playerAgility); + clickTimer = System.currentTimeMillis(); + } else if (player.playerLevel[player.playerAgility] < 15) { + player.getActionSender().sendMessage("You need 15 agility to use these monkey bars."); + } else { + player.getActionSender().sendMessage("You can't do the monkey bars here."); + } + break; + + // PARTY ROOM START + case 2417: // 26193 if falador + player.inPartyRoom = true; + PartyRoom.open(player); + break; + + case 2416: + player.inPartyRoom = true; + PartyRoom.dropAll(); + break; + + case 9356: + player.getPlayerAssistant().enterCaves(); + break; + + case 9357: + player.getPlayerAssistant().resetTzhaar(); + break; + + case 492: + player.getPlayerAssistant().movePlayer(2856, 9570, 0); + break; + + case 1764: + if (player.objectX == 2856 && player.objectY == 9569) { + player.getPlayerAssistant().movePlayer(2858, 3168, 0); + } + break; + + case 9358: + player.getPlayerAssistant().movePlayer(2444, 5171, 0); + break; + + case 9359: + player.getPlayerAssistant().movePlayer(2862, 9572, 0); + break; + + case 2610: + player.getPlayerAssistant().movePlayer(2833, 3257, 0); + break; + + case 2609: + player.getPlayerAssistant().movePlayer(2834, 9657, 0); + break; + + case 2465: + case 2466: + case 2467: + case 2468: + case 2469: + case 2470: + case 2471: + case 2472: + case 2473: + case 2474: + case 2475: + case 2478: + case 2479: + case 2480: + case 2481: + case 2482: + case 2483: + case 2484: + case 2485: + case 2486: + case 2487: + case 2488: + case 2452: + case 2453: + case 2454: + case 2455: + case 2456: + case 2457: + case 2458: + case 2459: + case 2460: + case 2461: + case 2462: + RuneCraftingActions.handleRuneCrafting(player, objectType); + break; + + case 6481: + player.getPlayerAssistant().movePlayer(3233, 9317, 0); + break; + + case 2258: + if (player.playerLevel[20] >= 35) { + player.getPlayerAssistant().spellTeleport(3027, 4852, 0); + } else { + player.getActionSender().sendMessage("You need a Runecrafting level of 35 to enter the Abyss."); + } + break; + + /** + * End + */ + + case 3829: + player.getPlayerAssistant().movePlayer(3227, 3107, 0); + break; + + case 4427: + player.getPlayerAssistant().movePlayer(2373, + player.absY == 3120 ? 3119 : 3120, 0); + break; + + case 4428: + player.getPlayerAssistant().movePlayer(2372, + player.absY == 3120 ? 3119 : 3120, 0); + break; + + case 4465: + player.getPlayerAssistant().movePlayer( + player.absX == 2414 ? 2415 : 2414, 3073, 0); + break; + + case 4424: + case 4423: + if (!CastleWars.isInCw(player)) { + player.getActionSender().sendMessage("You have to be in castle wars to use these objects."); + CastleWars.resetPlayer(player); + return; + } + player.getPlayerAssistant().movePlayer(2427, + player.absY == 3087 ? 3088 : 3087, 0); + break; + + + /** + * End + */ + + case 2079: + if (player.getItemAssistant().playerHasItem(432, 1)) { + player.getItemAssistant().addItem(433, 1); + player.getActionSender().sendMessage( + "All that's in the chest is a message..."); + player.pirateTreasure = 4; + } else { + player.getActionSender().sendMessage( + "You need a key to open this chest."); + } + break; + + case 2071: + if (player.pirateTreasure == 2) { + player.getDialogueHandler().sendStatement("You search the crate..."); + player.getActionSender().sendMessage( + "You find a bottle of rum and 10 bananas."); + player.getItemAssistant().addItem(431, 1); + player.getItemAssistant().addItem(1963, 10); + player.nextChat = 0; + } else { + player.getActionSender().sendMessage( + "You aren't on this step right now."); + } + break; + + case 2593: + player.getActionSender().sendMessage( + "Disabled for dragon slayer."); + break; + + case 2024: // WP quest + if (player.witchspot == 2) { + // c.getDH().sendStatement("You drink from the cauldron, it tastes horrible!", + // "You feel yourself imbued with power."); + player.witchspot = 3; + QuestRewards.witchFinish(player); + } else { + player.getActionSender().sendMessage( + "You are not on this part of the quest."); + } + break; + + case 2614: + if (player.vampSlayer == 3 && player.clickedVamp == false) { + NpcHandler.spawnNpc(player, 757, player.getX(), player.getY(), 0, 0, 50, 10, 30, 30, true, true); + player.getActionSender().sendMessage("You will need a stake and hammer to attack count draynor."); + player.clickedVamp = true; + } else if (player.vampSlayer == 3 && player.clickedVamp == true) { + player.getActionSender().sendMessage("You have already spawned the vampyre."); + return; + } else if (player.vampSlayer > 3) { + player.getActionSender().sendMessage("You have already killed the vampire."); + } else if (player.vampSlayer < 3) { + player.getActionSender().sendMessage("You still need to progress into vampire slayer to fight this monster."); + } + break; + + case 2617: + if (player.absX > 3076 && player.absX < 3079 && player.absY == 9771) { + player.getPlayerAssistant().movePlayer(3115, 3356, 0); + } + break; + + case 2616: + if (player.absX > 3114 && player.absX < 3117 && player.absY == 3356) { + player.getPlayerAssistant().movePlayer(3077, 9771, 0); + } + break; + + case 10093: + case 10094: + if (player.getItemAssistant().playerHasItem(1927, 1)) { + player.turnPlayerTo(player.objectX, player.objectY); + player.startAnimation(883); + player.getItemAssistant().addItem(2130, 1); + player.getItemAssistant().deleteItem2(1927, 1); + player.getPlayerAssistant() + .addSkillXP(18, player.playerCooking); + } else { + player.getActionSender().sendMessage( + "You need a bucket of milk to do this."); + } + break; + + case 2072: // crate + if (player.getItemAssistant().playerHasItem(1963, 10) + && player.luthas == true) { + player.getItemAssistant().deleteItem2(1963, 10); + player.getDialogueHandler().sendStatement( + "You pack your bananas in the crate..."); + player.getActionSender().sendMessage( + "Talk to luthas for your reward."); + player.bananas = 2; + } else if (player.getItemAssistant().playerHasItem(431, 1) + && player.pirateTreasure == 1) { + player.getItemAssistant().deleteItem2(431, 1); + player.getDialogueHandler().sendStatement( + "You stash your rum in the crate"); + player.pirateTreasure = 2; + } else if (player.objectX == 2746) { + player.getActionSender().sendMessage("You search the crate..."); + player.stopPlayerPacket = true; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getActionSender().sendMessage("You find nothing of interest."); + container.stop(); + } + + @Override + public void stop() { + player.stopPlayerPacket = false; + } + }, 2); + } else { + player.getDialogueHandler().sendStatement( + "I should talk to luthas and see what to do."); + player.getActionSender().sendMessage( + "I think I need to put some bannanas in this crate."); + } + break; + + case 2073: // Banana tree + case 4754: + if (System.currentTimeMillis() - player.waitTime > 2000) { + if (player.luthas == true) { + player.bananas += 1; + player.getItemAssistant().addItem(1963, 1); + player.waitTime = System.currentTimeMillis(); + } + player.getItemAssistant().addItem(1963, 1); + player.waitTime = System.currentTimeMillis(); + } else { + player.getActionSender().sendMessage("You must wait two seconds before grabbing another banana."); + } + break; + + case 2406: + if (player.playerEquipment[player.playerWeapon] == 772) { + player.getPlayerAssistant().startTeleport(2452, 4470, 0, + "modern"); + player.getActionSender().sendMessage( + "You are suddenly teleported away."); + } else { + player.getActionSender() + .sendMessage("This door is locked."); + } + break; + + case 3759://entrance + if (player.absX == 2893 && player.absY == 3671) { + player.getPlayerAssistant().movePlayer(2893, 10074, 0); + } + break; + + case 3760://exit + if (player.absX == 2893 && player.absY == 10074) { + player.getPlayerAssistant().movePlayer(2893, 3671, 0); + } + break; + + case 1568: + if (player.absX == 3098) { + player.getActionSender().sendMessage("You can't use the trapdoor here."); + return; + } + /*if (objectX == 3097 && objectY == 3468) { + player.getPlayerAssistant().movePlayer(3097, 9868, 0);*/ + if (CastleWars.isInCw(player)) { + CastleWarObjects.handleObject(player, objectY, objectY, objectY); + //} else { + //OtherObjects.useDown(c, c.objectId); + } + break; + + case 96: + case 98: + case 1722: + case 1723: + case 1733: + case 1734: + case 1736: + case 1737: + case 1742: + case 1744: + case 1755: + case 2405: + case 2711: + case 3432: + case 3443: + case 4383: + case 4755: + case 4756: + case 4879: + case 5492: + case 5096: + case 6278: + case 11724: + case 11725: + case 11727: + case 11728: + case 11729: + case 11731: + case 11732: + case 11733: + case 11734: + case 11735: + case 11736: + case 11737: + case 12265: + case 2147: + case 2148: + case 2408: + case 6279: + case 7257: + case 6439: + case 11888: + case 11889: + case 11890: + case 4568: + case 4569: + case 4570: + case 4413: + case 9582: + case 9584: + case 5131: + case 5130: + case 1725: + case 1726: + case 6434: + case 6436: + case 1738: + case 5167: + case 12266: + case 272: + case 273: + case 245: + case 246: + case 1767: + Climbing.handleClimbing(player); + break; + + case 190: + if (player.absY == 3385) { + player.getPlayerAssistant().movePlayer(player.absX, 3382, 0); + } else if (player.absY == 3382) { + player.getPlayerAssistant().movePlayer(player.absX, 3385, 0); + } + break; + + case 1754: + if (player.objectX == 2696 && player.objectY == 3282) { + player.startAnimation(827); + player.getPlayerAssistant().removeAllWindows(); + player.getPlayerAssistant().movePlayer(2696, 9683, 0); + player.getActionSender().sendMessage("You climb down."); + } else { + UseOther.useDown(player, player.objectId); + } + break; + + case 1759: + case 9472: + case 11867: + case 100: + UseOther.useDown(player, player.objectId); + break; + + case 1739: + Climbing.handleLadder(player); + player.dialogueAction = 147; + break; + + case 1748: + if (player.objectX == 3286 && player.objectY == 3192) { + Climbing.climbDown(player); + } else { + Climbing.handleLadder(player); + player.dialogueAction = 147; + } + break; + + case 12537: + case 2884: + case 12965: + case 14747: + Climbing.handleLadder(player); + player.dialogueAction = 147; + break; + + case 12536: + case 12964: + case 1750: + case 2833: + case 2796: + case 4772: + case 1752: + case 11739: + case 14745: + case 9558: + Climbing.climbUp(player); + break; + + case 1747: + if (player.objectX == 2642 && player.objectY == 3428 && player.absX == 2643 && player.absY == 3429) { + return; + } + if (player.absX > 3081 && player.absX < 3085 && player.absY == 3514) { + return; + } + if (player.objectX == 2532 && player.objectY == 3545) { + player.getAgility().climbUp(player.getX(), player.getY(), 1); + } else { + Climbing.climbUp(player); + } + break; + + case 1740: + case 12538: + case 1746: + case 4778: + case 12966: + case 2797: + case 1749: + case 11742: + case 11741: + case 14746: + case 9559: + Climbing.climbDown(player); + break; + + /** + * Bank Booths + */ + case 11338: + case 2214: + case 10517: + // case 3045: + case 5276: + case 6084: + case 11758: + case 14367: + case 2213: + player.getDialogueHandler().sendDialogues(1013, 494); + break; + + case 9398:// deposit box + player.getPlayerAssistant().sendFrame126("The Bank of " + Constants.SERVER_NAME + " - Deposit Box", 7421); + player.getPlayerAssistant().sendFrame248(4465, 197); + player.getItemAssistant().resetItems(7423); + break; + + case 3194: // Bank Chest open + case 4483: // Bank Chest + case 104: // shantay chest open + player.getPlayerAssistant().openUpBank(); + break; + + case 2604: + if (player.objectX == 3235 && player.objectY == 9761) { + return; + } else { + player.getPlayerAssistant().openUpBank(); + } + break; + + case 2403:// should be 2418 but not working + Server.objectHandler.createAnObject(player, 2604, objectX, objectY, -1); + break; + + case 3193: + if (player.objectX == 3382 && player.objectY == 3270) { + player.getActionSender().object(3194, 3382, 3270, 0, 1, 10); + Region.addObject(3194, 3382, 3270, 0, 10, 1, false); + } else if (player.objectX == 3381 && player.objectY == 3269) { + player.getActionSender().object(3194, 3381, 3269, 0, 2, 10); + Region.addObject(3194, 3381, 3269, 0, 10, 2, false); + } else { + Server.objectHandler.createAnObject(player, 3194, objectX, objectY, -1); + } + break; + + case 2412: + if (player.objectX == 3048 && player.objectY == 3233) { + player.getPlayerAssistant().movePlayer(3048, 3231, 1); + player.getActionSender().sendMessage("You cross the Gangplank."); + } + break; + + case 2413: + if (player.objectX == 3048 && player.objectY == 3232) { + player.getPlayerAssistant().movePlayer(3048, 3234, 0); + } + break; + + case 2083: + if (player.objectX == 3030 && player.objectY == 3217) { + player.getPlayerAssistant().movePlayer(3032, 3217, 1); + player.getActionSender().sendMessage("You cross the Gangplank."); + } + break; + + case 2084: + if (player.objectX == 3031 && player.objectY == 3217) { + player.getPlayerAssistant().movePlayer(3029, 3217, 0); + } + break; + + case 2081: + if (player.objectX == 2956 && player.objectY == 3145) { + player.getPlayerAssistant().movePlayer(2956, 3143, 1); + } + break; + + case 2082: + if (player.objectX == 2956 && player.objectY == 3144) { + player.getPlayerAssistant().movePlayer(2956, 3146, 0); + } + break; + + case 2415: + if (player.objectX == 2834 && player.objectY == 3333) { + player.getPlayerAssistant().movePlayer(2834, 3335, 0); + } + break; + + case 2414: + if (player.objectX == 2834 && player.objectY == 3334) { + player.getPlayerAssistant().movePlayer(2834, 3332, 1); + } + break; + + case 14304: + // Sailing.startTravel(c, 14); + player.getPlayerAssistant().movePlayer(2659, 2676, 0); + player.getDialogueHandler().sendStatement("You arrive safely."); + break; + + case 14306: + // Sailing.startTravel(c, 15); + player.getPlayerAssistant().movePlayer(3041, 3202, 0); + player.getDialogueHandler().sendStatement("You arrive safely."); + break; + + case 1782:// full flour bin + FlourMill.emptyFlourBin(player); + break; + + case 2718: // Hopper + FlourMill.hopperControl(player); + break; + + case 8972: + if (!player.canLeaveArea) { + player.getDialogueHandler().sendDialogues(3, 2458); + } else { + FreakyForester.leaveArea(player); + } + break; + + case 1765://down + if (player.inWild() && player.absX > 3015 && player.absX < 3019) { + player.getPlayerAssistant().movePlayer(3067, 10256, 0); + } + break; + + case 1766://up + if (player.inWild() && player.absX > 3067 && player.absX < 3070) { + player.getPlayerAssistant().movePlayer(3016, 3849, 0); + } + break; + + case 6552: + if (player.playerMagicBook == 0) { + player.playerMagicBook = 1; + player.getActionSender().setSidebarInterface(6, 12855); + player.getActionSender().sendMessage("An ancient wisdomin fills your mind."); + player.getPlayerAssistant().resetAutocast(); + } else { + player.getActionSender().setSidebarInterface(6, 1151); // modern + player.playerMagicBook = 0; + player.getActionSender().sendMessage( + "You feel a drain on your memory."); + player.autocastId = -1; + player.getPlayerAssistant().resetAutocast(); + } + break; + + case 8958: + if (player.getX() == 2490 && (player.getY() == 10162 || player.getY() == 10164)) { + new Object(6951, player.objectX, player.objectY, player.heightLevel, 1, 10, 8958, 15); + } + break; + + case 8959: + if (player.getX() == 2490 && (player.getY() == 10146 || player.getY() == 10148)) { + new Object(6951, player.objectX, player.objectY, player.heightLevel, 1, 10, 8959, 15); + } + break; + + case 8960: + if (player.getX() == 2490 && (player.getY() == 10132 || player.getY() == 10130)) { + new Object(6951, player.objectX, player.objectY, player.heightLevel, 1, 10, 8960, 15); + } + break; + + case 14235: + case 14233: + if (player.absX == 2670) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, 0); + } else if (player.absX == 2671) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + } else if (player.absY == 2585) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY - 1, 0); + } else if (player.absY == 2584) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY + 1, 0); + } else if (player.absX == 2643) { + player.getPlayerAssistant().movePlayer(player.absX - 1, + player.absY, 0); + } else if (player.absX == 2642) { + player.getPlayerAssistant().movePlayer(player.absX + 1, + player.absY, 0); + } + break; + + case 14829: + case 14830: + case 14827: + case 14828: + case 14826: + case 14831: + // Server.objectHandler.startObelisk(objectType); + Server.objectManager.startObelisk(objectType); + break; + + /* + * Doors + */ + case 6749: + if (objectX == 3562 && objectY == 9678) { + player.getActionSender().object(6749, 3562, 9678, -3, 0); + Region.addObject(6749, 3562, 9678, 0, 0, -3, false); + player.getActionSender().object(6730, 3562, 9677, -1, 0); + Region.addObject(6730, 3562, 9677, 0, 0, -1, false); + } else if (objectX == 3558 && objectY == 9677) { + player.getActionSender().object(6749, 3558, 9677, -1, 0); + Region.addObject(6749, 3558, 9677, 0, 0, -1, false); + player.getActionSender().object(6730, 3558, 9678, -3, 0); + Region.addObject(6730, 3558, 9677, 0, 0, -3, false); + } + break; + case 6730: + if (objectX == 3558 && objectY == 9677) { + player.getActionSender().object(6749, 3562, 9678, -3, 0); + Region.addObject(6749, 3562, 9678, 0, 0, -3, false); + player.getActionSender().object(6730, 3562, 9677, -1, 0); + Region.addObject(6730, 3562, 9677, 0, 0, -1, false); + } else if (objectX == 3558 && objectY == 9678) { + player.getActionSender().object(6749, 3558, 9677, -1, 0); + Region.addObject(6749, 3558, 9677, 0, 0, -1, false); + player.getActionSender().object(6730, 3558, 9678, -3, 0); + Region.addObject(6730, 3558, 9678, 0, 0, -3, false); + } + break; + case 6727: + if (objectX == 3551 && objectY == 9684) { + player.getActionSender().sendMessage( + "You cant open this door.."); + } + break; + case 6746: + if (objectX == 3552 && objectY == 9684) { + player.getActionSender().sendMessage( + "You cant open this door.."); + } + break; + case 6748: + if (objectX == 3545 && objectY == 9678) { + player.getActionSender().object(6748, 3545, 9678, -3, 0); + Region.addObject(6748, 3545, 9678, 0, 0, -3, false); + player.getActionSender().object(6729, 3545, 9677, -1, 0); + Region.addObject(6729, 3545, 9677, 0, 0, -1, false); + } else if (objectX == 3541 && objectY == 9677) { + player.getActionSender().object(6748, 3541, 9677, -1, 0); + Region.addObject(6748, 3541, 9677, 0, 0, -1, false); + player.getActionSender().object(6729, 3541, 9678, -3, 0); + Region.addObject(6729, 3541, 9678, 0, 0, -3, false); + } + break; + case 6729: + if (objectX == 3545 && objectY == 9677) { + player.getActionSender().object(6748, 3545, 9678, -3, 0); + Region.addObject(6748, 3545, 9678, 0, 0, -3, false); + player.getActionSender().object(6729, 3545, 9677, -1, 0); + Region.addObject(6729, 3545, 9677, 0, 0, -1, false); + } else if (objectX == 3541 && objectY == 9678) { + player.getActionSender().object(6748, 3541, 9677, -1, 0); + Region.addObject(6748, 3541, 9677, 0, 0, -1, false); + player.getActionSender().object(6729, 3541, 9678, -3, 0); + Region.addObject(6729, 3541, 9678, 0, 0, -3, false); + } + break; + case 6726: + if (objectX == 3534 && objectY == 9684) { + player.getActionSender().object(6726, 3534, 9684, -4, 0); + Region.addObject(6726, 3534, 9684, 0, 0, -4, false); + player.getActionSender().object(6745, 3535, 9684, -2, 0); + Region.addObject(6745, 3535, 9684, 0, 0, -4, false); + } else if (objectX == 3535 && objectY == 9688) { + player.getActionSender().object(6726, 3535, 9688, -2, 0); + Region.addObject(6726, 3535, 9688, 0, 0, -2, false); + player.getActionSender().object(6745, 3534, 9688, -4, 0); + Region.addObject(6745, 3534, 9688, 0, 0, -4, false); + } + break; + case 6745: + if (objectX == 3535 && objectY == 9684) { + player.getActionSender().object(6726, 3534, 9684, -4, 0); + Region.addObject(6726, 3534, 9684, 0, 0, -4, false); + player.getActionSender().object(6745, 3535, 9684, -2, 0); + Region.addObject(6745, 3535, 9684, 0, 0, -2, false); + } else if (objectX == 3534 && objectY == 9688) { + player.getActionSender().object(6726, 3535, 9688, -2, 0); + Region.addObject(6726, 3535, 9688, 0, 0, -2, false); + player.getActionSender().object(6745, 3534, 9688, -4, 0); + Region.addObject(6745, 3534, 9688, 0, 0, -4, false); + } + break; + case 6743: + if (objectX == 3545 && objectY == 9695) { + player.getActionSender().object(6724, 3545, 9694, -1, 0); + Region.addObject(6724, 3545, 9694, 0, 0, -1, false); + player.getActionSender().object(6743, 3545, 9695, -3, 0); + Region.addObject(6743, 3545, 9695, 0, 0, -3, false); + } else if (objectX == 3541 && objectY == 9694) { + player.getActionSender().object(6724, 3541, 9694, -1, 0); + Region.addObject(6724, 3541, 9694, 0, 0, -1, false); + player.getActionSender().object(6743, 3541, 9695, -3, 0); + Region.addObject(6743, 3541, 9695, 0, 0, -3, false); + } + break; + case 6724: + if (objectX == 3545 && objectY == 9694) { + player.getActionSender().object(6724, 3545, 9694, -1, 0); + Region.addObject(6724, 3545, 9694, 0, 0, -1, false); + player.getActionSender().object(6743, 3545, 9695, -3, 0); + Region.addObject(6743, 3545, 9695, 0, 0, -3, false); + } else if (objectX == 3541 && objectY == 9695) { + player.getActionSender().object(6724, 3541, 9694, -1, 0); + Region.addObject(6724, 3541, 9694, 0, 0, -1, false); + player.getActionSender().object(6743, 3541, 9695, -3, 0); + Region.addObject(6743, 3541, 9695, 0, 0, -3, false); + } + break; + + case 9319: + if (player.heightLevel == 0) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY, 1); + } else if (player.heightLevel == 1) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY, 2); + } + break; + + case 9320: + if (player.heightLevel == 1) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY, 0); + } else if (player.heightLevel == 2) { + player.getPlayerAssistant().movePlayer(player.absX, + player.absY, 1); + } + break; + + case 4496: + case 4494: + if (player.heightLevel == 2) { + player.getPlayerAssistant().movePlayer(player.absX - 5, + player.absY, 1); + } else if (player.heightLevel == 1) { + player.getPlayerAssistant().movePlayer(player.absX + 5, + player.absY, 0); + } + break; + + case 4493: + if (player.heightLevel == 0 && player.absY > 3536 && player.absY < 3539 && player.absX == 3438) { + player.getPlayerAssistant().movePlayer(player.absX - 5, player.absY, 1); + } else if (player.heightLevel == 1 && player.absY > 3536 && player.absY < 3539 && player.absX == 3433) { + player.getPlayerAssistant().movePlayer(player.absX + 5, player.absY, 2); + } + break; + + case 4495: + if (player.heightLevel == 1 && player.absX == 3412) { + player.getPlayerAssistant().movePlayer(player.absX + 5, player.absY, 2); + } + break; + + case 5126: + if (player.absY == 3554) { + player.getPlayerAssistant().walkTo(0, 1); + } else { + player.getPlayerAssistant().walkTo(0, -1); + } + break; + + case 409: + case 4859: + case 61: + case 10638: + case 411: + case 412: + if (player.playerLevel[5] < player.getPlayerAssistant() + .getLevelForXP(player.playerXP[5])) { + player.startAnimation(645); + player.playerLevel[5] = player.getPlayerAssistant() + .getLevelForXP(player.playerXP[5]); + player.getActionSender().sendMessage( + "You recharge your prayer points."); + player.getPlayerAssistant().refreshSkill(5); + } else { + player.getActionSender().sendMessage( + "You already have full prayer points."); + } + break; + + case 2640: + if (player.inWild()) { + player.getActionSender().sendMessage( + "You can't use this in the wilderness."); + return; + } + if (player.playerLevel[5] < player.getPlayerAssistant() + .getLevelForXP(player.playerXP[5])) { + player.startAnimation(645); + player.playerLevel[5] = player.getPlayerAssistant() + .getLevelForXP(player.playerXP[5]) + 2; + player.getActionSender().sendMessage( + "You recharge your prayer points."); + player.getPlayerAssistant().refreshSkill(5); + } else { + player.getActionSender().sendMessage( + "You already have full prayer points."); + } + break; + + case 2407: + if (player.inWild()) { + player.getActionSender().sendMessage( + "You can't use this in the wilderness."); + return; + } else { + player.getActionSender().sendMessage( + "You feel the world around you dissolve..."); + player.getPlayerAssistant().movePlayer(3171, + 3609 + Misc.random(10), 0); + } + break; + + case 2879: + player.getPlayerAssistant().movePlayer(2538, 4716, 0); + break; + case 2878: + if (player.inWild()) { + player.getActionSender().sendMessage( + "You can't use this in the wilderness."); + return; + } else { + player.getPlayerAssistant().movePlayer(2509, 4689, 0); + } + break; + + case 9706: + player.getPlayerAssistant().startTeleport2(3105, 3951, 0); + break; + case 9707: + player.getPlayerAssistant().startTeleport2(3105, 3956, 0); + break; + + case 2558: + player.getActionSender().sendMessage("This door is locked."); + break; + + case 10529: + case 10527: + if (player.absY <= player.objectY) { + player.getPlayerAssistant().walkTo(0, 1); + } else { + player.getPlayerAssistant().walkTo(0, -1); + } + break; + + } + } + + public void secondClickObject(int objectType, int obX, int obY) { + player.faceUpdate(0); + player.clickObjectType = 0; + player.turnPlayerTo(obX, obY); + if (!Region.objectExists(objectType, obX, obY, player.heightLevel)) { + player.getActionSender().sendMessage("This object does not exist. Please report this to a staff member."); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't click any objects until you confirm you are not botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + LogCutting.resetFletching(player); + switch (objectType) { + case 6: + player.getCannon().loadCannon(obX, obY); + break; + + case 389: + case 378: + Searching.searchObject(player, objectType); + break; + + case 2145: + if (player.restGhost == 2 && player.playerEquipment[player.playerAmulet] == 552) { + NpcHandler.spawnNpc(player, 457, player.getX(), player.getY() + 2, 0, 0, 0, 0, 0, 0, false, false); + player.getActionSender().sendMessage("You search the coffin."); + } else if (player.restGhost == 4 && player.getItemAssistant().playerHasItem(553, 1)) { + player.getItemAssistant().deleteItem2(553, 1); + player.getActionSender().sendMessage("You have freed the ghost!"); + QuestRewards.restFinish(player); + NpcHandler.spawnNpc(player, 457, player.getX(), player.getY() + 2, 0, 0, 0, 0, 0, 0, false, false); + } else if (player.restGhost == 2 && player.playerEquipment[player.playerAmulet] != 552) { + player.getDialogueHandler().sendStatement("You need the ghost speak amulet for this part."); + player.nextChat = 0; + } else if (player.restGhost == 4 && !player.getItemAssistant().playerHasItem(553, 1)) { + player.getDialogueHandler().sendStatement("You need the skull for this part."); + player.nextChat = 0; + } else if (player.restGhost == 0) { + player.getActionSender().sendMessage("You have not started this quest yet."); + } else if (player.restGhost == 5) { + player.getActionSender().sendMessage("You have already finished this quest."); + } + break; + case 2550: + ThieveOther.pickLock(player, 1, 3.5, 2674, 3306, 1, false); + break; + + case 2551: + ThieveOther.pickLock(player, 14, 15, 2674, 3303, 2, false); + break; + case 2272: + player.getActionSender().object(2271, 2984, 3336, 1, 10); + player.getActionSender().sendMessage("You close the cupboard."); + break; + case 2613: + player.getActionSender().object(2612, 3096, 3269, 0, 10); + player.getActionSender().sendMessage("You close the cupboard."); + break; + case 9038: + case 9039: + if (!player.getItemAssistant().playerHasItem(6306, 100) && player.absX == 2816) { + player.getDialogueHandler().sendStatement("You need 100 trading sticks to enter here."); + player.nextChat = 0; + return; + } + if (player.absY == 3082 || player.absY == 3085) { + player.getDialogueHandler().sendStatement("You can't enter from here."); + player.nextChat = 0; + return; + } + if (player.absX == 2816 && player.getItemAssistant().playerHasItem(6306, 100)) { + player.getPlayerAssistant().movePlayer(player.absX+1, player.absY, 0); + player.getItemAssistant().deleteItem2(6306, 100); + } else if (player.absX == 2817) { + player.getPlayerAssistant().movePlayer(player.absX+1, player.absY, 0); + } + break; + case 4569: + if (player.objectX == 2506 && player.objectY == 3640) { + Climbing.climbUp(player); + } + break; + case 2230: + case 2265: + if (player.absY > 3209 && player.absY < 3215) { + player.getDialogueHandler().sendDialogues(3173, 510); + } else { + player.getDialogueHandler().sendDialogues(3178, 510); + } + break; + case 10041: + player.getActionSender().sendMessage("You can't chop this tree."); + break; + case 10177: + player.getPlayerAssistant().movePlayer(2544, 3743, 0); + break; + + case 11889: + Climbing.handleClimbing(player); + break; + + case 2884: + case 14747: + case 12537: + Climbing.climbUp(player); + break; + + case 14921: + case 9390: + case 2781: + case 2785: + case 2966: + case 3294: + case 3413: + case 4304: + case 4305: + case 6189: + case 6190: + case 11009: + case 11010: + case 11666: + case 12100: + case 12809: + Smelting.startSmelting(player, objectType); + break; + + case 2644: + Spinning.showSpinning(player); + break; + + case 1739: + Climbing.climbUp(player); + break; + + case 1748: + case 12965: + Climbing.climbUp(player); + break; + + case 2090: + case 2091: + case 3042: + Mining.prospectRock(player, "copper ore"); + break; + case 2094: + case 2095: + case 3043: + Mining.prospectRock(player, "tin ore"); + break; + case 2110: + Mining.prospectRock(player, "blurite ore"); + break; + case 2092: + case 2093: + Mining.prospectRock(player, "iron ore"); + break; + case 2100: + case 2101: + Mining.prospectRock(player, "silver ore"); + break; + case 2098: + case 2099: + Mining.prospectRock(player, "gold ore"); + break; + case 2096: + case 2097: + Mining.prospectRock(player, "coal"); + break; + case 2102: + case 2103: + Mining.prospectRock(player, "mithril ore"); + break; + case 2104: + case 2105: + Mining.prospectRock(player, "adamantite ore"); + break; + case 2106: + case 2107: + Mining.prospectRock(player, "runite ore"); + break; + case 10947: + Mining.prospectRock(player, "granite"); + break; + case 10946: + Mining.prospectRock(player, "sandstone"); + break; + case 2111: + Mining.prospectRock(player, "gem rocks"); + break; + + case 11338: // Bank Booth + case 2214: // Bank Booth + case 3045: // Bank Booth + case 5276: // Bank Booth + case 6084: // Bank Booth + case 11758: // Bank Booth + case 14367: // Bank Booth + case 4483: // open bank chest + case 3194: // open bank chest + case 10517: + case 2213: + player.getPlayerAssistant().openUpBank(); + break; + + case 1161: + case 2646: + case 313: + case 5585: + case 5584: + case 312: + case 3366: + Pickable.pickObject(player, player.objectId, player.objectX, + player.objectY); + break; + + case 2558: + if (System.currentTimeMillis() - player.lastLockPick < 3000 + || player.freezeTimer > 0) { + break; + } + if (player.getItemAssistant().playerHasItem(1523, 1)) { + player.lastLockPick = System.currentTimeMillis(); + if (Misc.random(10) <= 3) { + player.getActionSender().sendMessage( + "You fail to pick the lock."); + break; + } + if (player.objectX == 3044 && player.objectY == 3956) { + if (player.absX == 3045) { + player.getPlayerAssistant().walkTo2(-1, 0); + } else if (player.absX == 3044) { + player.getPlayerAssistant().walkTo2(1, 0); + } + + } else if (player.objectX == 3038 && player.objectY == 3956) { + if (player.absX == 3037) { + player.getPlayerAssistant().walkTo2(1, 0); + } else if (player.absX == 3038) { + player.getPlayerAssistant().walkTo2(-1, 0); + } + } else if (player.objectX == 3041 && player.objectY == 3959) { + if (player.absY == 3960) { + player.getPlayerAssistant().walkTo2(0, -1); + } else if (player.absY == 3959) { + player.getPlayerAssistant().walkTo2(0, 1); + } + } + } else { + player.getActionSender().sendMessage("I need a lockpick to pick this lock."); + } + break; + + } + } + + public void thirdClickObject(int objectType, int obX, int obY) { + player.clickObjectType = 0; + if (player.playerRights == 3) { + player.getActionSender().sendMessage("Object type: " + objectType); + } + if (!Region.objectExists(objectType, obX, obY, player.heightLevel)) { + player.getActionSender().sendMessage("This object does not exist. Please report this to a staff member."); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't click any objects until you confirm you are not botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (Stalls.isObject(objectType)) { + Stalls.attemptStall(player, objectType, obX, obY); + return; + } + switch (objectType) { + case 6: + player.getCannon().pickup(obX, obY); + break; + case 3194: + if (player.objectX == 3382 && player.objectY == 3270) { + player.getActionSender().object(3193, 3382, 3270, 0, 1, 10); + } else if (player.objectX == 3381 && player.objectY == 3269) { + player.getActionSender().object(3193, 3381, 3269, 0, 2, 10); + } + break; + case 4569: + if (player.objectX == 2506 && player.objectY == 3640) { + Climbing.climbDown(player); + } + break; + case 10177: + player.getPlayerAssistant().movePlayer(1798, 4407, 3); + break; + case 11890: + Climbing.handleClimbing(player); + break; + case 1739: + case 1748: + case 12965: + case 2884: + case 14747: + case 12537: + Climbing.climbDown(player); + break; + } + } + + public void fourthClickObject(int objectType, int obX, int obY) { + player.clickObjectType = 0; + if (player.playerRights == 3) { + player.getActionSender().sendMessage("Object type: " + objectType); + } + if (!Region.objectExists(objectType, obX, obY, player.heightLevel)) { + player.getActionSender().sendMessage("This object does not exist. Please report this to a staff member."); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't click any objects until you confirm you are not botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + Farming.openGuide(player, player.objectId); + switch (objectType) { + + } + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/AxeInLog.java b/2006Redone Server/src/redone/game/objects/impl/AxeInLog.java new file mode 100644 index 00000000..c3599ff9 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/AxeInLog.java @@ -0,0 +1,21 @@ +package redone.game.objects.impl; + +import redone.game.objects.Object; +import redone.game.players.Client; + +public class AxeInLog { + + public static void pullAxeFromLog(Client client, int x, int y) { + if (client.getItemAssistant().freeSlots() <= 0) { + client.getActionSender().sendMessage( + "Not enough space in your inventory."); + return; + } + client.startAnimation(832); + client.getItemAssistant().addItem(1351, 1); + client.getActionSender().sendMessage( + "You take the axe from the log."); + new Object(5582, x, y, client.heightLevel, 2, 10, 5581, 100); + } + +} diff --git a/2006Redone Server/src/redone/game/objects/impl/BrimhavenVines.java b/2006Redone Server/src/redone/game/objects/impl/BrimhavenVines.java new file mode 100644 index 00000000..08f4b53f --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/BrimhavenVines.java @@ -0,0 +1,52 @@ +package redone.game.objects.impl; + +import redone.game.players.Client; + +/** + * @author Genesis + */ +public class BrimhavenVines { + + public static void handleBrimhavenVines(Client c, int objectType) { + switch (objectType) { + case 12987: + case 12986: + BrimhavenVines.moveThroughVinesX(c, 3213, -2, 0, 2, 0); + break; + case 5103: + BrimhavenVines.moveThroughVinesX(c, 2689, 2, 0, -2, 0); + break; + case 5104: + BrimhavenVines.moveThroughVinesY(c, 9568, 0, 2, 0, -2); + break; + case 5105: + BrimhavenVines.moveThroughVinesX(c, 2672, 2, 0, -2, 0); + break; + case 5106: + BrimhavenVines.moveThroughVinesX(c, 2675, 2, 0, -2, 0); + break; + case 5107: + BrimhavenVines.moveThroughVinesX(c, 2694, 2, 0, -2, 0); + break; + } + } + + public static void moveThroughVinesX(Client c, int originX, int x1, int y1, + int x2, int y2) { + if (c.absX <= originX) { + c.getPlayerAssistant().walkTo(x1, y1); + } else { + c.getPlayerAssistant().walkTo(x2, y2); + } + } + + public static void moveThroughVinesY(Client c, int originY, int x1, int y1, + int x2, int y2) { + if (c.absY <= originY) { + c.getPlayerAssistant().walkTo(x1, y1); + } else { + c.getPlayerAssistant().walkTo(x2, y2); + } + } + +} diff --git a/2006Redone Server/src/redone/game/objects/impl/Climbing.java b/2006Redone Server/src/redone/game/objects/impl/Climbing.java new file mode 100644 index 00000000..afa2fcf3 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/Climbing.java @@ -0,0 +1,795 @@ +package redone.game.objects.impl; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.quests.QuestAssistant; +import redone.game.items.impl.LightSources; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Climbing handles stairs, ladders, trapdoors + * + * @author Andrew + */ + +public class Climbing { + + private static final int CLIMB_UP = 828, CLIMB_DOWN = CLIMB_UP; + + public static void handleClimbing(final Client client) { + if (System.currentTimeMillis() - client.climbDelay < 1200) { + return; + } + client.stopPlayer = true; + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + client.resetWalkingQueue(); + processClimbing(client); + client.getPlayerAssistant().requestUpdates(); + container.stop(); + } + + @Override + public void stop() { + client.climbDelay = System.currentTimeMillis(); + client.stopPlayer = false; + } + }, 1); + } + + public static void processClimbing(Client client) { + switch (client.objectId) { + case 9584: + if (client.objectX == 2932 && client.objectY == 3282) { + client.getPlayerAssistant().movePlayer(2933, 3282, 0); + } + break; + + case 272: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 1); + break; + + + case 273: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 0); + break; + + case 245: + if (client.objectY == 3224) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY+2, 2); + } else if (client.objectY == 3139 || client.objectX == 2835 || client.objectX == 2963) { + client.getPlayerAssistant().movePlayer(client.absX+2, client.absY, 2); + } else { + client.getPlayerAssistant().movePlayer(client.absX-2, client.absY, 2); + } + break; + case 246: + if (client.objectY == 3224) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY-2, 1); + } else if (client.objectY == 3139 || client.objectX == 2835 || client.objectX == 2963) { + client.getPlayerAssistant().movePlayer(client.absX-2, client.absY, 1);; + } else { + client.getPlayerAssistant().movePlayer(client.absX+2, client.absY, 1); + } + break; + + case 11888: + if (client.absX == 2908 && client.absY == 3336) { + climbUp(client); + } + break; + + case 4568: + if (client.objectX == 2506 && client.objectY == 3640) { + climbUp(client); + } + break; + + case 4569: + if (client.objectX == 2506 && client.objectY == 3640) { + handleLadder(client); + } + break; + + case 4570: + if (client.objectX == 2506 && client.objectY == 3641) { + climbDown(client); + } + break; + + case 11889: + if (client.absX == 2908 && client.absY == 3336) { + handleLadder(client); + } + break; + + case 11890: + if (client.absX == 2908 && client.absY == 3336) { + climbDown(client); + } + break; + + case 9582: + if (client.objectX == 2931 && client.objectY == 3282) { + client.getPlayerAssistant().movePlayer(2933, 3282, 1); + } + break; + case 1722: + if (client.objectX == 2590 && client.objectY == 3089 && client.heightLevel == 0 && client.absY == 3088) { + client.getPlayerAssistant().movePlayer(client.absX, 3092, 1); + } else if (client.objectX == 2590 && client.objectY == 3089 && client.heightLevel == 0 && client.absY != 3088) { + return; + } + if (client.objectX == 3175 && client.objectY == 3420 && client.heightLevel == 0 && client.absX == 3177 && client.absX > 3418 && client.absX < 3425) { + return; + } else if (client.absY == 3423) { + client.getPlayerAssistant().movePlayer(client.absX, 3419, 1); + } + if (client.absX == 3098) { + client.getPlayerAssistant().movePlayer(3102, 3266, 1); + } else if (client.absY == 3445) { + client.getPlayerAssistant().movePlayer(3260, 3449, 1); + } else if (client.absY == 3358 + && client.questPoints >= QuestAssistant.MAXIMUM_QUESTPOINTS) { + client.getPlayerAssistant().movePlayer(client.absX, 3354, 1); + } else if (client.absY == 3358 + && client.questPoints < QuestAssistant.MAXIMUM_QUESTPOINTS) { + client.getActionSender().sendMessage( + "You need " + QuestAssistant.MAXIMUM_QUESTPOINTS + + " quest points to use these stairs."); + } else if (client.absX == 3180) { + client.getPlayerAssistant().movePlayer(3176, client.absY, 1); + } else if (client.absX == 3159) { + client.getPlayerAssistant().movePlayer(3155, 3435, 1); + } else if (client.absX == 2661) { + client.getPlayerAssistant().movePlayer(2665, client.absY, 1); + } else if (client.absY == 3083) { + client.getPlayerAssistant().movePlayer(client.absX, 3087, 2); + } else if (client.absY == 3298) { + client.getPlayerAssistant().movePlayer(client.absX, 3294, 1); + } else if (client.absY == 3472) { + client.getPlayerAssistant().movePlayer(client.absX, 3476, 1); + } + break; + + case 1723: + if (client.absX == 3102) { + client.getPlayerAssistant().movePlayer(3098, 3266, 0); + } else if (client.absY == 3354 + && client.questPoints >= QuestAssistant.MAXIMUM_QUESTPOINTS) { + client.getPlayerAssistant().movePlayer(client.absX, 3358, 0); + } else if (client.absY == 3358 + && client.questPoints < QuestAssistant.MAXIMUM_QUESTPOINTS) { + client.getActionSender().sendMessage( + "You need " + QuestAssistant.MAXIMUM_QUESTPOINTS + + " quest points to use these stairs"); + } else if (client.absY == 3449) { + client.getPlayerAssistant().movePlayer(3259, 3445, 0); + } else if (client.absX == 3155) { + client.getPlayerAssistant().movePlayer(3159, 3435, 0); + } else if (client.absX == 2665) { + client.getPlayerAssistant().movePlayer(2661, client.absY, 0); + } else if (client.absY == 3092) { + client.getPlayerAssistant().movePlayer(client.absX, 3088, 0); + } else if (client.absY == 3087) { + client.getPlayerAssistant().movePlayer(client.absX, 3083, 1); + } else if (client.absY == 3419) { + client.getPlayerAssistant().movePlayer(client.absX, 3423, 0); + } else if (client.absX == 3176) { + client.getPlayerAssistant().movePlayer(3180, client.absY, 0); + } else if (client.absY == 3321) { + client.getPlayerAssistant().movePlayer(client.absX, 3325, 0); + } else if (client.absY == 3294) { + client.getPlayerAssistant().movePlayer(client.absX, 3298, 0); + } else if (client.absY == 3476) { + client.getPlayerAssistant().movePlayer(client.absX, 3472, 0); + } + break; + + case 1733: + if (client.objectX == 2569 && client.objectY == 3122) { + client.getPlayerAssistant().movePlayer(2569, 9525, 0); + } else if (client.absX == 3186) { + client.getPlayerAssistant().movePlayer(3190, 9834, 0); + } else if (client.objectX == 2603 && client.objectY == 3078) { + client.getPlayerAssistant().feature("using this staircase"); + } else if (client.absX != 3186) { + client.getPlayerAssistant().movePlayer(client.absX, + client.absY + 6393, 0); + } + break; + + case 1734: + if (client.objectX == 2569 && client.objectY == 9522) { + client.getPlayerAssistant().movePlayer(2569, 3121, 0); + } else if (client.absX == 3190) { + client.getPlayerAssistant().movePlayer(3186, 3434, 0); + } else if (client.objectX == 3059 && client.objectY == 9776) { + client.getPlayerAssistant().movePlayer(3061, + client.absY - 6400, 0); + } else if (client.absX != 3190) { + client.getPlayerAssistant().movePlayer(client.absX, + client.absY - 6396, 0); + } + break; + + case 1737: + if (client.absY == 3294) { + client.getPlayerAssistant().movePlayer(2661, 3291, 1); + } else if (client.absY == 3302) { + client.getPlayerAssistant().movePlayer(2648, 3301, 1); + } else if (client.absY == 3293) { + client.getPlayerAssistant().movePlayer(2649, 3296, 1); + } + break; + + case 1736: + if (client.absY == 3291) { + client.getPlayerAssistant().movePlayer(2662, 3294, 0); + } else if (client.absY == 3301) { + client.getPlayerAssistant().movePlayer(2645, 3302, 0); + } else if (client.absX == 2649) { + client.getPlayerAssistant().movePlayer(2648, 3293, 0); + } + break; + + case 1742: + if (client.objectX == 2445 && client.objectY == 3434) { + client.getPlayerAssistant().movePlayer(2445, 3433, 1); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 2444 && client.objectY == 3414) { + client.getPlayerAssistant().movePlayer(2445, 3416, 1); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 2455 && client.objectY == 3417) { + client.getPlayerAssistant().movePlayer(2457, 3417, 1); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 2461 && client.objectY == 3416) { + client.getPlayerAssistant().movePlayer(2460, 3417, 1); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 2440 && client.objectY == 3404) { + client.getPlayerAssistant().movePlayer(2440, 3403, 1); + client.startAnimation(CLIMB_UP); + } + break; + + case 1744: + if (client.objectX == 2445 && client.objectY == 3434) { + client.getPlayerAssistant().movePlayer(2445, 3433, 0); + client.startAnimation(CLIMB_DOWN); + } else if (client.objectX == 2444 || client.objectX == 2445 + && client.objectY == 3415) { + client.getPlayerAssistant().movePlayer(2444, 3413, 0); + client.startAnimation(CLIMB_DOWN); + } else if (client.objectX == 2456 && client.objectY == 3417) { + client.getPlayerAssistant().movePlayer(2457, 3417, 0); + client.startAnimation(CLIMB_DOWN); + } else if (client.objectX == 2461 && client.objectY == 3417) { + client.getPlayerAssistant().movePlayer(2460, 3417, 0); + client.startAnimation(CLIMB_DOWN); + } else if (client.objectX == 2440 && client.objectY == 3404) { + client.getPlayerAssistant().movePlayer(2440, 3403, 0); + client.startAnimation(CLIMB_DOWN); + } + break; + case 7257: + client.getPlayerAssistant().movePlayer(3044, 4973, 1); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + break; + case 6279: + if (client.getItemAssistant().playerHasItem(954, 1)) { + client.getPlayerAssistant().movePlayer(3206, 9379, 0); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + } else { + client.getActionSender().sendMessage( + "You need a rope to enter."); + return; + } + break; + + case 6436: + UseOther.useUp(client, client.objectId); + break; + + case 6434: + UseOther.useDown(client, client.objectId); + break; + case 1767: + if (client.objectX == 3069 && client.objectY == 3856) { + UseOther.useDown(client, client.objectId); + } + break; + case 6439: + client.getPlayerAssistant().movePlayer(3309, 2963, 0); + client.getActionSender().sendMessage("You climb up."); + break; + + case 2408: + if (client.playerLevel[5] > 0) { + client.playerLevel[5] = 0; + } + client.getPlayerAssistant().refreshSkill(5); + client.getActionSender().sendMessage( + "Your prayer is drained as you enter the dungeon."); + client.getPlayerAssistant().movePlayer(2823, 9771, 0); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + + break; + case 5167: + if (Constants.EXPERIMENTS) { + UseOther.useDown(client, client.objectId); + } else { + client.getActionSender().sendMessage( + "Experiments are currently disabled."); + } + break; + case 2147: + client.getPlayerAssistant().movePlayer(3104, 9576, 0); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + break; + case 2148: + client.getPlayerAssistant().movePlayer(3103, 3162, 0); + client.startAnimation(828); + client.getActionSender().sendMessage("You climb up."); + break; + case 4383: + client.getPlayerAssistant().movePlayer(2515, 10007, 0); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + break; + case 5131: + client.getPlayerAssistant().movePlayer(3549, 9865, 0); + client.getActionSender().sendMessage("You climb down."); + break; + case 5130: + client.getPlayerAssistant().movePlayer(3543, 3463, 0); + client.getActionSender().sendMessage("You climb up."); + break; + case 4413: + client.getPlayerAssistant().movePlayer(2510, 3644, 0); + client.startAnimation(828); + client.getActionSender().sendMessage("You climb up."); + break; + case 3432: + client.getPlayerAssistant().movePlayer(3440, 9887, 0); + break; + case 1738: + if (client.objectX == 2728 && client.objectY == 3460 + && client.heightLevel == 0) { + client.getPlayerAssistant().movePlayer(2749, 3462, 1); + } else if (client.objectX == 2746 && client.objectY == 3460 + && client.heightLevel == 0) { + client.getPlayerAssistant().movePlayer(2745, 3461, 1); + } else if (client.objectX == 2648 && client.objectY == 3310) { + Climbing.climbUp(client); + } else if (client.objectX == 2673 && client.objectY == 3300) { + client.getPlayerAssistant().movePlayer(2675, 3300, 1); + } else if (client.objectX == 3204 && client.objectY == 3207) { + client.getPlayerAssistant().movePlayer(3205, 3209, 1); + } else if (client.objectX == 3204 && client.objectY == 3229) { + client.getPlayerAssistant().movePlayer(3205, 3228, 1); + } else if (client.objectX == 3258 && client.objectY == 3487) { + client.getPlayerAssistant().movePlayer(3257, 3487, 1); + } else if (client.objectX == 3144 && client.objectY == 3447 && client.playerLevel[client.playerCooking] > 31 && client.playerEquipment[client.playerHat] == 1949) { + client.getPlayerAssistant().movePlayer(3143, 3448, 1); + } else if (client.objectX == 3010 && client.objectY == 3515) { + client.getPlayerAssistant().movePlayer(3012, 3515, 1); + } else if (client.objectX == 2895 && client.objectY == 3513) { + client.getPlayerAssistant().movePlayer(2897, 3513, 1); + } + break; + case 3443: + client.getPlayerAssistant().movePlayer(3423, 3485, 0); + break; + case 1755: + if (client.objectX == 3116 && client.objectY == 9852) { + client.getPlayerAssistant().movePlayer(3116, 3451, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3097 && client.objectY == 9867) { + client.getPlayerAssistant().movePlayer(3096, 3468, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3237 && client.objectY == 9858) { + client.getPlayerAssistant().movePlayer(3238, 3458, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3088 && client.objectY == 9971) { + UseOther.useUp(client, client.objectId); + // client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3209 && client.objectY == 9616) { + // OtherObjects.useUp(client, client.objectId); + client.getPlayerAssistant().movePlayer(3209, 3215, 0); + client.startAnimation(CLIMB_UP); + client.getActionSender().sendMessage("You climb up."); + } else if (client.objectX == 3019 && client.objectY == 9740) {// noord + client.getPlayerAssistant().movePlayer(3019, 3341, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3020 && client.objectY == 9739) {// oost + client.getPlayerAssistant().movePlayer(3021, 3339, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3018 && client.objectY == 9739) {// wst + client.getPlayerAssistant().movePlayer(3017, 3339, 0); + client.startAnimation(CLIMB_UP); + } else if (client.objectX == 3019 && client.objectY == 9738) {// zuid + client.getPlayerAssistant().movePlayer(3019, 3337, 0); + client.startAnimation(CLIMB_UP); + } else { + UseOther.useUp(client, client.objectId); + } + break; + + case 2405: + UseOther.useUp(client, client.objectId); + break; + + case 98: + if (client.inWild()) { + return; + } + if (!LightSources.playerHasLightSource(client)) { + client.getPlayerAssistant().movePlayer(2641, 9740, 0); + return; + } else if (LightSources.playerHasLightSource(client)) { + client.getPlayerAssistant().movePlayer(2641, 9764, 0); + return; + } + break; + + case 96: + if (client.inWild()) { + return; + } + LightSources.brightness3(client); + client.getPlayerAssistant().movePlayer(2649, 9804, 0); + break; + + case 2711: + if (client.absY == 3325) { + client.getPlayerAssistant().movePlayer(client.absX, 3321, 1); + } + break; + + case 4755: + if (client.absY == 2797) { + client.getPlayerAssistant().movePlayer(client.absX, 2793, 0); + } + break; + + case 4756: + if (client.absY == 2793) { + client.getPlayerAssistant().movePlayer(client.absX, 2797, 1); + } + break; + + case 4879: + client.getPlayerAssistant().movePlayer(2807, 9200, 0); + client.getActionSender().sendMessage( + "You go down the trapdoor."); + client.startAnimation(827); + client.getPlayerAssistant().removeAllWindows(); + break; + + case 5492: + if (client.getItemAssistant().playerHasItem(1523, 1) + && Misc.random(4) < 3) { + client.getPlayerAssistant().movePlayer(3149, 9652, 0); + client.getActionSender().sendMessage( + "You go down the trapdoor."); + client.startAnimation(827); + client.getPlayerAssistant().addSkillXP(.5, + client.playerThieving); + client.getPlayerAssistant().removeAllWindows(); + } else if (!client.getItemAssistant().playerHasItem(1523, 1) + && Misc.random(5) < 2) { + client.getPlayerAssistant().movePlayer(3149, 9652, 0); + client.getActionSender().sendMessage( + "You go down the trapdoor."); + client.startAnimation(827); + client.getPlayerAssistant().addSkillXP(.5, + client.playerThieving); + client.getPlayerAssistant().removeAllWindows(); + } else if (client.getItemAssistant().playerHasItem(1523, 1) + && Misc.random(4) > 3) { + client.getActionSender().sendMessage( + "You fail to pick the lock."); + client.getActionSender() + .sendMessage( + "Your thieving has been drained, your fingers feel numb."); + client.playerLevel[17] = client.getPlayerAssistant() + .getLevelForXP(client.playerXP[17]) - 1; + client.getPlayerAssistant().refreshSkill(17); + client.getItemAssistant().deleteItem2(1523, 1); + } else if (!client.getItemAssistant().playerHasItem(1523, 1) + && Misc.random(5) > 2) { + client.getActionSender().sendMessage( + "You fail to pick the lock."); + client.getActionSender() + .sendMessage( + "Your thieving has been drained, your fingers feel numb."); + client.playerLevel[17] = client.getPlayerAssistant() + .getLevelForXP(client.playerXP[17]) - 1; + client.getPlayerAssistant().refreshSkill(17); + } + break; + + case 6278: + if (client.objectX == 2637 && client.objectY == 3408) { + UseOther.useDown(client, 6278); + } + break; + + case 11724: + if (client.absX == 2971) { + client.getPlayerAssistant().movePlayer(2968, 3348, 1); + } + break; + + case 11725: + if (client.absY == 3348) { + client.getPlayerAssistant().movePlayer(2971, 3347, 0); + } + break; + + case 1725: + if (client.absX == 3285 || client.absX == 3286 + && client.heightLevel == 0) { + client.getPlayerAssistant().movePlayer(client.absX, 3492, 1); + } else if (client.absY == 3509) { + client.getPlayerAssistant().movePlayer(2751, 3513, 1); + } else if (client.absX == 3226) { + client.getPlayerAssistant().movePlayer(3230, 3394, 1); + } + break; + + case 5096: + client.getPlayerAssistant().movePlayer(2649, 9591, 0); + break; + + case 1726: + if (client.absY == 3513) { + client.getPlayerAssistant().movePlayer(2751, 3509, 0); + } else if (client.absX == 3230) { + client.getPlayerAssistant().movePlayer(3226, 3394, 0); + } else if (client.absX == 3285 || client.absX == 3286 + && client.heightLevel == 1) { + client.getPlayerAssistant().movePlayer(client.absX, 3496, 0); + } + break; + + case 11727: + if (client.absY == 3350 || client.absY == 3351 + || client.absY == 3340 || client.absY == 3341 + || client.absY == 3342) { + climbUp(client); + } + break; + + case 11728: + if (client.absY == 3350 || client.absY == 3351 + || client.absY == 3340 || client.absY == 3341 + || client.absY == 3342) { + climbDown(client); + } + break; + + case 11729: + if (client.objectX == 2954 && client.objectY == 3338) { + client.getPlayerAssistant().movePlayer(2956, 3338, 1); + } else if (client.objectX == 2960 && client.objectY == 3338) { + client.getPlayerAssistant().movePlayer(2959, 3339, 2); + } else if (client.objectX == 2957 && client.objectY == 3338) { + client.getPlayerAssistant().movePlayer(2959, 3338, 3); + } + break; + + case 11731: + if (client.objectX == 2955 && client.objectY == 3338) { + client.getPlayerAssistant().movePlayer(2956, 3338, 0); + } else if (client.objectX == 2960 && client.objectY == 3339) { + client.getPlayerAssistant().movePlayer(2959, 3338, 1); + } else if (client.objectX == 2958 && client.objectY == 3338) { + client.getPlayerAssistant().movePlayer(2957, 3337, 2); + } + break; + + case 11732: + if (client.objectX == 3034 && client.objectY == 3363) { + client.getPlayerAssistant().movePlayer(3036, 3363, 1); + } else if (client.objectX == 3048 && client.objectY == 3352) { + client.getPlayerAssistant().movePlayer(3049, 3354, 1); + } + break; + + case 11733: + if (client.objectX == 3035 && client.objectY == 3363) { + client.getPlayerAssistant().movePlayer(3036, 3362, 0); + } else if (client.objectX == 3049 && client.objectY == 3353) { + client.getPlayerAssistant().movePlayer(3049, 3354, 0); + } + break; + + case 11734: + if (client.absY == 3336) { + client.getPlayerAssistant().movePlayer(2984, 3340, 2); + } else if (client.absY == 3380) { + client.getPlayerAssistant().movePlayer(client.absX, 3384, 1); + } + break; + + case 11735: + if (client.absY == 3340) { + client.getPlayerAssistant().movePlayer(2984, 3336, 1); + } else if (client.absY == 3384) { + client.getPlayerAssistant().movePlayer(client.absX, 3380, 0); + } + break; + + case 11736: + if (client.absY == 3368) { + client.getPlayerAssistant().movePlayer(client.absX, 3372, 1); + } else if (client.absY == 3362) { + client.getPlayerAssistant().movePlayer(client.absX, 3366, 1); + } + break; + + case 11737: + if (client.absY == 3366) { + client.getPlayerAssistant().movePlayer(client.absX, 3362, 0); + } else { + client.getPlayerAssistant().movePlayer(client.absX, 3368, 0); + } + break; + + case 12266: + if (client.objectX == 3077 && client.objectY == 3493) { + client.getPlayerAssistant().movePlayer(3077, 9893, 0); + client.startAnimation(827); + client.getActionSender().sendMessage("You climb down."); + } + break; + + case 12265: + if (client.objectX == 3076 && client.objectY == 9893) { + client.getPlayerAssistant().movePlayer(3078, 3493, 0); + client.startAnimation(828); + client.getActionSender().sendMessage("You climb up."); + } + break; + } + } + + public static void climbUp(Client client) { + if (System.currentTimeMillis() - client.climbDelay < 1200) { + return; + } + + switch (client.heightLevel) { + case -1: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 0); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb up."); + client.startAnimation(CLIMB_UP); + client.getPlayerAssistant().closeAllWindows(); + break; + case 0: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 1); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb up."); + client.startAnimation(CLIMB_UP); + client.getPlayerAssistant().closeAllWindows(); + break; + case 1: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 2); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb up."); + client.startAnimation(CLIMB_UP); + client.getPlayerAssistant().closeAllWindows(); + break; + case 2: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 3); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb up."); + client.startAnimation(CLIMB_UP); + client.getPlayerAssistant().closeAllWindows(); + break; + default: + if (client.heightLevel > 3) { + climbDown(client); + } + client.getActionSender().sendMessage("This object is currently not supported."); + System.out.println("Bug detected with climbing up object " + client.objectId + " objectX " + client.objectX + " objectY " + client.objectY + "."); + break; + } + } + + public static void climbDown(Client client) { + if (System.currentTimeMillis() - client.climbDelay < 1200) { + return; + } + if (client.heightLevel > 3) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 3); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb down."); + client.startAnimation(CLIMB_DOWN); + client.getPlayerAssistant().closeAllWindows(); + } + switch (client.heightLevel) { + case 1: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 0); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb down."); + client.startAnimation(CLIMB_DOWN); + client.getPlayerAssistant().closeAllWindows(); + break; + case 2: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 1); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb down."); + client.startAnimation(CLIMB_DOWN); + client.getPlayerAssistant().closeAllWindows(); + break; + case 3: + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 2); + client.climbDelay = System.currentTimeMillis(); + client.getActionSender().sendMessage("You climb down."); + client.startAnimation(CLIMB_DOWN); + client.getPlayerAssistant().closeAllWindows(); + break; + default: + if (client.heightLevel < 0) { + climbUp(client); + } + client.getActionSender().sendMessage("This object is currently not supported."); + System.out.println("Bug detected with climbing down object " + client.objectId + " objectX " + client.objectX + " objectY " + client.objectY + "."); + break; + } + } + + public static void handleLadder(Client client) { + client.getDialogueHandler().sendOption2("Climb Up.", "Climb Down."); + client.dialogueAction = 147; + } + + private static void close(Client client, int actionButtonId) { + if (actionButtonId == 9157) { + client.getActionSender().sendMessage("You climb up."); + client.startAnimation(CLIMB_UP); + } else if (actionButtonId == 9158) { + client.getActionSender().sendMessage("You climb down."); + client.startAnimation(827); + } + client.getPlayerAssistant().closeAllWindows(); + client.nextChat = 0; + } + + public static void handleLadderButtons(Client client, int actionButtonId) { + if (client.dialogueAction != 147) { + return; + } + switch (actionButtonId) { + case 9157: + if (client.heightLevel == 1) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 2); + close(client, actionButtonId); + } else if (client.heightLevel == 2) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 3); + close(client, actionButtonId); + } + break; + case 9158: + if (client.heightLevel == 2) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 1); + close(client, actionButtonId); + } else if (client.heightLevel == 1) { + client.getPlayerAssistant().movePlayer(client.absX, client.absY, 0); + close(client, actionButtonId); + } + break; + } + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/objects/impl/CrystalChest.java b/2006Redone Server/src/redone/game/objects/impl/CrystalChest.java new file mode 100644 index 00000000..1982f22a --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/CrystalChest.java @@ -0,0 +1,75 @@ +package redone.game.objects.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.util.Misc; + +public class CrystalChest { + + private static final int[] CHEST_REWARDS = { 1079, 1093, 526, 1969, 371, + 2363, 451 }; + public static final int[] KEY_HALVES = { 985, 987 }; + public static final int KEY = 989; + private static final int DRAGONSTONE = 1631; + private static final int OPEN_ANIMATION = 881; + + public static void makeKey(Client c) { + if (c.getItemAssistant().playerHasItem(toothHalf(), 1) + && c.getItemAssistant().playerHasItem(loopHalf(), 1)) { + c.getItemAssistant().deleteItem(toothHalf(), 1); + c.getItemAssistant().deleteItem(loopHalf(), 1); + c.getItemAssistant().addItem(KEY, 1); + } + } + + public static boolean canOpen(Client c) { + if (c.getItemAssistant().playerHasItem(KEY)) { + return true; + } else { + c.getActionSender().sendMessage("The chest is locked"); + return false; + } + } + + public static void searchChest(final Client c, final int id, final int x, + final int y) { + if (canOpen(c)) { + c.getActionSender().sendMessage( + "You unlock the chest with your key."); + c.getItemAssistant().deleteItem(KEY, 1); + c.startAnimation(OPEN_ANIMATION); + c.getActionSender().checkObjectSpawn(id + 1, x, y, 2, 10); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + c.getItemAssistant().addItem(DRAGONSTONE, 1); + c.getItemAssistant().addItem(995, Misc.random(8230)); + c.getItemAssistant().addItem( + CHEST_REWARDS[Misc.random(getLength() - 1)], 1); + c.getActionSender().sendMessage( + "You find some treasure in the chest."); + c.getActionSender().checkObjectSpawn(id, x, y, 2, 10); + container.stop(); + } + @Override + public void stop() { + + } + }, 3); + } + } + + public static int getLength() { + return CHEST_REWARDS.length; + } + + public static int toothHalf() { + return KEY_HALVES[0]; + } + + public static int loopHalf() { + return KEY_HALVES[1]; + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/FlourMill.java b/2006Redone Server/src/redone/game/objects/impl/FlourMill.java new file mode 100644 index 00000000..989ead66 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/FlourMill.java @@ -0,0 +1,116 @@ +package redone.game.objects.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.world.clip.Region; + +/** + * @author darkside1222 + */ + +public class FlourMill { + + public final static int EMPTY_POT = 1931, POT_OF_FLOUR = 1933, + GRAIN = 1947, EMPTY_FLOUR_BIN = 1781, FULL_FLOUR_BIN = 1782; + /** + * Limits the amount of flour. (RS-Limit = 30) + */ + public static int LIMIT = 30; + + /** + * Item on object.(Use grain on hopper) + * + * @param c + */ + public static void grainOnHopper(Client c, int objectID, int itemId) { + if (itemId == GRAIN) { + // Grain amount - flour amount. Prevents putting more than 30 + if (c.grain == LIMIT - c.flourAmount || c.flourAmount == LIMIT) { + c.getActionSender().sendMessage( + "You can't put anymore grain into the hopper."); + return; + } + c.startAnimation(832); + c.getItemAssistant().deleteItem(GRAIN, 1); + c.grain++;// + 1 + c.getActionSender().sendMessage( + "You put the grain in the hopper."); + } else { + c.getActionSender().sendMessage("Nothing interesting happens."); + } + } + + /** + * When player operates the lever. + * + * @param c + */ + public static void hopperControl(final Client c) { + if (c.grain > 0) { + if (c.flourAmount == LIMIT) { + c.getActionSender().sendMessage( + "There is currently too much grain in the hopper."); + return; + } + c.getActionSender().sendMessage( + "You operate the hopper. The grain slides down the chute."); + c.startAnimation(832); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (c.heightLevel == 2) { + return; + } + if (c.heightLevel == 0) { + c.getActionSender().object(FULL_FLOUR_BIN, 3166, 3306, 0, 10); + Region.addObject(FULL_FLOUR_BIN, 3166, 3306, 0, 10, 0, false); + container.stop(); + } + } + @Override + public void stop() { + + } + }, 1); + c.flourAmount += c.grain; + if (c.flourAmount > LIMIT) { + c.flourAmount = LIMIT;// Flour amount returns to limit. + } + c.grain = 0; + } else { + c.startAnimation(832); + c.getActionSender().sendMessage( + "You operate the hopper. Nothing interesting happens."); + } + } + + /** + * Emptys the flour bin... + * + * @param c + */ + public static void emptyFlourBin(Client c) { + if (c.getItemAssistant().playerHasItem(EMPTY_POT, 1) + && c.flourAmount > 0) { + c.getItemAssistant().deleteItem(EMPTY_POT, 1); + c.getItemAssistant().addItem(POT_OF_FLOUR, 1); + c.getActionSender().sendMessage( + "You fill a pot with flour from the bin."); + c.flourAmount--; + if (c.flourAmount < 0) { + c.flourAmount = 0; + } + if (c.flourAmount == 0) { + c.getActionSender().object(EMPTY_FLOUR_BIN, 3166, 3306, 0, 10); + Region.addObject(EMPTY_FLOUR_BIN, 3166, 3306, 0, 10, 0, false); + c.getActionSender().sendMessage( + "The flour bin is now empty."); + } + } else { + c.getActionSender().sendMessage( + "You don't have an empty pot to fill flour with."); + } + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/Levers.java b/2006Redone Server/src/redone/game/objects/impl/Levers.java new file mode 100644 index 00000000..01809321 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/Levers.java @@ -0,0 +1,53 @@ +package redone.game.objects.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.world.clip.ObjectDef; + +/** + * Levers + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Levers { + + /** + * ObjectX, ObjectY, PlayerX, PlayerY + */ + private final static int[][] LEVERS = { + {3090, 3956, 2539, 4712}, {2539, 4712, 3090, 3956}, {2271, 4680, 3067, 10253}, + {3067, 10253, 2271, 4680}, {3153, 3923, 2561, 3311}, {2561, 3311, 3153, 3923} + }; + + public static void pullLever(final Client player, int objectType) { + String objectName = ObjectDef.getObjectDef(objectType).name; + for (final int[] element : LEVERS) { + if (player.objectX == element[0] && player.objectY == element[1] && objectName.equalsIgnoreCase("Lever")) { + if (System.currentTimeMillis() - player.leverDelay > 3750) { + player.leverDelay = System.currentTimeMillis(); + player.stopPlayerPacket = true; + player.getActionSender().sendMessage("You pull the lever..."); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.wildLevel > 20) { + player.getPlayerAssistant().startTeleport2(element[2], element[3], 0); + container.stop(); + } else { + player.getPlayerAssistant().startTeleport(element[2], element[3], 0, "modern"); + container.stop(); + } + } + @Override + public void stop() { + player.stopPlayerPacket = false; + } + }, 1); + } + } + } + } + +} diff --git a/2006Redone Server/src/redone/game/objects/impl/OtherObjects.java b/2006Redone Server/src/redone/game/objects/impl/OtherObjects.java new file mode 100644 index 00000000..0c9a1afc --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/OtherObjects.java @@ -0,0 +1,150 @@ +package redone.game.objects.impl; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.objects.ObjectDefaults; +import redone.game.players.Client; +import redone.util.Misc; +import redone.world.clip.ObjectDef; + +public class OtherObjects { + + private final static int[] SPECIAL_OBJECTS = {160, 155, 156, 298, 299, 300, 304, 1181, 5253, 5254, 5255, 5256, 5257, 5258}; + + public static void searchSpecialObject(Client player, int objectType) { + for (int i = 0; i < SPECIAL_OBJECTS.length; i++) { + if (objectType == SPECIAL_OBJECTS[i]) { + if (System.currentTimeMillis() - player.searchObjectDelay < 1200 || objectType == 160 && player.absX != 3096 || objectType > 154 && objectType < 157 && player.absX != 3098 || player.absY == 3301) { + return; + } + player.stopPlayerPacket = true; + player.searchObjectDelay = System.currentTimeMillis(); + handleSpecialObject(player, objectType); + } + } + } + + private static void object(Client player, int id, int x, int y) { + player.getActionSender().object(id, x, y, 0, ObjectDefaults.getObjectFace(player, id), 10); + } + + private static void handleSpecialObject(final Client player, final int objectType) { + String objectName = ObjectDef.getObjectDef(objectType).name; + if (objectType == 160 && player.absX == 3096) { + player.getPlayerAssistant().walkTo(0, 1); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getPlayerAssistant().movePlayer(3098, player.absY, 0); + container.stop(); + } + @Override + public void stop() { + + } + }, 2); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + object(player, -1, 3097, 3358); + object(player, -1, 3097, 3359); + container.stop(); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + object(player, -1, 3097, 3357); + object(player, -1, 3097, 3360); + container.stop(); + } + @Override + public void stop() { + object(player, 155, 3097, 3358); + object(player, 156, 3097, 3359); + player.stopPlayerPacket = false; + } + }, 2); + } + @Override + public void stop() { + object(player, 155, 3097, 3357); + object(player, 156, 3097, 3360); + } + }, 1); + } else if (objectType > 154 && objectType < 157 && player.absX == 3098) { + player.getPlayerAssistant().walkTo(-2, 0); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + object(player, -1, 3097, 3358); + object(player, -1, 3097, 3359); + container.stop(); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + object(player, -1, 3097, 3357); + object(player, -1, 3097, 3360); + container.stop(); + } + @Override + public void stop() { + object(player, 155, 3097, 3358); + object(player, 156, 3097, 3359); + player.stopPlayerPacket = false; + } + }, 2); + } + @Override + public void stop() { + object(player, 155, 3097, 3357); + object(player, 156, 3097, 3360); + } + }, 1); + } else if (objectName.contains("Nettles")) { + int nettlesDamage = 1 + Misc.random(1); + if (player.playerEquipment[player.playerHands] > 0) { + player.startAnimation(827); + player.getItemAssistant().addItem(4241, 1); + player.stopPlayerPacket = false; + } else { + player.setHitUpdateRequired2(true); + player.setHitDiff2(nettlesDamage); + player.updateRequired = true; + player.poisonMask = 2; + player.dealDamage(nettlesDamage); + player.getPlayerAssistant().refreshSkill(3); + player.getActionSender().sendMessage("You have been stung by the nettles."); + player.stopPlayerPacket = false; + } + } else if (objectName.startsWith("Hay") || objectName.startsWith("hay")) { + final int damage = 1, random = Misc.random(15); + player.startAnimation(832); + player.getActionSender().sendMessage("You search the " + objectName.toLowerCase() + "..."); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (random == 1) { + player.getDialogueHandler().sendStatement2("Wow! A needle!", "Now what are the chances of finding that?"); + player.nextChat = 0; + player.getItemAssistant().addItem(1733, 1); + container.stop(); + } else if (random == 9) { + player.handleHitMask(damage); + player.dealDamage(damage); + player.getPlayerAssistant().refreshSkill(3); + container.stop(); + } else { + player.getActionSender().sendMessage("You find nothing of interest."); + container.stop(); + } + } + + @Override + public void stop() { + player.stopPlayerPacket = false; + } + }, 2); + } + } + +} diff --git a/2006Redone Server/src/redone/game/objects/impl/Pickable.java b/2006Redone Server/src/redone/game/objects/impl/Pickable.java new file mode 100644 index 00000000..ed8686db --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/Pickable.java @@ -0,0 +1,67 @@ +package redone.game.objects.impl; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.music.sound.SoundList; +import redone.game.players.Client; + +/** + * Pickables + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class Pickable { + + private final static int[][] PICKABLE_ITEMS = { + { 1161, 1965 }, // Cabbage + { 2646, 1779 }, // Flax + { 313, 1947 }, // Wheat + { 5585, 1947 }, { 5584, 1947 }, { 5585, 1947 }, { 312, 1942 }, // Potato + { 3366, 1957 }, // Onion + }; + + public static void pickObject(final Client player, final int objectType, final int objectX, final int objectY) { + if (player.miscTimer + 1800 > System.currentTimeMillis()) { + return; + } + for (int[] data : PICKABLE_ITEMS) { + final int objectId = data[0]; + int itemId = data[1]; + if (objectType == objectId) { + player.getItemAssistant().addItem(itemId, 1); + break; + } + } + if (player.getItemAssistant().freeSlots() > 0) { + player.turnPlayerTo(objectX, objectY); + player.startAnimation(827); + if (objectType == 2646 && random(3) == 0 || objectType != 2646) { + if (player.outStream != null) { + Server.objectHandler.createAnObject(player, -1, objectX, objectY); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + container.stop(); + } + @Override + public void stop() { + if (player.outStream != null) { + Server.objectHandler.createAnObject(player,objectType, objectX, objectY); + } + } + }, 5); + } + } + player.getActionSender().sendSound(SoundList.PICKABLE, 100, 1); + player.miscTimer = System.currentTimeMillis(); + } else { + player.getActionSender().sendMessage("Your inventory is too full to hold any more items!"); + } + } + + private static int random(int range) { + return (int) (java.lang.Math.random() * (range + 1)); + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/Searching.java b/2006Redone Server/src/redone/game/objects/impl/Searching.java new file mode 100644 index 00000000..e03e8a21 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/Searching.java @@ -0,0 +1,42 @@ +package redone.game.objects.impl; + +import redone.game.players.Client; + +public class Searching { + + private enum SearchData { + BOXES(new int[] {359, 361, 9536, 12545}, "There is nothing interesting in these boxes."), + CRATES(new int[] {354, 355, 356, 357, 358, 366, 4714, 4715, 4716, 4717, 4718, 4719, 4721, 4722, 4723, 9533, 9534, 9535, 11485, 11486, 12548, 12547}, "You search the crate but find nothing."), + SACKS(new int[] {365}, "There is nothing interesting in these sacks."), + BOOKCASE(new int[] {380, 381, 4617, 4671, 9611}, "The bookcase is empty."), + WARDROBE(new int[] {389}, "The wardrobe is empty."), + DRAWER(new int[] {348, 350, 5618}, "The drawer is empty."), + CHEST(new int[] {378}, "The chest is empty."); + + private final int[] objectId; + private final String searchText; + + private SearchData(int[] objectId, String searchText) { + this.objectId = objectId; + this.searchText = searchText; + } + + private int[] getObjectId() { + return objectId; + } + private String getObjectText() { + return searchText; + } + } + + public static void searchObject(final Client player, int objectType) { + for (SearchData s: SearchData.values()) { + for (int i = 0; i < s.getObjectId().length; i++) { + if (objectType == s.getObjectId()[i]) { + player.searchObjectDelay = System.currentTimeMillis(); + player.getActionSender().sendMessage(s.getObjectText()); + } + } + } + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/SpecialObjects.java b/2006Redone Server/src/redone/game/objects/impl/SpecialObjects.java new file mode 100644 index 00000000..d643a6b7 --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/SpecialObjects.java @@ -0,0 +1,119 @@ +package redone.game.objects.impl; + +import redone.Server; +import redone.game.content.traveling.Desert; +import redone.game.players.Client; +import redone.world.clip.Region; + +public class SpecialObjects { + + private final static int[] AL_KHARID_GATES = { 2882, 2883 }; + private final static int[] SHANTAY_GATES = { 4031, 4033 }; + + public static void openLumbridgePipe(Client c, int objectType) { + c.isRunning = false; + c.getPlayerAssistant().sendConfig(173, 0); + c.playerWalkIndex = 819; + c.getPlayerAssistant().requestUpdates(); + c.getPlayerAssistant().walkTo(0, -1); + } + + public static boolean openKharid(Client c, int objectId) { + for (int element : AL_KHARID_GATES) { + if (objectId == element) { + return true; + } + } + return false; + } + + public static boolean openShantay(Client c, int objectId) { + for (int element : SHANTAY_GATES) { + if (objectId == element) { + return true; + } + } + return false; + } + + public static void movePlayer(Client c) { + if (Region.getClipping(c.getX() - 1, c.getY(), c.heightLevel, -1, 0)) { + c.getPlayerAssistant().movePlayer(c.absX + 1, c.absY, 0); + } else if (Region.getClipping(c.getX() + 1, c.getY(), c.heightLevel, 1, + 0)) { + c.getPlayerAssistant().movePlayer(c.absX - 1, c.absY, 0); + } else if (Region.getClipping(c.getX(), c.getY() - 1, c.heightLevel, 0, + -1)) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 1, 0); + } else if (Region.getClipping(c.getX(), c.getY() + 1, c.heightLevel, 0, + 1)) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 1, 0); + } + } + + public static void openShantayChest(Client c, int objectId, int obX, + int obY, String type) { + if (type == "open") { + Server.objectHandler.createAnObject(c, 104, obX, obY, -1); + } else if (type == "shut") { + Server.objectHandler.createAnObject(c, 2693, obX, obY, -1); + } + } + + public static void initKharid(Client c, int objectId) { + if (!c.getItemAssistant().playerHasItem(995, 10)) { + c.getDialogueHandler().itemMessage(c, + "You need 10 coins to pass through this gate.", 995, 200); + c.nextChat = 0; + return; + } + Server.objectHandler.createAnObject(c, -1, c.objectX, c.objectY, -1); + final int[] coords = new int[2]; + openKharid(c, objectId); + if (c.absX == 3267) { + c.getPlayerAssistant().movePlayer(c.absX + 1, c.absY, 0); + } else if (c.absX == 3268) { + c.getPlayerAssistant().movePlayer(c.absX - 1, c.absY, 0); + } + c.turnPlayerTo(c.objectX, c.objectY); + coords[0] = c.objectX; + coords[1] = c.objectY; + c.getItemAssistant().deleteItem(995, + c.getItemAssistant().getItemSlot(995), 10); + } + + private static boolean movePlayer2(Client c) { + if (c.absY == 3117) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY - 2, 0); + return true; + } else if (c.absY == 3115) { + c.getPlayerAssistant().movePlayer(c.absX, c.absY + 2, 0); + return true; + } + c.getActionSender().sendMessage( + "Move closer so you can use the gate."); + return false; + } + + public static void initShantay(Client c, int objectId) { + if (!c.getItemAssistant().playerHasItem(1854, 1) && c.absY == 3117) { + c.getDialogueHandler().sendStatement("You need a Shantay pass to go through."); + return; + } + final int[] coords = new int[2]; + openShantay(c, objectId); + c.getActionSender().sendMessage("You pass through the gate."); + movePlayer2(c); + c.turnPlayerTo(c.objectX, c.objectY); + coords[0] = c.objectX; + coords[1] = c.objectY; + if (c.desertWarning == false && c.absY == 3117) { + Desert.showWarning(c); + c.desertWarning = true; + } + if (c.absY == 3117) { + c.getItemAssistant().deleteItem(1854, c.getItemAssistant().getItemSlot(1854), 1); + } + } + +} diff --git a/2006Redone Server/src/redone/game/objects/impl/UseOther.java b/2006Redone Server/src/redone/game/objects/impl/UseOther.java new file mode 100644 index 00000000..26b18eab --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/UseOther.java @@ -0,0 +1,30 @@ +package redone.game.objects.impl; + +import redone.game.players.Client; + +public class UseOther { + + + public static void useUp(final Client c, final int objectId) { + c.stopPlayerPacket = true; + c.startAnimation(828); + c.getPlayerAssistant().removeAllWindows(); + c.teleportToX = c.absX; + c.teleportToY = c.absY - 6400; + c.getActionSender().sendMessage("You climb up."); + c.stopPlayerPacket = false; + } + + public static void useDown(final Client c, final int objectId) { + if (c.objectX == 2647 && c.objectY == 3657 || c.objectX == 2650 && c.objectY == 3661) { + c.getActionSender().sendMessage("This trapdoor is currently disabled."); + return; + } + c.stopMovement(); + c.startAnimation(827); + c.getPlayerAssistant().removeAllWindows(); + c.teleportToX = c.absX; + c.teleportToY = c.absY + 6400; + c.getActionSender().sendMessage("You climb down."); + } +} diff --git a/2006Redone Server/src/redone/game/objects/impl/Webs.java b/2006Redone Server/src/redone/game/objects/impl/Webs.java new file mode 100644 index 00000000..6b0e75ed --- /dev/null +++ b/2006Redone Server/src/redone/game/objects/impl/Webs.java @@ -0,0 +1,41 @@ +package redone.game.objects.impl; + +import redone.Server; +import redone.game.content.music.sound.SoundList; +import redone.game.players.Client; +import redone.util.Misc; + +/** + * @author Andrew + */ + +public class Webs { + + public static int[] CLICKING_OBJECTS = { 733 }; + + public static boolean webs(Client c, int object) { + for (int element : CLICKING_OBJECTS) { + if (object == element) { + return true; + } + } + return false; + } + + public static void slashWeb(Client c, final int objectClickId, + final int objectX, final int objectY) { + if (System.currentTimeMillis() - c.webSlashDelay > 1800) { + if (Misc.random(3) > 0) { + Server.objectHandler.createAnObject(c, -1, objectX, objectY); + // c.startAnimation(451); + c.startAnimation(c.getCombatAssistant().getWepAnim()); + c.webSlashDelay = System.currentTimeMillis(); + c.getActionSender().sendSound(SoundList.SLASH_WEB, 100, 0); + c.getActionSender().sendMessage("You successfully slash open the web."); + } else { + c.getActionSender().sendMessage("You fail to slash through the web."); + return; + } + } + } +} diff --git a/2006Redone Server/src/redone/game/players/Client.java b/2006Redone Server/src/redone/game/players/Client.java new file mode 100644 index 00000000..de15f939 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/Client.java @@ -0,0 +1,1374 @@ +package redone.game.players; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.Future; + +import org.apache.mina.common.IoSession; + +import redone.Connection; +import redone.Constants; +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.BankPin; +import redone.game.content.EmoteHandler; +import redone.game.content.combat.CombatAssistant; +import redone.game.content.combat.Specials; +import redone.game.content.combat.magic.Enchanting; +import redone.game.content.combat.magic.MagicTeleports; +import redone.game.content.combat.prayer.PrayerData; +import redone.game.content.combat.prayer.PrayerDrain; +import redone.game.content.combat.range.DwarfCannon; +import redone.game.content.consumables.Food; +import redone.game.content.consumables.Potions; +import redone.game.content.guilds.impl.RangersGuild; +import redone.game.content.minigames.Barrows; +import redone.game.content.minigames.Dueling; +import redone.game.content.minigames.FightPits; +import redone.game.content.minigames.PestControl; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.music.PlayList; +import redone.game.content.music.sound.SoundList; +import redone.game.content.quests.QuestAssistant; +import redone.game.content.quests.impl.CooksAssistant; +import redone.game.content.quests.impl.DoricsQuest; +import redone.game.content.quests.impl.GertrudesCat; +import redone.game.content.quests.impl.ImpCatcher; +import redone.game.content.quests.impl.PiratesTreasure; +import redone.game.content.quests.impl.RestlessGhost; +import redone.game.content.quests.impl.RomeoJuliet; +import redone.game.content.quests.impl.RuneMysteries; +import redone.game.content.quests.impl.SheepShearer; +import redone.game.content.quests.impl.VampyreSlayer; +import redone.game.content.quests.impl.WitchsPotion; +import redone.game.content.skills.SkillInterfaces; +import redone.game.content.skills.agility.Agility; +import redone.game.content.skills.agility.ApeAtollAgility; +import redone.game.content.skills.agility.BarbarianAgility; +import redone.game.content.skills.agility.GnomeAgility; +import redone.game.content.skills.agility.PyramidAgility; +import redone.game.content.skills.agility.WerewolfAgility; +import redone.game.content.skills.agility.WildernessAgility; +import redone.game.content.skills.cooking.Potatoes; +import redone.game.content.skills.core.Mining; +import redone.game.content.skills.crafting.GlassBlowing; +import redone.game.content.skills.runecrafting.Runecrafting; +import redone.game.content.skills.slayer.Slayer; +import redone.game.content.skills.smithing.Smithing; +import redone.game.content.skills.smithing.SmithingInterface; +import redone.game.content.traveling.Desert; +import redone.game.dialogues.DialogueHandler; +import redone.game.items.GameItem; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.LightSources; +import redone.game.items.impl.PotionMixing; +import redone.game.items.impl.Teles; +import redone.game.items.impl.Weight; +import redone.game.npcs.NpcActions; +import redone.game.objects.ObjectsActions; +import redone.game.players.antimacro.AntiBotting; +import redone.game.shops.ShopAssistant; +import redone.net.ActionSender; +import redone.net.HostList; +import redone.net.Packet; +import redone.net.StaticPacketBuilder; +import redone.net.packets.PacketHandler; +import redone.net.packets.impl.ChallengePlayer; +import redone.util.Misc; +import redone.util.Stream; +import redone.world.ObjectManager; + +public class Client extends Player { + + public byte buffer[] = null; + public Stream inStream = null, outStream = null; + private IoSession session; + private final ItemAssistant itemAssistant = new ItemAssistant(this); + private final ShopAssistant shopAssistant = new ShopAssistant(this); + private final Trading trading = new Trading(this); + private final Dueling duel = new Dueling(this); + private final PlayerAssistant playerAssistant = new PlayerAssistant(this); + private final CombatAssistant combatAssistant = new CombatAssistant(this); + private final ObjectsActions actionHandler = new ObjectsActions(this); + private final NpcActions npcs = new NpcActions(this); + private final Queue queuedPackets = new LinkedList(); + private final Potions potions = new Potions(this); + private final PotionMixing potionMixing = new PotionMixing(this); + private final Food food = new Food(this); + private final EmoteHandler emoteHandler = new EmoteHandler(this); + private final SkillInterfaces skillInterfaces = new SkillInterfaces(this); + private final Enchanting enchanting = new Enchanting(this); + private final Potatoes potatoes = new Potatoes(this); + private final PlayerAction playeraction = new PlayerAction(this); + private final Desert desert = new Desert(); + private final Specials specials = new Specials(this); + private final SoundList sound = new SoundList(this); + public String creationAddress = ""; + private final HashMap temporary = new HashMap(); + private final PlayList playList = new PlayList(this); + private final Agility agility = new Agility(this); + private final Runecrafting runecrafting = new Runecrafting(this); + private final Teles teles = new Teles(); + private final BankPin bankPin = new BankPin(this); + private final Slayer slayer = new Slayer(this); + private final ImpCatcher impCatcher = new ImpCatcher(this); + private final CooksAssistant cooksAssistant = new CooksAssistant(this); + private final RomeoJuliet romeoJuliet = new RomeoJuliet(this); + private final DoricsQuest doricsQuest = new DoricsQuest(this); + private final VampyreSlayer vampyreSlayer = new VampyreSlayer(this); + private final RestlessGhost restlessGhost = new RestlessGhost(this); + private final GertrudesCat gertrudesCat = new GertrudesCat(this); + private final SheepShearer sheepShearer = new SheepShearer(this); + private final RuneMysteries runeMysteries = new RuneMysteries(this); + private final WitchsPotion witchsPotion = new WitchsPotion(this); + private final PiratesTreasure piratesTreasure = new PiratesTreasure(this); + private final ActionSender actionSender = new ActionSender(this); + private final DialogueHandler dialogues = new DialogueHandler(this); + private final GnomeAgility gnomeStrongHold = new GnomeAgility(this); + private final WildernessAgility wildernessAgility = new WildernessAgility(this); + private final BarbarianAgility barbarianAgility = new BarbarianAgility(this); + private final PyramidAgility pyramidAgility = new PyramidAgility(this); + private final WerewolfAgility werewolfAgility = new WerewolfAgility(this); + private final ApeAtollAgility apeAtollAgility = new ApeAtollAgility(this); + private final Smithing smithing = new Smithing(); + private final SmithingInterface smithingInterface = new SmithingInterface(this); + private final PrayerData prayer = new PrayerData(); + private final ObjectManager objectManager = new ObjectManager(); + public ArrayList fishingTrawlerReward = new ArrayList(); + private final RangersGuild rangersGuild = new RangersGuild(this); + private GlassBlowing glassBlowing = new GlassBlowing(this); + private Barrows barrows = new Barrows(this); + private Mining mining = new Mining(); + private ChallengePlayer challengePlayer = new ChallengePlayer(); + private DwarfCannon dwarfCannon = new DwarfCannon(this); + + + public DwarfCannon getCannon() { + return dwarfCannon; + } + + + public ChallengePlayer getChallengePlayer() { + return challengePlayer; + } + + public Mining getMining() { + return mining; + } + + public Barrows getBarrows() { + return barrows; + } + + public GlassBlowing getGlassBlowing() { + return glassBlowing; + } + + public RangersGuild getRangersGuild() { + return rangersGuild; + } + + public ObjectManager getObjectManager() { + return objectManager; + } + + public SmithingInterface getSmithingInt() { + return smithingInterface; + } + + public Smithing getSmithing() { + return smithing; + } + + public ApeAtollAgility getApeAtollAgility() { + return apeAtollAgility; + } + + public WerewolfAgility getWerewolfAgility() { + return werewolfAgility; + } + + public PyramidAgility getPyramidAgility() { + return pyramidAgility; + } + + public BarbarianAgility getBarbarianAgility() { + return barbarianAgility; + } + + public WildernessAgility getWildernessAgility() { + return wildernessAgility; + } + + public GnomeAgility getGnomeStrongHold() { + return gnomeStrongHold; + } + + public DialogueHandler getDialogueHandler() { + return dialogues; + } + + public ActionSender getActionSender() { + return actionSender; + } + + public SoundList getSound() { + return sound; + } + + public Object getTemporary(String name) { + return temporary.get(name); + } + + public void addTemporary(String name, Object value) { + temporary.put(name, value); + } + + public PlayList getPlayList() { + return playList; + } + + public Specials getSpecials() { + return specials; + } + + public Potatoes getPTS() { + return potatoes; + } + + public EmoteHandler getEmoteHandler() { + return emoteHandler; + } + + public SkillInterfaces getSkillInterfaces() { + return skillInterfaces; + } + + public Enchanting getEnchanting() { + return enchanting; + } + + public PlayerAction getPlayerAction() { + return playeraction; + } + + public Desert getDesert() { + return desert; + } + + public Agility getAgility() { + return agility; + } + + public Runecrafting getRC() { + return runecrafting; + } + + public Slayer getSlayer() { + return slayer; + } + + public Teles getTeles() { + return teles; + } + + public BankPin getBankPin() { + return bankPin; + } + + public ImpCatcher getImpCatcher() { + return impCatcher; + } + + public PiratesTreasure getPiratesTreasure() { + return piratesTreasure; + } + + public CooksAssistant getCooksAssistant() { + return cooksAssistant; + } + + public RomeoJuliet getRomeoJuliet() { + return romeoJuliet; + } + + public DoricsQuest getDoricsQuest() { + return doricsQuest; + } + + public VampyreSlayer getVampyreSlayer() { + return vampyreSlayer; + } + + public RestlessGhost getRestlessGhost() { + return restlessGhost; + } + + public GertrudesCat getGertrudesCat() { + return gertrudesCat; + } + + public SheepShearer getSheepShearer() { + return sheepShearer; + } + + public RuneMysteries getRuneMysteries() { + return runeMysteries; + } + + public WitchsPotion getWitchesPotion() { + return witchsPotion; + } + + public void setCurrentTask(Future task) { + currentTask = task; + } + + public Future getCurrentTask() { + return currentTask; + } + + public synchronized Stream getInStream() { + return inStream; + } + + public synchronized int getPacketType() { + return packetType; + } + + public synchronized int getPacketSize() { + return packetSize; + } + + public synchronized Stream getOutStream() { + return outStream; + } + + public ItemAssistant getItemAssistant() { + return itemAssistant; + } + + public PlayerAssistant getPlayerAssistant() { + return playerAssistant; + } + + public ShopAssistant getShopAssistant() { + return shopAssistant; + } + + public Trading getTrading() { + return trading; + } + + public Dueling getDueling() { + return duel; + } + + public CombatAssistant getCombatAssistant() { + return combatAssistant; + } + + public PrayerData getPrayer() { + return prayer; + } + + public ObjectsActions getObjects() { + return actionHandler; + } + + public NpcActions getNpcs() { + return npcs; + } + + public IoSession getSession() { + return session; + } + + public Potions getPotions() { + return potions; + } + + public PotionMixing getPotMixing() { + return potionMixing; + } + + public Food getFood() { + return food; + } + + private Map interfaceText = new HashMap(); + + public class TinterfaceText { + public int id; + public String currentState; + + public TinterfaceText(String s, int id) { + this.currentState = s; + this.id = id; + } + + } + + public boolean checkPacket126Update(String text, int id) { + if(!interfaceText.containsKey(id)) { + interfaceText.put(id, new TinterfaceText(text, id)); + } else { + TinterfaceText t = interfaceText.get(id); + if(text.equals(t.currentState)) { + return false; + } + t.currentState = text; + } + return true; + } + + public int lowMemoryVersion = 0; + public int timeOutCounter = 0; + public int returnCode = 2; + private Future currentTask; + + public Client(IoSession s, int _playerId) { + super(_playerId); + session = s; + synchronized (this) { + outStream = new Stream(new byte[Constants.BUFFER_SIZE]); + outStream.currentOffset = 0; + } + inStream = new Stream(new byte[Constants.BUFFER_SIZE]); + inStream.currentOffset = 0; + buffer = new byte[Constants.BUFFER_SIZE]; + } + + /** + * Resets the shaking of the player's screen. + */ + public void resetShaking() { + getActionSender().shakeScreen(1, 0, 0, 0); + } + + public final String disabled() { + return "Skill is disabled for testing period."; + } + + public void puzzleBarrow() { + getPlayerAssistant().sendFrame246(4545, 250, 6833); + getPlayerAssistant().sendFrame126("1.", 4553); + getPlayerAssistant().sendFrame246(4546, 250, 6832); + getPlayerAssistant().sendFrame126("2.", 4554); + getPlayerAssistant().sendFrame246(4547, 250, 6830); + getPlayerAssistant().sendFrame126("3.", 4555); + getPlayerAssistant().sendFrame246(4548, 250, 6829); + getPlayerAssistant().sendFrame126("4.", 4556); + getPlayerAssistant().sendFrame246(4550, 250, 3454); + getPlayerAssistant().sendFrame246(4551, 250, 8746); + getPlayerAssistant().sendFrame246(4552, 250, 6830); + getPlayerAssistant().showInterface(4543); + } + + public void flushOutStream() { + if (disconnected || outStream.currentOffset == 0) { + return; + } + synchronized (this) { + StaticPacketBuilder out = new StaticPacketBuilder().setBare(true); + byte[] temp = new byte[outStream.currentOffset]; + System.arraycopy(outStream.buffer, 0, temp, 0, temp.length); + out.addBytes(temp); + session.write(out.toPacket()); + outStream.currentOffset = 0; + } + } + + public void sendClan(String name, String message, String clan, int rights) { + outStream.createFrameVarSizeWord(217); + outStream.writeString(name); + outStream.writeString(message); + outStream.writeString(clan); + outStream.writeWord(rights); + outStream.endFrameVarSize(); + } + + public static final int PACKET_SIZES[] = { 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, // 0 + 0, 0, 0, 0, 8, 0, 6, 2, 2, 0, // 10 + 0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20 + 0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30 + 2, 6, 0, 6, 0, -1, 0, 0, 0, 0, // 40 + 0, 0, 0, 12, 0, 0, 0, 8, 8, 12, // 50 + 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, // 60 + 6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70 + 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, // 80 + 0, 0, 0, 0, 0, 3, 0, 0, -1, 0, // 90 + 0, 13, 0, -1, 0, 0, 0, 0, 0, 0,// 100 + 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, // 110 + 1, 0, 6, 0, 0, 0, -1, 0, 2, 6, // 120 + 0, 4, 6, 8, 0, 6, 0, 0, 0, 2, // 130 + 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, // 140 + 0, 0, 1, 2, 0, 2, 6, 0, 0, 0, // 150 + 0, 0, 0, 0, -1, -1, 0, 0, 0, 0,// 160 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 170 + 0, 8, 0, 3, 0, 2, 0, 0, 8, 1, // 180 + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, // 190 + 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, // 200 + 4, 0, 0, 0, 7, 8, 0, 0, 10, 0, // 210 + 0, 0, 0, 0, 0, 0, -1, 0, 6, 0, // 220 + 1, 0, 0, 0, 6, 0, 6, 8, 1, 0, // 230 + 0, 4, 0, 0, 0, 0, -1, 0, -1, 4,// 240 + 0, 0, 6, 6, 0, 0, 0 // 250 + }; + + @Override + public void destruct() { + if (session == null) { + return; + } + if (getCannon().hasCannon()) { + getCannon().removeObject(cannonX, cannonY); + for(int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] == cannonX && Server.cannonsY[i] == cannonY) { + Server.cannonsX[i] = 0; + Server.cannonsY[i] = 0; + Server.cannonsO[i] = null; + } + lostCannon = true; + cannonX = -1; + cannonY = -1; + } + } + if(Server.trawler.players.contains(this)) { + Server.trawler.players.remove(this); + } + if (CastleWars.isInCwWait(this)) { + CastleWars.leaveWaitingRoom(this); + } + if (CastleWars.isInCw(this)) { + CastleWars.removePlayerFromCw(this); + } + if (FightPits.getState(this) != null) { + FightPits.removePlayer(this, true); + } + if (PestControl.isInGame(this)) { + PestControl.removePlayerGame(this); + getPlayerAssistant().movePlayer(2657, 2639, 0); + } + if (PestControl.isInPcBoat(this)) { + PestControl.leaveWaitingBoat(this); + getPlayerAssistant().movePlayer(2657, 2639, 0); + } + if (hasNpc == true) { + getSummon().pickUpClean(this, summonId); + } + if (clanId >= 0) { + Server.clanChat.leaveClan(playerId, clanId); + } + Misc.println("[DEREGISTERED]: " + playerName + ""); + HostList.getHostList().remove(session); + CycleEventHandler.getSingleton().stopEvents(this); + disconnected = true; + session.close(); + session = null; + inStream = null; + outStream = null; + isActive = false; + buffer = null; + super.destruct(); + // PlayerSave.saveGame(this); + } + + public static final String[][] data = { + {"Andrew", "Andrew1"}, + }; + + @Override + public void initialize() { + getPlayerAssistant().loginScreen(); + if (Connection.isNamedBanned(playerName)) { + logout(); + return; + } + /*(for (int i = 0; i < data.length; i++) { + if (playerRights > 0) { + if (playerName != data[0][i]) { + Connection.addNameToBanList(playerName); + Connection.addNameToFile(playerName); + disconnected = true; + } + } + }*/ + synchronized (this) { + outStream.createFrame(249); + outStream.writeByteA(membership ? 1 : 0); + outStream.writeWordBigEndianA(playerId); + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (j == playerId) { + continue; + } + if (PlayerHandler.players[j] != null) { + if (PlayerHandler.players[j].playerName + .equalsIgnoreCase(playerName)) { + disconnected = true; + } + } + } + lastLoginDate = getLastLogin(); + QuestAssistant.sendStages(this); + if (hasNpc == true) { + if (summonId > 0) { + Server.npcHandler.spawnNpc3(this, summonId, absX, absY - 1, + heightLevel, 0, 120, 25, 200, 200, true, false, + true); + } + } + if (isBotting == true) { + AntiBotting.botCheckInterface(this); + } + if (questPoints > QuestAssistant.MAXIMUM_QUESTPOINTS || playerRights > 2) { + questPoints = QuestAssistant.MAXIMUM_QUESTPOINTS;// check for + // abusers + } + if (playerHitpoints < 0) { + isDead = true; + } + if (playerLevel[playerHitpoints] > 99) { + playerLevel[playerHitpoints] = 99;// check for abusers + getPlayerAssistant().refreshSkill(3); + } + if (playerLevel[playerFarming] > 1 && playerRights < 3) { + playerLevel[playerFarming] = 1; + getPlayerAssistant().refreshSkill(playerFarming); + } + getPlayerAssistant().firstTimeTutorial(); + if (tutorialProgress > 0 && tutorialProgress < 36 && Constants.TUTORIAL_ISLAND) { + getActionSender().sendMessage("@blu@Continue the tutorial from the last step you were on.@bla@"); + } + if (tutorialProgress > 35) { + getPlayerAssistant().sendSidebars(); + getItemAssistant().sendWeapon(playerEquipment[playerWeapon], ItemAssistant.getItemName(playerEquipment[playerWeapon])); + getActionSender().sendMessage("Welcome to @blu@" + Constants.SERVER_NAME + "@bla@ - we are currently in Server Stage v@blu@" + Constants.TEST_VERSION + "@bla@."); + getActionSender().sendMessage("@red@Warning@bla@: If you find a bug, report it to owner in skype."); + if (!hasBankpin) { + getActionSender().sendMessage("You do not have a bank pin it is highly recommended you get one."); + } + } + for (int i = 0; i < 25; i++) { + getActionSender().setSkillLevel(i, playerLevel[i], playerXP[i]); + getPlayerAssistant().refreshSkill(i); + } + for (int p = 0; p < getPrayer().PRAYER.length; p++) { // reset + // prayer + // glows + getPrayer().prayerActive[p] = false; + getPlayerAssistant().sendConfig(getPrayer().PRAYER_GLOW[p], 0); + } + lastX = absX; + lastY = absY; + lastH = heightLevel; + if (inWild()) { + WildernessWarning = true; + } + if (splitChat == true) { + getPlayerAssistant().sendConfig(502, 1); + getPlayerAssistant().sendConfig(287, 1); + } else { + getPlayerAssistant().sendConfig(502, 0); + getPlayerAssistant().sendConfig(287, 0); + } + if (isRunning2) { + getPlayerAssistant().sendConfig(504, 1); + getPlayerAssistant().sendConfig(173, 1); + } else { + getPlayerAssistant().sendConfig(504, 0); + getPlayerAssistant().sendConfig(173, 0); + } + Weight.updateWeight(this); + + getPlayList().fixAllColors(); + getPlayerAction().setAction(false); + getPlayerAction().canWalk(true); + getPlayerAssistant().handleWeaponStyle(); + MagicTeleports.handleLoginText(this); + accountFlagged = getPlayerAssistant().checkForFlags(); + getPlayerAssistant().sendConfig(108, 0);// resets autocast button + getPlayerAssistant().sendFrame107(); // reset screen + getPlayerAssistant().setChatOptions(0, 0, 0); // reset private + // messaging options + correctCoordinates(); + getActionSender().showOption(4, 0, "Trade With", 3); + getActionSender().showOption(5, 0, "Follow", 4); + getItemAssistant().resetItems(3214); + getItemAssistant().resetBonus(); + getItemAssistant().getBonus(); + getItemAssistant().writeBonus(); + getItemAssistant().setEquipment(playerEquipment[playerHat], 1, + playerHat); + getItemAssistant().setEquipment(playerEquipment[playerCape], 1, + playerCape); + getItemAssistant().setEquipment(playerEquipment[playerAmulet], 1, + playerAmulet); + getItemAssistant().setEquipment(playerEquipment[playerArrows], + playerEquipmentN[playerArrows], playerArrows); + getItemAssistant().setEquipment(playerEquipment[playerChest], 1, + playerChest); + getItemAssistant().setEquipment(playerEquipment[playerShield], 1, + playerShield); + getItemAssistant().setEquipment(playerEquipment[playerLegs], 1, + playerLegs); + getItemAssistant().setEquipment(playerEquipment[playerHands], 1, + playerHands); + getItemAssistant().setEquipment(playerEquipment[playerFeet], 1, + playerFeet); + getItemAssistant().setEquipment(playerEquipment[playerRing], 1, + playerRing); + getItemAssistant().setEquipment(playerEquipment[playerWeapon], + playerEquipmentN[playerWeapon], playerWeapon); + getCombatAssistant().getPlayerAnimIndex(); + getPlayerAssistant().logIntoPM(); + getItemAssistant().addSpecialBar(playerEquipment[playerWeapon]); + saveTimer = Constants.SAVE_TIMER; + saveCharacter = true; + Misc.println("[REGISTERED]: " + playerName + ""); + handler.updatePlayer(this, outStream); + handler.updateNPC(this, outStream); + flushOutStream(); + getPlayerAssistant().clearClanChat(); + getPlayerAssistant().resetFollow(); + LightSources.saveBrightness(this); + getPlayerAssistant().sendAutoRetalitate(); + getCannon().loginCheck(); + } + } + + @Override + public void update() { + synchronized (this) { + handler.updatePlayer(this, outStream); + handler.updateNPC(this, outStream); + flushOutStream(); + } + } + + public void logout() { + synchronized (this) { + if(Server.trawler.players.contains(this)) { + Server.trawler.players.remove(this); + } + if (getCannon().hasCannon()) { + getCannon().removeObject(cannonX, cannonY); + for(int i = 0; i < Server.cannonsX.length; i++) { + if (Server.cannonsX[i] == cannonX && Server.cannonsY[i] == cannonY) { + Server.cannonsX[i] = 0; + Server.cannonsY[i] = 0; + Server.cannonsO[i] = null; + } + lostCannon = true; + cannonX = -1; + cannonY = -1; + } + } + if (CastleWars.isInCw(this)) { + CastleWars.removePlayerFromCw(this); + } + if (CastleWars.isInCwWait(this)) { + CastleWars.leaveWaitingRoom(this); + } + if (FightPits.getState(this) != null) { + FightPits.removePlayer(this, true); + } + if (PestControl.isInGame(this)) { + PestControl.removePlayerGame(this); + getPlayerAssistant().movePlayer(2657, 2639, 0); + } + if (PestControl.isInPcBoat(this)) { + PestControl.leaveWaitingBoat(this); + getPlayerAssistant().movePlayer(2657, 2639, 0); + } + if(underAttackBy > 0 || underAttackBy2 > 0) { + getActionSender().sendMessage("You can't logout during combat!"); + return; + } + lastLoginDate = getLastLogin(); + lastX = absX; + lastY = absY; + lastH = heightLevel; + CycleEventHandler.getSingleton().stopEvents(this); + if (hasNpc == true) { + getSummon().pickUpClean(this, summonId); + } + if (System.currentTimeMillis() - logoutDelay > 2500) { + outStream.createFrame(109); + properLogout = true; + } else { + getActionSender().sendMessage("You must wait a few seconds from being out of combat to logout."); + } + } + } + + + public int packetSize = 0, packetType = -1; + public boolean WildernessWarning = false; + + public void antiFirePotion() { + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + antiFirePot = false; + getActionSender().sendMessage("Your resistance to dragon fire has worn off."); + container.stop(); + } + @Override + public void stop() { + + } + }, 200); + } + + public boolean isBusy = false; + + public boolean checkBusy() { + return isBusy; + } + + public void setBusy(boolean isBusy) { + this.isBusy = isBusy; + } + + public boolean isBusy() { + return isBusy; + } + + public int getLastLogin() { + Calendar cal = new GregorianCalendar(); + int day = cal.get(Calendar.DAY_OF_MONTH); + int month = cal.get(Calendar.MONTH); + int year = cal.get(Calendar.YEAR); + return (year * 10000) + (month * 100) + day; + } + + @Override + public void updateWalkEntities() { + if (inWild() && !inCw()) { + int modY = absY > 6400 ? absY - 6400 : absY; + wildLevel = (modY - 3520) / 8 + 1; + getPlayerAssistant().walkableInterface(197); + if (Constants.SINGLE_AND_MULTI_ZONES) { + if (inMulti()) { + getPlayerAssistant().sendFrame126("@yel@Level: " + wildLevel, + 199); + } else { + getPlayerAssistant().sendFrame126("@yel@Level: " + wildLevel, + 199); + } + } else { + getActionSender().multiWay(-1); + getPlayerAssistant().sendFrame126("@yel@Level: " + wildLevel, 199); + } + getActionSender().showOption(3, 0, "Attack", 1); + } else if (inDuelArena()) { + getPlayerAssistant().walkableInterface(201); + if (duelStatus == 5) { + getActionSender().showOption(3, 0, "Attack", 1); + } else { + getActionSender().showOption(3, 0, "Challenge", 1); + } + } else if (getPlayerAssistant().inPitsWait()) { + getActionSender().showOption(3, 0, "Null", 1); + } else if(Server.trawler.players.contains(this)) { + getPlayerAssistant().walkableInterface(11908); + } else if (isInBarrows() || isInBarrows2()) { + getPlayerAssistant().sendFrame126("Kill Count: " + barrowsKillCount, 4536); + getPlayerAssistant().walkableInterface(4535); + } else if (inCw() || inPits) { + getActionSender().showOption(3, 0, "Attack", 1); + } else { + getPlayerAssistant().sendMapState(0); + getPlayerAssistant().walkableInterface(-1); + getActionSender().showOption(3, 0, "Null", 1); + } + } + + public Client getClient(String name) { + name = name.toLowerCase(); + for (int i = 0; i < Constants.MAX_PLAYERS; i++) { + if (validClient(i)) { + Client client = getClient(i); + if (client.playerName.toLowerCase().equalsIgnoreCase(name)) { + return client; + } + } + } + return null; + } + + public Client getClient(int id) { + return (Client) PlayerHandler.players[id]; + } + + public boolean validClient(int id) { + if (id < 0 || id > Constants.MAX_PLAYERS) { + return false; + } + return validClient(getClient(id)); + } + + public boolean validClient(String name) { + return validClient(getClient(name)); + } + + public boolean validClient(Client client) { + return client != null && !client.disconnected; + } + + @Override + public void process() { + + if (playerEnergy < 100&& System.currentTimeMillis() - lastIncrease >= getPlayerAssistant().raiseTimer()) { + playerEnergy += 1; + lastIncrease = System.currentTimeMillis(); + } + if (playerEnergy <= 0 && isRunning2) { + isRunning2 = false; + getPlayerAssistant().sendConfig(504, 0); + getPlayerAssistant().sendConfig(173, 0); + } + getPlayerAssistant().writeEnergy(); + + if (System.currentTimeMillis() - specDelay > Constants.INCREASE_SPECIAL_AMOUNT) { + specDelay = System.currentTimeMillis(); + if (specAmount < 10) { + specAmount += .5; + if (specAmount > 10) { + specAmount = 10; + } + getItemAssistant().addSpecialBar(playerEquipment[playerWeapon]); + } + } + + if (followId > 0) { + getPlayerAssistant().followPlayer(); + } else if (followId2 > 0) { + getPlayerAssistant().followNpc(); + } + + if (System.currentTimeMillis() - duelDelay > 800 && duelCount > 0) { + if (duelCount != 1) { + forcedChat("" + --duelCount); + duelDelay = System.currentTimeMillis(); + } else { + damageTaken = new int[Constants.MAX_PLAYERS]; + forcedChat("FIGHT!"); + duelCount = 0; + } + } + + PrayerDrain.handlePrayerDrain(this); + + if (System.currentTimeMillis() - singleCombatDelay > 3300) { + underAttackBy = 0; + } + if (System.currentTimeMillis() - singleCombatDelay2 > 3300) { + underAttackBy2 = 0; + } + + if (System.currentTimeMillis() - restoreStatsDelay > 60000) { + restoreStatsDelay = System.currentTimeMillis(); + for (int level = 0; level < playerLevel.length; level++) { + if (playerLevel[level] < getLevelForXP(playerXP[level])) { + if (level != 5) { // prayer doesn't restore + playerLevel[level] += 1; + getActionSender().setSkillLevel(level, + playerLevel[level], playerXP[level]); + getPlayerAssistant().refreshSkill(level); + } + } else if (playerLevel[level] > getLevelForXP(playerXP[level])) { + playerLevel[level] -= 1; + getActionSender().setSkillLevel(level, + playerLevel[level], playerXP[level]); + getPlayerAssistant().refreshSkill(level); + } + } + } + + if (!hasMultiSign && inMulti()) { + hasMultiSign = true; + getActionSender().multiWay(1); + } + + if (hasMultiSign && !inMulti()) { + hasMultiSign = false; + getActionSender().multiWay(-1); + } + + if (skullTimer > 0) { + skullTimer--; + if (skullTimer == 1) { + isSkulled = false; + attackedPlayers.clear(); + headIconPk = -1; + skullTimer = -1; + getPlayerAssistant().requestUpdates(); + } + } + + if (isDead && respawnTimer == -6) { + getPlayerAssistant().applyDead(); + } + + if (respawnTimer == 7) { + respawnTimer = -6; + getPlayerAssistant().giveLife(); + } else if (respawnTimer == 12) { + respawnTimer--; + startAnimation(0x900); + poisonDamage = -1; + } + + if (respawnTimer > -6) { + respawnTimer--; + } + + if (freezeTimer > -6) { + freezeTimer--; + if (frozenBy > 0) { + if (PlayerHandler.players[frozenBy] == null) { + freezeTimer = -1; + frozenBy = -1; + } else if (!goodDistance(absX, absY, + PlayerHandler.players[frozenBy].absX, + PlayerHandler.players[frozenBy].absY, 20)) { + freezeTimer = -1; + frozenBy = -1; + } + } + } + + if (hitDelay > 0) { + hitDelay--; + } + + if (teleTimer > 0) { + teleTimer--; + if (!isDead) { + if (teleTimer == 1 && newLocation > 0) { + teleTimer = 0; + getPlayerAssistant().changeLocation(); + } + if (teleTimer == 5) { + teleTimer--; + getPlayerAssistant().processTeleport(); + } + if (teleTimer == 9 && teleGfx > 0) { + teleTimer--; + gfx100(teleGfx); + } + } else { + teleTimer = 0; + } + } + + if (hitDelay == 1) { + if (oldNpcIndex > 0) { + getCombatAssistant().delayedHit(oldNpcIndex); + } + if (oldPlayerIndex > 0) { + getCombatAssistant().playerDelayedHit(oldPlayerIndex); + } + } + + if (attackTimer > 0) { + attackTimer--; + } + + if (attackTimer == 1) { + if (npcIndex > 0 && clickNpcType == 0) { + getCombatAssistant().attackNpc(npcIndex); + } + if (playerIndex > 0) { + getCombatAssistant().attackPlayer(playerIndex); + } + } else if (attackTimer <= 0 && (npcIndex > 0 || playerIndex > 0)) { + if (npcIndex > 0) { + attackTimer = 0; + getCombatAssistant().attackNpc(npcIndex); + } else if (playerIndex > 0) { + attackTimer = 0; + getCombatAssistant().attackPlayer(playerIndex); + } + } + + if (timeOutCounter > Constants.TIMEOUT) { + disconnected = true; + } + + timeOutCounter++; + } + + public void queueMessage(Packet arg1) { + // synchronized(queuedPackets) { + // if (arg1.getId() != 41) + queuedPackets.add(arg1); + // else + // processPacket(arg1); + // } + } + + @Override + public synchronized boolean processQueuedPackets() { + Packet p = null; + synchronized (queuedPackets) { + p = queuedPackets.poll(); + } + if (p == null) { + return false; + } + inStream.currentOffset = 0; + packetType = p.getId(); + packetSize = p.getLength(); + inStream.buffer = p.getData(); + if (packetType > 0) { + // getPacketDispatcher().sendMessage("PacketType: " + packetType); + PacketHandler.processPacket(this, packetType, packetSize); + } + timeOutCounter = 0; + return true; + } + + public synchronized boolean processPacket(Packet p) { + synchronized (this) { + if (p == null) { + return false; + } + inStream.currentOffset = 0; + packetType = p.getId(); + packetSize = p.getLength(); + inStream.buffer = p.getData(); + if (packetType > 0) { + // getPacketDispatcher().sendMessage("PacketType: " + + // packetType); + PacketHandler.processPacket(this, packetType, packetSize); + } + timeOutCounter = 0; + return true; + } + } + + public int soundVolume = 10; + + /** + * Outputs a send packet which is built from the data params provided + * towards a connected user client channel. + * + * @param id + * The identification number of the sound. + * @param volume + * The volume amount of the sound (1-100) + * @param delay + * The delay (0 = immediately 30 = 1/2cycle 60=full cycle) before + * the sound plays. + */ + public void sendSound(int id, int volume, int delay) { + try { + outStream.createFrameVarSize(174); + outStream.writeWord(id); + outStream.writeByte(volume); + outStream.writeWord(delay); + updateRequired = true; + appearanceUpdateRequired = true; + outStream.endFrameVarSize(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Outputs a send packet which is built from the data params provided + * towards a connected user client channel. + * + * @param id + * The identification number of the sound. + * @param volume + * The volume amount of the sound (1-100) + */ + public void sendSound(int id, int volume) { + sendSound(id, volume, 0); + } + + /** + * Outputs a send packet which is built from the data params provided + * towards a connected user client channel. + * + * @param id + * The identification number of the sound. + */ + public void sendSound(int id) { + sendSound(id, 100);// pretty sure it's 100 just double check + } + + /** + * Play sounds + * + * @param SOUNDID + * : ID + * @param delay + * : SOUND DELAY + */ + public void playSound(Client c, int SOUNDID, int delay) { + if (Constants.SOUND) { + if (soundVolume <= -1) { + return; + } + /** + * Deal with regions We dont need to play this again because you are + * in the current region + */ + if (c != null) { + if (c.soundVolume >= 0) { + if (c.goodDistance(c.absX, c.absY, absX, absY, 2)) { + System.out.println("Playing sound " + c.playerName + + ", Id: " + SOUNDID + ", Vol: " + + c.soundVolume); + c.getOutStream().createFrame(174); + c.getOutStream().writeWord(SOUNDID); + c.getOutStream().writeByte(c.soundVolume); + c.getOutStream().writeWord( /* delay */0); + } + } + } + + } + } + + public void correctCoordinates() { + if (inPcGame()) { + getPlayerAssistant().movePlayer(2657, 2639, 0); + if (FightPitsArea()) { + getPlayerAssistant().movePlayer(2399, 5178, 0); + if (inFightCaves()) { + getDialogueHandler().sendDialogues(101, 2617); + getPlayerAssistant().movePlayer(absX, absY, playerId * 4); + getActionSender().sendMessage("Your wave will start in 10 seconds."); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + Server.fightCaves.spawnNextWave((Client) PlayerHandler.players[playerId]); + container.stop(); + } + @Override + public void stop() { + + } + }, 16); + } + } + } + } + + public void trawlerFade(final int x, final int y, final int height) { + if (System.currentTimeMillis() - lastAction > 5000) { + lastAction = System.currentTimeMillis(); + resetWalkingQueue(); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + int tStage = 5; + public void execute(CycleEventContainer container) { + if (tStage == 5) { + getPlayerAssistant().showInterface(18460); + } + if (tStage == 4) { + getPlayerAssistant().movePlayer(x, y, height); + getPlayerAssistant().resetAnimationsToPrevious(); + appearanceUpdateRequired = true; + } + if (tStage == 3) { + getPlayerAssistant().showInterface(18452); + } + if (tStage == 1) { + container.stop(); + return; + } + if (tStage > 0) { + tStage--; + } + } + public void stop() { + getPlayerAssistant().closeAllWindows(); + tStage = 0; + } + }, 1); + } + } + + public void fade(final int x, final int y, final int height) { + if (System.currentTimeMillis() - lastAction > 5000) { + lastAction = System.currentTimeMillis(); + resetWalkingQueue(); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + int tStage = 6; + public void execute(CycleEventContainer container) { + if (tStage == 6) { + getPlayerAssistant().showInterface(18460); + } + if (tStage == 5) { + getPlayerAssistant().movePlayer(x, y, height); + updateRequired = true; + appearanceUpdateRequired = true; + } + if (tStage == 4) { + getPlayerAssistant().showInterface(18452); + } + if (tStage == 1) { + container.stop(); + return; + } + if (tStage > 0) { + tStage--; + } + } + public void stop() { + getPlayerAssistant().closeAllWindows(); + tStage = 0; + } + }, 1); + } + } + + /** + * The option the player clicked + */ + + private int optionClicked = -1; + + /** + * @return the option clicked + */ + + public int getOptionClicked() { + return optionClicked; + } + + /** + * Sets the option clicked + * + * @param i + * the option clicked + */ + + public void setOptionClicked(int i) { + optionClicked = i; + } + + public String statedInterface = ""; + + public String getStatedInterface() { + return statedInterface; + } + + public void setStatedInterface(String statedInterface) { + this.statedInterface = statedInterface; + } + +} diff --git a/2006Redone Server/src/redone/game/players/Location.java b/2006Redone Server/src/redone/game/players/Location.java new file mode 100644 index 00000000..d2640483 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/Location.java @@ -0,0 +1,21 @@ +package redone.game.players; + +public class Location { + + private int x1, x2, y1, y2; + + public Location(int x1, int x2, int y1, int y2) { + this.x1 = x1; + this.x2 = x2; + this.y1 = y1; + this.y2 = y2; + } + + public boolean playerInArea(Player p) { + if(p.inArea(x1, y1, x2, y2)) { + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/players/Player.java b/2006Redone Server/src/redone/game/players/Player.java new file mode 100644 index 00000000..c981a5dd --- /dev/null +++ b/2006Redone Server/src/redone/game/players/Player.java @@ -0,0 +1,1947 @@ +package redone.game.players; + +import java.util.ArrayList; + +import redone.Constants; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.items.Item; +import redone.game.items.ItemAssistant; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.npcs.impl.Pets; +import redone.util.ISAACRandomGen; +import redone.util.Misc; +import redone.util.Stream; + +public abstract class Player { + + public String currentTime, date, creationAddress = "", slayerMaster; + + public boolean lostCannon = false; + + public ArrayList killedPlayers = new ArrayList(); + public ArrayList attackedPlayers = new ArrayList(); + public ArrayList lastKilledPlayers = new ArrayList(); + + public int CraftInt, Dcolor, FletchInt, clanId = -1; + + public int[][] barrowCrypt = { + {4921, 0}, + {2035, 0} + }; + + public long lastCast = 0, homeTele, lastDesert, eventTimer, lastRunRecovery, + lastButton, lastFire, lastLight, muteTime, waitTime, miscTimer, + ladderTimer, webSlashDelay, climbDelay, lastReport = 0, + lastPlayerMove, lastPoison, lastPoisonSip, poisonImmune, lastSpear, + lastProtItem, dfsDelay, lastVeng, lastYell, teleGrabDelay, + protMageDelay, protMeleeDelay, protRangeDelay, lastAction, + lastThieve, lastLockPick, alchDelay, specDelay = System.currentTimeMillis(), duelDelay, teleBlockDelay, + godSpellDelay, singleCombatDelay, singleCombatDelay2, reduceStat, + restoreStatsDelay, logoutDelay, buryDelay, foodDelay, potDelay, + doorDelay, doubleDoorDelay, buySlayerTimer, lastIncrease, + boneDelay, botAttempts, leverDelay = 0, farmTime, searchObjectDelay = 0; + + private Npc specialTarget = null; + public void setSpecialTarget(Npc target) { + this.specialTarget = target; + } + public Npc getSpecialTarget() { + return specialTarget; + } + + public boolean initialized = false, musicOn = true, luthas, + playerIsCooking, disconnected = false, ruleAgreeButton = false, + RebuildNPCList = false, isActive = false, isKicked = false, + isSkulled = false, friendUpdate = false, newPlayer = false, + hasMultiSign = false, saveCharacter = false, mouseButton = false, + chatEffects = true, acceptAid = false, recievedMask, + nextDialogue = false, autocasting = false, usedSpecial = false, + mageFollow = false, dbowSpec = false, craftingLeather = false, + properLogout = false, secDbow = false, maxNextHit = false, + ssSpec = false, vengOn = false, addStarter = false, + accountFlagged = false, inPartyRoom = false, msbSpec = false, + hasBankPin, enterdBankpin, firstPinEnter, requestPinDelete, + secondPinEnter, thirdPinEnter, fourthPinEnter, hasBankpin, + isBanking, isTeleporting = false, desertWarning, + isPotionMaking = false, isGrinding = false, hasStarter, isSpinning, + clickedSpinning, hasPaidBrim, isHerblore, herbloreI, secondHerb, + playerStun, playerFletch, isWoodcutting, playerIsFiremaking, + hasNpc = false, playerIsFishing = false, isOperate, below459 = true, + splitChat, strongHold, village, needsNewTask = false, + canSpeak = true, ignoreFrog, ratdied2 = false, + fishingWhirlPool, lostDuel, diedOnTut = false, storing = false, rope, rope2, + canWalkTutorial, closeTutorialInterface, isCrafting, showedUnfire, + showedFire, isPotCrafting, isFiremaking, playerIsFletching, milking, + stopPlayerPacket, spiritTree = false, isSmelting, + hasPaifAnTeleport = false, isSmithing, doingAgility = false, + hasPaid, canTeleport, magicCharge, isBanned = false, fletchNerfed, + clickedVamp = false, allowFading, isBotting = false, otherBank = false, + recievedReward = false, poison, golemSpawned = false, zombieSpawned = false, shadeSpawned = false, + treeSpiritSpawned = false, chickenSpawned = false, clickedTree = false, filter = true, + stopPlayer = false, npcCanAttack = true, gliderOpen = false, hasSandwhichLady = false, + isHarvesting, openDuel = false, killedJad = false, canHealersRespawn = true, playerIsBusy = false, miningRock; + + public int thankedForDonation, saveDelay, playerKilled, gertCat, restGhost, + romeojuliet, runeMist, vampSlayer, cookAss, doricQuest, + dragonSlayerQuestStage, sheepShear, impsC, randomActions, pkPoints, + totalPlayerDamageDealt, killedBy, lastChatId = 1, privateChat, + friendSlot = 0, dialogueId, randomCoffin, newLocation, specEffect, + specBarId, attackLevelReq, defenceLevelReq, strengthLevelReq, + rangeLevelReq, magicLevelReq, slayerLevelReq, agilityLevelReq, + followId, skullTimer, votingPoints, nextChat = 0, talkingNpc = -1, + dialogueAction = 0, autocastId, followDistance, followId2, + barrageCount = 0, delayedDamage = 0, delayedDamage2 = 0, + pcPoints = 0, magePoints = 0, desertTreasure = 0, + lastArrowUsed = -1, autoRet = 0, pcDamage = 0, xInterfaceId = 0, + xRemoveId = 0, xRemoveSlot = 0, tzhaarToKill = 0, tzhaarKilled = 0, + waveId, frozenBy = 0, poisonDamage = 0, teleAction = 0, + bonusAttack = 0, lastNpcAttacked = 0, killCount = 0, witchspot, + pirateTreasure, ptjob, cwKills, cwDeaths, cwGames, tzKekSpawn = 0, + playerBankPin, recoveryDelay = 3, attemptsRemaining = 3, + lastPinSettings = -1, setPinDate = -1, changePinDate = -1, + deletePinDate = -1, firstPin, secondPin, thirdPin, fourthPin, + bankPin1, bankPin2, bankPin3, bankPin4, pinDeleteDateRequested, + rememberNpcIndex, lastLoginDate, selectedSkill, log = -1, newHerb, + newItem, newXp, doingHerb, herbAmount, treeX, treeY, lastH, + cookingItem, cookingObject, summonId, npcId2 = 0, leatherType = -1, + weightCarried, teleotherType, rockX, rockY, itemUsing, tzKekTimer, + bananas, flourAmount, grain, questPoints, questStages, + teleGrabItem, teleGrabX, teleGrabY, duelCount, underAttackBy, + underAttackBy2, wildLevel, teleTimer, respawnTimer, saveTimer = 0, + teleBlockLength, poisonDelay, slayerPoints, blackMarks, + playerEnergy = 100, SlayerMaster, teleOtherTimer = 0, + teleOtherSlot = -1, tutorialProgress, Cookstage1 = 1, + woodcuttingTree, smeltAmount, knightS, otherDirection, + brightness = 3, recoilHits, droppedItem = -1, + spawnedHealers, cannonX = 0, cannonY = 0; + + public Pets getSummon() { + return pets; + } + + private final Pets pets = new Pets(); + + public int removedTasks[] = { -1, -1, -1, -1 }; + + public boolean isRunning() { + return isNewWalkCmdIsRunning() || isRunning2 && isMoving; + } + + public void faceNpc(int npc) { + face = npc; + faceUpdateRequired = true; + updateRequired = true; + } + + public void faceNPC(int index) { + faceNPC = index; + faceNPCupdate = true; + updateRequired = true; + } + + protected boolean faceNPCupdate = false; + public int faceNPC = -1; + + public void appendFaceNPCUpdate(Stream str) { + str.writeWordBigEndian(faceNPC); + } + + public int getLocalX() { + return getX() - 8 * getMapRegionX(); + } + + public int getLocalY() { + return getY() - 8 * getMapRegionY(); + } + + public int getKillCount() { + return barrowsKillCount; + } + + /** + * @param randomGrave + * the randomGrave to set + */ + public void setRandomGrave(int randomGrave) { + this.randomGrave = randomGrave; + } + + /** + * @return the randomGrave + */ + public int getRandomGrave() { + return randomGrave; + } + + private int randomGrave; + + public void setBarrowsNpcDead(int index, boolean dead) { + barrowsNpcDead[index] = dead; + } + + /** + * @return the barrowsNpcDead + */ + public boolean[] getBarrowsNpcDead() { + return barrowsNpcDead; + } + + /** + * @return the barrowsNpcDead + */ + public boolean getBarrowsNpcDead(int id) { + return barrowsNpcDead[id]; + } + + private final boolean barrowsNpcDead[] = new boolean[6]; + + public abstract void updateWalkEntities(); + + public boolean membership = false, awardedmembership = false; + public Client teleporter = null; + public int[] miningSettings = new int[10]; + public int[] fishingProp = new int[13]; + public int[] party = new int[8]; + public int[] partyN = new int[8]; + public int[] cookingProp = new int[7]; + public int[] cookingCoords = new int[2]; + public String lastReported = ""; + public String bankPin = ""; + public int attempts = 3; + public boolean setPin = false; + public int[][] playerSkillProp = new int[20][15]; + public boolean[] playerSkilling = new boolean[20]; + public boolean stopPlayerSkill; + public int doAmount, addAmount; + public int lastNpcClickIndex; + public boolean[] killedPheasant = new boolean[5]; + public boolean playerHasRandomEvent; + public boolean canLeaveArea; + public int pieSelect = 0, getPheasent, kebabSelect = 0, breadID, + chocSelect = 0, bagelSelect = 0, triangleSandwich = 0, + squareSandwich = 0, breadSelect = 0; + public String clanName, properName; + public int lastX, lastY; + public int[] voidStatus = new int[5]; + public int[] itemKeptId = new int[4]; + public int[] pouches = new int[4]; + public final int[] POUCH_SIZE = { 3, 6, 9, 12 }; + public boolean[] invSlot = new boolean[28], equipSlot = new boolean[14]; + public long friends[] = new long[200], ignores[] = new long[200]; + public double specAmount = 0; + public double specAccuracy = 1; + public double specDamage = 1; + public boolean isFletching; + public double weight = 0.0; + + public boolean canChangeAppearance = false; + public boolean mageAllowed; + public int poisonMask; + + public Npc getCloseRandomNpc(int distance) { + ArrayList npcs = new ArrayList(); + for (Npc npc : NpcHandler.npcs) { + if (npc != null) { + Npc n = npc; + if (distanceToPoint(n.getX(), n.getY()) <= distance) { + if (!n.underAttack) { + if (n.heightLevel == heightLevel) { + npcs.add(n); + } + } + } + } + } + if (npcs.size() > 0) { + return npcs.get(Misc.random(npcs.size() - 1)); + } else { + return null; // No near npcs :C + } + } + + public boolean isAutoButton(int button) { + for (int j = 0; j < autocastIds.length; j += 2) { + if (autocastIds[j] == button) { + return true; + } + } + return false; + } + + public int[] autocastIds = { 51133, 32, 51185, 33, 51091, 34, 24018, 35, + 51159, 36, 51211, 37, 51111, 38, 51069, 39, 51146, 40, 51198, 41, + 51102, 42, 51058, 43, 51172, 44, 51224, 45, 51122, 46, 51080, 47, + 7038, 0, 7039, 1, 7040, 2, 7041, 3, 7042, 4, 7043, 5, 7044, 6, + 7045, 7, 7046, 8, 7047, 9, 7048, 10, 7049, 11, 7050, 12, 7051, 13, + 7052, 14, 7053, 15, 47019, 27, 47020, 25, 47021, 12, 47022, 13, + 47023, 14, 47024, 15 }; + + // public String spellName = "Select Spell"; + public void assignAutocast(int button) { + for (int j = 0; j < autocastIds.length; j++) { + if (autocastIds[j] == button) { + Client c = (Client) PlayerHandler.players[playerId]; + autocasting = true; + autocastId = autocastIds[j + 1]; + c.getPlayerAssistant().sendConfig(108, 1); + c.getActionSender().setSidebarInterface(0, 328); + // spellName = getSpellName(autocastId); + // spellName = spellName; + // c.getPA().sendString(spellName, 354); + c = null; + break; + } + } + } + + public boolean inCWsaraBase() { + if (absX > 2422 && absX < 2432 && absY > 3071 && absY < 3081 + && heightLevel == 1) { + return true; + } + return false; + } + + public boolean inCWzammyBase() { + if (absX > 2367 && absX < 2377 && absY > 3126 && absY < 3136 + && heightLevel == 1) { + return true; + } + return false; + } + + public boolean saraTeam() { + return playerEquipment[Constants.CAPE] == 4041; + } + + public boolean zammyTeam() { + return playerEquipment[Constants.CAPE] == 4042; + } + + public boolean inCwSafe() { + return (Area(2423, 2431, 3072, 3080) || Area(2368, 2376, 3127, 3135)) + && heightLevel == 1; + } + + public boolean inZammyWait() { + return Area(2409, 2431, 9511, 9535); + } + + public boolean inSaraWait() { + return Area(2368, 2392, 9479, 9498); + } + + public boolean inCwGame() { + return Area(2368, 2431, 9479, 9535) || Area(2368, 2431, 3072, 3135) + && !inSaraWait() && !inZammyWait(); + } + + public boolean inCwUnderground() { + return Area(2368, 2431, 9479, 9535) && !inSaraWait() && !inZammyWait(); + } + + public boolean inZammyBase() { + return Area(2368, 2384, 3118, 3135); + } + + public boolean inSaraBase() { + return Area(2414, 2431, 3072, 3088); + } + + public void gameInterface(int id) { + if (gameInterface != id) { + gameInterface = id; + } + } + + public int gameInterface; + public int lastGame; + + + public int[][] barrowsNpcs = { { 2030, 0 }, // verac + { 2029, 0 }, // toarg + { 2028, 0 }, // karil + { 2027, 0 }, // guthan + { 2026, 0 }, // dharok + { 2025, 0 } // ahrim + }; + + public int barrowsKillCount; + + public int reduceSpellId; + public final int[] REDUCE_SPELL_TIME = { 250000, 250000, 250000, 500000, + 500000, 500000 }; // how long does the other player stay immune to + // the spell + public long[] reduceSpellDelay = new long[6]; + public final int[] REDUCE_SPELLS = { 1153, 1157, 1161, 1542, 1543, 1562 }; + public boolean[] canUseReducingSpell = { true, true, true, true, true, true }; + + public int slayerTask, taskAmount; + + public int duelTimer, duelTeleX, duelTeleY, duelSlot, duelSpaceReq, + duelOption, duelingWith, duelStatus; + public int headIconPk = -1, headIconHints; + public boolean duelRequested; + public boolean[] duelRule = new boolean[22]; + public final int[] DUEL_RULE_ID = { 1, 2, 16, 32, 64, 128, 256, 512, 1024, + 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 2097152, + 8388608, 16777216, 67108864, 134217728 }; + + public boolean doubleHit, usingSpecial, npcDroppingItems, usingRangeWeapon, + usingBow, usingMagic, castingMagic; + public int npcIndex, npcClickIndex, npcType, castingSpellId, oldSpellId, + spellId, hitDelay; + public int specMaxHitIncrease, freezeDelay, freezeTimer = -6, killerId, + playerIndex, oldPlayerIndex, lastWeaponUsed, projectileStage, + crystalBowArrowCount, playerMagicBook, teleGfx, teleEndAnimation, + teleHeight, teleX, teleY, rangeItemUsed, killingNpcIndex, + totalDamageDealt, oldNpcIndex, fightMode, attackTimer; + public boolean magicFailed, oldMagicFailed; + public int bowSpecShot, clickNpcType, clickObjectType, objectId, objectX, + objectY, objectXOffset, objectYOffset, objectDistance; + public int pItemX, pItemY, pItemId; + public boolean isMoving, walkingToItem; + public boolean isShopping, updateShop; + public int myShopId; + public int tradeStatus, tradeWith; + public boolean forcedChatUpdateRequired, inDuel, tradeAccepted, goodTrade, + inTrade, tradeRequested, tradeResetNeeded, tradeConfirmed, + tradeConfirmed2, acceptTrade, acceptedTrade; + public int attackAnim, animationRequest = -1, animationWaitCycles; + public int[] playerBonus = new int[12]; + public boolean isRunning2 = true; + public boolean takeAsNote; + public int combatLevel; + public boolean saveFile = false; + public int playerAppearance[] = new int[13]; + public int apset; + public int actionID; + public int wearItemTimer, wearId, wearSlot, interfaceId; + public int XremoveSlot, XinterfaceID, XremoveID, Xamount; + + // public int tutorial; + public boolean usingGlory = false; + public int[] woodcut = new int[7]; + public int wcTimer = 0; + public int miningTick = 0; + public int miningAnimTick = 0; + public int miningRockId = -1; + public int miningX = -1; + public int miningY = -1; + public boolean fishing = false; + public int fishTimer = 0; + public boolean isMining; + public int smeltType; // 1 = bronze, 2 = iron, 3 = steel, 4 = gold, 5 = + // mith, 6 = addy, 7 = rune + public int smeltTimer = 0; + public boolean smeltInterface; + public boolean patchCleared; + public int[] farmData = new int[2]; + + public boolean antiFirePot = false; + + public boolean underWater = false; + public boolean prevRunning2; + public int prevPrevPlayerRunIndex; + public int prevPlayerStandIndex; + public int prevplayerWalkIndex; + public int prevPlayerTurnIndex; + public int prevPlayerTurn90CWIndex; + public int prevPlayerTurn90CCWIndex; + public int prevPlayerTurn180Index; + + public Client asClient() { + return (Client) this; + } + + private Player player; + public Player asPlayer() { + return (Player) player; + } + + public boolean inTrawlerBoat() { + if(inArea(2808, 2811,3415,3425)) { + return true; + } + return false; + } + + public boolean inTrawlerGame() { + if(inArea(2808, 2811,3415,3425)) { + return true; + } + return false; + } + + public long lastFishingTrawlerInteraction; + public boolean inFishingTrawlerRewardsInterface; + + /** + * Castle Wars + */ + public int castleWarsTeam; + public boolean inCwGame; + public boolean inCwWait; + + /** + * Fight Pits + */ + public boolean inPits = false; + public int pitsStatus = 0; + + /** + * SouthWest, NorthEast, SouthWest, NorthEast + */ + + public boolean inCw() { + Client c = (Client) this; + if (CastleWars.isInCwWait(c)) { + return true; + } + if (CastleWars.isInCw(c)) { + return true; + } + return false; + } + + public boolean isInTut() { + if (absX >= 2625 && absX <= 2687 && absY >= 4670 && absY <= 4735) { + return true; + } + return false; + } + + public boolean FightPitsArea() { + return absX >= 2378 && absX <= 2415 && absY >= 5133 && absY <= 5167 + || absX >= 2394 && absX <= 2404 && absY >= 5169 && absY <= 5174; + } + + public boolean fightPitsArea() { + return absX >= 2378 && absX <= 2415 && absY >= 5133 && absY <= 5167; + } + + public boolean inBarrows() { + if (absX > 3520 && absX < 3598 && absY > 9653 && absY < 9750) { + return true; + } + return false; + } + + public boolean inArea(int x, int y, int x1, int y1) { + if (absX > x && absX < x1 && absY < y && absY > y1) { + return true; + } + return false; + } + + public boolean inMulti() { + if (absX >= 3136 + && absX <= 3327 + && absY >= 3519 + && absY <= 3607// duel? + || absX >= 2360 + && absX <= 2445 + && absY >= 5045 + && absY <= 5125 + || absX >= 3190 + && absX <= 3327 + && absY >= 3648 + && absY <= 3839// duel? + || absX >= 3200 && absX <= 3390 && absY >= 3840 && absY <= 3967 + || absX >= 2992 && absX <= 3007 && absY >= 3912 && absY <= 3967 + || absX >= 2946 && absX <= 2959 && absY >= 3816 && absY <= 3831 + || absX >= 3008 && absX <= 3199 && absY >= 3856 && absY <= 3903 + || absX >= 3008 && absX <= 3071 && absY >= 3600 && absY <= 3711 + || absX >= 3072 && absX <= 3327 && absY >= 3608 && absY <= 3647 + || absX >= 2624 + && absX <= 2690 + && absY >= 2550 + && absY <= 2619 + || absX >= 2667 + && absX <= 2685 + && absY >= 3712 + && absY <= 3730 // rock + // crabs + || absX >= 2371 && absX <= 2422 && absY >= 5062 && absY <= 5117 + || absX >= 2896 && absX <= 2927 && absY >= 3595 && absY <= 3630 + || absX >= 2892 && absX <= 2932 && absY >= 4435 && absY <= 4464 + || absX >= 2256 && absX <= 2287 && absY >= 4680 && absY <= 4711) { + return true; + } + return false; + } + + public boolean inWild() { + if (inCw()) { + return true; + } + if (absX > 2941 && absX < 3392 && absY > 3518 && absY < 3966 + || absX > 2941 && absX < 3392 && absY > 9918 && absY < 10366) { + return true; + } + return false; + } + + public boolean inDesert() { + return absX >= 3137 && absX <= 3321 && absY >= 2880 && absY <= 3115; + } + + public boolean duelingArena() { + if (absX > 3331 && absX < 3391 && absY > 3242 && absY < 3260) { + return true; + } + return false; + } + + + public boolean playerIsBusy() { + if(isShopping || inTrade || openDuel || isBanking || duelStatus == 1) { + return true; + } + return false; + } + + public boolean isInBarrows() { + if(absX > 3543 && absX < 3584 && absY > 3265 && absY < 3311) { + return true; + } + return false; + } + + public boolean isInBarrows2() { + if(absX > 3529 && absX < 3581 && absY > 9673 && absY < 9722) { + return true; + } + return false; + } + + public boolean inPcBoat() { + return absX >= 2660 && absX <= 2663 && absY >= 2638 && absY <= 2643; + } + + public boolean inPcGame() { + return absX >= 2624 && absX <= 2690 && absY >= 2550 && absY <= 2619; + } + + public boolean inDuelArena() { + if (absX > 3322 && absX < 3394 && absY > 3195 && absY < 3291 || absX > 3311 && absX < 3323 && absY > 3223 && absY < 3248) { + return true; + } + return false; + } + + public boolean inBank() { // Area(top left X, bottom right X, bottom right Y, top left Y) + return Area(3090, 3099, 3487, 3500) || Area(3089, 3090, 3492, 3498) || Area(3249, 3258, 3413, 3428) || Area(3180, 3191, 3432, 3448) || Area(2945, 2948, 3365, 3374) || + Area(2943, 2948, 3367, 3374) || Area(2945, 2950, 3365, 3370) || Area(3009, 3018, 3352, 3359) || Area(3017, 3022, 3353, 3357); + } + + public boolean inLumbBuilding() { + return Area(3205, 3216, 3209, 3228) || Area(3229, 3233, 3206, 3208) || Area(3228, 3233, 3201, 3205) || Area(3230, 3237, 3195, 3198) || Area(3238, 3229, 3209, 3211) || + Area(3240, 3247, 3204, 3215) || Area(3247, 3252, 3190, 3195) || Area(3227, 3230, 3212, 3216) || Area(3227, 3230, 3221, 3225) || Area(3229, 3232, 3236, 3241) || + Area(3209, 3213, 3243, 3250) || Area(3222, 3229, 3252, 3257) || Area(3184, 3192, 3270, 3275) || Area(3222, 3224, 3292, 3294) || Area(3225, 3230, 3287, 3228) || + Area(3243, 3248, 3244, 3248) || Area(3202, 3205, 3167, 3170) || Area(3231, 3238, 3151, 3155) || Area(3233, 3234, 3156, 3156) || Area(3163, 3170, 3305, 3308) || + Area(3165, 3168, 3303, 3310); + } + + public boolean inDraynorBuilding() { + return Area(3097, 3102, 3277, 3281) || Area(3088, 3092, 3273, 3276) || Area(3096, 3102, 3266, 3270) || Area(3089, 3095, 3265, 3268) || Area(3083, 3088, 3256, 3261) || + Area(3087, 3094, 3251, 3255) || Area(3121, 3130, 3240, 3246) || Area(3102, 3112, 3162, 3165) || Area(3107, 3111, 3166, 3166) || Area(3103, 3115, 3157, 3161) || + Area(3105, 3114, 3156, 3156) || Area(3105, 3113, 3155, 3155) || Area(3106, 3112, 3154, 3154) || Area(3092, 3097, 3240, 3246); + } + + public boolean Area(final int x1, final int x2, final int y1, final int y2) { + return absX >= x1 && absX <= x2 && absY >= y1 && absY <= y2; + } + + public boolean altars() { + return safeAreas(3090, 3506, 3097, 3506); + } + + public boolean safeAreas(int x, int y, int x1, int y1) { + return absX >= x && absX <= x1 && absY >= y && absY <= y1; + } + + public boolean inFightCaves() { + return absX >= 2360 && absX <= 2445 && absY >= 5045 && absY <= 5125; + } + + public boolean inPirateHouse() { + return absX >= 3038 && absX <= 3044 && absY >= 3949 && absY <= 3959; + } + + public String connectedFrom = ""; + public String globalMessage = ""; + + public abstract void initialize(); + + public abstract void update(); + + public int playerId = -1; + public String playerName = null; + public String playerName2 = null; + public String playerPass = null; + public int playerRights; + public PlayerHandler handler = null; + public int playerItems[] = new int[28]; + public int playerItemsN[] = new int[28]; + public int bankItems[] = new int[Constants.BANK_SIZE]; + public int bankItemsN[] = new int[Constants.BANK_SIZE]; + public boolean bankNotes = false; + public boolean shouldSave = false; + + public int playerStandIndex = 0x328; + public int playerTurnIndex = 0x337; + public int playerWalkIndex = 0x333; + public int playerTurn180Index = 0x334; + public int playerTurn90CWIndex = 0x335; + public int playerTurn90CCWIndex = 0x336; + public int playerRunIndex = 0x338; + + public int playerHat = 0; + public int playerCape = 1; + public int playerAmulet = 2; + public int playerWeapon = 3; + public int playerChest = 4; + public int playerShield = 5; + public int playerLegs = 7; + public int playerHands = 9; + public int playerFeet = 10; + public int playerRing = 12; + public int playerArrows = 13; + + public int playerAttack = 0; + public int playerDefence = 1; + public int playerStrength = 2; + public int playerHitpoints = 3; + public int playerRanged = 4; + public int playerPrayer = 5; + public int playerMagic = 6; + public int playerCooking = 7; + public int playerWoodcutting = 8; + public int playerFletching = 9; + public int playerFishing = 10; + public int playerFiremaking = 11; + public int playerCrafting = 12; + public int playerSmithing = 13; + public int playerMining = 14; + public int playerHerblore = 15; + public int playerAgility = 16; + public int playerThieving = 17; + public int playerSlayer = 18; + public int playerFarming = 19; + public int playerRunecrafting = 20; + + public int[] playerEquipment = new int[14]; + public int[] playerEquipmentN = new int[14]; + public int[] playerLevel = new int[25]; + public int[] playerXP = new int[25]; + + public void updateshop(int i) { + Client p = (Client) PlayerHandler.players[playerId]; + p.getShopAssistant().resetShop(i); + } + + public void println_debug(String str) { + System.out.println("[player-" + playerId + "]: " + str); + } + + public void println(String str) { + System.out.println("[player-" + playerId + "]: " + str); + } + + public Player(int _playerId) { + playerId = _playerId; + playerRights = 0; + + for (int i = 0; i < playerItems.length; i++) { + playerItems[i] = 0; + } + for (int i = 0; i < playerItemsN.length; i++) { + playerItemsN[i] = 0; + } + + for (int i = 0; i < playerLevel.length; i++) { + if (i == 3) { + playerLevel[i] = 10; + } else { + playerLevel[i] = 1; + } + } + + for (int i = 0; i < playerXP.length; i++) { + if (i == 3) { + playerXP[i] = 1300; + } else { + playerXP[i] = 0; + } + } + for (int i = 0; i < Constants.BANK_SIZE; i++) { + bankItems[i] = 0; + } + + for (int i = 0; i < Constants.BANK_SIZE; i++) { + bankItemsN[i] = 0; + } + + playerAppearance[0] = 0; // gender + playerAppearance[1] = 7; // head + playerAppearance[2] = 25;// Torso + playerAppearance[3] = 29; // arms + playerAppearance[4] = 35; // hands + playerAppearance[5] = 39; // legs + playerAppearance[6] = 44; // feet + playerAppearance[7] = 14; // beard + playerAppearance[8] = 7; // hair colour + playerAppearance[9] = 8; // torso colour + playerAppearance[10] = 9; // legs colour + playerAppearance[11] = 5; // feet colour + playerAppearance[12] = 0; // skin colour + + apset = 0; + actionID = 0; + + playerEquipment[playerHat] = -1; + playerEquipment[playerCape] = -1; + playerEquipment[playerAmulet] = -1; + playerEquipment[playerChest] = -1; + playerEquipment[playerShield] = -1; + playerEquipment[playerLegs] = -1; + playerEquipment[playerHands] = -1; + playerEquipment[playerFeet] = -1; + playerEquipment[playerRing] = -1; + playerEquipment[playerArrows] = -1; + playerEquipment[playerWeapon] = -1; + + heightLevel = 0; + + if (Constants.TUTORIAL_ISLAND) { + teleportToX = 3094; + teleportToY = 3107; + } else { + teleportToX = 3233; + teleportToY = 3229; + } + + absX = absY = -1; + mapRegionX = mapRegionY = -1; + currentX = currentY = 0; + resetWalkingQueue(); + } + + void destruct() { + playerListSize = 0; + for (int i = 0; i < maxPlayerListSize; i++) { + playerList[i] = null; + } + absX = absY = -1; + mapRegionX = mapRegionY = -1; + currentX = currentY = 0; + resetWalkingQueue(); + } + + public static final int maxPlayerListSize = Constants.MAX_PLAYERS; + public Player playerList[] = new Player[maxPlayerListSize]; + public int playerListSize = 0; + + public byte playerInListBitmap[] = new byte[Constants.MAX_PLAYERS + 7 >> 3]; + + public static final int maxNPCListSize = NpcHandler.maxNPCs; + public Npc npcList[] = new Npc[maxNPCListSize]; + public int npcListSize = 0; + + public byte npcInListBitmap[] = new byte[NpcHandler.maxNPCs + 7 >> 3]; + + public boolean withinDistance(Player otherPlr) { + if (heightLevel != otherPlr.heightLevel) { + return false; + } + int deltaX = otherPlr.absX - absX, deltaY = otherPlr.absY - absY; + return deltaX <= 15 && deltaX >= -16 && deltaY <= 15 && deltaY >= -16; + } + + public boolean withinDistance(Npc npc) { + if (heightLevel != npc.heightLevel) { + return false; + } + if (npc.needRespawn == true) { + return false; + } + int deltaX = npc.absX - absX, deltaY = npc.absY - absY; + return deltaX <= 15 && deltaX >= -16 && deltaY <= 15 && deltaY >= -16; + } + + public boolean withinDistance(int absX, int getY, int getHeightLevel) { + if (heightLevel != getHeightLevel) { + return false; + } + if (objectId == 2242) { + System.out.println("not within distance"); + return false; + } + int deltaX = getX() - absX, deltaY = getY() - getY; + return deltaX <= 15 && deltaX >= -16 && deltaY <= 15 && deltaY >= -16; + } + + public int distanceToPoint(int pointX, int pointY) { + return (int) Math.sqrt(Math.pow(absX - pointX, 2) + + Math.pow(absY - pointY, 2)); + } + + public int mapRegionX, mapRegionY; + public int absX; + + public int absY; + public int currentX, currentY; + + public int heightLevel; + public int playerSE = 0x328; + public int playerSEW = 0x333; + public int playerSER = 0x334; + + public boolean updateRequired = true; + + public final int walkingQueueSize = 50; + public int walkingQueueX[] = new int[walkingQueueSize], + walkingQueueY[] = new int[walkingQueueSize]; + public int wQueueReadPtr = 0; + public int wQueueWritePtr = 0; + public boolean isRunning = true; + public int teleportToX = -1, teleportToY = -1; + + public void resetWalkingQueue() { + wQueueReadPtr = wQueueWritePtr = 0; + for (int i = 0; i < walkingQueueSize; i++) { + walkingQueueX[i] = currentX; + walkingQueueY[i] = currentY; + } + } + + public void addToWalkingQueue(int x, int y) { + // if (VirtualWorld.I(heightLevel, absX, absY, x, y, 0)) { + int next = (wQueueWritePtr + 1) % walkingQueueSize; + if (next == wQueueWritePtr) { + return; + } + walkingQueueX[wQueueWritePtr] = x; + walkingQueueY[wQueueWritePtr] = y; + wQueueWritePtr = next; + // } + } + + public boolean goodDistance(int objectX, int objectY, int playerX, + int playerY, int distance) { + for (int i = 0; i <= distance; i++) { + for (int j = 0; j <= distance; j++) { + if (objectId == 2282 || objectId == 10883 || objectId == 2322 + || objectId == 4493 || objectId == 12164 + || objectId == 1721 || objectId == 1722 + || objectId == 4304 && playerX == 2619 + && playerY == 3667) { + return true; + } + if (objectX + i == playerX + && (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) { + return true; + } else if (objectX - i == playerX + && (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) { + return true; + } else if (objectX == playerX + && (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) { + return true; + } + } + } + return false; + } + + public int getNextWalkingDirection() { + if (wQueueReadPtr == wQueueWritePtr) { + return -1; + } + int dir; + do { + dir = Misc.direction(currentX, currentY, + walkingQueueX[wQueueReadPtr], walkingQueueY[wQueueReadPtr]); + if (dir == -1) { + wQueueReadPtr = (wQueueReadPtr + 1) % walkingQueueSize; + } else if ((dir & 1) != 0) { + println_debug("Invalid waypoint in walking queue!"); + resetWalkingQueue(); + return -1; + } + } while (dir == -1 && wQueueReadPtr != wQueueWritePtr); + if (dir == -1) { + return -1; + } + dir >>= 1; + currentX += Misc.directionDeltaX[dir]; + currentY += Misc.directionDeltaY[dir]; + /*if (!Region.canMove(absX, absY, (absX + Misc.directionDeltaX[dir]), (absY + Misc.directionDeltaY[dir]), heightLevel, 1, 1)) + return -1;*/ + absX += Misc.directionDeltaX[dir]; + absY += Misc.directionDeltaY[dir]; + updateWalkEntities(); + return dir; + } + + public boolean didTeleport = false; + public boolean mapRegionDidChange = false; + public int dir1 = -1, dir2 = -1; + public boolean createItems = false; + public int poimiX = 0, poimiY = 0; + + public synchronized void getNextPlayerMovement() { + mapRegionDidChange = false; + didTeleport = false; + dir1 = dir2 = -1; + + if (teleportToX != -1 && teleportToY != -1) { + mapRegionDidChange = true; + if (mapRegionX != -1 && mapRegionY != -1) { + int relX = teleportToX - mapRegionX * 8, relY = teleportToY + - mapRegionY * 8; + if (relX >= 2 * 8 && relX < 11 * 8 && relY >= 2 * 8 + && relY < 11 * 8) { + mapRegionDidChange = false; + } + } + if (mapRegionDidChange) { + mapRegionX = (teleportToX >> 3) - 6; + mapRegionY = (teleportToY >> 3) - 6; + } + currentX = teleportToX - 8 * mapRegionX; + currentY = teleportToY - 8 * mapRegionY; + absX = teleportToX; + absY = teleportToY; + resetWalkingQueue(); + + teleportToX = teleportToY = -1; + didTeleport = true; + updateWalkEntities(); + } else { + dir1 = getNextWalkingDirection(); + if (dir1 == -1) { + return; + } + if (isRunning) { + dir2 = getNextWalkingDirection(); + } + // c.sendMessage("Cycle Ended"); + int deltaX = 0, deltaY = 0; + if (currentX < 2 * 8) { + deltaX = 4 * 8; + mapRegionX -= 4; + mapRegionDidChange = true; + } else if (currentX >= 11 * 8) { + deltaX = -4 * 8; + mapRegionX += 4; + mapRegionDidChange = true; + } + if (currentY < 2 * 8) { + deltaY = 4 * 8; + mapRegionY -= 4; + mapRegionDidChange = true; + } else if (currentY >= 11 * 8) { + deltaY = -4 * 8; + mapRegionY += 4; + mapRegionDidChange = true; + } + + if (mapRegionDidChange) { + currentX += deltaX; + currentY += deltaY; + for (int i = 0; i < walkingQueueSize; i++) { + walkingQueueX[i] += deltaX; + walkingQueueY[i] += deltaY; + } + } + } + } + + public void updateThisPlayerMovement(Stream str) { + if (mapRegionDidChange) { + str.createFrame(73); + str.writeWordA(mapRegionX + 6); + str.writeWord(mapRegionY + 6); + } + + if (didTeleport) { + str.createFrameVarSizeWord(81); + str.initBitAccess(); + str.writeBits(1, 1); + str.writeBits(2, 3); + str.writeBits(2, heightLevel); + str.writeBits(1, 1); + str.writeBits(1, updateRequired ? 1 : 0); + str.writeBits(7, currentY); + str.writeBits(7, currentX); + return; + } + + if (dir1 == -1) { + // don't have to update the character position, because we're + // just standing + str.createFrameVarSizeWord(81); + str.initBitAccess(); + isMoving = false; + if (updateRequired) { + // tell client there's an update block appended at the end + str.writeBits(1, 1); + str.writeBits(2, 0); + } else { + str.writeBits(1, 0); + } + if (DirectionCount < 50) { + DirectionCount++; + } + } else { + DirectionCount = 0; + str.createFrameVarSizeWord(81); + str.initBitAccess(); + str.writeBits(1, 1); + + if (dir2 == -1) { + isMoving = true; + str.writeBits(2, 1); + str.writeBits(3, Misc.xlateDirectionToClient[dir1]); + if (updateRequired) { + str.writeBits(1, 1); + } else { + str.writeBits(1, 0); + } + } else { + isMoving = true; + str.writeBits(2, 2); + str.writeBits(3, Misc.xlateDirectionToClient[dir1]); + str.writeBits(3, Misc.xlateDirectionToClient[dir2]); + if (updateRequired) { + str.writeBits(1, 1); + } else { + str.writeBits(1, 0); + } + if (playerEnergy > 0 && playerRights < 2) { + if (weight > 0.0) { + playerEnergy -= 1 + Misc.random(1); + } else { + playerEnergy -= 1; + } + } else if (playerRights >= 2) { + playerEnergy = 100; + isRunning2 = true; + } else if (playerEnergy < 1) { + playerEnergy = 0; + isRunning2 = false; + } + } + } + } + + public void updatePlayerMovement(Stream str) { + if (dir1 == -1) { + if (updateRequired || isChatTextUpdateRequired()) { + + str.writeBits(1, 1); + str.writeBits(2, 0); + } else { + str.writeBits(1, 0); + } + } else if (dir2 == -1) { + + str.writeBits(1, 1); + str.writeBits(2, 1); + str.writeBits(3, Misc.xlateDirectionToClient[dir1]); + str.writeBits(1, updateRequired || isChatTextUpdateRequired() ? 1 + : 0); + } else { + + str.writeBits(1, 1); + str.writeBits(2, 2); + str.writeBits(3, Misc.xlateDirectionToClient[dir1]); + str.writeBits(3, Misc.xlateDirectionToClient[dir2]); + str.writeBits(1, updateRequired || isChatTextUpdateRequired() ? 1 + : 0); + } + } + + public byte cachedPropertiesBitmap[] = new byte[Constants.MAX_PLAYERS + 7 >> 3]; + + public void addNewNPC(Npc npc, Stream str, Stream updateBlock) { + int id = npc.npcId; + npcInListBitmap[id >> 3] |= 1 << (id & 7); + npcList[npcListSize++] = npc; + + str.writeBits(14, id); + + int z = npc.absY - absY; + if (z < 0) { + z += 32; + } + str.writeBits(5, z); + z = npc.absX - absX; + if (z < 0) { + z += 32; + } + str.writeBits(5, z); + + str.writeBits(1, 0); + str.writeBits(12, npc.npcType); + + boolean savedUpdateRequired = npc.updateRequired; + npc.updateRequired = true; + npc.appendNPCUpdateBlock(updateBlock); + npc.updateRequired = savedUpdateRequired; + str.writeBits(1, 1); + } + + public void addNewPlayer(Player plr, Stream str, Stream updateBlock) { + int id = plr.playerId; + playerInListBitmap[id >> 3] |= 1 << (id & 7); + playerList[playerListSize++] = plr; + str.writeBits(11, id); + str.writeBits(1, 1); + boolean savedFlag = plr.isAppearanceUpdateRequired(); + boolean savedUpdateRequired = plr.updateRequired; + plr.setAppearanceUpdateRequired(true); + plr.updateRequired = true; + plr.appendPlayerUpdateBlock(updateBlock); + plr.setAppearanceUpdateRequired(savedFlag); + plr.updateRequired = savedUpdateRequired; + str.writeBits(1, 1); + int z = plr.absY - absY; + if (z < 0) { + z += 32; + } + str.writeBits(5, z); + z = plr.absX - absX; + if (z < 0) { + z += 32; + } + str.writeBits(5, z); + } + + public int headIcon = -1, bountyIcon = 0; + + public int DirectionCount = 0; + public boolean appearanceUpdateRequired = true; + public int hitDiff2; + public int hitDiff = 0; + public boolean hitUpdateRequired2; + public boolean hitUpdateRequired = false; + public boolean isDead = false; + + protected static Stream playerProps; + static { + playerProps = new Stream(new byte[100]); + } + + protected void appendPlayerAppearance(Stream str) { + playerProps.currentOffset = 0; + + playerProps.writeByte(playerAppearance[0]); + + playerProps.writeByte(headIcon); + playerProps.writeByte(headIconPk); + // playerProps.writeByte(headIconHints); + // playerProps.writeByte(bountyIcon); + + if (playerEquipment[playerHat] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerHat]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerCape] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerCape]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerAmulet] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerAmulet]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerWeapon] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerWeapon]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerChest] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerChest]); + } else { + playerProps.writeWord(0x100 + playerAppearance[2]); + } + + if (playerEquipment[playerShield] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerShield]); + } else { + playerProps.writeByte(0); + } + + if (!Item.isFullBody(playerEquipment[playerChest])) { + playerProps.writeWord(0x100 + playerAppearance[3]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerLegs] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerLegs]); + } else { + playerProps.writeWord(0x100 + playerAppearance[5]); + } + + if (!Item.isFullHelm(playerEquipment[playerHat]) + && !Item.isFullMask(playerEquipment[playerHat])) { + playerProps.writeWord(0x100 + playerAppearance[1]); + } else { + playerProps.writeByte(0); + } + + if (playerEquipment[playerHands] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerHands]); + } else { + playerProps.writeWord(0x100 + playerAppearance[4]); + } + + if (playerEquipment[playerFeet] > 1) { + playerProps.writeWord(0x200 + playerEquipment[playerFeet]); + } else { + playerProps.writeWord(0x100 + playerAppearance[6]); + } + + if (playerAppearance[0] != 1 + && !Item.isFullMask(playerEquipment[playerHat])) { + playerProps.writeWord(0x100 + playerAppearance[7]); + } else { + playerProps.writeByte(0); + } + + playerProps.writeByte(playerAppearance[8]); + playerProps.writeByte(playerAppearance[9]); + playerProps.writeByte(playerAppearance[10]); + playerProps.writeByte(playerAppearance[11]); + playerProps.writeByte(playerAppearance[12]); + playerProps.writeWord(playerStandIndex); // standAnimIndex + playerProps.writeWord(playerTurnIndex); // standTurnAnimIndex + playerProps.writeWord(playerWalkIndex); // walkAnimIndex + playerProps.writeWord(playerTurn180Index); // turn180AnimIndex + playerProps.writeWord(playerTurn90CWIndex); // turn90CWAnimIndex + playerProps.writeWord(playerTurn90CCWIndex); // turn90CCWAnimIndex + playerProps.writeWord(playerRunIndex); // runAnimIndex + playerProps.writeQWord(Misc.playerNameToInt64(playerName)); + combatLevel = calculateCombatLevel(); + playerProps.writeByte(combatLevel); // combat level + playerProps.writeWord(0); + str.writeByteC(playerProps.currentOffset); + str.writeBytes(playerProps.buffer, playerProps.currentOffset, 0); + } + + public int calculateCombatLevel() { + int j = getLevelForXP(playerXP[playerAttack]); + int k = getLevelForXP(playerXP[playerDefence]); + int l = getLevelForXP(playerXP[playerStrength]); + int i1 = getLevelForXP(playerXP[playerHitpoints]); + int j1 = getLevelForXP(playerXP[playerPrayer]); + int k1 = getLevelForXP(playerXP[playerRanged]); + int l1 = getLevelForXP(playerXP[playerMagic]); + int combatLevel = (int) ((k + i1 + Math.floor(j1 / 2)) * 0.25D) + 1; + double d = (j + l) * 0.32500000000000001D; + double d1 = Math.floor(k1 * 1.5D) * 0.32500000000000001D; + double d2 = Math.floor(l1 * 1.5D) * 0.32500000000000001D; + if (d >= d1 && d >= d2) { + combatLevel += d; + } else if (d1 >= d && d1 >= d2) { + combatLevel += d1; + } else if (d2 >= d && d2 >= d1) { + combatLevel += d2; + } + return combatLevel; + } + + public int getLevelForXP(int exp) { + if (exp > 13034430) { + return 99; + } else { + int points = 0; + for (int lvl = 1; lvl <= 99; ++lvl) { + points = (int) (points + Math.floor(lvl + 300.0D + * Math.pow(2.0D, lvl / 7.0D))); + int var5 = (int) Math.floor(points / 4); + if (var5 >= exp) { + return lvl; + } + } + + return 99; + } + } + + private boolean chatTextUpdateRequired = false; + private byte chatText[] = new byte[4096]; + private byte chatTextSize = 0; + private int chatTextColor = 0; + private int chatTextEffects = 0; + + protected void appendPlayerChatText(Stream str) { + str.writeWordBigEndian(((getChatTextColor() & 0xFF) << 8) + (getChatTextEffects() & 0xFF)); + str.writeByte(playerRights); + str.writeByteC(getChatTextSize()); + str.writeBytes_reverse(getChatText(), getChatTextSize(), 0); + } + + public void forcedChat(String text) { + forcedText = text; + forcedChatUpdateRequired = true; + updateRequired = true; + setAppearanceUpdateRequired(true); + } + + public String forcedText = "null"; + + public void appendForcedChat(Stream str) { + str.writeString(forcedText); + } + + /** + * Graphics + **/ + + public int mask100var1 = 0; + public int mask100var2 = 0; + protected boolean mask100update = false; + + public void appendMask100Update(Stream str) { + str.writeWordBigEndian(mask100var1); + str.writeDWord(mask100var2); + } + + public void gfx100(int gfx) { + mask100var1 = gfx; + mask100var2 = 6553600; + mask100update = true; + updateRequired = true; + } + + public void gfx0(int gfx) { + mask100var1 = gfx; + mask100var2 = 65536; + mask100update = true; + updateRequired = true; + } + + public boolean wearing2h() { + Client c = (Client) this; + String s = ItemAssistant.getItemName(c.playerEquipment[c.playerWeapon]); + if (s.contains("2h")) { + return true; + } else if (s.contains("godsword")) { + return true; + } + return false; + } + + /** + * Animations + **/ + public void startAnimation(int animId) { + if (wearing2h() && animId == 829) { + return; + } + if (animId == -1) { + animId = 65535; + } + if (isBotting == true) { + animId = 65535; + } + animationRequest = animId; + animationWaitCycles = 0; + updateRequired = true; + } + + public void startAnimation(int animId, int time) { + animationRequest = animId; + animationWaitCycles = time; + updateRequired = true; + } + + public void appendAnimationRequest(Stream str) { + str.writeWordBigEndian(animationRequest == -1 ? 65535 + : animationRequest); + str.writeByteC(animationWaitCycles); + } + + /** + * Face Update + **/ + + protected boolean faceUpdateRequired = false; + public int face = -1; + public int FocusPointX = -1, FocusPointY = -1; + + public void faceUpdate(int index) { + face = index; + faceUpdateRequired = true; + updateRequired = true; + } + + public void appendFaceUpdate(Stream str) { + str.writeWordBigEndian(face); + } + + public void turnPlayerTo(int pointX, int pointY) { + FocusPointX = 2 * pointX + 1; + FocusPointY = 2 * pointY + 1; + updateRequired = true; + } + + private void appendSetFocusDestination(Stream str) { + str.writeWordBigEndianA(FocusPointX); + str.writeWordBigEndian(FocusPointY); + } + + /** + * Hit Update + **/ + + protected void appendHitUpdate(Stream str) { + str.writeByte(getHitDiff()); // What the perseon got 'hit' for + if (poisonMask == 1) { + str.writeByteA(2); + } else if (getHitDiff() > 0) { + str.writeByteA(1); // 0: red hitting - 1: blue hitting + } else { + str.writeByteA(0); // 0: red hitting - 1: blue hitting + } + if (playerLevel[3] <= 0) { + playerLevel[3] = 0; + isDead = true; + } + str.writeByteC(playerLevel[3]); // Their current hp, for HP bar + str.writeByte(getLevelForXP(playerXP[3])); + } + + protected void appendHitUpdate2(Stream str) { + str.writeByte(hitDiff2); // What the perseon got 'hit' for + if (poisonMask == 2) { + str.writeByteS(2); + poisonMask = -1; + } else if (hitDiff2 > 0) { + str.writeByteS(1); // 0: red hitting - 1: blue hitting + } else { + str.writeByteS(0); // 0: red hitting - 1: blue hitting + } + if (playerLevel[3] <= 0) { + playerLevel[3] = 0; + isDead = true; + } + str.writeByte(playerLevel[3]); // Their current hp, for HP bar + str.writeByteC(getLevelForXP(playerXP[3])); // Their max hp, for HP + } + + public void appendPlayerUpdateBlock(Stream str) { + if (!updateRequired && !isChatTextUpdateRequired()) { + return; // nothing required + } + int updateMask = 0; + if (mask100update) { + updateMask |= 0x100; + } + if (animationRequest != -1) { + updateMask |= 8; + } + if (forcedChatUpdateRequired) { + updateMask |= 4; + } + if (isChatTextUpdateRequired()) { + updateMask |= 0x80; + } + if (isAppearanceUpdateRequired()) { + updateMask |= 0x10; + } + if (faceUpdateRequired) { + updateMask |= 1; + } + if (FocusPointX != -1) { + updateMask |= 2; + } + if (isHitUpdateRequired()) { + updateMask |= 0x20; + } + + if (hitUpdateRequired2) { + updateMask |= 0x200; + } + + if (updateMask >= 0x100) { + updateMask |= 0x40; + str.writeByte(updateMask & 0xFF); + str.writeByte(updateMask >> 8); + } else { + str.writeByte(updateMask); + } + + // now writing the various update blocks itself - note that their + // order crucial + if (mask100update) { + appendMask100Update(str); + } + if (animationRequest != -1) { + appendAnimationRequest(str); + } + if (forcedChatUpdateRequired) { + appendForcedChat(str); + } + if (isChatTextUpdateRequired()) { + appendPlayerChatText(str); + } + if (faceUpdateRequired) { + appendFaceUpdate(str); + } + if (isAppearanceUpdateRequired()) { + appendPlayerAppearance(str); + } + if (FocusPointX != -1) { + appendSetFocusDestination(str); + } + if (isHitUpdateRequired()) { + appendHitUpdate(str); + } + if (hitUpdateRequired2) { + appendHitUpdate2(str); + } + } + + public void clearUpdateFlags() { + updateRequired = false; + setChatTextUpdateRequired(false); + setAppearanceUpdateRequired(false); + setHitUpdateRequired(false); + hitUpdateRequired2 = false; + forcedChatUpdateRequired = false; + mask100update = false; + animationRequest = -1; + FocusPointX = -1; + FocusPointY = -1; + poisonMask = -1; + faceUpdateRequired = false; + face = 65535; + } + + public void stopMovement() { + if (teleportToX <= 0 && teleportToY <= 0) { + teleportToX = absX; + teleportToY = absY; + } + newWalkCmdSteps = 0; + getNewWalkCmdX()[0] = getNewWalkCmdY()[0] = travelBackX[0] = travelBackY[0] = 0; + getNextPlayerMovement(); + } + + private int newWalkCmdX[] = new int[walkingQueueSize]; + private int newWalkCmdY[] = new int[walkingQueueSize]; + public int newWalkCmdSteps = 0; + private boolean newWalkCmdIsRunning = false; + protected int travelBackX[] = new int[walkingQueueSize]; + protected int travelBackY[] = new int[walkingQueueSize]; + protected int numTravelBackSteps = 0; + + public void preProcessing() { + newWalkCmdSteps = 0; + } + + public abstract void process(); + + public abstract boolean processQueuedPackets(); + + public void postProcessing() { + if (newWalkCmdSteps > 0) { + int firstX = getNewWalkCmdX()[0]; + int firstY = getNewWalkCmdY()[0]; + boolean found = false; + numTravelBackSteps = 0; + int ptr = wQueueReadPtr; + int dir = Misc.direction(currentX, currentY, firstX, firstY); + if (dir != -1 && (dir & 1) != 0) { + do { + int var13 = dir; + --ptr; + if (ptr < 0) { + ptr = 49; + } + + travelBackX[numTravelBackSteps] = walkingQueueX[ptr]; + travelBackY[numTravelBackSteps++] = walkingQueueY[ptr]; + dir = Misc.direction(walkingQueueX[ptr], + walkingQueueY[ptr], firstX, firstY); + if (var13 != dir) { + found = true; + break; + } + } while (ptr != wQueueWritePtr); + } else { + found = true; + } + + if (found) { + wQueueWritePtr = wQueueReadPtr; + addToWalkingQueue(currentX, currentY); + int i; + if (dir != -1 && (dir & 1) != 0) { + for (i = 0; i < numTravelBackSteps - 1; ++i) { + addToWalkingQueue(travelBackX[i], travelBackY[i]); + } + + i = travelBackX[numTravelBackSteps - 1]; + int wayPointY2 = travelBackY[numTravelBackSteps - 1]; + int wayPointX1; + int wayPointY1; + if (numTravelBackSteps == 1) { + wayPointX1 = currentX; + wayPointY1 = currentY; + } else { + wayPointX1 = travelBackX[numTravelBackSteps - 2]; + wayPointY1 = travelBackY[numTravelBackSteps - 2]; + } + + dir = Misc.direction(wayPointX1, wayPointY1, i, wayPointY2); + if (dir != -1 && (dir & 1) == 0) { + dir >>= 1; + found = false; + int x = wayPointX1; + int y = wayPointY1; + + while (x != i || y != wayPointY2) { + x += Misc.directionDeltaX[dir]; + y += Misc.directionDeltaY[dir]; + if ((Misc.direction(x, y, firstX, firstY) & 1) == 0) { + found = true; + break; + } + } + + if (!found) { + println_debug("Fatal: Internal error: unable to determine connection vertex! wp1=(" + + wayPointX1 + + ", " + + wayPointY1 + + "), wp2=(" + + i + + ", " + + wayPointY2 + + "), " + + "first=(" + + firstX + + ", " + + firstY + ")"); + } else { + addToWalkingQueue(wayPointX1, wayPointY1); + } + } else { + println_debug("Fatal: The walking queue is corrupt! wp1=(" + + wayPointX1 + + ", " + + wayPointY1 + + "), " + + "wp2=(" + i + ", " + wayPointY2 + ")"); + } + } else { + for (i = 0; i < numTravelBackSteps; ++i) { + addToWalkingQueue(travelBackX[i], travelBackY[i]); + } + } + + for (i = 0; i < newWalkCmdSteps; ++i) { + addToWalkingQueue(getNewWalkCmdX()[i], getNewWalkCmdY()[i]); + } + } + + isRunning = isNewWalkCmdIsRunning() || isRunning2; + } + } + + public int getMapRegionX() { + return mapRegionX; + } + + public int getMapRegionY() { + return mapRegionY; + } + + public int getX() { + return absX; + } + + public int getY() { + return absY; + } + + public int getH() { + return heightLevel; + } + + public int getId() { + return playerId; + } + + public void setHitDiff(int hitDiff) { + this.hitDiff = hitDiff; + } + + public void setHitDiff2(int hitDiff2) { + this.hitDiff2 = hitDiff2; + } + + public int getHitDiff() { + return hitDiff; + } + + public void setHitUpdateRequired(boolean hitUpdateRequired) { + this.hitUpdateRequired = hitUpdateRequired; + } + + public void setHitUpdateRequired2(boolean hitUpdateRequired2) { + this.hitUpdateRequired2 = hitUpdateRequired2; + } + + public boolean isHitUpdateRequired() { + return hitUpdateRequired; + } + + public boolean getHitUpdateRequired() { + return hitUpdateRequired; + } + + public boolean getHitUpdateRequired2() { + return hitUpdateRequired2; + } + + public void setAppearanceUpdateRequired(boolean appearanceUpdateRequired) { + this.appearanceUpdateRequired = appearanceUpdateRequired; + } + + public boolean isAppearanceUpdateRequired() { + return appearanceUpdateRequired; + } + + public void setChatTextEffects(int chatTextEffects) { + this.chatTextEffects = chatTextEffects; + } + + public int getChatTextEffects() { + return chatTextEffects; + } + + public void setChatTextSize(byte chatTextSize) { + this.chatTextSize = chatTextSize; + } + + public byte getChatTextSize() { + return chatTextSize; + } + + public void setChatTextUpdateRequired(boolean chatTextUpdateRequired) { + this.chatTextUpdateRequired = chatTextUpdateRequired; + } + + public boolean isChatTextUpdateRequired() { + return chatTextUpdateRequired; + } + + public void setChatText(byte chatText[]) { + this.chatText = chatText; + } + + public byte[] getChatText() { + return chatText; + } + + public void setChatTextColor(int chatTextColor) { + this.chatTextColor = chatTextColor; + } + + public int getChatTextColor() { + return chatTextColor; + } + + public void setNewWalkCmdX(int newWalkCmdX[]) { + this.newWalkCmdX = newWalkCmdX; + } + + public int[] getNewWalkCmdX() { + return newWalkCmdX; + } + + public void setNewWalkCmdY(int newWalkCmdY[]) { + this.newWalkCmdY = newWalkCmdY; + } + + public int[] getNewWalkCmdY() { + return newWalkCmdY; + } + + public void setNewWalkCmdIsRunning(boolean newWalkCmdIsRunning) { + this.newWalkCmdIsRunning = newWalkCmdIsRunning; + } + + public boolean isNewWalkCmdIsRunning() { + return newWalkCmdIsRunning; + } + + public void setInStreamDecryption(ISAACRandomGen inStreamDecryption) { + } + + public void setOutStreamDecryption(ISAACRandomGen outStreamDecryption) { + } + + public boolean samePlayer() { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (j == playerId) { + continue; + } + if (PlayerHandler.players[j] != null) { + if (PlayerHandler.players[j].playerName + .equalsIgnoreCase(playerName)) { + disconnected = true; + return true; + } + } + } + return false; + } + + public void putInCombat(int attacker) { + underAttackBy = attacker; + logoutDelay = System.currentTimeMillis(); + singleCombatDelay = System.currentTimeMillis(); + } + + public void dealDamage(int damage) { + if (teleTimer <= 0) { + playerLevel[3] -= damage; + } else { + if (hitUpdateRequired) { + hitUpdateRequired = false; + } + if (hitUpdateRequired2) { + hitUpdateRequired2 = false; + } + } + + } + + public int[] damageTaken = new int[PlayerHandler.players.length]; + + public void handleHitMask(int damage) { + if (!hitUpdateRequired) { + hitUpdateRequired = true; + hitDiff = damage; + } else if (!hitUpdateRequired2) { + hitUpdateRequired2 = true; + hitDiff2 = damage; + } + updateRequired = true; + } +} diff --git a/2006Redone Server/src/redone/game/players/PlayerAction.java b/2006Redone Server/src/redone/game/players/PlayerAction.java new file mode 100644 index 00000000..a7483ce8 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/PlayerAction.java @@ -0,0 +1,38 @@ +package redone.game.players; + +public class PlayerAction { + + Client c; + + public PlayerAction(Client c) { + this.c = c; + } + + public boolean inAction = false; + public boolean canWalk = true; + public boolean canEat = true; + + public boolean setAction(boolean action) { + return inAction = action; + } + + public boolean checkAction() { + return inAction; + } + + public boolean canWalk(boolean walk) { + return canWalk = walk; + } + + public boolean checkWalking() { + return canWalk; + } + + public boolean canEat(boolean eat) { + return canEat = eat; + } + + public boolean checkEating() { + return canEat; + } +} diff --git a/2006Redone Server/src/redone/game/players/PlayerAssistant.java b/2006Redone Server/src/redone/game/players/PlayerAssistant.java new file mode 100644 index 00000000..3cf4234f --- /dev/null +++ b/2006Redone Server/src/redone/game/players/PlayerAssistant.java @@ -0,0 +1,3331 @@ +package redone.game.players; + +import java.util.ArrayList; +import java.util.Random; + +import redone.Constants; +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.combat.magic.MagicData; +import redone.game.content.combat.prayer.PrayerDrain; +import redone.game.content.combat.range.RangeData; +import redone.game.content.minigames.FightPits; +import redone.game.content.minigames.PestControl; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.music.sound.SoundList; +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.content.skills.SkillHandler; +import redone.game.content.skills.smithing.Superheat; +import redone.game.items.GameItem; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.LightSources; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.game.players.antimacro.AntiBotting; +import redone.util.GameLogger; +import redone.util.Misc; +import redone.world.TileControl; +import redone.world.clip.PathFinder; +import redone.world.clip.Region; + +public class PlayerAssistant { + + private Client player; + + public PlayerAssistant(Client Client) { + this.player = Client; + } + + public void objectAnim(int X, int Y, int animationID, int tileObjectType, int orientation) { + for (Player p : PlayerHandler.players) { + if(p != null) { + Client players = (Client)p; + if(players.distanceToPoint(X, Y) <= 25) { + player.getActionSender().createPlayersObjectAnim(X, Y, animationID, tileObjectType, orientation); + } + } + } + } + + public void resetAutocast() { + player.autocastId = 0; + player.autocasting = false; + player.getPlayerAssistant().sendConfig(108, 0); + } + + public void sendFrame36(int id, int state) { + if(player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(36); + player.getOutStream().writeWordBigEndian(id); + player.getOutStream().writeByte(state); + player.flushOutStream(); + } + } + + public void setAnimationBack() { + player.isRunning = true; + sendFrame36(173,1); + player.getCombatAssistant().getPlayerAnimIndex(); + requestUpdates(); + } + + public void clearClanChat() { + player.clanId = -1; + sendFrame126("Talking in: ", 18139); + sendFrame126("Owner: ", 18140); + for (int j = 18144; j < 18244; j++) { + sendFrame126("", j); + } + } + + public boolean isPlayer() { + return player.playerRights < 2 || player.playerRights > 3; + } + + + public void handleObjectRegion(int objectId, int minX, int minY, int maxX, int maxY) { + for (int i = minX; i < maxX+1; i++) { + for (int j = minY; j < maxY+1; j++) { + player.getActionSender().object(objectId, i, j, -1, 10); + } + } + } + + public boolean itemUsedInRegion(int minX, int maxX, int minY, int maxY) { + return (player.objectX >= minX && player.objectX <= maxX) && (player.objectY >= minY && player.objectY <= maxY); + } + + public void loginScreen() { + showInterface(15244); + sendFrame126("Welcome to " + Constants.SERVER_NAME + "\\n", 15257); + int currentDay = player.getLastLogin() - player.lastLoginDate; + if (player.lastLoginDate <= 0) { + sendFrame126("This is your first time logging in!", 15258); + } else if (player.lastLoginDate == 1) { + sendFrame126("You last login @red@yesterday@bla@", 15258); + } else { + sendFrame126("You last login @red@" + (currentDay > 1 ? (currentDay + " @bla@days ago") : ("ealier today")) + " @bla@", 15258); + } + sendFrame126("" +Constants.SERVER_NAME + " will NEVER email you.\\n We use the forums or we \\nWill contact you through game.", 15260); + sendFrame126("You have 0 unread messages\\nOn forums!", 15261); + if (player.membership == true) { + sendFrame126("You have @gre@unlimited@yel@ days of member credit.", 15262); + } else { + sendFrame126("You are currently not a member.", 15262); + } + sendFrame126("CLICK HERE TO PLAY", 15263); + if (!player.hasBankpin) { + sendFrame126("You currently have no bank pin set!\\nWe strongly advise you to set\\n one.", 15270); + } else { + sendFrame126("\\nYou currently have a bank pin set.\\nBank pins are coming soon!.", 15270); + } + sendFrame126("Remember to vote daily to help " + Constants.SERVER_NAME + "", 15803); + sendFrame126("Every vote counts! :)", 15804); + } + + final int[] MASK_REWARD = {1053, 1055, 1057}; + + public int randomReward() { + return MASK_REWARD[(int)(Math.random()*MASK_REWARD.length)]; + } + + public void showMap() { + int posisition = (player.getX() / 64 - 46) + (player.getY() / 64 - 49) * 6; + sendConfig(106, posisition); + showInterface(5392); + } + + public ArrayList randomFish(int fish) { + Random r = new Random(); + ArrayList toReturn = new ArrayList(); + boolean turtles = true; + boolean mantas = true; + boolean lobsters = true; + boolean swordfish = true; + int turt = 0; + int manta = 0; + int lobs = 0; + int swordFish = 0; + int junk = 0; + int done = 0; + while (done != fish) { + done++; + int random = r.nextInt(100); + if (random >= 85 - Server.trawler.chanceByLevel(player, 381)) { + if (mantas) { + manta++; + } + } else if (random >= 70 - Server.trawler.chanceByLevel(player, + 381)) { + if (turtles) { + turt++; + } + } else if (random >= 40) { + if (swordfish) { + swordFish++; + } + } else if (random >= 5) { + if (lobsters) { + lobs++; + } + } else { + junk++; + } + } + int xpToAdd = 0; + if (manta > 0) { + toReturn.add(new GameItem(389, manta)); + if (player.playerLevel[player.playerFishing] >= 81) { + xpToAdd += (manta * 46 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (turt > 0) { + toReturn.add(new GameItem(395, turt)); + if (player.playerLevel[player.playerFishing] >= 79) { + xpToAdd += (manta * 38 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (lobs > 0) { + toReturn.add(new GameItem(377, lobs)); + if (player.playerLevel[player.playerFishing] >= 40) { + xpToAdd += (manta * 90 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (swordFish > 0) { + toReturn.add(new GameItem(371, swordFish)); + if (player.playerLevel[player.playerFishing] >= 50) { + xpToAdd += (manta * 100 * SkillHandler.FISHING_EXPERIENCE); + } + } + if (junk > 0) + toReturn.add(new GameItem(685, junk)); + player.getPlayerAssistant().addSkillXP(xpToAdd, player.playerFishing); + return toReturn; + } + + public void removeFishingTrawlerRewardItem(int slot, boolean all) { + try { + if (!all) { + if (player.getItemAssistant().freeSlots() != 0) { + if (player.fishingTrawlerReward.get(slot).amount >= 1) { + player.getItemAssistant().addItem( + player.fishingTrawlerReward.get(slot).id, 1); + player.fishingTrawlerReward.get(slot).amount--; + if (player.fishingTrawlerReward.get(slot).amount <= 0) { + player.fishingTrawlerReward.remove(slot); + Server.trawler.showReward(player); + } else { + Server.trawler.updateRewardSlot(player, slot); + } + } + } else { + player.getActionSender().sendMessage("You don't have enough inventory space to withdraw that"); + } + } else { + int loop = player.fishingTrawlerReward.get(slot).amount; + for (int j = 0; j < loop; j++) { + if (player.getItemAssistant().freeSlots() == 0) { + player.getActionSender().sendMessage("You don't have enough inventory space to withdraw that"); + Server.trawler.updateRewardSlot(player, slot); + return; + } + player.getItemAssistant() + .addItem(player.fishingTrawlerReward.get(slot).id, 1); + player.fishingTrawlerReward.get(slot).amount--; + if (player.fishingTrawlerReward.get(slot).amount <= 0) { + player.fishingTrawlerReward.remove(slot); + Server.trawler.showReward(player); + return; + } + } + } + } catch (Exception e) { + + } + } + + public void removeAllSidebars() { + for (int i = 0; i < 14; i++) { + player.getActionSender().setSidebarInterface(i, -1); + } + } + + public void resetAnimationsToPrevious() { + player.playerRunIndex = player.prevPrevPlayerRunIndex; + player.playerStandIndex = player.prevPlayerStandIndex; + player.playerWalkIndex = player.prevplayerWalkIndex; + player.playerTurnIndex = player.prevPlayerTurnIndex; + player.playerTurn90CWIndex = player.prevPlayerTurn90CWIndex; + player.playerTurn90CCWIndex = player.prevPlayerTurn90CCWIndex; + player.playerTurn180Index = player.prevPlayerTurn180Index; + requestUpdates(); + } + + public int backupItems[] = new int[Constants.BANK_SIZE]; + public int backupItemsN[] = new int[Constants.BANK_SIZE]; + public int backupInvItems[] = new int[28]; + public int backupInvItemsN[] = new int[28]; + + public void otherInv(Client c, Client o) { + if (o == c || o == null || c == null) + return; + for (int i = 0; i < o.playerItems.length; i++) { + backupInvItems[i] = c.playerItems[i]; + c.playerItemsN[i] = c.playerItemsN[i]; + c.playerItemsN[i] = o.playerItemsN[i]; + c.playerItems[i] = o.playerItems[i]; + } + c.getItemAssistant().updateInventory(); + + for (int i = 0; i < o.playerItems.length; i++) { + c.playerItemsN[i] = backupInvItemsN[i]; + c.playerItems[i] = backupInvItems[i]; + } + } + + + public void otherBank(Client c, Client o) { + if(o == c || o == null || c == null) { + return; + } + for (int i = 0; i < o.bankItems.length; i++) { + backupItems[i] = c.bankItems[i]; backupItemsN[i] = c.bankItemsN[i]; + c.bankItemsN[i] = o.bankItemsN[i]; c.bankItems[i] = o.bankItems[i]; + } + openUpBank(); + for (int i = 0; i < o.bankItems.length; i++) { + c.bankItemsN[i] = backupItemsN[i]; c.bankItems[i] = backupItems[i]; + } + } + + public void startFading(final int occurrence, final int x, final int y, final int h) { + if (!player.allowFading) + return; + player.allowFading = false; + showInterface(13583); + sendMapState(2); + CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + movePlayer(x, y, h); + resetAnimation(); + requestUpdates(); + container.stop(); + } + + @Override + public void stop() { + player.allowFading = true; + sendMapState(0); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container2) { + container2.stop(); + } + + @Override + public void stop() { + closeAllWindows(); + switch (occurrence) { + case 0: + player.getDialogueHandler().sendStatement( + "You arrive at Port Khazard."); + break; + case 1: + player.getActionSender().sendMessage("You wash up onto the shore..."); + break; + case 2: + player.getActionSender().sendMessage("You find yourself inside a hidden cavern."); + break; + } + } + }, 2); + } + }, 4); +} + + public void sendSidebars() { + for (int i = 0; i < Constants.SIDEBARS.length; i++) { + player.getActionSender().setSidebarInterface(i, + Constants.SIDEBARS[i]); + if (player.playerMagicBook == 0) { + player.getActionSender().setSidebarInterface(6, 1151); + } else { + player.getActionSender().setSidebarInterface(6, 12855); + } + } + } + + public boolean removeGloves() { + if (player.getItemAssistant().playerHasItem(776)) { + player.getItemAssistant().deleteItem2(776, 1); + return true; + } else if (player.getItemAssistant().playerHasItem(775)) { + player.getItemAssistant().deleteItem2(775, 1); + return true; + } else if (player.playerEquipment[player.playerHands] == 775 || player.playerEquipment[player.playerHands] == 776) { + player.getDialogueHandler().sendStatement("You need to take your gloves off to do this."); + player.nextChat = 0; + return false; + } + return false; + } + + public void feature(String feature) { + player.getDialogueHandler().sendStatement("Sorry, " + feature + " is currently disabled."); + player.nextChat = 0; + } + + public static void removeHintIcon(Client c) { + c.getActionSender().drawHeadicon(0, 0, 0, 0); + } + + /** + * Tutorial Island Interface Integer a = amount the bar fills Integer p = + * represents percent # on interface Integer "a" represents amount %bar + * fills From what i tested so far it goes like this:1=0%, 2=5%, 3=10%, so + * and so fouth + */ + + public void tutorialIslandInterface(int p, int a) { + sendFrame20(406, a); + sendFrame171(1, 12224); + sendFrame171(1, 12225); + sendFrame171(1, 12226); + sendFrame171(1, 12227); + sendFrame126("" + p + "%", 12224); + walkableInterface(8680); + } + + /** + * Walkable interface test + * + * @param ID + */ + + public void setInterfaceWalkable(int ID) { + player.outStream.createFrame(208); + player.outStream.writeWordBigEndian_dup(ID); + player.flushOutStream(); + } + + /** + * Hides all Side Bars + */ + + public void hideAllSideBars() { + for (int i = 0; i < 14; i++) { + player.getActionSender().setSidebarInterface(i, -1); + } + player.getActionSender().setSidebarInterface(10, 2449); + } + + public void writeEnergy() { + if (player.playerEnergy > 0) { + sendFrame126(player.playerEnergy + "%", 149); + } else { + sendFrame126("0%", 149); + } + } + + public int raiseTimer() { + if (player.playerLevel[16] >= 2 && player.playerLevel[16] < 10) { + return 6500; + } + if (player.playerLevel[16] >= 10 && player.playerLevel[16] < 25) { + return 6000; + } + if (player.playerLevel[16] >= 25 && player.playerLevel[16] < 40) { + return 5500; + } + if (player.playerLevel[16] >= 40 && player.playerLevel[16] < 55) { + return 5000; + } + if (player.playerLevel[16] >= 55 && player.playerLevel[16] < 70) { + return 4500; + } + if (player.playerLevel[16] >= 70 && player.playerLevel[16] < 85) { + return 4000; + } + if (player.playerLevel[16] >= 85 && player.playerLevel[16] < 99) { + return 3500; + } + if (player.playerLevel[16] == 99) { + return 3000; + } + return 7000; + } + + public void handleTiara() { + int[] tiaras = { 5527, 5529, 5531, 5535, 5537, 5533, 5539, 5543, 5541, 5545, 5547 }; + if (player.wearId >= tiaras[0] && player.wearId <= tiaras[10]) { + for (int i = 0; i < tiaras.length; i++) { + if (player.wearId == tiaras[i]) { + int tempInt = 1; + int loc = i; + while (loc > 0) { + tempInt *= 2; + loc--; + } + player.getActionSender().setConfig(491, tempInt); + } + } + } + } + + private static int[][] ALLOWED_COORDS = { + /*PLAYER X, PLAYER Y, OTHER X, OTHER Y*/ + {0, 1, 2, 3}, + }; + + private static int[][] DISABLED_COORDS = { + /*PLAYER X, PLAYER Y, OTHER X, OTHER Y*/ + {4, 5, 6, 7}, + }; + + public static boolean pathBlocked(Client attacker, Client victim) { + + double offsetX = Math.abs(attacker.absX - victim.absX); + double offsetY = Math.abs(attacker.absY - victim.absY); + + int distance = TileControl.calculateDistance(attacker, victim); + + if (distance == 0) { + return true; + } + + offsetX = offsetX > 0 ? offsetX / distance : 0; + offsetY = offsetY > 0 ? offsetY / distance : 0; + + int[][] path = new int[distance][5]; + + int curX = attacker.absX; + int curY = attacker.absY; + int next = 0; + int nextMoveX = 0; + int nextMoveY = 0; + + double currentTileXCount = 0.0; + double currentTileYCount = 0.0; + + while (distance > 0) { + distance--; + nextMoveX = 0; + nextMoveY = 0; + if (curX > victim.absX) { + currentTileXCount += offsetX; + if (currentTileXCount >= 1.0) { + nextMoveX--; + curX--; + currentTileXCount -= offsetX; + } + } else if (curX < victim.absX) { + currentTileXCount += offsetX; + if (currentTileXCount >= 1.0) { + nextMoveX++; + curX++; + currentTileXCount -= offsetX; + } + } + if (curY > victim.absY) { + currentTileYCount += offsetY; + if (currentTileYCount >= 1.0) { + nextMoveY--; + curY--; + currentTileYCount -= offsetY; + } + } else if (curY < victim.absY) { + currentTileYCount += offsetY; + if (currentTileYCount >= 1.0) { + nextMoveY++; + curY++; + currentTileYCount -= offsetY; + } + } + path[next][0] = curX; + path[next][1] = curY; + path[next][2] = attacker.heightLevel; + path[next][3] = nextMoveX; + path[next][4] = nextMoveY; + next++; + } + /** + * Projectile exceptions + * @author Andrew + */ + for (int i = 0; i < ALLOWED_COORDS.length; i++) { + if (curX == ALLOWED_COORDS[i][0] && curY == ALLOWED_COORDS[i][1] && victim.absX == ALLOWED_COORDS[i][2] && victim.absY == ALLOWED_COORDS[i][3]) { + return true; + } + } + for (int i = 0; i < DISABLED_COORDS.length; i++) { + if (curX == DISABLED_COORDS[i][0] && curY == DISABLED_COORDS[i][1] && victim.absX == DISABLED_COORDS[i][2] && victim.absY == DISABLED_COORDS[i][3]) { + return false; + } + } + for (int i = 0; i < path.length; i++) { + if (!Region.getClipping(path[i][0], path[i][1], path[i][2], path[i][3], path[i][4]) && !Region.blockedShot(path[i][0], path[i][1], path[i][2])) { + return true; + } + } + return false; + } + + public static boolean pathBlocked(Client attacker, Npc victim) { + double offsetX = Math.abs(attacker.absX - victim.absX); + double offsetY = Math.abs(attacker.absY - victim.absY); + + int distance = TileControl.calculateDistance(attacker, victim); + + if (distance == 0) { + return true; + } + + offsetX = offsetX > 0 ? offsetX / distance : 0; + offsetY = offsetY > 0 ? offsetY / distance : 0; + + int[][] path = new int[distance][5]; + + int curX = attacker.absX; + int curY = attacker.absY; + int next = 0; + int nextMoveX = 0; + int nextMoveY = 0; + + double currentTileXCount = 0.0; + double currentTileYCount = 0.0; + + while (distance > 0) { + distance--; + nextMoveX = 0; + nextMoveY = 0; + if (curX > victim.absX) { + currentTileXCount += offsetX; + if (currentTileXCount >= 1.0) { + nextMoveX--; + curX--; + currentTileXCount -= offsetX; + } + } else if (curX < victim.absX) { + currentTileXCount += offsetX; + if (currentTileXCount >= 1.0) { + nextMoveX++; + curX++; + currentTileXCount -= offsetX; + } + } + if (curY > victim.absY) { + currentTileYCount += offsetY; + if (currentTileYCount >= 1.0) { + nextMoveY--; + curY--; + currentTileYCount -= offsetY; + } + } else if (curY < victim.absY) { + currentTileYCount += offsetY; + if (currentTileYCount >= 1.0) { + nextMoveY++; + curY++; + currentTileYCount -= offsetY; + } + } + path[next][0] = curX; + path[next][1] = curY; + path[next][2] = attacker.heightLevel; + path[next][3] = nextMoveX; + path[next][4] = nextMoveY; + next++; + } + /** + * Projectile exceptions + * @author Andrew + */ + for (int i = 0; i < ALLOWED_COORDS.length; i++) { + if (curX == ALLOWED_COORDS[i][0] && curY == ALLOWED_COORDS[i][1] && victim.absX == ALLOWED_COORDS[i][2] && victim.absY == ALLOWED_COORDS[i][3]) { + return true; + } + } + for (int i = 0; i < DISABLED_COORDS.length; i++) { + if (curX == DISABLED_COORDS[i][0] && curY == DISABLED_COORDS[i][1] && victim.absX == DISABLED_COORDS[i][2] && victim.absY == DISABLED_COORDS[i][3]) { + return false; + } + } + for (int i = 0; i < path.length; i++) { + if (!Region.blockedShot(path[i][0], path[i][1], path[i][2])) { + return true; + } + } + return false; + } + + + public void stepAway() { + player.faceUpdate(player.followId + 32768); + if (Region.getClipping(player.getX() - 1, player.getY(), player.heightLevel, -1, 0)) { + walkTo(-1, 0); + } else if (Region.getClipping(player.getX() + 1, player.getY(), player.heightLevel, 1, 0)) { + walkTo(1, 0); + } else if (Region.getClipping(player.getX(), player.getY() - 1, player.heightLevel, 0, -1)) { + walkTo(0, -1); + } else if (Region.getClipping(player.getX(), player.getY() + 1, player.heightLevel, 0, 1)) { + walkTo(0, 1); + } + } + + public void squeezeThroughRailing() { + player.startAnimation(2240); + player.turnPlayerTo(player.objectX, player.objectY); + player.getActionSender().sendMessage("You squeeze through the loose railing."); + } + + public void spiritTree() { + player.getDialogueHandler().sendOption3("The Tree Gnome Village", "The Gnome Stronghold", "Varrock"); + player.dialogueAction = 53; + } + + public void handleCanoe() { + player.getDialogueHandler().sendOption4("Travel the canoe to Barbarian Village.", "Travel the canoe to the Champions Guild.", "Travel the canoe to Lumbridge.", "Travel the canoe to Edgeville."); + player.dialogueAction = 122; + } + + public boolean bananasCheck() { + int reqAmount = 10 - player.getItemAssistant().getItemCount(1963); + switch (player.getItemAssistant().getItemCount(1963)) { + case 0: + player.getDialogueHandler().sendPlayerChat1("I'll go collect " + reqAmount + " bannnas then come back..."); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + player.getDialogueHandler().sendPlayerChat1( + "I'll go collect " + reqAmount + + " more bannnas then come back..."); + break; + } + return true; + } + + /** + * Teleports + */ + + public void spellTeleport(int x, int y, int height) { + startTeleport(x, y, height, player.playerMagicBook == 1 ? "ancient" + : "modern"); + } + + public void startTeleport(int x, int y, int height, String teleportType) { + if (FightPits.getState(player) != null) { + player.getActionSender().sendMessage("You can't teleport from a Fight pits Game!"); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't teleport right now!"); + return; + } + if (player.tutorialProgress < 36) { + player.getActionSender().sendMessage( + "You can't teleport from tutorial island!"); + return; + } + int[] cwitems = { 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 1706, + 1708, 1710, 1712, 8007, 8008, 8009, 8010, 8011 }; + for (int cwitem : cwitems) { + if (player.inCw() || player.inCw() && player.getItemAssistant().playerHasItem(cwitem)) { + player.getActionSender().sendMessage("You can't teleport from castle wars!"); + return; + } + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't teleport while in trade!"); + return; + } + if (!SkillHandler.MAGIC) { + player.getActionSender().sendMessage( + "This feature is curently disabled."); + return; + } + if (player.inWild() + && player.wildLevel > Constants.NO_TELEPORT_WILD_LEVEL) { + player.getActionSender().sendMessage( + "You can't teleport above level " + + Constants.NO_TELEPORT_WILD_LEVEL + + " in the wilderness."); + return; + } + if (System.currentTimeMillis() - player.teleBlockDelay < player.teleBlockLength) { + player.getActionSender().sendMessage( + "You are teleblocked and can't teleport."); + return; + } + if (Constants.SOUND) { + player.getActionSender().sendSound(SoundList.TELEPORT, 100, 0); + } + if (SkillHandler.isSkilling(player)) { + player.getActionSender().sendMessage( + "You can't teleport while skilling!"); + return; + } + if (!player.isDead && player.teleTimer == 0 + && player.respawnTimer == -6) { + if (player.playerIndex > 0 || player.npcIndex > 0) { + player.getCombatAssistant().resetPlayerAttack(); + } + if (player.clickedTree == true) { + player.clickedTree = false; + } + player.stopMovement(); + player.getPlayerAssistant().removeAllWindows(); + player.teleX = x; + player.teleY = y; + player.npcIndex = 0; + player.playerIndex = 0; + player.faceUpdate(0); + player.teleHeight = height; + // client.resetShaking(); + player.isTeleporting = true; + if (teleportType.equalsIgnoreCase("modern")) { + player.startAnimation(714); + player.teleTimer = 11; + player.teleGfx = 308; + player.teleEndAnimation = 715; + } + if (teleportType.equalsIgnoreCase("spiritTree")) { + player.startAnimation(4731); + player.gfx0(1228); + player.teleTimer = 9; + player.teleEndAnimation = 715; + } + if (teleportType.equalsIgnoreCase("ancient")) { + player.startAnimation(1979); + player.teleGfx = 0; + player.teleTimer = 9; + player.teleEndAnimation = 0; + player.gfx0(392); + } + } + } + + public void startTeleport2(int x, int y, int height) { + int[] cwitems = { 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 1706, + 1708, 1710, 1712, 8007, 8008, 8009, 8010, 8011 }; + for (int cwitem : cwitems) { + if (player.inCw() || player.inCw() && player.getItemAssistant().playerHasItem(cwitem)) { + player.getActionSender().sendMessage("You can't teleport from castle wars!"); + return; + } + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't teleport right now!"); + return; + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't teleport while in trade!"); + return; + } + if (player.tutorialProgress < 36) { + player.getActionSender().sendMessage( + "You can't teleport from tutorial island!"); + return; + } + if (FightPits.getState(player) != null) { + player.getActionSender().sendMessage( + "You can't teleport from a Fight pits Game!"); + return; + } + if (!SkillHandler.MAGIC) { + player.getActionSender().sendMessage( + "This feature is curently disabled."); + return; + } + if (player.duelStatus == 5) { + player.getActionSender().sendMessage( + "You can't teleport during a duel!"); + return; + } + if (System.currentTimeMillis() - player.teleBlockDelay < player.teleBlockLength) { + player.getActionSender().sendMessage( + "You are teleblocked and can't teleport."); + return; + } + if (Constants.SOUND) { + player.getActionSender().sendSound(SoundList.TELEPORT, 100, 0); + } + if (!player.isDead && player.teleTimer == 0) { + player.stopMovement(); + player.getPlayerAssistant().removeAllWindows(); + player.teleX = x; + player.teleY = y; + player.npcIndex = 0; + player.playerIndex = 0; + player.faceUpdate(0); + // client.resetShaking(); + player.teleHeight = height; + player.startAnimation(714); + player.teleTimer = 11; + player.teleGfx = 308; + player.teleEndAnimation = 715; + player.isTeleporting = true; + } + } + + public void gloryTeleport(int x, int y, int height, String teleportType) { + int[] cwitems = { 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 1706, + 1708, 1710, 1712, 8007, 8008, 8009, 8010, 8011 }; + for (int cwitem : cwitems) { + if (player.inCw() || player.duelStatus > 0 + && player.getItemAssistant().playerHasItem(cwitem)) { + player.getActionSender().sendMessage( + "You can't teleport from Castle Wars!"); + return; + } + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't teleport right now!"); + return; + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't teleport while in trade!"); + return; + } + if (player.tutorialProgress < 36) { + player.getActionSender().sendMessage( + "You can't teleport from tutorial island!"); + return; + } + if (FightPits.getState(player) != null) { + player.getActionSender().sendMessage( + "You can't teleport from a Fight pits Game!"); + return; + } + if (!SkillHandler.MAGIC) { + player.getActionSender().sendMessage( + "This feature is curently disabled."); + return; + } + if (player.duelStatus == 5) { + player.getActionSender().sendMessage( + "You can't teleport during a duel!"); + return; + } + if (System.currentTimeMillis() - player.teleBlockDelay < player.teleBlockLength) { + player.getActionSender().sendMessage( + "You are teleblocked and can't teleport."); + return; + } + if (Constants.SOUND) { + player.getActionSender().sendSound(SoundList.TELEPORT, 100, 0); + } + if (player.inWild() && player.wildLevel > 30) { + player.getActionSender().sendMessage( + "You can't teleport above level 30 in the wilderness."); + return; + } + if (!player.isDead && player.teleTimer == 0) { + player.stopMovement(); + player.getPlayerAssistant().removeAllWindows(); + player.teleX = x; + player.teleY = y; + player.npcIndex = 0; + player.playerIndex = 0; + player.faceUpdate(0); + // client.resetShaking(); + player.teleHeight = height; + player.startAnimation(714); + player.teleTimer = 11; + player.teleGfx = 308; + player.teleEndAnimation = 715; + player.isTeleporting = true; + } + } + + public void processTeleport() { + player.teleportToX = player.teleX; + player.teleportToY = player.teleY; + player.heightLevel = player.teleHeight; + if (player.teleEndAnimation > 0) { + player.startAnimation(player.teleEndAnimation); + } + } + + public void movePlayer(int x, int y, int h) { + player.resetWalkingQueue(); + player.teleportToX = x; + player.teleportToY = y; + player.heightLevel = h; + player.getPlayerAssistant().requestUpdates(); + } + + public void playerWalk(int x, int y) { + PathFinder.getPathFinder().findRoute(player, x, y, true, 1, 1); + } + + public void handleEmpty() { + player.getDialogueHandler().sendOption2("Yes, empty my inventory please.", + "No, don't empty my inventory."); + player.dialogueAction = 855; + } + + public void resetTzhaar() { + if (!player.inFightCaves()) + return; + if (!player.killedJad) { + if (player.waveId > 1) { + player.getItemAssistant().addItem(6529, ((int)((player.waveId*player.waveId)+(((double)player.waveId/2.0)+0.5)))); + player.getDialogueHandler().sendDialogues(104, 2617); + } + } + player.killedJad = false; + player.canHealersRespawn = true; + player.waveId = -1; + player.tzhaarToKill = -1; + player.tzhaarKilled = -1; + movePlayer(2438, 5168, 0); + } + + public void enterCaves() { + player.getDialogueHandler().sendDialogues(101, 2617); + player.getPlayerAssistant().movePlayer(2413, 5117, player.playerId * 4); + player.waveId = 0; + player.tzhaarToKill = -1; + player.tzhaarKilled = -1; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.disconnected) { + container.stop(); + return; + } + Server.fightCaves.spawnNextWave((Client) PlayerHandler.players[player.playerId]); + container.stop(); + } + @Override + public void stop() { + + } + }, 16); + } + + private static final int[][] STARTER_ITEMS = { { 1351, 1 }, { 590, 1 }, + { 303, 1 }, { 315, 1 }, { 1925, 1 }, { 1931, 1 }, { 2309, 1 }, + { 1265, 1 }, { 1205, 1 }, { 1277, 1 }, { 1171, 1 }, { 841, 1 }, + { 882, 25 }, { 556, 25 }, { 558, 15 }, { 555, 6 }, { 557, 4 }, + { 559, 2 } }; + + public void addStarter() { + for (int[] element : STARTER_ITEMS) { + int item = element[0]; + int amount = element[1]; + player.getItemAssistant().addItem(item, amount); + } + } + + public void sendFrame20(int id, int state) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(36); + player.getOutStream().writeWordBigEndian(id); + player.getOutStream().writeByte(state); + player.flushOutStream(); + } + } + + public void sendFrame126(String s, int id) { + if(!player.checkPacket126Update(s, id)) { + return; + } + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrameVarSizeWord(126); + player.getOutStream().writeString(s); + player.getOutStream().writeWordA(id); + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public void sendFrame107() { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(107); + player.flushOutStream(); + } + } + + public void sendConfig(int id, int state) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(36); + player.getOutStream().writeWordBigEndian(id); + player.getOutStream().writeByte(state); + player.flushOutStream(); + } + } + + public void sendPlayerDialogueHead(int Frame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(185); + player.getOutStream().writeWordBigEndianA(Frame); + } + } + + public void showInterface(int interfaceid) { + if (player.inTrade || player.inDuel) { + return; + } + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(97); + player.getOutStream().writeWord(interfaceid); + player.flushOutStream(); + } + } + + public void sendFrame248(int MainFrame, int SubFrame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(248); + player.getOutStream().writeWordA(MainFrame); + player.getOutStream().writeWord(SubFrame); + player.flushOutStream(); + } + } + + public void sendFrame246(int MainFrame, int SubFrame, int SubFrame2) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(246); + player.getOutStream().writeWordBigEndian(MainFrame); + player.getOutStream().writeWord(SubFrame); + player.getOutStream().writeWord(SubFrame2); + player.flushOutStream(); + } + } + + public void sendFrame171(int MainFrame, int SubFrame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(171); + player.getOutStream().writeByte(MainFrame); + player.getOutStream().writeWord(SubFrame); + player.flushOutStream(); + } + } + + public void sendDialogueAnimation(int MainFrame, int SubFrame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(200); + player.getOutStream().writeWord(MainFrame); + player.getOutStream().writeWord(SubFrame); + player.flushOutStream(); + } + } + + public int mapStatus = 0; + + public void sendMapState(int state) { // used for disabling map + if (player.getOutStream() != null && player != null) { + if (mapStatus != state) { + mapStatus = state; + player.getOutStream().createFrame(99); + player.getOutStream().writeByte(state); + player.flushOutStream(); + } + } + } + + public void sendFrame106(int sideIcon) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(106); + player.getOutStream().writeByteC(sideIcon); + player.flushOutStream(); + player.getPlayerAssistant().requestUpdates(); + } + } + + public void sendFrame70(int i, int o, int id) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(70); + player.getOutStream().writeWord(i); + player.getOutStream().writeWordBigEndian(o); + player.getOutStream().writeWordBigEndian(id); + player.flushOutStream(); + } + } + + public void sendNPCDialogueHead(int MainFrame, int SubFrame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(75); + player.getOutStream().writeWordBigEndianA(MainFrame); + player.getOutStream().writeWordBigEndianA(SubFrame); + player.flushOutStream(); + } + } + + public void sendChatInterface(int Frame) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(164); + player.getOutStream().writeWordBigEndian_dup(Frame); + player.flushOutStream(); + } + } + + public void setPrivateMessaging(int i) { // friends and ignore list status + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(221); + player.getOutStream().writeByte(i); + player.flushOutStream(); + } + } + + public void setChatOptions(int publicChat, int privateChat, int tradeBlock) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(206); + player.getOutStream().writeByte(publicChat); + player.getOutStream().writeByte(privateChat); + player.getOutStream().writeByte(tradeBlock); + player.flushOutStream(); + } + } + + public void sendFrame87(int id, int state) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(87); + player.getOutStream().writeWordBigEndian_dup(id); + player.getOutStream().writeDWord_v1(state); + player.flushOutStream(); + } + } + + public void sendPM(long name, int rights, byte[] chatmessage, + int messagesize) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrameVarSize(196); + player.getOutStream().writeQWord(name); + player.getOutStream().writeDWord(player.lastChatId++); + player.getOutStream().writeByte(rights); + player.getOutStream().writeBytes(chatmessage, messagesize, 0); + player.getOutStream().endFrameVarSize(); + player.flushOutStream(); + Misc.textUnpack(chatmessage, messagesize); + Misc.longToPlayerName(name); + } + } + + public void hitPlayers(int x1, int x2, int y1, int y2, int hp) { + for (Player player : PlayerHandler.players) { + if (player != null && player.isActive) { + Client t = (Client) player; + if (t.absX >= x1 && t.absX <= x2 && t.absY >= y1 + && t.absY <= y2) { + int hit = t.playerLevel[Constants.HITPOINTS] / hp; + t.setHitDiff2(hit); + t.setHitUpdateRequired2(true); + t.playerLevel[Constants.HITPOINTS] -= hit; + t.getPlayerAssistant().refreshSkill(Constants.HITPOINTS); + t.updateRequired = true; + } + } + } + } + + public void loadPM(long playerName, int world) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + if (world != 0) { + world += 9; + } else if (!Constants.WORLD_LIST_FIX) { + world += 1; + } + player.getOutStream().createFrame(50); + player.getOutStream().writeQWord(playerName); + player.getOutStream().writeByte(world); + player.flushOutStream(); + } + } + + public void removeAllWindows() { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(219); + player.flushOutStream(); + } + } + + public void closeAllWindows() { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(219); + player.flushOutStream(); + } + } + + public void sendFrame34(int id, int slot, int column, int amount) { + if (player.getOutStream() != null && player != null) { + player.outStream.createFrameVarSizeWord(34); // init item to smith + // screen + player.outStream.writeWord(column); // Column Across Smith Screen + player.outStream.writeByte(4); // Total Rows? + player.outStream.writeDWord(slot); // Row Down The Smith Screen + player.outStream.writeWord(id + 1); // item + player.outStream.writeByte(amount); // how many there are? + player.outStream.endFrameVarSizeWord(); + } + } + + public void sendItemOnInterface(int id, int amount, int child) { + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(child); + player.getOutStream().writeWord(amount); + if (amount > 254){ + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2(amount); + } else { + player.getOutStream().writeByte(amount); + } + player.getOutStream().writeWordBigEndianA(id); + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + + public void walkableInterface(int id) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(208); + player.getOutStream().writeWordBigEndian_dup(id); + player.flushOutStream(); + } + } + + /** + * Reseting animations for everyone + **/ + + public void frame1() { + for (Player player : PlayerHandler.players) { + if (player != null) { + Client person = (Client) player; + if (person != null) { + if (person.getOutStream() != null && !person.disconnected) { + if (player + .distanceToPoint(person.getX(), person.getY()) <= 25) { + person.getOutStream().createFrame(1); + person.flushOutStream(); + person.getPlayerAssistant().requestUpdates(); + } + } + } + } + } + } + + // projectiles for everyone within 25 squares + public void createPlayersProjectile(int x, int y, int offX, int offY, + int angle, int speed, int gfxMoving, int startHeight, + int endHeight, int lockon, int time) { + // synchronized(c) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.getOutStream() != null) { + if (person.distanceToPoint(x, y) <= 25) { + if (p.heightLevel == player.heightLevel) { + person.getActionSender().createProjectile( + x, y, offX, offY, angle, speed, + gfxMoving, startHeight, endHeight, + lockon, time); + } + } + } + } + } + } + } + + public void createPlayersProjectile2(int x, int y, int offX, int offY, + int angle, int speed, int gfxMoving, int startHeight, + int endHeight, int lockon, int time, int slope) { + // synchronized(c) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.getOutStream() != null) { + if (person.distanceToPoint(x, y) <= 25) { + person.getActionSender() + .createProjectile2(x, y, offX, offY, angle, + speed, gfxMoving, startHeight, + endHeight, lockon, time, slope); + } + } + } + } + } + } + + /** + ** GFX + **/ + public void stillGfx(int id, int x, int y, int height, int time) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(y - player.getMapRegionY() * 8); + player.getOutStream().writeByteC(x - player.getMapRegionX() * 8); + player.getOutStream().createFrame(4); + player.getOutStream().writeByte(0); + player.getOutStream().writeWord(id); + player.getOutStream().writeByte(height); + player.getOutStream().writeWord(time); + player.flushOutStream(); + } + } + + // creates gfx for everyone + public void createPlayersStillGfx(int id, int x, int y, int height, int time) { + // synchronized(c) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.getOutStream() != null) { + if (person.distanceToPoint(x, y) <= 25) { + person.getPlayerAssistant().stillGfx(id, x, y, + height, time); + } + } + } + } + } + } + + public void openUpBank() { + if (player.isBanking = false) { + player.getPlayerAssistant().closeAllWindows(); + return; + } + if (SkillHandler.isSkilling(player)) { + player.getPlayerAssistant().closeAllWindows(); + player.isBanking = false; + return; + } + if (player.inWild()) { + player.getActionSender().sendMessage( + "You can't open up a bank in the wilderness!"); + player.getPlayerAssistant().closeAllWindows(); + return; + } + if (player.absX == 2813 && player.absY == 3443) { + return; + } + if (player.requestPinDelete) { + if (player.enterdBankpin) { + player.requestPinDelete = false; + player.getActionSender().sendMessage("[Notice] Your PIN pending deletion has been cancelled."); + } else if (player.lastLoginDate >= player.pinDeleteDateRequested && player.hasBankpin) { + player.hasBankpin = false; + player.requestPinDelete = false; + player.getActionSender().sendMessage("[Notice] Your PIN has been deleted. It is recommended " + + "to have one."); + } + } + if (!player.enterdBankpin && player.hasBankpin) { + player.getBankPin().openPin(); + return; + } + if (player.inTrade || player.tradeStatus == 1) { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o != null) { + o.getTrading().declineTrade(); + } + } + if (player.duelStatus == 1) { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o != null) { + o.getDueling().resetDuel(); + } + } + if (player.getOutStream() != null && player != null) { + player.getItemAssistant().resetItems(5064); + player.getItemAssistant().rearrangeBank(); + player.getItemAssistant().resetBank(); + player.getItemAssistant().resetTempItems(); + player.getOutStream().createFrame(248); + player.getOutStream().writeWordA(5292); + player.getOutStream().writeWord(5063); + player.flushOutStream(); + player.isBanking = true; + } + } + + /** + * Private Messaging + */ + public void logIntoPM() { + setPrivateMessaging(2); + for (Player p : PlayerHandler.players) { + if (p != null && p.isActive) { + Client o = (Client) p; + o.getPlayerAssistant().updatePM(player.playerId, 1); + } + } + boolean pmLoaded = false; + + for (long friend : player.friends) { + if (friend != 0) { + for (int i2 = 1; i2 < PlayerHandler.players.length; i2++) { + Player p = PlayerHandler.players[i2]; + if (p != null && p.isActive + && Misc.playerNameToInt64(p.playerName) == friend) { + Client o = (Client) p; + if (player.playerRights >= 2 + || p.privateChat == 0 + || p.privateChat == 1 + && o.getPlayerAssistant() + .isInPM(Misc + .playerNameToInt64(player.playerName))) { + loadPM(friend, 1); + pmLoaded = true; + } + break; + } + } + if (!pmLoaded) { + loadPM(friend, 0); + } + pmLoaded = false; + } + for (int i1 = 1; i1 < PlayerHandler.players.length; i1++) { + Player p = PlayerHandler.players[i1]; + if (p != null && p.isActive) { + Client o = (Client) p; + o.getPlayerAssistant().updatePM(player.playerId, 1); + } + } + } + } + + public void updatePM(int pID, int world) { // used for private chat updates + Player p = PlayerHandler.players[pID]; + if (p == null || p.playerName == null || p.playerName.equals("null")) { + return; + } + Client o = (Client) p; + long l = Misc.playerNameToInt64(PlayerHandler.players[pID].playerName); + + if (p.privateChat == 0) { + for (long friend : player.friends) { + if (friend != 0) { + if (l == friend) { + loadPM(l, world); + return; + } + } + } + } else if (p.privateChat == 1) { + for (long friend : player.friends) { + if (friend != 0) { + if (l == friend) { + if (o.getPlayerAssistant().isInPM( + Misc.playerNameToInt64(player.playerName))) { + loadPM(l, world); + return; + } else { + loadPM(l, 0); + return; + } + } + } + } + } else if (p.privateChat == 2) { + for (long friend : player.friends) { + if (friend != 0) { + if (l == friend && player.playerRights < 2) { + loadPM(l, 0); + return; + } + } + } + } + } + + public boolean isInPM(long l) { + for (long friend : player.friends) { + if (friend != 0) { + if (l == friend) { + return true; + } + } + } + return false; + } + + /** + * Drink AntiPosion Potions + * + * @param itemId + * The itemId + * @param itemSlot + * The itemSlot + * @param newItemId + * The new item After Drinking + * @param healType + * The type of poison it heals + */ + + public void potionPoisonHeal(int itemId, int itemSlot, int newItemId, + int healType) { + player.attackTimer = player.getCombatAssistant().getAttackDelay(); + if (player.duelRule[5]) { + player.getActionSender().sendMessage( + "Potions has been disabled in this duel!"); + return; + } + if (!player.isDead + && System.currentTimeMillis() - player.foodDelay > 2000) { + if (player.getItemAssistant().playerHasItem(itemId, 1, itemSlot)) { + player.getActionSender().sendMessage( + "You drink the " + + ItemAssistant.getItemName(itemId) + .toLowerCase() + "."); + player.foodDelay = System.currentTimeMillis(); + // Actions + if (healType == 1) { + // Cures The Poison + } else if (healType == 2) { + // Cures The Poison + protects from getting poison again + } + player.startAnimation(0x33D); + player.getItemAssistant().deleteItem(itemId, itemSlot, 1); + player.getItemAssistant().addItem(newItemId, 1); + requestUpdates(); + } + } + } + + /** + * Magic on items + **/ + + public void magicOnItems(int slot, int itemId, int spellId) { + if (!player.getItemAssistant().playerHasItem(itemId, 1, slot) + || itemId == 995) { + return; + } + switch (spellId) { + case 1162: // low alch + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't alch while in trade!"); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't alch right now!"); + return; + } + if (Misc.random(200) == 0) { + AntiBotting.botCheckInterface(player); + } + if (System.currentTimeMillis() - player.alchDelay > 1000) { + if (!player.getCombatAssistant().checkMagicReqs(49)) { + break; + } + boolean canAlch = true; + for (int i : Constants.ITEM_UNALCHABLE) { + if (itemId == i) { + player.getActionSender().sendMessage( + "You can't alch that item!"); + canAlch = false; + return; + } + } + if (canAlch) { + int value = player.getShopAssistant().getItemShopValue( itemId) / 3; + String itemName = ItemAssistant.getItemName(itemId).toLowerCase(); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast Low Alchemy on " + itemName + " for " + GameLogger.formatCurrency(value) + " coins"); + } + player.getItemAssistant().deleteItem(itemId, slot, 1); + //855 - 858 + if (itemId > 854 && itemId < 857) { + player.getItemAssistant().addItem(995, 512); + } else if (itemId > 856 && itemId < 859) { + player.getItemAssistant().addItem(995, 320); + } else if (itemId > 860 && itemId < 863) { + player.getItemAssistant().addItem(995, 640); + } else if (itemId > 858 && itemId < 861) { + player.getItemAssistant().addItem(995, 1024); + } else { + player.getItemAssistant().addItem(995, value); + } + player.startAnimation(MagicData.MAGIC_SPELLS[49][2]); + player.gfx100(MagicData.MAGIC_SPELLS[49][3]); + player.alchDelay = System.currentTimeMillis(); + player.getPlayerAssistant().sendFrame106(6); + addSkillXP(31, 6); + player.getActionSender().sendSound( + SoundList.LOW_ALCHEMY, 100, 0); + RandomEventHandler.addRandom(player); + refreshSkill(6); + } + } + break; + + case 1173: + if (!Superheat.superHeatItem(player, itemId)) { + return; + } + break; + + case 1155: // Lvl-1 enchant sapphire + case 1165: // Lvl-2 enchant emerald + case 1176: // Lvl-3 enchant ruby + case 1180: // Lvl-4 enchant diamond + case 1187: // Lvl-5 enchant dragonstone + case 6003: // Lvl-6 enchant onyx + player.getEnchanting().enchantItem(itemId, spellId); + break; + + case 1178: // high alch + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't alch while in trade!"); + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't alch right now!"); + return; + } + if (Misc.random(200) == 0) { + AntiBotting.botCheckInterface(player); + } + if (System.currentTimeMillis() - player.alchDelay > 1000) { + if (!player.getCombatAssistant().checkMagicReqs(50)) { + break; + } + boolean canAlch = true; + for (int i : Constants.ITEM_UNALCHABLE) { + if (itemId == i) { + player.getActionSender().sendMessage( + "You can't alch that item!"); + canAlch = false; + return; + } + } + if (canAlch) { + int value = (int) (player.getShopAssistant().getItemShopValue(itemId) * .75); + String itemName = ItemAssistant.getItemName(itemId).toLowerCase(); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast High Alchemy on " + itemName + " for" + GameLogger.formatCurrency(value) + " coins"); + } + player.getItemAssistant().deleteItem(itemId, slot, 1); + if (itemId > 854 && itemId < 857) { + player.getItemAssistant().addItem(995, 768); + } else if (itemId > 856 && itemId < 859) { + player.getItemAssistant().addItem(995, 480); + } else if (itemId > 858 && itemId < 861) { + player.getItemAssistant().addItem(995, 1536); + } else if (itemId > 860 && itemId < 863) { + player.getItemAssistant().addItem(995, 960); + } else { + player.getItemAssistant().addItem(995, (int) (player.getShopAssistant().getItemShopValue(itemId) * .75)); + } + player.startAnimation(MagicData.MAGIC_SPELLS[50][2]); + player.gfx100(MagicData.MAGIC_SPELLS[50][3]); + player.alchDelay = System.currentTimeMillis(); + player.getPlayerAssistant().sendFrame106(6); + RandomEventHandler.addRandom(player); + addSkillXP(65, 6); + player.getActionSender().sendSound( + SoundList.HIGH_ALCHEMY, 100, 0); + refreshSkill(6); + } + } + break; + } + } + + public String optionType = "null"; + + public String deathMsgs() { + int deathMsgs = Misc.random(9); + switch (deathMsgs) { + case 0: + return "With a crushing blow, you defeat " + player.playerName + + "."; + case 1: + return "It's a humiliating defeat for " + player.playerName + "."; + case 2: + return "" + player.playerName + + " didn't stand a chance against you."; + case 3: + return "You've defeated " + player.playerName + "."; + case 4: + return "" + player.playerName + + " regrets the day they met you in combat."; + case 5: + return "It's all over for " + player.playerName + "."; + case 6: + return "" + player.playerName + " falls before your might."; + case 7: + return "Can anyone defeat you? Certainly not " + player.playerName + + "."; + case 8: + return "You were clearly a better fighter than " + + player.playerName + "."; + } + return "You've defeated " + player.playerName + "."; + } + + public void resetDamageDone() { + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (PlayerHandler.players[i] != null) { + PlayerHandler.players[i].damageTaken[player.playerId] = 0; + } + } + } + + public void vengMe() { + if (System.currentTimeMillis() - player.lastVeng > 30000) { + if (player.getItemAssistant().playerHasItem(557, 10) + && player.getItemAssistant().playerHasItem(9075, 4) + && player.getItemAssistant().playerHasItem(560, 2)) { + player.vengOn = true; + player.lastVeng = System.currentTimeMillis(); + player.startAnimation(4410); + player.gfx100(726); + player.getItemAssistant().deleteItem(557, + player.getItemAssistant().getItemSlot(557), 10); + player.getItemAssistant().deleteItem(560, + player.getItemAssistant().getItemSlot(560), 2); + player.getItemAssistant().deleteItem(9075, + player.getItemAssistant().getItemSlot(9075), 4); + } else { + player.getActionSender() + .sendMessage( + "You do not have the required runes to cast this spell. (9075 for astrals)"); + } + } else { + player.getActionSender().sendMessage( + "You must wait 30 seconds before casting this again."); + } + } + + public void resetTb() { + player.teleBlockLength = 0; + player.teleBlockDelay = 0; + } + + public void resetFollowers() { + for (Player player : PlayerHandler.players) { + if (player != null) { + if (player.followId == player.playerId) { + Client c = (Client) player; + c.getPlayerAssistant().resetFollow(); + } + } + } + } + + public void applyDead() { + player.getDueling().stakedItems.clear(); + player.respawnTimer = 15; + player.isDead = true; + // client.getPacketDispatcher().sendSound(203, 100, 0); + int weapon = player.playerEquipment[player.playerWeapon]; + if (player.duelStatus != 6) { + player.killerId = findKiller(); + Client opponent = (Client) PlayerHandler.players[player.killerId]; + if (opponent != null) { + if(player.inWild() && player.npcIndex < 1) { + if (player.killerId != player.playerId) { + opponent.getActionSender().sendMessage(deathMsgs()); + } + } + if (player.getPlayerAssistant().isPlayer() && player.inWild() && player.npcIndex < 1) { + GameLogger.writeLog(opponent.playerName, "pkingkiller", opponent.playerName + " killed " + player.playerName + " absX: " + player.absX + " absY: " + player.absY + ""); + } + if (opponent.getPlayerAssistant().isPlayer() && player.inWild() && player.npcIndex < 1) { + GameLogger.writeLog(player.playerName, "pkingkilled", player.playerName + " was killed by " + opponent.playerName + " absX: " + opponent.absX + " absY: " + opponent.absY + ""); + } + if (weapon == CastleWars.SARA_BANNER || weapon == CastleWars.ZAMMY_BANNER) { + player.getItemAssistant().removeItem(weapon, 3); + player.getItemAssistant().deleteItem2(weapon, 1); + CastleWars.dropFlag(player, weapon); + } + if (opponent.duelStatus == 5) { + opponent.duelStatus++; + } + if (opponent.getCannon().hasCannon()) { + opponent.getCannon().handleDeath(); + } + } + } + player.faceUpdate(0); + player.npcIndex = 0; + player.playerIndex = 0; + player.stopMovement(); + if (player.inCw()) { + player.cwDeaths += 1; + Client o = (Client) PlayerHandler.players[player.killerId]; + o.cwKills += 1; + } else if (player.duelStatus <= 4) { + player.getDueling().stakedItems.clear(); + player.getActionSender().sendMessage("Oh dear you are dead!"); + } else if (player.duelStatus != 6) { + Client duelOpponent = (Client) PlayerHandler.players[player.duelingWith]; + player.getDueling().stakedItems.clear(); + player.getActionSender().sendMessage("You have lost the duel!"); + if (duelOpponent.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "duelingkilled", player.playerName + " was killed by " + duelOpponent.playerName + " in the duel arena."); + } + } + if (player.vampSlayer == 3 && player.clickedVamp == true) { + player.clickedVamp = false; + } else if (player.isWoodcutting) { + player.isWoodcutting = false; + } else if (player.playerSkilling[10]) { + player.playerSkilling[10] = false; + } else if(player.clickedTree == true) { + player.clickedTree = false; + } + resetDamageDone(); + player.specAmount = 10; + player.getItemAssistant().addSpecialBar( + player.playerEquipment[player.playerWeapon]); + player.lastVeng = 0; + player.vengOn = false; + resetFollowers(); + player.attackTimer = 10; + removeAllWindows(); + player.tradeResetNeeded = true; + } + + public void giveLife() { + player.isDead = false; + player.faceUpdate(-1); + player.freezeTimer = 0; + removeAllWindows(); + player.tradeResetNeeded = true; + if (player.duelStatus <= 4) { + if (!CastleWars.isInCw(player) && !PestControl.isInGame(player) + && !PestControl.isInPcBoat(player) + && player.tutorialProgress > 35 + && FightPits.getState(player) == null + && !player.inFightCaves()) { + player.getItemAssistant().resetKeepItems(); + if (player.playerRights != 3) { + if (!player.isSkulled) { // what items to keep + player.getItemAssistant().keepItem(0, true); + player.getItemAssistant().keepItem(1, true); + player.getItemAssistant().keepItem(2, true); + } + if (player.getPrayer().prayerActive[10] + && System.currentTimeMillis() - player.lastProtItem > 700) { + player.getItemAssistant().keepItem(3, true); + } + player.getItemAssistant().dropAllItems(); // drop all items + player.getItemAssistant().deleteAllItems(); // delete all + // items + + if (!player.isSkulled) { // add the kept items once we + // finish deleting and dropping + // them + for (int i1 = 0; i1 < 3; i1++) { + if (player.itemKeptId[i1] > 0) { + player.getItemAssistant().addItem( + player.itemKeptId[i1], 1); + } + } + } + if (player.getPrayer().prayerActive[10]) { // if we have + // protect items + if (player.itemKeptId[3] > 0) { + player.getItemAssistant().addItem( + player.itemKeptId[3], 1); + } + } + } + player.getItemAssistant().resetKeepItems(); + } + } + PrayerDrain.resetPrayers(player); + for (int i = 0; i < 20; i++) { + player.playerLevel[i] = getLevelForXP(player.playerXP[i]); + refreshSkill(i); + } + if (FightPits.getState(player) != null) { + FightPits.handleDeath(player); + } else if (player.fightPitsArea()) { + player.getPlayerAssistant().movePlayer(2399, 5178, 0); + } else if (player.inCw()) { + if (CastleWars.getTeamNumber(player) == 1) { + player.getPlayerAssistant().movePlayer(2426 + Misc.random(3), + 3076 - Misc.random(3), 1); + } else { + player.getPlayerAssistant().movePlayer(2373 + Misc.random(3), + 3131 - Misc.random(3), 1); + } + } else if (PestControl.isInGame(player) || player.inPcGame()) { + player.getPlayerAssistant().movePlayer(2658, 2609, 0); + player.getDialogueHandler().sendDialogues(601, 3790); + } else if (player.tutorialProgress < 36 || player.isInTut()) { + player.getPlayerAssistant().movePlayer(3094, 3107, 0); + player.diedOnTut = true; + player.getDialogueHandler().sendStatement2( + "Oh dear you died! Go back to the step you", + "were on to continue Tutorial Island."); + player.getActionSender().createArrow(3098, 3107, player.getH(), + 2); + } else if (player.inFightCaves()) {// to fix + player.getPlayerAssistant().resetTzhaar(); + } else if (player.duelStatus != 5 && !player.lostDuel) { // if we are + // not in a + // duel + // repawn to + // wildy + movePlayer(Constants.RESPAWN_X, Constants.RESPAWN_Y, 0); + player.isSkulled = false; + player.skullTimer = 0; + player.attackedPlayers.clear(); + } else if (player.duelStatus == 5 || player.lostDuel) { // we are in a + // duel, + // respawn + // outside + // of arena + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o != null) { + o.getActionSender().createPlayerHints(10, -1); + if (o.duelStatus == 6 && player.duelStatus == 5) { + o.getDueling().duelVictory(); + } + } + player.getActionSender().sendSound(122, 100, 0); + player.getPlayerAssistant().movePlayer( + Constants.DUELING_RESPAWN_X + 5, + Constants.DUELING_RESPAWN_Y + 5, 0); + assert o != null; + if (o != null) { + o.getActionSender().sendSound(122, 100, 0); + o.getPlayerAssistant().movePlayer( + Constants.DUELING_RESPAWN_X + 5, + Constants.DUELING_RESPAWN_Y + 5, 0); + } + if (player.duelStatus != 6) { // if we have won but have died, + // don't reset the duel status. + player.getDueling().resetDuel(); + } + player.lostDuel = false; + } + PlayerSave.saveGame(player); + player.getCombatAssistant().resetPlayerAttack(); + resetAnimation(); + player.startAnimation(65535); + frame1(); + resetTb(); + player.playerEnergy = 100; + player.getPlayerAssistant().sendFrame126(player.playerEnergy + "%", 149); + player.isSkulled = false; + player.attackedPlayers.clear(); + player.headIconPk = -1; + player.skullTimer = -1; + player.damageTaken = new int[PlayerHandler.players.length]; + requestUpdates(); + } + + /** + * Location change for digging, levers etc + **/ + + public void changeLocation() { + switch (player.newLocation) { + case 1: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3578, 9706, 3); + break; + case 2: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3568, 9683, 3); + break; + case 3: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3557, 9703, 3); + break; + case 4: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3556, 9718, 3); + break; + case 5: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3534, 9704, 3); + break; + case 6: + player.getPlayerAssistant().sendMapState(2); + movePlayer(3546, 9684, 3); + break; + } + player.newLocation = 0; + } + + public void followPlayer() { + if (PlayerHandler.players[player.followId] == null + || PlayerHandler.players[player.followId].isDead) { + resetFollow(); + return; + } + if (player.freezeTimer > 0) { + return; + } + if (player.isDead || player.playerLevel[3] <= 0) { + return; + } + + int otherX = PlayerHandler.players[player.followId].getX(); + int otherY = PlayerHandler.players[player.followId].getY(); + + boolean sameSpot = player.absX == otherX && player.absY == otherY; + if (sameSpot) + stepAway(); + + boolean hallyDistance = player.goodDistance(otherX, otherY, + player.getX(), player.getY(), 2); + + boolean rangeWeaponDistance = player.goodDistance(otherX, otherY, + player.getX(), player.getY(), 4); + boolean bowDistance = player.goodDistance(otherX, otherY, + player.getX(), player.getY(), 6); + boolean mageDistance = player.goodDistance(otherX, otherY, + player.getX(), player.getY(), 7); + + boolean castingMagic = (player.usingMagic || player.mageFollow + || player.autocasting || player.spellId > 0) + && mageDistance; + boolean playerRanging = player.usingRangeWeapon && rangeWeaponDistance; + boolean playerBowOrCross = player.usingBow && bowDistance; + + if (!player.goodDistance(otherX, otherY, player.getX(), player.getY(), + 25)) { + player.followId = 0; + resetFollow(); + return; + } + player.faceUpdate(player.followId + 32768); + if (!sameSpot) { + if (player.playerIndex > 0 && !player.usingSpecial + && player.inWild()) { + if (player.usingSpecial && (playerRanging || playerBowOrCross)) { + player.stopMovement(); + return; + } + if (castingMagic || playerRanging || playerBowOrCross) { + player.stopMovement(); + return; + } + if (RangeData.usingHally(player) && hallyDistance) { + player.stopMovement(); + return; + } + } + } + if (otherX == player.absX && otherY == player.absY) { + int r = Misc.random(3); + switch (r) { + case 0: + walkTo(0, -1); + break; + case 1: + walkTo(0, 1); + break; + case 2: + walkTo(1, 0); + break; + case 3: + walkTo(-1, 0); + break; + } + } else if (player.isRunning2) { + if (otherY > player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY - 1); + } else if (otherY < player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY + 1); + } else if (otherX > player.getX() && otherY == player.getY()) { + playerWalk(otherX - 1, otherY); + } else if (otherX < player.getX() && otherY == player.getY()) { + playerWalk(otherX + 1, otherY); + } else if (otherX < player.getX() && otherY < player.getY()) { + playerWalk(otherX + 1, otherY + 1); + } else if (otherX > player.getX() && otherY > player.getY()) { + playerWalk(otherX - 1, otherY - 1); + } else if (otherX < player.getX() && otherY > player.getY()) { + playerWalk(otherX + 1, otherY - 1); + } else if (otherX > player.getX() && otherY < player.getY()) { + playerWalk(otherX + 1, otherY - 1); + } + } else { + if (otherY > player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY - 1); + } else if (otherY < player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY + 1); + } else if (otherX > player.getX() && otherY == player.getY()) { + playerWalk(otherX - 1, otherY); + } else if (otherX < player.getX() && otherY == player.getY()) { + playerWalk(otherX + 1, otherY); + } else if (otherX < player.getX() && otherY < player.getY()) { + playerWalk(otherX + 1, otherY + 1); + } else if (otherX > player.getX() && otherY > player.getY()) { + playerWalk(otherX - 1, otherY - 1); + } else if (otherX < player.getX() && otherY > player.getY()) { + playerWalk(otherX + 1, otherY - 1); + } else if (otherX > player.getX() && otherY < player.getY()) { + playerWalk(otherX - 1, otherY + 1); + } + } + player.faceUpdate(player.followId + 32768); + } + + public void followNpc() { + if (NpcHandler.npcs[player.followId] == null + || NpcHandler.npcs[player.followId].isDead) { + resetFollow(); + return; + } + Npc npc = NpcHandler.npcs[player.followId2]; + if (npc.isDead) { + return; + } + + int otherX = NpcHandler.npcs[player.followId2].getX(); + int otherY = NpcHandler.npcs[player.followId2].getY(); + if (!player.goodDistance(otherX, otherY, player.getX(), player.getY(), + 25)) { + player.followId2 = 0; + resetFollow(); + return; + } + player.faceUpdate(player.followId2 + 32768); + if (otherX == player.absX && otherY == player.absY) { + int r = Misc.random(3); + switch (r) { + case 0: + walkTo(0, -1); + break; + case 1: + walkTo(0, 1); + break; + case 2: + walkTo(1, 0); + break; + case 3: + walkTo(-1, 0); + break; + } + } else { + if (otherY > player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY - 1); + } else if (otherY < player.getY() && otherX == player.getX()) { + playerWalk(otherX, otherY + 1); + } else if (otherX > player.getX() && otherY == player.getY()) { + playerWalk(otherX - 1, otherY); + } else if (otherX < player.getX() && otherY == player.getY()) { + playerWalk(otherX + 1, otherY); + } else if (otherX < player.getX() && otherY < player.getY()) { + playerWalk(otherX + 1, otherY + 1); + } else if (otherX > player.getX() && otherY > player.getY()) { + playerWalk(otherX - 1, otherY - 1); + } else if (otherX < player.getX() && otherY > player.getY()) { + playerWalk(otherX + 1, otherY - 1); + } else if (otherX > player.getX() && otherY < player.getY()) { + playerWalk(otherX - 1, otherY + 1); + } + } + player.faceUpdate(player.followId2 + 32768); + } + + public int getRunningMove(int i, int j) { + if (j - i > 2) { + return 2; + } else if (j - i < -2) { + return -2; + } else { + return j - i; + } + } + + public void resetFollow() { + player.followId = 0; + player.followId2 = 0; + player.mageFollow = false; + // c.outStream.createFrame(174); + // c.outStream.writeWord(0); + // c.outStream.writeByte(0); + // c.outStream.writeWord(1); + } + + public void walkTo(int i, int j) { + player.newWalkCmdSteps = 0; + if (++player.newWalkCmdSteps > 50) { + player.newWalkCmdSteps = 0; + } + int k = player.getX() + i; + k -= player.mapRegionX * 8; + player.getNewWalkCmdX()[0] = player.getNewWalkCmdY()[0] = 0; + int l = player.getY() + j; + l -= player.mapRegionY * 8; + + for (int n = 0; n < player.newWalkCmdSteps; n++) { + player.getNewWalkCmdX()[n] += k; + player.getNewWalkCmdY()[n] += l; + } + } + + public void walkTo2(int i, int j) { + if (player.freezeDelay > 0) { + return; + } + player.newWalkCmdSteps = 0; + if (++player.newWalkCmdSteps > 50) { + player.newWalkCmdSteps = 0; + } + int k = player.getX() + i; + k -= player.mapRegionX * 8; + player.getNewWalkCmdX()[0] = player.getNewWalkCmdY()[0] = 0; + int l = player.getY() + j; + l -= player.mapRegionY * 8; + + for (int n = 0; n < player.newWalkCmdSteps; n++) { + player.getNewWalkCmdX()[n] += k; + player.getNewWalkCmdY()[n] += l; + } + } + + public void stopDiagonal(int otherX, int otherY) { + if (player.freezeDelay > 0) { + return; + } + player.newWalkCmdSteps = 1; + int xMove = otherX - player.getX(); + int yMove = 0; + if (xMove == 0) { + yMove = otherY - player.getY(); + /* + * if (!clipHor) { yMove = 0; } else if (!clipVer) { xMove = 0; } + */ + } + + int k = player.getX() + xMove; + k -= player.mapRegionX * 8; + player.getNewWalkCmdX()[0] = player.getNewWalkCmdY()[0] = 0; + int l = player.getY() + yMove; + l -= player.mapRegionY * 8; + + for (int n = 0; n < player.newWalkCmdSteps; n++) { + player.getNewWalkCmdX()[n] += k; + player.getNewWalkCmdY()[n] += l; + } + + } + + public void walkToCheck(int i, int j) { + if (player.freezeDelay > 0) { + return; + } + player.newWalkCmdSteps = 0; + if (++player.newWalkCmdSteps > 50) { + player.newWalkCmdSteps = 0; + } + int k = player.getX() + i; + k -= player.mapRegionX * 8; + player.getNewWalkCmdX()[0] = player.getNewWalkCmdY()[0] = 0; + int l = player.getY() + j; + l -= player.mapRegionY * 8; + + for (int n = 0; n < player.newWalkCmdSteps; n++) { + player.getNewWalkCmdX()[n] += k; + player.getNewWalkCmdY()[n] += l; + } + } + + public int getMove(int place1, int place2) { + if (System.currentTimeMillis() - player.lastSpear < 4000) { + return 0; + } + if (place1 - place2 == 0) { + return 0; + } else if (place1 - place2 < 0) { + return 1; + } else if (place1 - place2 > 0) { + return -1; + } + return 0; + } + + public boolean fullVeracs() { + return player.playerEquipment[player.playerHat] == 4753 + && player.playerEquipment[player.playerChest] == 4757 + && player.playerEquipment[player.playerLegs] == 4759 + && player.playerEquipment[player.playerWeapon] == 4755; + } + + public boolean fullGuthans() { + return player.playerEquipment[player.playerHat] == 4724 + && player.playerEquipment[player.playerChest] == 4728 + && player.playerEquipment[player.playerLegs] == 4730 + && player.playerEquipment[player.playerWeapon] == 4726; + } + + /** + * reseting animation + **/ + public void resetAnimation() { + player.getCombatAssistant().getPlayerAnimIndex(); + player.startAnimation(player.playerStandIndex); + requestUpdates(); + } + + public void requestUpdates() { + player.updateRequired = true; + player.setAppearanceUpdateRequired(true); + player.updateWalkEntities(); + } + + public void sendAutoRetalitate() { + if (player.autoRet == 1) { + sendConfig(172, 0); + } else if (player.autoRet == 0) { + sendConfig(172, 1); + } + } + + public void firstTimeTutorial() { + if (Constants.TUTORIAL_ISLAND && player.tutorialProgress == 0) { + player.getItemAssistant().deleteAllItems(); + player.getPlayerAssistant().hideAllSideBars(); + movePlayer(3094, 3107, 0); + player.getDialogueHandler().sendDialogues(2995, -1); + player.tutorialProgress = 0; + player.isRunning2 = false; + player.autoRet = 0; + //resetStats(); + sendAutoRetalitate(); + LightSources.saveBrightness(player); + } else if (player.tutorialProgress == 0 && !Constants.TUTORIAL_ISLAND) { + player.getPlayerAssistant().sendSidebars(); + player.getItemAssistant(); + player.getItemAssistant() + .sendWeapon( + player.playerEquipment[player.playerWeapon], + ItemAssistant + .getItemName(player.playerEquipment[player.playerWeapon])); + player.getActionSender().sendMessage( + "Welcome to @blu@" + Constants.SERVER_NAME + + "@bla@ - currently in Server Stage v@blu@" + + Constants.TEST_VERSION + "@bla@."); + player.getDialogueHandler().sendDialogues(3115, 2224); + player.isRunning2 = false; + player.autoRet = 0; + sendAutoRetalitate(); + LightSources.saveBrightness(player); + if (!player.hasBankpin) { + player.getActionSender() + .sendMessage( + "You do not, have a bank pin it is highly recommened you get one."); + } + } + } + + public void handleAlt(int id) { + if (!player.getItemAssistant().playerHasItem(id)) { + player.getItemAssistant().addItem(id, 1); + } + } + + public void levelUp(int skill) { + SkillHandler.resetSkills(player); + int totalLevel = getLevelForXP(player.playerXP[0]) + + getLevelForXP(player.playerXP[1]) + + getLevelForXP(player.playerXP[2]) + + getLevelForXP(player.playerXP[3]) + + getLevelForXP(player.playerXP[4]) + + getLevelForXP(player.playerXP[5]) + + getLevelForXP(player.playerXP[6]) + + getLevelForXP(player.playerXP[7]) + + getLevelForXP(player.playerXP[8]) + + getLevelForXP(player.playerXP[9]) + + getLevelForXP(player.playerXP[10]) + + getLevelForXP(player.playerXP[11]) + + getLevelForXP(player.playerXP[12]) + + getLevelForXP(player.playerXP[13]) + + getLevelForXP(player.playerXP[14]) + + getLevelForXP(player.playerXP[15]) + + getLevelForXP(player.playerXP[16]) + + getLevelForXP(player.playerXP[17]) + + getLevelForXP(player.playerXP[18]) + + getLevelForXP(player.playerXP[19]) + + getLevelForXP(player.playerXP[20]); + + sendFrame126("Total Lvl: " + totalLevel, 3984); + switch (skill) { + case 0: + sendFrame126("Congratulations, you just advanced an attack level!", + 6248); + sendFrame126("Your attack level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6249); + player.getActionSender().sendMessage( + "Congratulations, you just advanced an attack level."); + sendChatInterface(6247); + break; + + case 1: + sendFrame126("Congratulations, you just advanced a defence level!", + 6254); + sendFrame126("Your defence level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6255); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a defence level."); + sendChatInterface(6253); + break; + + case 2: + sendFrame126("Congratulations, you just advanced a strength level!", + 6207); + sendFrame126("Your strength level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6208); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a strength level."); + sendChatInterface(6206); + break; + + case 3: + sendFrame126("Congratulations, you just advanced a hitpoints level!", + 6217); + sendFrame126("Your hitpoints level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6218); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a hitpoints level."); + sendChatInterface(6216); + if (player.playerLevel[3] < player.getPlayerAssistant() + .getLevelForXP(player.playerXP[3])) { + player.playerLevel[3] += 1; + } + refreshSkill(3); + break; + + case 4: + sendFrame126("Congratulations, you just advanced a ranged level!", + 5453); + sendFrame126("Your ranged level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6114); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a ranging level."); + sendChatInterface(4443); + break; + + case 5: + sendFrame126("Congratulations, you just advanced a prayer level!", + 6243); + sendFrame126("Your prayer level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6244); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a prayer level."); + sendChatInterface(6242); + break; + + case 6: + sendFrame126("Congratulations, you just advanced a magic level!", + 6212); + sendFrame126("Your magic level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6213); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a magic level."); + sendChatInterface(6211); + break; + + case 7: + sendFrame126("Congratulations, you just advanced a cooking level!", + 6227); + sendFrame126("Your cooking level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6228); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a cooking level."); + sendChatInterface(6226); + break; + + case 8: + sendFrame126( + "Congratulations, you just advanced a woodcutting level!", + 4273); + sendFrame126("Your woodcutting level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4274); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a woodcutting level."); + sendChatInterface(4272); + break; + + case 9: + sendFrame126("Congratulations, you just advanced a fletching level!", + 6232); + sendFrame126("Your fletching level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6233); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a fletching level."); + sendChatInterface(6231); + break; + + case 10: + sendFrame126("Congratulations, you just advanced a fishing level!", + 6259); + sendFrame126("Your fishing level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6260); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a fishing level."); + sendChatInterface(6258); + break; + + case 11: + sendFrame126( + "Congratulations, you just advanced a fire making level!", + 4283); + sendFrame126("Your firemaking level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4284); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a fire making level."); + sendChatInterface(4282); + break; + + case 12: + sendFrame126("Congratulations, you just advanced a crafting level!", + 6264); + sendFrame126("Your crafting level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6265); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a crafting level."); + sendChatInterface(6263); + break; + + case 13: + sendFrame126("Congratulations, you just advanced a smithing level!", + 6222); + sendFrame126("Your smithing level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6223); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a smithing level."); + sendChatInterface(6221); + break; + + case 14: + sendFrame126("Congratulations, you just advanced a mining level!", + 4417); + sendFrame126("Your mining level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4438); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a mining level."); + sendChatInterface(4416); + break; + + case 15: + sendFrame126("Congratulations, you just advanced a herblore level!", + 6238); + sendFrame126("Your herblore level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 6239); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a herblore level."); + sendChatInterface(6237); + break; + + case 16: + sendFrame126("Congratulations, you just advanced a agility level!", + 4278); + sendFrame126("Your agility level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4279); + player.getActionSender().sendMessage( + "Congratulations, you just advanced an agility level."); + sendChatInterface(4277); + break; + + case 17: + sendFrame126("Congratulations, you just advanced a thieving level!", + 4263); + sendFrame126("Your theiving level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4264); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a thieving level."); + sendChatInterface(4261); + break; + + case 18: + sendFrame126("Congratulations, you just advanced a slayer level!", + 12123); + sendFrame126("Your slayer level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 12124); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a slayer level."); + sendChatInterface(12122); + break; + + case 20: + sendFrame126( + "Congratulations, you just advanced a runecrafting level!", + 4268); + sendFrame126("Your runecrafting level is now " + + getLevelForXP(player.playerXP[skill]) + ".", 4269); + player.getActionSender().sendMessage( + "Congratulations, you just advanced a runecrafting level."); + sendChatInterface(4267); + break; + } + player.dialogueAction = 0; + player.nextChat = 0; + } + + public void refreshSkill(int i) { + switch (i) { + case 0: + sendFrame126("" + player.playerLevel[0] + "", 4004); + sendFrame126("" + getLevelForXP(player.playerXP[0]) + "", 4005); + sendFrame126("" + player.playerXP[0] + "", 4044); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[0]) + 1) + + "", 4045); + break; + + case 1: + sendFrame126("" + player.playerLevel[1] + "", 4008); + sendFrame126("" + getLevelForXP(player.playerXP[1]) + "", 4009); + sendFrame126("" + player.playerXP[1] + "", 4056); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[1]) + 1) + + "", 4057); + break; + + case 2: + sendFrame126("" + player.playerLevel[2] + "", 4006); + sendFrame126("" + getLevelForXP(player.playerXP[2]) + "", 4007); + sendFrame126("" + player.playerXP[2] + "", 4050); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[2]) + 1) + + "", 4051); + break; + + case 3: + sendFrame126("" + player.playerLevel[3] + "", 4016); + sendFrame126("" + getLevelForXP(player.playerXP[3]) + "", 4017); + sendFrame126("" + player.playerXP[3] + "", 4080); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[3]) + 1) + + "", 4081); + break; + + case 4: + sendFrame126("" + player.playerLevel[4] + "", 4010); + sendFrame126("" + getLevelForXP(player.playerXP[4]) + "", 4011); + sendFrame126("" + player.playerXP[4] + "", 4062); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[4]) + 1) + + "", 4063); + break; + + case 5: + sendFrame126("" + player.playerLevel[5] + "", 4012); + sendFrame126("" + getLevelForXP(player.playerXP[5]) + "", 4013); + sendFrame126("" + player.playerXP[5] + "", 4068); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[5]) + 1) + + "", 4069); + sendFrame126("" + player.playerLevel[5] + "/" + + getLevelForXP(player.playerXP[5]) + "", 687);// Prayer + // frame + break; + + case 6: + sendFrame126("" + player.playerLevel[6] + "", 4014); + sendFrame126("" + getLevelForXP(player.playerXP[6]) + "", 4015); + sendFrame126("" + player.playerXP[6] + "", 4074); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[6]) + 1) + + "", 4075); + break; + + case 7: + sendFrame126("" + player.playerLevel[7] + "", 4034); + sendFrame126("" + getLevelForXP(player.playerXP[7]) + "", 4035); + sendFrame126("" + player.playerXP[7] + "", 4134); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[7]) + 1) + + "", 4135); + break; + + case 8: + sendFrame126("" + player.playerLevel[8] + "", 4038); + sendFrame126("" + getLevelForXP(player.playerXP[8]) + "", 4039); + sendFrame126("" + player.playerXP[8] + "", 4146); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[8]) + 1) + + "", 4147); + break; + + case 9: + sendFrame126("" + player.playerLevel[9] + "", 4026); + sendFrame126("" + getLevelForXP(player.playerXP[9]) + "", 4027); + sendFrame126("" + player.playerXP[9] + "", 4110); + sendFrame126( + "" + getXPForLevel(getLevelForXP(player.playerXP[9]) + 1) + + "", 4111); + break; + + case 10: + sendFrame126("" + player.playerLevel[10] + "", 4032); + sendFrame126("" + getLevelForXP(player.playerXP[10]) + "", 4033); + sendFrame126("" + player.playerXP[10] + "", 4128); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[10]) + 1) + + "", 4129); + break; + + case 11: + sendFrame126("" + player.playerLevel[11] + "", 4036); + sendFrame126("" + getLevelForXP(player.playerXP[11]) + "", 4037); + sendFrame126("" + player.playerXP[11] + "", 4140); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[11]) + 1) + + "", 4141); + break; + + case 12: + sendFrame126("" + player.playerLevel[12] + "", 4024); + sendFrame126("" + getLevelForXP(player.playerXP[12]) + "", 4025); + sendFrame126("" + player.playerXP[12] + "", 4104); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[12]) + 1) + + "", 4105); + break; + + case 13: + sendFrame126("" + player.playerLevel[13] + "", 4030); + sendFrame126("" + getLevelForXP(player.playerXP[13]) + "", 4031); + sendFrame126("" + player.playerXP[13] + "", 4122); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[13]) + 1) + + "", 4123); + break; + + case 14: + sendFrame126("" + player.playerLevel[14] + "", 4028); + sendFrame126("" + getLevelForXP(player.playerXP[14]) + "", 4029); + sendFrame126("" + player.playerXP[14] + "", 4116); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[14]) + 1) + + "", 4117); + break; + + case 15: + sendFrame126("" + player.playerLevel[15] + "", 4020); + sendFrame126("" + getLevelForXP(player.playerXP[15]) + "", 4021); + sendFrame126("" + player.playerXP[15] + "", 4092); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[15]) + 1) + + "", 4093); + break; + + case 16: + sendFrame126("" + player.playerLevel[16] + "", 4018); + sendFrame126("" + getLevelForXP(player.playerXP[16]) + "", 4019); + sendFrame126("" + player.playerXP[16] + "", 4086); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[16]) + 1) + + "", 4087); + break; + + case 17: + sendFrame126("" + player.playerLevel[17] + "", 4022); + sendFrame126("" + getLevelForXP(player.playerXP[17]) + "", 4023); + sendFrame126("" + player.playerXP[17] + "", 4098); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[17]) + 1) + + "", 4099); + break; + + case 18: + sendFrame126("" + player.playerLevel[18] + "", 12166); + sendFrame126("" + getLevelForXP(player.playerXP[18]) + "", 12167); + sendFrame126("" + player.playerXP[18] + "", 12171); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[18]) + 1) + + "", 12172); + break; + + case 19: + sendFrame126("" + player.playerLevel[19] + "", 13926); + sendFrame126("" + getLevelForXP(player.playerXP[19]) + "", 13927); + sendFrame126("" + player.playerXP[19] + "", 13921); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[19]) + 1) + + "", 13922); + break; + + case 20: + sendFrame126("" + player.playerLevel[20] + "", 4152); + sendFrame126("" + getLevelForXP(player.playerXP[20]) + "", 4153); + sendFrame126("" + player.playerXP[20] + "", 4157); + sendFrame126("" + + getXPForLevel(getLevelForXP(player.playerXP[20]) + 1) + + "", 4158); + break; + } + } + + public int getXPForLevel(int level) { + int points = 0; + int output = 0; + + for (int lvl = 1; lvl <= level; lvl++) { + points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0)); + if (lvl >= level) { + return output; + } + output = (int) Math.floor(points / 4); + } + return 0; + } + + public int getLevelForXP(int exp) { + int points = 0; + int output = 0; + if (exp > 13034430) { + return 99; + } + for (int lvl = 1; lvl <= 99; lvl++) { + points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0)); + output = (int) Math.floor(points / 4); + if (output >= exp) { + return lvl; + } + } + return 0; + } + + public boolean addSkillXP(int amount, int skill) { + if (amount + player.playerXP[skill] < 0 + || player.playerXP[skill] > 200000000) { + if (player.playerXP[skill] > 200000000) { + player.playerXP[skill] = 200000000; + } + return false; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't gain exp, until you confirm you are not a bot."); + player.getActionSender().sendMessage("If you need to relog you can do so."); + return false; + } + if (player.tutorialProgress < 36 && player.playerLevel[skill] == 3 && Constants.TUTORIAL_ISLAND == true) { + return false; + } + amount *= Constants.SERVER_EXP_BONUS; + int oldLevel = getLevelForXP(player.playerXP[skill]); + player.playerXP[skill] += amount; + if (oldLevel < getLevelForXP(player.playerXP[skill])) { + if (player.playerLevel[skill] < player + .getLevelForXP(player.playerXP[skill]) + && skill != 3 + && skill != 5) { + player.playerLevel[skill] = player + .getLevelForXP(player.playerXP[skill]); + } + levelUp(skill); + player.gfx100(199); + requestUpdates(); + } + player.getActionSender().setSkillLevel(skill, + player.playerLevel[skill], player.playerXP[skill]); + refreshSkill(skill); + return true; + } + + public boolean addNormalXpRate(int amount, int skill) { + if (amount + player.playerXP[skill] < 0 || player.playerXP[skill] > 200000000) { + if (player.playerXP[skill] > 200000000) { + player.playerXP[skill] = 200000000; + } + return false; + } + amount *= 1; + int oldLevel = getLevelForXP(player.playerXP[skill]); + player.playerXP[skill] += amount; + if (oldLevel < getLevelForXP(player.playerXP[skill])) { + if (player.playerLevel[skill] < player.getLevelForXP(player.playerXP[skill]) && skill != 3 && skill != 5) { + player.playerLevel[skill] = player.getLevelForXP(player.playerXP[skill]); + } + levelUp(skill); + player.gfx100(199); + requestUpdates(); + } + player.getActionSender().setSkillLevel(skill, + player.playerLevel[skill], player.playerXP[skill]); + refreshSkill(skill); + return true; + } + + public boolean addSkillXP(double amount, int skill) {// normal experience + // rate method + if (amount + player.playerXP[skill] < 0 + || player.playerXP[skill] > 200000000) { + if (player.playerXP[skill] > 200000000) { + player.playerXP[skill] = 200000000; + } + return false; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("You can't gain exp, until you confirm you are not a bot."); + player.getActionSender().sendMessage("If you need to relog you can do so."); + return false; + } + if (player.tutorialProgress < 36 && player.playerLevel[skill] == 3 + && Constants.TUTORIAL_ISLAND == true) { + return false; + } + amount *= Constants.SERVER_EXP_BONUS; + int oldLevel = getLevelForXP(player.playerXP[skill]); + player.playerXP[skill] += amount; + if (oldLevel < getLevelForXP(player.playerXP[skill])) { + if (player.playerLevel[skill] < player + .getLevelForXP(player.playerXP[skill]) + && skill != 3 + && skill != 5) { + player.playerLevel[skill] = player + .getLevelForXP(player.playerXP[skill]); + } + levelUp(skill); + player.gfx100(199); + requestUpdates(); + } + player.getActionSender().setSkillLevel(skill, + player.playerLevel[skill], player.playerXP[skill]); + refreshSkill(skill); + return true; + } + + public boolean addNormalExperienceRate(int amount, int skill) {// used for + // 1x + // experience + // rates + if (amount + player.playerXP[skill] < 0 + || player.playerXP[skill] > 200000000) { + if (player.playerXP[skill] > 200000000) { + player.playerXP[skill] = 200000000; + } + return false; + } + amount *= 1; + int oldLevel = getLevelForXP(player.playerXP[skill]); + player.playerXP[skill] += amount; + if (oldLevel < getLevelForXP(player.playerXP[skill])) { + if (player.playerLevel[skill] < player + .getLevelForXP(player.playerXP[skill]) + && skill != 3 + && skill != 5) { + player.playerLevel[skill] = player + .getLevelForXP(player.playerXP[skill]); + } + levelUp(skill); + player.gfx100(199); + requestUpdates(); + } + player.getActionSender().setSkillLevel(skill, + player.playerLevel[skill], player.playerXP[skill]); + refreshSkill(skill); + return true; + } + + public void resetBarrows() { + player.barrowsNpcs[0][1] = 0; + player.barrowsNpcs[1][1] = 0; + player.barrowsNpcs[2][1] = 0; + player.barrowsNpcs[3][1] = 0; + player.barrowsNpcs[4][1] = 0; + player.barrowsNpcs[5][1] = 0; + player.barrowsKillCount = 0; + player.randomCoffin = Misc.random(3) + 1; + } + + public static int Barrows[] = { 4708, 4710, 4712, 4714, 4716, 4718, 4720, + 4722, 4724, 4726, 4728, 4730, 4732, 4734, 4736, 4738, 4745, 4747, + 4749, 4751, 4753, 4755, 4757, 4759 }; + + public static final int[][] RUNES = { { 560, 1, 1 }, { 565, 1, 2 }, + { 562, 1, 3 }, { 558, 1, 4 } }; + + public static final int[] POTS = { 165, 147, 159 }; + + public int randomBarrows() { + return Barrows[(int) (Math.random() * Barrows.length)]; + } + + public void randomRunes() { + for (int[] element : RUNES) { + int item = element[0]; + int amount = element[1]; + int chance = element[2]; + if (Misc.random(5) == chance) { + player.getItemAssistant().addItem(item, amount); + } + } + } + + public int randomPots() { + return POTS[(int) (Math.random() * POTS.length)]; + } + + public int getNpcId(int id) { + for (int i = 0; i < NpcHandler.maxNPCs; i++) { + if (NpcHandler.npcs[i] != null) { + if (NpcHandler.npcs[i].npcId == id) { + return i; + } + } + } + return -1; + } + + public void removeObject(int x, int y) { + player.getActionSender().object(-1, x, x, 10, 10); + } + + public void objectToRemove(int X, int Y) { + player.getActionSender().object(-1, X, Y, 10, 10); + } + + private void objectToRemove2(int X, int Y) { + player.getActionSender().object(-1, X, Y, -1, 0); + } + + public void removeObjects() { + objectToRemove(2638, 4688); + objectToRemove2(2635, 4693); + objectToRemove2(2634, 4693); + } + + public boolean inPitsWait() { + return player.getX() <= 2404 && player.getX() >= 2394 + && player.getY() <= 5175 && player.getY() >= 5169; + } + + public int antiFire() { + int toReturn = 0; + if (player.antiFirePot) { + toReturn++; + } + if (player.playerEquipment[player.playerShield] == 1540 + || player.playerEquipment[player.playerShield] == 11284 + || player.playerEquipment[player.playerShield] == 11283) { + toReturn++; + } + return toReturn; + } + + public boolean checkForFlags() { + int[][] itemsToCheck = { { 995, 100000000 }, { 35, 5 }, { 667, 5 }, + { 2402, 5 }, { 746, 5 }, { 4151, 150 }, { 565, 100000 }, + { 560, 100000 }, { 555, 300000 } }; + for (int[] element : itemsToCheck) { + if (element[1] < player.getItemAssistant() + .getTotalCount(element[0])) { + return true; + } + } + return false; + } + + public int getWearingAmount() { + int count = 0; + for (int element : player.playerEquipment) { + if (element > 0) { + count++; + } + } + return count; + } + + public void useOperate(int itemId) { + switch (itemId) { + case 11283: + case 11284: + if (player.playerIndex > 0) { + player.getCombatAssistant().handleDfs(); + } else if (player.npcIndex > 0) { + player.getCombatAssistant().handleDfsNPC(); + } + break; + } + } + + public void getSpeared(int otherX, int otherY) { + int x = player.absX - otherX; + int y = player.absY - otherY; + if (x > 0) { + x = 1; + } else if (x < 0) { + x = -1; + } + if (y > 0) { + y = 1; + } else if (y < 0) { + y = -1; + } + moveCheck(x, y); + player.lastSpear = System.currentTimeMillis(); + } + + public void moveCheck(int xMove, int yMove) { + movePlayer(player.absX + xMove, player.absY + yMove, player.heightLevel); + } + + public int findKiller() { + int killer = player.playerId; + int damage = 0; + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] == null) { + continue; + } + if (j == player.playerId) { + continue; + } + if (player.goodDistance(player.absX, player.absY, + PlayerHandler.players[j].absX, + PlayerHandler.players[j].absY, 40) + || player.goodDistance(player.absX, player.absY + 9400, + PlayerHandler.players[j].absX, + PlayerHandler.players[j].absY, 40) + || player.goodDistance(player.absX, player.absY, + PlayerHandler.players[j].absX, + PlayerHandler.players[j].absY + 9400, 40)) { + if (player.damageTaken[j] > damage) { + damage = player.damageTaken[j]; + killer = j; + } + } + } + return killer; + } + + public void appendPoison(int damage) { + if (player.duelStatus == 5 || player.isDead) { + player.poisonDamage = 0; + return; + } + if (System.currentTimeMillis() - player.lastPoisonSip > player.poisonImmune && player.poison == false) { + player.getActionSender().sendMessage("You have been poisoned."); + player.poisonDamage = damage; + player.poison = true; + } + if (player.poisonDamage == 0 && player.isDead == false) { + player.getActionSender().sendMessage("The poison has worn off."); + player.poison = false; + } + } + + public boolean checkForPlayer(int x, int y) { + for (Player p : PlayerHandler.players) { + if (p != null) { + if (p.getX() == x && p.getY() == y) { + return true; + } + } + } + return false; + } + + public void checkPouch(int i) { + if (i < 0) { + return; + } + player.getActionSender().sendMessage( + "This pouch has " + player.pouches[i] + " rune ess in it."); + } + + public void fillPouch(int i) { + if (i < 0) { + return; + } + int toAdd = player.POUCH_SIZE[i] - player.pouches[i]; + if (toAdd > player.getItemAssistant().getItemAmount(1436)) { + toAdd = player.getItemAssistant().getItemAmount(1436); + } + if (toAdd > player.POUCH_SIZE[i] - player.pouches[i]) { + toAdd = player.POUCH_SIZE[i] - player.pouches[i]; + } + if (toAdd > 0) { + player.getItemAssistant().deleteItem(1436, toAdd); + player.pouches[i] += toAdd; + } + } + + public void emptyPouch(int i) { + if (i < 0) { + return; + } + int toAdd = player.pouches[i]; + if (toAdd > player.getItemAssistant().freeSlots()) { + toAdd = player.getItemAssistant().freeSlots(); + } + if (toAdd > 0) { + player.getItemAssistant().addItem(1436, toAdd); + player.pouches[i] -= toAdd; + } + } + + public void fixAllBarrows() { + int totalCost = 0; + int cashAmount = player.getItemAssistant().getItemAmount(995); + for (int j = 0; j < player.playerItems.length; j++) { + boolean breakOut = false; + for (int[] brokenBarrow : player.getItemAssistant().brokenBarrows) { + if (player.playerItems[j] - 1 == brokenBarrow[1]) { + if (totalCost + 80000 > cashAmount) { + breakOut = true; + player.getActionSender().sendMessage( + "You have run out of money."); + break; + } else { + totalCost += 80000; + } + player.playerItems[j] = brokenBarrow[0] + 1; + } + } + if (breakOut) { + break; + } + } + if (totalCost > 0) { + player.getItemAssistant().deleteItem(995, + player.getItemAssistant().getItemSlot(995), totalCost); + } + } + + public void handleWeaponStyle() { + if (player.fightMode == 0) { + player.getPlayerAssistant().sendConfig(43, player.fightMode); + } else if (player.fightMode == 1) { + player.getPlayerAssistant().sendConfig(43, 3); + } else if (player.fightMode == 2) { + player.getPlayerAssistant().sendConfig(43, 1); + } else if (player.fightMode == 3) { + player.getPlayerAssistant().sendConfig(43, 2); + } + } + +} diff --git a/2006Redone Server/src/redone/game/players/PlayerHandler.java b/2006Redone Server/src/redone/game/players/PlayerHandler.java new file mode 100644 index 00000000..39d786d3 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/PlayerHandler.java @@ -0,0 +1,382 @@ +package redone.game.players; + +import java.net.InetSocketAddress; + +import redone.Constants; +import redone.Server; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.npcs.Npc; +import redone.game.npcs.NpcHandler; +import redone.util.Misc; +import redone.util.Stream; + +public class PlayerHandler { + + public static Player players[] = new Player[Constants.MAX_PLAYERS]; + public static int playerCount = 0; + public static String playersCurrentlyOn[] = new String[Constants.MAX_PLAYERS]; + public static boolean updateAnnounced; + public static boolean updateRunning; + public static int updateSeconds; + public static long updateStartTime; + private boolean kickAllPlayers = false; + + static { + for (int i = 0; i < Constants.MAX_PLAYERS; i++) { + players[i] = null; + } + } + + public boolean newPlayerClient(Client client1) { + int slot = -1; + for (int i = 1; i < Constants.MAX_PLAYERS; i++) { + if (players[i] == null || players[i].disconnected) { + slot = i; + break; + } + } + if (slot == -1) { + return false; + } + client1.handler = this; + client1.playerId = slot; + players[slot] = client1; + players[slot].isActive = true; + players[slot].connectedFrom = ((InetSocketAddress) client1.getSession() + .getRemoteAddress()).getAddress().getHostAddress(); + if (Constants.SERVER_DEBUG) { + Misc.println("Player Slot " + slot + " slot 0 " + players[0] + + " Player Hit " + players[slot]); + } + return true; + } + + public static int getPlayerCount() { + return playerCount; + } + + public void updatePlayerNames() { + playerCount = 0; + for (int i = 0; i < Constants.MAX_PLAYERS; i++) { + if (players[i] != null) { + playersCurrentlyOn[i] = players[i].playerName; + playerCount++; + } else { + playersCurrentlyOn[i] = ""; + } + } + } + + public static int getPlayerID(String playerName) { + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (playersCurrentlyOn[i] != null) { + if (playersCurrentlyOn[i].equalsIgnoreCase(playerName)) { + return i; + } + } + } + return -1; + } + + public static boolean isPlayerOn(String playerName) { + // synchronized (PlayerHandler.players) { + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (playersCurrentlyOn[i] != null) { + if (playersCurrentlyOn[i].equalsIgnoreCase(playerName)) { + return true; + } + } + } + return false; + } + + public void process() { + // synchronized (PlayerHandler.players) { + updatePlayerNames(); + if (kickAllPlayers) { + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (players[i] != null) { + players[i].disconnected = true; + } + } + } + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (players[i] == null || !players[i].isActive) { + continue; + } + try { + + Client t = (Client) PlayerHandler.players[i]; + if (players[i].disconnected) { + if (players[i].playerEquipment[t.playerCape] == 4042 + || players[i].playerEquipment[t.playerCape] == 4041) { + CastleWars.deleteGameItems(t); + } + PlayerSave.saveGame(t); + } + + if (players[i].disconnected + && (System.currentTimeMillis() - players[i].logoutDelay > 10000 + || players[i].properLogout || kickAllPlayers)) { + if (players[i].inTrade) { + Client o = (Client) PlayerHandler.players[players[i].tradeWith]; + if (o != null) { + o.getTrading().declineTrade(); + } + } + if(Server.trawler.players.contains(this)) { + Server.trawler.players.remove(this); + } + players[i].lastX = players[i].absX; + players[i].lastY = players[i].absY; + players[i].lastH = players[i].heightLevel; + if (players[i].hasNpc == true) { + t.getSummon().pickUpClean(t, players[i].summonId); + } + if (players[i].duelStatus == 5) { + Client o = (Client) PlayerHandler.players[players[i].duelingWith]; + if (o != null) { + o.getDueling().duelVictory(); + } + } else if (players[i].duelStatus <= 4 + && players[i].duelStatus >= 1) { + Client o = (Client) PlayerHandler.players[players[i].duelingWith]; + if (o != null) { + o.getDueling().declineDuel(); + } + } + Client o = (Client) PlayerHandler.players[i]; + if (PlayerSave.saveGame(o)) { + System.out.println("Game saved for player " + + players[i].playerName); + } else { + System.out.println("Could not save for " + + players[i].playerName); + } + removePlayer(players[i]); + players[i] = null; + continue; + } + + players[i].preProcessing(); + while (players[i].processQueuedPackets()) { + ; + } + players[i].process(); + players[i].postProcessing(); + players[i].getNextPlayerMovement(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (players[i] == null || !players[i].isActive) { + continue; + } + try { + Client t = (Client) PlayerHandler.players[i]; + if (players[i].disconnected) { + if (players[i].playerEquipment[t.playerCape] == 4042 + || players[i].playerEquipment[t.playerCape] == 4041) { + CastleWars.deleteGameItems(t); + } + PlayerSave.saveGame(t); + } + if (players[i].disconnected + && (System.currentTimeMillis() - players[i].logoutDelay > 10000 + || players[i].properLogout || kickAllPlayers)) { + if (players[i].inTrade) { + Client o = (Client) PlayerHandler.players[players[i].tradeWith]; + if (o != null) { + o.getTrading().declineTrade(); + } + } + if(Server.trawler.players.contains(this)) { + Server.trawler.players.remove(this); + } + players[i].lastX = players[i].absX; + players[i].lastY = players[i].absY; + players[i].lastH = players[i].heightLevel; + if (players[i].hasNpc == true) { + t.getSummon().pickUpClean(t, players[i].summonId); + } + if (players[i].duelStatus == 5) { + Client o1 = (Client) PlayerHandler.players[players[i].duelingWith]; + if (o1 != null) { + o1.getDueling().duelVictory(); + } + } else if (players[i].duelStatus <= 4 + && players[i].duelStatus >= 1) { + Client o1 = (Client) PlayerHandler.players[players[i].duelingWith]; + if (o1 != null) { + o1.getDueling().declineDuel(); + } + } + + Client o1 = (Client) PlayerHandler.players[i]; + if (PlayerSave.saveGame(o1)) { + System.out.println("Game saved for player " + + players[i].playerName); + } else { + System.out.println("Could not save for " + + players[i].playerName); + } + removePlayer(players[i]); + players[i] = null; + } else { + if (!players[i].initialized) { + players[i].initialize(); + players[i].initialized = true; + } else { + players[i].update(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + if (updateRunning && !updateAnnounced) { + updateAnnounced = true; + Server.UpdateServer = true; + } + if (updateRunning + && System.currentTimeMillis() - updateStartTime > updateSeconds * 1000) { + kickAllPlayers = true; + } + + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (players[i] == null || !players[i].isActive) { + continue; + } + try { + players[i].clearUpdateFlags(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public void updateNPC(Player plr, Stream str) { + // synchronized(plr) { + updateBlock.currentOffset = 0; + + str.createFrameVarSizeWord(65); + str.initBitAccess(); + + str.writeBits(8, plr.npcListSize); + int size = plr.npcListSize; + plr.npcListSize = 0; + for (int i = 0; i < size; i++) { + if (plr.RebuildNPCList == false + && plr.withinDistance(plr.npcList[i]) == true) { + plr.npcList[i].updateNPCMovement(str); + plr.npcList[i].appendNPCUpdateBlock(updateBlock); + plr.npcList[plr.npcListSize++] = plr.npcList[i]; + } else { + int id = plr.npcList[i].npcId; + plr.npcInListBitmap[id >> 3] &= ~(1 << (id & 7)); + str.writeBits(1, 1); + str.writeBits(2, 3); + } + } + for (Npc i : NpcHandler.npcs) { + if (i != null) { + int id = i.npcId; + if (plr.RebuildNPCList == false + && (plr.npcInListBitmap[id >> 3] & 1 << (id & 7)) != 0) { + } else if (plr.withinDistance(i) == false) { + } else { + plr.addNewNPC(i, str, updateBlock); + } + } + } + + plr.RebuildNPCList = false; + + if (updateBlock.currentOffset > 0) { + str.writeBits(14, 16383); + str.finishBitAccess(); + str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0); + } else { + str.finishBitAccess(); + } + str.endFrameVarSizeWord(); + } + + private final Stream updateBlock = new Stream( + new byte[Constants.BUFFER_SIZE]); + + public void updatePlayer(Player plr, Stream str) { + // synchronized(plr) { + updateBlock.currentOffset = 0; + if (updateRunning && !updateAnnounced) { + str.createFrame(114); + str.writeWordBigEndian(updateSeconds * 50 / 30); + } + plr.updateThisPlayerMovement(str); + boolean saveChatTextUpdate = plr.isChatTextUpdateRequired(); + plr.setChatTextUpdateRequired(false); + plr.appendPlayerUpdateBlock(updateBlock); + plr.setChatTextUpdateRequired(saveChatTextUpdate); + str.writeBits(8, plr.playerListSize); + int size = plr.playerListSize; + if (size > 255) { + size = 255; + } + plr.playerListSize = 0; + for (int i = 0; i < size; i++) { + if (!plr.didTeleport && !plr.playerList[i].didTeleport + && plr.withinDistance(plr.playerList[i])) { + plr.playerList[i].updatePlayerMovement(str); + plr.playerList[i].appendPlayerUpdateBlock(updateBlock); + plr.playerList[plr.playerListSize++] = plr.playerList[i]; + } else { + int id = plr.playerList[i].playerId; + plr.playerInListBitmap[id >> 3] &= ~(1 << (id & 7)); + str.writeBits(1, 1); + str.writeBits(2, 3); + } + } + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (players[i] == null || !players[i].isActive || players[i] == plr) { + continue; + } + int id = players[i].playerId; + if ((plr.playerInListBitmap[id >> 3] & 1 << (id & 7)) != 0) { + continue; + } + if (!plr.withinDistance(players[i])) { + continue; + } + plr.addNewPlayer(players[i], str, updateBlock); + } + if (updateBlock.currentOffset > 0) { + str.writeBits(11, 2047); + str.finishBitAccess(); + str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0); + } else { + str.finishBitAccess(); + } + + str.endFrameVarSizeWord(); + } + + private void removePlayer(Player plr) { + if (plr.privateChat != 2) { + for (int i = 1; i < PlayerHandler.players.length; i++) { + if (players[i] == null || players[i].isActive == false) { + continue; + } + Client o = (Client) PlayerHandler.players[i]; + if (o != null) { + o.getPlayerAssistant().updatePM(plr.playerId, 0); + } + } + } + plr.destruct(); + } + +} diff --git a/2006Redone Server/src/redone/game/players/PlayerSave.java b/2006Redone Server/src/redone/game/players/PlayerSave.java new file mode 100644 index 00000000..0ce69657 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/PlayerSave.java @@ -0,0 +1,914 @@ +package redone.game.players; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +import redone.util.Misc; + +public class PlayerSave { + + /** + * Loading + **/ + public static int loadGame(Client player, String playerName, + String playerPass) { + String line = ""; + String token = ""; + String token2 = ""; + String[] token3 = new String[3]; + boolean EndOfFile = false; + int ReadMode = 0; + BufferedReader characterfile = null; + boolean File1 = false; + + try { + characterfile = new BufferedReader(new FileReader( + "./Data/characters/" + playerName + ".txt")); + File1 = true; + } catch (FileNotFoundException fileex1) { + } + + if (File1) { + // new File ("./characters/"+playerName+".txt"); + } else { + Misc.println(playerName + ": character file not found."); + player.newPlayer = false; + return 0; + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception) { + Misc.println(playerName + ": error loading file."); + return 3; + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token3 = token2.split("\t"); + switch (ReadMode) { + case 1: + if (token.equals("character-password")) { + if (playerPass.equalsIgnoreCase(token2)) { + playerPass = token2; + } else { + return 3; + } + } + break; + case 2: + if (token.equals("character-height")) { + player.heightLevel = Integer.parseInt(token2); + } else if (token.equals("character-posx")) { + player.teleportToX = Integer.parseInt(token2) <= 0 ? player.lastX : Integer.parseInt(token2); + } else if (token.equals("character-posy")) { + player.teleportToY = Integer.parseInt(token2) <= 0 ? player.lastY : Integer.parseInt(token2); + } else if (token.equals("character-rights")) { + player.playerRights = Integer.parseInt(token2); + } else if (token.equals("blackMarks")) { + player.blackMarks = Integer.parseInt(token2); + } else if (token.equals("lostCannon")) { + player.lostCannon = Boolean.parseBoolean(token2); + } else if (token.equals("myBalls")) { + player.getCannon().myBalls = Integer.parseInt(token2); + } else if (token.equals("cannonX")) { + player.cannonX = Integer.parseInt(token2); + } else if (token.equals("cannonY")) { + player.cannonY = Integer.parseInt(token2); + } else if (token.equals("removedTask0")) { + player.removedTasks[0] = Integer.parseInt(token2); + } else if (token.equals("removedTask1")) { + player.removedTasks[1] = Integer.parseInt(token2); + } else if (token.equals("removedTask2")) { + player.removedTasks[2] = Integer.parseInt(token2); + } else if (token.equals("removedTask3")) { + player.removedTasks[3] = Integer.parseInt(token2); + } else if (token.equals("SlayerMaster")) { + player.SlayerMaster = Integer.parseInt(token2); + } else if (token.equals("slayerTask")) { + player.slayerTask = Integer.parseInt(token2); + } else if (token.equals("slayerPoints")) { + player.slayerPoints = Integer.parseInt(token2); + } else if (token.equals("taskAmount")) { + player.taskAmount = Integer.parseInt(token2); + } else if (token.equals("cw-games")) { + player.cwGames = Integer.parseInt(token2); + } else if (token.equals("crystal-bow-shots")) { + player.crystalBowArrowCount = Integer.parseInt(token2); + } else if (token.equals("randomActions")) { + player.randomActions = Integer.parseInt(token2); + } else if (token.equals("skull-timer")) { + player.skullTimer = Integer.parseInt(token2); + } else if (token.equals("recoilHits")) { + player.recoilHits = Integer.parseInt(token2); + } else if (token.equals("brightness")) { + player.brightness = Integer.parseInt(token2); + } else if (token.equals("spiritTree")) { + player.spiritTree = Boolean.parseBoolean(token2); + } else if (token.equals("npcCanAttack")) { + player.npcCanAttack = Boolean.parseBoolean(token2); + } else if (token.equals("rope")) { + player.rope = Boolean.parseBoolean(token2); + } else if (token.equals("rope2")) { + player.rope2 = Boolean.parseBoolean(token2); + } else if (token.equals("recievedMask")) { + player.recievedMask = Boolean.parseBoolean(token2); + } else if (token.equals("recievedReward")) { + player.recievedReward = Boolean.parseBoolean(token2); + } else if (token.equals("splitChat")) { + player.splitChat = Boolean.parseBoolean(token2); + } else if (token.equals("hasPaid")) { + player.hasPaid = Boolean.parseBoolean(token2); + } else if (token.equals("poison")) { + player.poison = Boolean.parseBoolean(token2); + } else if (token.equals("closeTutorialInterface")) { + player.closeTutorialInterface = Boolean + .parseBoolean(token2); + } else if (token.equals("canWalkTutorial")) { + player.canWalkTutorial = Boolean.parseBoolean(token2); + } else if (token.equals("needsNewTask")) { + player.needsNewTask = Boolean.parseBoolean(token2); + } else if (token.equals("isBotting")) { + player.isBotting = Boolean.parseBoolean(token2); + } else if (token.equals("musicOn")) { + player.musicOn = Boolean.parseBoolean(token2); + } else if (token.equals("barrowsNpcs")) { + player.barrowsNpcs[Integer.parseInt(token3[0])][1] = Integer.parseInt(token3[1]); + } else if (token.equals("summonId")) { + player.summonId = Integer.parseInt(token2); + } else if (token.equals("has-npc")) { + player.hasNpc = Boolean.parseBoolean(token2); + } else if (token.equals("barrowsKillCount")) { + player.barrowsKillCount = Integer.parseInt(token2); + } else if (token.equals("luthas")) { + player.luthas = Boolean.parseBoolean(token2); + } else if (token.equals("village")) { + player.village = Boolean.parseBoolean(token2); + } else if (token.equals("lastThieve")) { + player.lastThieve = Long.parseLong(token2); + } else if (token.equals("homeTele")) { + player.homeTele = Long.parseLong(token2); + } else if (token.equals("tutorial-progress")) { + player.tutorialProgress = Integer.parseInt(token2); + } else if (token.equals("strongHold")) { + player.strongHold = Boolean.parseBoolean(token2); + } else if (token.equals("filter")) { + player.filter = Boolean.parseBoolean(token2); + } else if (token.equals("ratdied2")) { + player.ratdied2 = Boolean.parseBoolean(token2); + } else if (token.equals("questStages")) { + player.questStages = Integer.parseInt(token2); + } else if (token.equals("cookAss")) { + player.cookAss = Integer.parseInt(token2); + } else if (token.equals("bananas")) { + player.bananas = Integer.parseInt(token2); + } else if (token.equals("sheepShear")) { + player.sheepShear = Integer.parseInt(token2); + } else if (token.equals("runeMist")) { + player.runeMist = Integer.parseInt(token2); + } else if (token.equals("dragonSlayerQuestStage")) { + player.dragonSlayerQuestStage = Integer.parseInt(token2); + } else if (token.equals("doricQuest")) { + player.doricQuest = Integer.parseInt(token2); + } else if (token.equals("pirateTreasure")) { + player.pirateTreasure = Integer.parseInt(token2); + } else if (token.equals("romeo-juliet")) { + player.romeojuliet = Integer.parseInt(token2); + } else if (token.equals("vampSlayer")) { + player.vampSlayer = Integer.parseInt(token2); + } else if (token.equals("gertCat")) { + player.gertCat = Integer.parseInt(token2); + } else if (token.equals("witchspot")) { + player.witchspot = Integer.parseInt(token2); + } else if (token.equals("restGhost")) { + player.restGhost = Integer.parseInt(token2); + } else if (token.equals("impsC")) { + player.impsC = Integer.parseInt(token2); + } else if (token.equals("knightS")) { + player.knightS = Integer.parseInt(token2); + } else if (token.equals("lastX")) { + player.lastX = Integer.parseInt(token2); + } else if (token.equals("lastY")) { + player.lastY = Integer.parseInt(token2); + } else if (token.equals("lastH")) { + player.lastH = Integer.parseInt(token2); + } else if (token.equals("hasStarter")) { + player.hasStarter = Boolean.parseBoolean(token2); + } else if (token.equals("thankedForDonation")) { + player.thankedForDonation = Integer.parseInt(token2); + } else if (token.equals("membership")) { + player.membership = Boolean.parseBoolean(token2); + } else if (token.equals("canSpeak")) { + player.canSpeak = Boolean.parseBoolean(token2); + } else if (token.equals("questPoints")) { + player.questPoints = Integer.parseInt(token2); + } else if (token.equals("magic-book")) { + player.playerMagicBook = Integer.parseInt(token2); + } else if (token.equals("special-amount")) { + player.specAmount = Double.parseDouble(token2); + } else if (token.equals("selected-coffin")) { + player.randomCoffin = Integer.parseInt(token2); + } else if (token.equals("isRunning")) { + player.isRunning2 = Boolean.parseBoolean(token2); + } else if (token.equals("character-energy")) { + player.playerEnergy = Integer.parseInt(token2); + } else if (token.equals("teleblock-length")) { + player.teleBlockDelay = System.currentTimeMillis(); + player.teleBlockLength = Integer.parseInt(token2); + } else if (token.equals("lastYell")) { + player.lastYell = Long.parseLong(token2); + } else if (token.equals("pc-points")) { + player.pcPoints = Integer.parseInt(token2); + } else if (token.equals("magePoints")) { + player.magePoints = Integer.parseInt(token2); + } else if (token.equals("autoRet")) { + player.autoRet = Integer.parseInt(token2); + } else if (token.equals("flagged")) { + player.accountFlagged = Boolean.parseBoolean(token2); + } else if (token.equals("lastLoginDate")) { + player.lastLoginDate = Integer.parseInt(token2); + } else if (token.equals("hasBankpin")) { + player.hasBankpin = Boolean.parseBoolean(token2); + } else if (token.equals("setPin")) { + player.setPin = Boolean.parseBoolean(token2); + } else if (token.equals("pinRegisteredDeleteDay")) { + player.pinDeleteDateRequested = Integer.parseInt(token2); + } else if (token.equals("requestPinDelete")) { + player.requestPinDelete = Boolean.parseBoolean(token2); + } else if (token.equals("bankPin1")) { + player.bankPin1 = Integer.parseInt(token2); + } else if (token.equals("bankPin2")) { + player.bankPin2 = Integer.parseInt(token2); + } else if (token.equals("bankPin3")) { + player.bankPin3 = Integer.parseInt(token2); + } else if (token.equals("bankPin4")) { + player.bankPin4 = Integer.parseInt(token2); + } else if (token.equals("wave")) { + player.waveId = Integer.parseInt(token2); + } else if (token.equals("ptjob")) { + player.ptjob = Integer.parseInt(token2); + } else if (token.equals("creationAddress")) { + player.creationAddress = token2; + } else if (token.equals("music")) { + for (int j = 0; j < token3.length; j++) { + player.getPlayList().unlocked[j] = Boolean.parseBoolean(token3[j]); + } + } else if (token.equals("void")) { + for (int j = 0; j < token3.length; j++) { + player.voidStatus[j] = Integer.parseInt(token3[j]); + } + } else if (token.equals("gwkc")) { + player.killCount = Integer.parseInt(token2); + } else if (token.equals("fightMode")) { + player.fightMode = Integer.parseInt(token2); + } + break; + case 3: + if (token.equals("character-equip")) { + player.playerEquipment[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]); + player.playerEquipmentN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]); + } + break; + case 4: + if (token.equals("character-look")) { + player.playerAppearance[Integer.parseInt(token3[0])] = Integer .parseInt(token3[1]); + } + break; + case 5: + if (token.equals("character-skill")) { + player.playerLevel[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]); + player.playerXP[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]); + } + break; + case 6: + if (token.equals("character-item")) { + player.playerItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]); + player.playerItemsN[Integer.parseInt(token3[0])] = Integer .parseInt(token3[2]); + } + break; + case 7: + if (token.equals("character-bank")) { + player.bankItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]); + player.bankItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]); + } + break; + case 8: + if (token.equals("character-friend")) { + player.friends[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]); + } + break; + case 9: + if (token.equals("character-ignore")) { + player.ignores[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]); + } + break; + } + } else { + if (line.equals("[ACCOUNT]")) { + ReadMode = 1; + } else if (line.equals("[CHARACTER]")) { + ReadMode = 2; + } else if (line.equals("[EQUIPMENT]")) { + ReadMode = 3; + } else if (line.equals("[LOOK]")) { + ReadMode = 4; + } else if (line.equals("[SKILLS]")) { + ReadMode = 5; + } else if (line.equals("[ITEMS]")) { + ReadMode = 6; + } else if (line.equals("[BANK]")) { + ReadMode = 7; + } else if (line.equals("[FRIENDS]")) { + ReadMode = 8; + } else if (line.equals("[IGNORES]")) { + ReadMode = 9; + } else if (line.equals("[EOF]")) { + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return 1; + } + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return 13; + } + + /** + * Saving + **/ + public static boolean saveGame(Client player) { + if (!player.saveFile || player.newPlayer || !player.saveCharacter) { + // System.out.println("first"); + return false; + } + if (player.playerName == null + || PlayerHandler.players[player.playerId] == null) { + // System.out.println("second"); + return false; + } + player.playerName = player.playerName2; + int tbTime = (int) (player.teleBlockDelay - System.currentTimeMillis() + player.teleBlockLength); + if (tbTime > 300000 || tbTime < 0) { + tbTime = 0; + } + + BufferedWriter characterfile = null; + try { + characterfile = new BufferedWriter(new FileWriter( + "./Data/characters/" + player.playerName + ".txt")); + + /* ACCOUNT */ + characterfile.write("[ACCOUNT]", 0, 9); + characterfile.newLine(); + characterfile.write("character-username = ", 0, 21); + characterfile.write(player.playerName, 0, + player.playerName.length()); + characterfile.newLine(); + if (player.playerRights == 0) { + characterfile.write("character-password = ", 0, 21); + characterfile.write(player.playerPass, 0, + player.playerPass.length()); + characterfile.newLine(); + } + characterfile.newLine(); + + /* CHARACTER */ + characterfile.write("[CHARACTER]", 0, 11); + characterfile.newLine(); + characterfile.write("character-height = ", 0, 19); + characterfile.write(Integer.toString(player.heightLevel), 0, + Integer.toString(player.heightLevel).length()); + characterfile.newLine(); + characterfile.write("character-posx = ", 0, 17); + characterfile.write(Integer.toString(player.absX), 0, Integer + .toString(player.absX).length()); + characterfile.newLine(); + characterfile.write("character-posy = ", 0, 17); + characterfile.write(Integer.toString(player.absY), 0, Integer + .toString(player.absY).length()); + characterfile.newLine(); + characterfile.write("character-rights = ", 0, 19); + characterfile.write(Integer.toString(player.playerRights), 0,Integer.toString(player.playerRights).length()); + characterfile.newLine(); + characterfile.write("hasStarter = ", 0, 13); + characterfile.write(Boolean.toString(player.hasStarter), 0, Boolean + .toString(player.hasStarter).length()); + characterfile.newLine(); + characterfile.write("bankPin1 = ", 0, 11); + characterfile.write(Integer.toString(player.bankPin1), 0, Integer + .toString(player.bankPin1).length()); + characterfile.newLine(); + characterfile.write("bankPin2 = ", 0, 11); + characterfile.write(Integer.toString(player.bankPin2), 0, Integer + .toString(player.bankPin2).length()); + characterfile.newLine(); + characterfile.write("bankPin3 = ", 0, 11); + characterfile.write(Integer.toString(player.bankPin3), 0, Integer + .toString(player.bankPin3).length()); + characterfile.newLine(); + characterfile.write("bankPin4 = ", 0, 11); + characterfile.write(Integer.toString(player.bankPin4), 0, Integer + .toString(player.bankPin4).length()); + characterfile.newLine(); + characterfile.write("hasBankpin = ", 0, 13); + characterfile.write(Boolean.toString(player.hasBankpin), 0, Boolean + .toString(player.hasBankpin).length()); + characterfile.newLine(); + characterfile.write("pinRegisteredDeleteDay = ", 0, 25); + characterfile.write( + Integer.toString(player.pinDeleteDateRequested), 0, Integer + .toString(player.pinDeleteDateRequested).length()); + characterfile.newLine(); + characterfile.write("requestPinDelete = ", 0, 19); + characterfile.write(Boolean.toString(player.requestPinDelete), 0, + Boolean.toString(player.requestPinDelete).length()); + characterfile.newLine(); + characterfile.write("lastLoginDate = ", 0, 16); + characterfile.write(Integer.toString(player.lastLoginDate), 0, + Integer.toString(player.lastLoginDate).length()); + characterfile.newLine(); + characterfile.write("setPin = ", 0, 9); + characterfile.write(Boolean.toString(player.setPin), 0, Boolean + .toString(player.setPin).length()); + characterfile.newLine(); + characterfile.write("hasPaid = ", 0, 10); + characterfile.write(Boolean.toString(player.hasPaid), 0, Boolean + .toString(player.hasPaid).length()); + characterfile.newLine(); + characterfile.write("lostCannon = ", 0, 13); + characterfile.write(Boolean.toString(player.lostCannon), 0, Boolean.toString(player.lostCannon).length()); + characterfile.newLine(); + characterfile.write("cannonX = ", 0, 10); + characterfile.write(Integer.toString(player.cannonX), 0, Integer.toString(player.cannonY).length()); + characterfile.newLine(); + characterfile.write("cannonY = ", 0, 10); + characterfile.write(Integer.toString(player.cannonY), 0, Integer.toString(player.cannonY).length()); + characterfile.newLine(); + characterfile.write("myBalls = ", 0, 10); + characterfile.write(Integer.toString(player.getCannon().myBalls), 0, Integer.toString(player.getCannon().myBalls).length()); + characterfile.newLine(); + characterfile.write("poison = ", 0, 9); + characterfile.write(Boolean.toString(player.poison), 0, Boolean + .toString(player.poison).length()); + characterfile.newLine(); + characterfile.write("spiritTree = ", 0, 13); + characterfile.write(Boolean.toString(player.spiritTree), 0, Boolean + .toString(player.spiritTree).length()); + characterfile.newLine(); + characterfile.write("npcCanAttack = ", 0, 15); + characterfile.write(Boolean.toString(player.npcCanAttack), 0, Boolean + .toString(player.npcCanAttack).length()); + characterfile.newLine(); + characterfile.write("rope = ", 0, 7); + characterfile.write(Boolean.toString(player.rope), 0, Boolean + .toString(player.rope).length()); + characterfile.newLine(); + characterfile.write("rope2 = ", 0, 8); + characterfile.write(Boolean.toString(player.rope2), 0, Boolean + .toString(player.rope2).length()); + characterfile.newLine(); + characterfile.write("recievedMask = ", 0, 15); + characterfile.write(Boolean.toString(player.recievedMask), 0, Boolean + .toString(player.recievedMask).length()); + characterfile.newLine(); + characterfile.write("recievedReward = ", 0, 17); + characterfile.write(Boolean.toString(player.recievedReward), 0, Boolean + .toString(player.recievedReward).length()); + characterfile.newLine(); + characterfile.write("isBotting = ", 0, 12); + characterfile.write(Boolean.toString(player.isBotting), 0, + Boolean.toString(player.isBotting).length()); + characterfile.newLine(); + characterfile.write("brightness = ", 0, 13); + characterfile.write(Integer.toString(player.brightness), 0, Integer + .toString(player.brightness).length()); + characterfile.newLine(); + characterfile.write("closeTutorialInterface = ", 0, 25); + characterfile.write( + Boolean.toString(player.closeTutorialInterface), 0, Boolean + .toString(player.closeTutorialInterface).length()); + characterfile.newLine(); + characterfile.write("canWalkTutorial = ", 0, 18); + characterfile.write(Boolean.toString(player.canWalkTutorial), 0, + Boolean.toString(player.canWalkTutorial).length()); + characterfile.newLine(); + characterfile.write("village = ", 0, 10); + characterfile.write(Boolean.toString(player.village), 0, Boolean + .toString(player.village).length()); + characterfile.newLine(); + characterfile.write("lastThieve = ", 0, 13); + characterfile.write(Long.toString(player.lastThieve), 0, Long.toString(player.lastThieve).length()); + characterfile.newLine(); + characterfile.write("homeTele = ", 0, 11); + characterfile.write(Long.toString(player.homeTele), 0, Long.toString(player.homeTele).length()); + characterfile.newLine(); + characterfile.write("strongHold = ", 0, 13); + characterfile.write(Boolean.toString(player.strongHold), 0, Boolean + .toString(player.strongHold).length()); + characterfile.newLine(); + characterfile.write("character-energy = ", 0, 19); + characterfile.write(Integer.toString(player.playerEnergy), 0, + Integer.toString(player.playerEnergy).length()); + characterfile.newLine(); + characterfile.write("crystal-bow-shots = ", 0, 20); + characterfile.write(Integer.toString(player.crystalBowArrowCount), + 0, Integer.toString(player.crystalBowArrowCount).length()); + characterfile.newLine(); + characterfile.write("splitChat = ", 0, 12); + characterfile.write(Boolean.toString(player.splitChat), 0, Boolean + .toString(player.splitChat).length()); + characterfile.newLine(); + characterfile.write("canSpeak = ", 0, 11); + characterfile.write(Boolean.toString(player.canSpeak), 0, Boolean + .toString(player.canSpeak).length()); + characterfile.newLine(); + for (int b = 0; b < player.barrowsNpcs.length; b++) { + characterfile.write("barrowsNpcs = ", 0, 14); + characterfile.write(Integer.toString(b), 0, Integer.toString(b).length()); + characterfile.write(" ", 0, 1); + characterfile.write(player.barrowsNpcs[b][1] <= 1 ? Integer.toString(0) : Integer.toString(player.barrowsNpcs[b][1]), 0, Integer.toString(player.barrowsNpcs[b][1]).length()); + characterfile.newLine(); + } + characterfile.write("questStages = ", 0, 14); + characterfile.write(Integer.toString(player.questStages), 0, + Integer.toString(player.questStages).length()); + characterfile.newLine(); + characterfile.write("SlayerMaster = ", 0, 15); + characterfile.write(Integer.toString(player.SlayerMaster), 0, + Integer.toString(player.SlayerMaster).length()); + characterfile.newLine(); + characterfile.write("music = ", 0, 8); + String music = ""; + for (boolean element : player.getPlayList().unlocked) { + music += element + "\t"; + } + characterfile.write(music); + characterfile.newLine(); + characterfile.write("randomActions = ", 0, 16); + characterfile.write(Integer.toString(player.randomActions), 0, + Integer.toString(player.randomActions).length()); + characterfile.newLine(); + characterfile.write("blackMarks = ", 0, 13); + characterfile.write(Integer.toString(player.blackMarks), 0, Integer + .toString(player.blackMarks).length()); + characterfile.newLine(); + characterfile.write("tutorial-progress = ", 0, 20); + characterfile.write(Integer.toString(player.tutorialProgress), 0, + Integer.toString(player.tutorialProgress).length()); + characterfile.newLine(); + characterfile.write("skull-timer = ", 0, 14); + characterfile.write(Integer.toString(player.skullTimer), 0, Integer + .toString(player.skullTimer).length()); + characterfile.newLine(); + characterfile.write("recoilHits = ", 0, 13); + characterfile.write(Integer.toString(player.recoilHits), 0, Integer + .toString(player.recoilHits).length()); + characterfile.newLine(); + characterfile.write("lastX = ", 0, 8); + characterfile.write(Integer.toString(player.lastX), 0, Integer + .toString(player.lastX).length()); + characterfile.newLine(); + characterfile.write("lastY = ", 0, 8); + characterfile.write(Integer.toString(player.lastY), 0, Integer + .toString(player.lastY).length()); + characterfile.newLine(); + characterfile.write("lastH = ", 0, 8); + characterfile.write(Integer.toString(player.lastH), 0, Integer + .toString(player.lastH).length()); + characterfile.newLine(); + for (int i = 0; i < player.removedTasks.length; i++) { + characterfile.write("removedTask" + i + " = ", 0, 15); + characterfile.write(Integer.toString(player.removedTasks[i]), + 0, Integer.toString(player.removedTasks[i]).length()); + characterfile.newLine(); + } + characterfile.write("creationAddress = ", 0, 18); + characterfile.write(player.creationAddress, 0, + player.creationAddress.length()); + characterfile.newLine(); + characterfile.write("has-npc = ", 0, 10); + characterfile.write(Boolean.toString(player.hasNpc), 0, Boolean + .toString(player.hasNpc).length()); + characterfile.newLine(); + characterfile.write("summonId = ", 0, 11); + characterfile.write(Integer.toString(player.summonId), 0, Integer + .toString(player.summonId).length()); + characterfile.newLine(); + characterfile.write("thankedForDonation = ", 0, 21); + characterfile.write(Integer.toString(player.thankedForDonation), 0, + Integer.toString(player.thankedForDonation).length()); + characterfile.newLine(); + characterfile.write("membership = ", 0, 13); + characterfile.write(Boolean.toString(player.membership), 0, Boolean + .toString(player.membership).length()); + characterfile.newLine(); + characterfile.write("questPoints = ", 0, 14); + characterfile.write(Integer.toString(player.questPoints), 0, + Integer.toString(player.questPoints).length()); + characterfile.newLine(); + characterfile.write("bananas = ", 0, 10); + characterfile.write(Integer.toString(player.bananas), 0, Integer + .toString(player.bananas).length()); + characterfile.newLine(); + characterfile.write("magic-book = ", 0, 13); + characterfile.write(Integer.toString(player.playerMagicBook), 0, + Integer.toString(player.playerMagicBook).length()); + characterfile.newLine(); + characterfile.write("special-amount = ", 0, 17); + characterfile.write(Double.toString(player.specAmount), 0, Double + .toString(player.specAmount).length()); + characterfile.newLine(); + characterfile.write("musicOn = ", 0, 10); + characterfile.write(Boolean.toString(player.musicOn), 0, Boolean + .toString(player.musicOn).length()); + characterfile.newLine(); + characterfile.write("needsNewTask = ", 0, 15); + characterfile.write(Boolean.toString(player.needsNewTask), 0, + Boolean.toString(player.needsNewTask).length()); + characterfile.newLine(); + characterfile.write("luthas = ", 0, 9); + characterfile.write(Boolean.toString(player.luthas), 0, Boolean + .toString(player.luthas).length()); + characterfile.newLine(); + characterfile.write("selected-coffin = ", 0, 18); + characterfile.write(Integer.toString(player.randomCoffin), 0, + Integer.toString(player.randomCoffin).length()); + characterfile.newLine(); + characterfile.write("runeMist = ", 0, 11); + characterfile.write(Integer.toString(player.runeMist), 0, Integer + .toString(player.runeMist).length()); + characterfile.newLine(); + characterfile.write("cookAss = ", 0, 10); + characterfile.write(Integer.toString(player.cookAss), 0, Integer + .toString(player.cookAss).length()); + characterfile.newLine(); + characterfile.write("pirateTreasure = ", 0, 17); + characterfile.write(Integer.toString(player.pirateTreasure), 0, + Integer.toString(player.pirateTreasure).length()); + characterfile.newLine(); + characterfile.write("ptjob = ", 0, 8); + characterfile.write(Integer.toString(player.ptjob), 0, Integer + .toString(player.ptjob).length()); + characterfile.newLine(); + characterfile.write("doricQuest = ", 0, 13); + characterfile.write(Integer.toString(player.doricQuest), 0, Integer + .toString(player.doricQuest).length()); + characterfile.newLine(); + characterfile.write("dragonSlayerQuestStage = ", 0, 25); + characterfile.write( + Integer.toString(player.dragonSlayerQuestStage), 0, Integer + .toString(player.dragonSlayerQuestStage).length()); + characterfile.newLine(); + characterfile.write("impsC = ", 0, 8); + characterfile.write(Integer.toString(player.impsC), 0, Integer + .toString(player.impsC).length()); + characterfile.newLine(); + characterfile.write("knightS = ", 0, 10); + characterfile.write(Integer.toString(player.knightS), 0, Integer.toString(player.knightS).length()); + characterfile.newLine(); + characterfile.write("sheepShear = ", 0, 13); + characterfile.write(Integer.toString(player.sheepShear), 0, Integer + .toString(player.sheepShear).length()); + characterfile.newLine(); + characterfile.write("romeo-juliet = ", 0, 15); + characterfile.write(Integer.toString(player.romeojuliet), 0, + Integer.toString(player.romeojuliet).length()); + characterfile.newLine(); + characterfile.write("gertCat = ", 0, 10); + characterfile.write(Integer.toString(player.gertCat), 0, Integer + .toString(player.gertCat).length()); + characterfile.newLine(); + characterfile.write("cw-games = ", 0, 11); + characterfile.write(Integer.toString(player.cwGames), 0, Integer + .toString(player.cwGames).length()); + characterfile.newLine(); + characterfile.write("witchspot = ", 0, 12); + characterfile.write(Integer.toString(player.witchspot), 0, Integer + .toString(player.witchspot).length()); + characterfile.newLine(); + characterfile.write("restGhost = ", 0, 12); + characterfile.write(Integer.toString(player.restGhost), 0, Integer + .toString(player.restGhost).length()); + characterfile.newLine(); + characterfile.write("vampSlayer = ", 0, 13); + characterfile.write(Integer.toString(player.vampSlayer), 0, Integer + .toString(player.vampSlayer).length()); + characterfile.newLine(); + characterfile.write("RatDied2 = ", 0, 11); + characterfile.write(Boolean.toString(player.ratdied2), 0, Boolean + .toString(player.ratdied2).length()); + characterfile.newLine(); + characterfile.write("teleblock-length = ", 0, 19); + characterfile.write(Integer.toString(tbTime), 0, + Integer.toString(tbTime).length()); + characterfile.newLine(); + characterfile.write("pc-points = ", 0, 12); + characterfile.write(Integer.toString(player.pcPoints), 0, Integer + .toString(player.pcPoints).length()); + characterfile.newLine(); + characterfile.write("lastYell = ", 0, 11); + characterfile.write(Long.toString(player.lastYell), 0, Long.toString(player.lastYell).length()); + characterfile.newLine(); + characterfile.write("slayerTask = ", 0, 13); + characterfile.write(Integer.toString(player.slayerTask), 0, Integer + .toString(player.slayerTask).length()); + characterfile.newLine(); + characterfile.write("taskAmount = ", 0, 13); + characterfile.write(Integer.toString(player.taskAmount), 0, Integer + .toString(player.taskAmount).length()); + characterfile.newLine(); + characterfile.write("magePoints = ", 0, 13); + characterfile.write(Integer.toString(player.magePoints), 0, Integer + .toString(player.magePoints).length()); + characterfile.newLine(); + characterfile.write("autoRet = ", 0, 10); + characterfile.write(Integer.toString(player.autoRet), 0, Integer + .toString(player.autoRet).length()); + characterfile.newLine(); + characterfile.write("barrowsKillCount = ", 0, 19); + characterfile.write(Integer.toString(player.barrowsKillCount), 0, + Integer.toString(player.barrowsKillCount).length()); + characterfile.newLine(); + characterfile.write("slayerPoints = ", 0, 15); + characterfile.write(Integer.toString(player.slayerPoints), 0, + Integer.toString(player.slayerPoints).length()); + characterfile.newLine(); + characterfile.write("flagged = ", 0, 10); + characterfile.write(Boolean.toString(player.accountFlagged), 0, + Boolean.toString(player.accountFlagged).length()); + characterfile.newLine(); + characterfile.write("wave = ", 0, 7); + characterfile.write(Integer.toString(player.waveId), 0, Integer + .toString(player.waveId).length()); + characterfile.newLine(); + characterfile.write("gwkc = ", 0, 7); + characterfile.write(Integer.toString(player.killCount), 0, Integer + .toString(player.killCount).length()); + characterfile.newLine(); + characterfile.write("isRunning = ", 0, 12); + characterfile.write(Boolean.toString(player.isRunning2), 0, Boolean + .toString(player.isRunning2).length()); + characterfile.newLine(); + characterfile.write("fightMode = ", 0, 12); + characterfile.write(Integer.toString(player.fightMode), 0, Integer + .toString(player.fightMode).length()); + characterfile.newLine(); + characterfile.write("void = ", 0, 7); + String toWrite = player.voidStatus[0] + "\t" + player.voidStatus[1] + + "\t" + player.voidStatus[2] + "\t" + player.voidStatus[3] + + "\t" + player.voidStatus[4]; + characterfile.write(toWrite); + characterfile.newLine(); + characterfile.newLine(); + + /* EQUIPMENT */ + characterfile.write("[EQUIPMENT]", 0, 11); + characterfile.newLine(); + for (int i = 0; i < player.playerEquipment.length; i++) { + characterfile.write("character-equip = ", 0, 18); + characterfile.write(Integer.toString(i), 0, Integer.toString(i) + .length()); + characterfile.write(" ", 0, 1); + characterfile.write( + Integer.toString(player.playerEquipment[i]), 0, Integer + .toString(player.playerEquipment[i]).length()); + characterfile.write(" ", 0, 1); + characterfile.write( + Integer.toString(player.playerEquipmentN[i]), 0, + Integer.toString(player.playerEquipmentN[i]).length()); + characterfile.write(" ", 0, 1); + characterfile.newLine(); + } + characterfile.newLine(); + + /* LOOK */ + characterfile.write("[LOOK]", 0, 6); + characterfile.newLine(); + for (int i = 0; i < player.playerAppearance.length; i++) { + characterfile.write("character-look = ", 0, 17); + characterfile.write(Integer.toString(i), 0, Integer.toString(i) + .length()); + characterfile.write(" ", 0, 1); + characterfile.write( + Integer.toString(player.playerAppearance[i]), 0, + Integer.toString(player.playerAppearance[i]).length()); + characterfile.newLine(); + } + characterfile.newLine(); + + /* SKILLS */ + characterfile.write("[SKILLS]", 0, 8); + characterfile.newLine(); + for (int i = 0; i < player.playerLevel.length; i++) { + characterfile.write("character-skill = ", 0, 18); + characterfile.write(Integer.toString(i), 0, Integer.toString(i) + .length()); + characterfile.write(" ", 0, 1); + characterfile.write(Integer.toString(player.playerLevel[i]), 0, + Integer.toString(player.playerLevel[i]).length()); + characterfile.write(" ", 0, 1); + characterfile.write(Integer.toString(player.playerXP[i]), 0, + Integer.toString(player.playerXP[i]).length()); + characterfile.newLine(); + } + characterfile.newLine(); + + /* ITEMS */ + characterfile.write("[ITEMS]", 0, 7); + characterfile.newLine(); + for (int i = 0; i < player.playerItems.length; i++) { + if (player.playerItems[i] > 0) { + characterfile.write("character-item = ", 0, 17); + characterfile.write(Integer.toString(i), 0, Integer + .toString(i).length()); + characterfile.write(" ", 0, 1); + characterfile.write( + Integer.toString(player.playerItems[i]), 0, Integer + .toString(player.playerItems[i]).length()); + characterfile.write(" ", 0, 1); + characterfile.write( + Integer.toString(player.playerItemsN[i]), 0, + Integer.toString(player.playerItemsN[i]).length()); + characterfile.newLine(); + } + } + characterfile.newLine(); + + /* BANK */ + characterfile.write("[BANK]", 0, 6); + characterfile.newLine(); + for (int i = 0; i < player.bankItems.length; i++) { + if (player.bankItems[i] > 0) { + characterfile.write("character-bank = ", 0, 17); + characterfile.write(Integer.toString(i), 0, Integer + .toString(i).length()); + characterfile.write(" ", 0, 1); + characterfile.write(Integer.toString(player.bankItems[i]), + 0, Integer.toString(player.bankItems[i]).length()); + characterfile.write(" ", 0, 1); + characterfile.write(Integer.toString(player.bankItemsN[i]), + 0, Integer.toString(player.bankItemsN[i]).length()); + characterfile.newLine(); + } + } + characterfile.newLine(); + + /* FRIENDS */ + characterfile.write("[FRIENDS]", 0, 9); + characterfile.newLine(); + for (int i = 0; i < player.friends.length; i++) { + if (player.friends[i] > 0) { + characterfile.write("character-friend = ", 0, 19); + characterfile.write(Integer.toString(i), 0, Integer + .toString(i).length()); + characterfile.write(" ", 0, 1); + characterfile.write("" + player.friends[i]); + characterfile.newLine(); + } + } + characterfile.newLine(); + + characterfile.write("[IGNORES]", 0, 9); + characterfile.newLine(); + for (int i = 0; i < player.ignores.length; i++) { + if (player.ignores[i] > 0) { + characterfile.write("character-ignore = ", 0, 19); + characterfile.write(Integer.toString(i), 0, Integer.toString(i).length()); + characterfile.write(" ", 0, 1); + characterfile.write(Long.toString(player.ignores[i]), 0, Long.toString(player.ignores[i]).length()); + characterfile.newLine(); + } + } + characterfile.newLine(); + + /* EOF */ + characterfile.write("[EOF]", 0, 5); + characterfile.newLine(); + characterfile.newLine(); + characterfile.close(); + } catch (IOException ioexception) { + Misc.println(player.playerName + ": error writing file."); + return false; + } + return true; + } + +} diff --git a/2006Redone Server/src/redone/game/players/Position.java b/2006Redone Server/src/redone/game/players/Position.java new file mode 100644 index 00000000..83b50fd1 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/Position.java @@ -0,0 +1,37 @@ +package redone.game.players; + +/** + * Position + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class Position { + + public static boolean checkPosition(Client client, int x, int y, int h) { + return client.absX == x && client.absY == y && client.heightLevel == h; + } + + public static boolean checkPlayerX(Client client, int x, int h) { + return client.absX == x && client.heightLevel == h; + } + + public static boolean checkPlayerY(Client client, int y, int h) { + return client.absY == y && client.heightLevel == h; + } + + public static boolean checkPlayerH(Client client, int h) { + return client.heightLevel == h; + } + + public static boolean checkObject(Client client, int x, int y, int h) { + return client.objectX == x && client.objectY == y && client.heightLevel == h; + } + + public static boolean checkObjectX(Client client, int x, int h) { + return client.objectX == x && client.heightLevel == h; + } + + public static boolean checkObjectY(Client client, int y, int h) { + return client.objectY == y && client.heightLevel == h; + } +} diff --git a/2006Redone Server/src/redone/game/players/Trading.java b/2006Redone Server/src/redone/game/players/Trading.java new file mode 100644 index 00000000..3031ba52 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/Trading.java @@ -0,0 +1,546 @@ +package redone.game.players; + +import java.util.concurrent.CopyOnWriteArrayList; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.items.GameItem; +import redone.game.items.Item; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.RareProtection; +import redone.util.GameLogger; +import redone.util.Misc; + +public class Trading { + + private final Client player; + + public Trading(Client Client) { + player = Client; + } + + /** + * Trading + **/ + + public CopyOnWriteArrayList offeredItems = new CopyOnWriteArrayList(); + + public void requestTrade(int id) { + try { + Client o = (Client) PlayerHandler.players[id]; + if (id == player.playerId) { + return; + } + player.tradeWith = id; + if (player.isBotting) { + player.getActionSender().sendMessage("You can't trade items, until you confirm you aren't botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + /*if (c.connectedFrom.equals(o.connectedFrom)) { + c.getActionSender().sendMessage("You cannot trade your own IP."); + return; + }*/ + if (!CastleWars.deleteCastleWarsItems(player, id)) { + return; + } + if (!player.inTrade && o.tradeRequested && o.tradeWith == player.playerId && player.playerIsBusy() == false && o.playerIsBusy() == false) { + player.getTrading().openTrade(); + o.getTrading().openTrade(); + } else if (!player.inTrade && player.playerIsBusy() == false && o.playerIsBusy() == false) { + + player.tradeRequested = true; + player.getActionSender().sendMessage("Sending trade request..."); + o.getActionSender() + .sendMessage(player.playerName + ":tradereq:"); + } else if (player.playerIsBusy() == false && o.playerIsBusy() == true) { + player.getActionSender().sendMessage("Other player is busy at the moment."); + } + } catch (Exception e) { + Misc.println("Error requesting trade."); + } + } + + public void openTrade() { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + + if (o == null) { + return; + } + player.inTrade = true; + player.tradeStatus = 1; + player.tradeRequested = false; + player.getItemAssistant().resetItems(3322); + resetTItems(3415); + resetOTItems(3416); + String out = o.playerName; + + if (o.playerRights == 1) { + out = "@cr1@" + out; + } else if (o.playerRights == 2) { + out = "@cr2@" + out; + } + player.getPlayerAssistant().sendFrame126( + "Trading with: " + o.playerName + " who has @gre@" + + o.getItemAssistant().freeSlots() + " free slots", + 3417); + player.getPlayerAssistant().sendFrame126("", 3431); + player.getPlayerAssistant().sendFrame126( + "Are you sure you want to make this trade?", 3535); + player.getPlayerAssistant().sendFrame248(3323, 3321); + } + + public void resetTItems(int WriteFrame) { + synchronized (player) { + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(WriteFrame); + int len = offeredItems.toArray().length; + int current = 0; + player.getOutStream().writeWord(len); + for (GameItem item : offeredItems) { + if (item.amount > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2(item.amount); + } else { + player.getOutStream().writeByte(item.amount); + } + player.getOutStream().writeWordBigEndianA(item.id + 1); + current++; + } + if (current < 27) { + for (int i = current; i < 28; i++) { + player.getOutStream().writeByte(1); + player.getOutStream().writeWordBigEndianA(-1); + } + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public boolean fromTrade(int itemID, int fromSlot, int amount) { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return false; + } + try { + if (!player.inTrade) { + declineTrade(); + return false; + } + player.tradeConfirmed = false; + o.tradeConfirmed = false; + if (!Item.itemStackable[itemID]) { + for (int a = 0; a < amount; a++) { + for (GameItem item : offeredItems) { + if (item.id == itemID) { + if (!item.stackable) { + offeredItems.remove(item); + player.getItemAssistant().addItem(itemID, 1); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + + player.playerName + + " who has @gre@" + + player.getItemAssistant() + .freeSlots() + + " free slots", 3417); + } else { + if (item.amount > amount) { + item.amount -= amount; + player.getItemAssistant() + .addItem(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + + player.playerName + + " who has @gre@" + + player.getItemAssistant() + .freeSlots() + + " free slots", 3417); + } else { + amount = item.amount; + offeredItems.remove(item); + player.getItemAssistant() + .addItem(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + + player.playerName + + " who has @gre@" + + player.getItemAssistant() + .freeSlots() + + " free slots", 3417); + } + } + break; + } + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + player.tradeConfirmed = false; + o.tradeConfirmed = false; + player.getItemAssistant().resetItems(3322); + resetTItems(3415); + o.getTrading().resetOTItems(3416); + player.getPlayerAssistant().sendFrame126("", 3431); + o.getPlayerAssistant().sendFrame126("", 3431); + } + } + } + for (GameItem item : offeredItems) { + if (item.id == itemID) { + if (!item.stackable) { + } else { + if (item.amount > amount) { + item.amount -= amount; + player.getItemAssistant().addItem(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + } else { + amount = item.amount; + offeredItems.remove(item); + player.getItemAssistant().addItem(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + } + } + break; + } + } + + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + " free slots", + 3417); + player.tradeConfirmed = false; + o.tradeConfirmed = false; + player.getItemAssistant().resetItems(3322); + resetTItems(3415); + o.getTrading().resetOTItems(3416); + player.getPlayerAssistant().sendFrame126("", 3431); + o.getPlayerAssistant().sendFrame126("", 3431); + } catch (Exception e) { + } + return true; + } + + public boolean tradeItem(int itemID, int fromSlot, int amount) { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return false; + } + if (!(player.playerItems[fromSlot] == itemID + 1 && player.playerItemsN[fromSlot] >= amount)) { + player.getActionSender().sendMessage("You don't have that amount!"); + return false; + } + + if (amount >= 1000000000) { + player.getActionSender().sendMessage("You can't possibly have that much of that item!"); + player.getItemAssistant().deleteItem(itemID, fromSlot, amount); + return false; + } + + for (int i : Constants.ITEM_TRADEABLE) { + if (i == itemID && player.playerRights < 3) { + player.getActionSender().sendMessage( + "You can't trade this item."); + return false; + } + } + if (!RareProtection.doOtherDupe(player, itemID)) { + return false; + } + // /if (!((c.playerItems[fromSlot] == itemID + 1) && + // (c.playerItemsN[fromSlot] >= amount))) { + // c.getPacketDispatcher().sendMessage("You don't have that amount!"); + // return false; + // } + player.tradeConfirmed = false; + o.tradeConfirmed = false; + if (!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) { + for (int a = 0; a < amount && a < 28; a++) { + if (player.getItemAssistant().playerHasItem(itemID, 1)) { + offeredItems.add(new GameItem(itemID, 1)); + player.getItemAssistant().deleteItem(itemID, + player.getItemAssistant().getItemSlot(itemID), 1); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + } + } + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + " free slots", + 3417); + player.getItemAssistant().resetItems(3322); + resetTItems(3415); + o.getTrading().resetOTItems(3416); + player.getPlayerAssistant().sendFrame126("", 3431); + o.getPlayerAssistant().sendFrame126("", 3431); + } + if (player.getItemAssistant().getItemCount(itemID) < amount) { + amount = player.getItemAssistant().getItemCount(itemID); + if (amount == 0) { + return false; + } + } + if (!player.inTrade) { + declineTrade(); + return false; + } + + if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) { + boolean inTrade = false; + for (GameItem item : offeredItems) { + if (item.id == itemID) { + inTrade = true; + item.amount += amount; + player.getItemAssistant().deleteItem2(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + break; + } + } + + if (!inTrade) { + offeredItems.add(new GameItem(itemID, amount)); + player.getItemAssistant().deleteItem2(itemID, amount); + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + + " free slots", 3417); + } + } + o.getPlayerAssistant().sendFrame126( + "Trading with: " + player.playerName + " who has @gre@" + + player.getItemAssistant().freeSlots() + " free slots", + 3417); + player.getItemAssistant().resetItems(3322); + resetTItems(3415); + o.getTrading().resetOTItems(3416); + player.getPlayerAssistant().sendFrame126("", 3431); + o.getPlayerAssistant().sendFrame126("", 3431); + return true; + } + + public void resetTrade() { + offeredItems.clear(); + player.inTrade = false; + player.tradeWith = 0; + player.tradeConfirmed = false; + player.tradeConfirmed2 = false; + player.acceptedTrade = false; + player.getPlayerAssistant().removeAllWindows(); + player.tradeResetNeeded = false; + player.getPlayerAssistant().sendFrame126( + "Are you sure you want to make this trade?", 3535); + } + + public void declineTrade() { + player.tradeStatus = 0; + declineTrade(true); + } + + public void declineTrade(boolean tellOther) { + player.getPlayerAssistant().removeAllWindows(); + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return; + } + + if (tellOther) { + o.getTrading().declineTrade(false); + o.getTrading().player.getPlayerAssistant().removeAllWindows(); + } + + for (GameItem item : offeredItems) { + if (item.amount < 1) { + continue; + } + if (item.stackable) { + player.getItemAssistant().addItem(item.id, item.amount); + } else { + for (int i = 0; i < item.amount; i++) { + player.getItemAssistant().addItem(item.id, 1); + } + } + } + player.tradeConfirmed = false; + player.tradeConfirmed2 = false; + offeredItems.clear(); + player.inTrade = false; + player.tradeWith = 0; + } + + public void resetOTItems(int WriteFrame) { + synchronized (player) { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return; + } + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(WriteFrame); + int len = o.getTrading().offeredItems.toArray().length; + int current = 0; + player.getOutStream().writeWord(len); + for (GameItem item : o.getTrading().offeredItems) { + if (item.amount > 254) { + player.getOutStream().writeByte(255); // item's stack count. if + // over 254, write byte + // 255 + player.getOutStream().writeDWord_v2(item.amount); + } else { + player.getOutStream().writeByte(item.amount); + } + player.getOutStream().writeWordBigEndianA(item.id + 1); // item id + current++; + } + if (current < 27) { + for (int i = current; i < 28; i++) { + player.getOutStream().writeByte(1); + player.getOutStream().writeWordBigEndianA(-1); + } + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public void confirmScreen() { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return; + } + if(!player.inTrade) { + declineTrade(); + return; + } + player.getItemAssistant().resetItems(3214); + String SendTrade = "Absolutely nothing!"; + String SendAmount = ""; + int Count = 0; + for (GameItem item : offeredItems) { + if (item.id > 0) { + if (item.amount >= 1000 && item.amount < 1000000) { + SendAmount = "@cya@" + item.amount / 1000 + "K @whi@(" + + Misc.format(item.amount) + ")"; + } else if (item.amount >= 1000000) { + SendAmount = "@gre@" + item.amount / 1000000 + + " million @whi@(" + Misc.format(item.amount) + + ")"; + } else { + SendAmount = "" + Misc.format(item.amount); + } + + if (Count == 0) { + SendTrade = ItemAssistant.getItemName(item.id); + } else { + SendTrade = SendTrade + "\\n" + + ItemAssistant.getItemName(item.id); + } + + if (item.stackable) { + SendTrade = SendTrade + " x " + SendAmount; + } + Count++; + } + } + + player.getPlayerAssistant().sendFrame126(SendTrade, 3557); + SendTrade = "Absolutely nothing!"; + SendAmount = ""; + Count = 0; + + for (GameItem item : o.getTrading().offeredItems) { + if (item.id > 0) { + if (item.amount >= 1000 && item.amount < 1000000) { + SendAmount = "@cya@" + item.amount / 1000 + "K @whi@(" + + Misc.format(item.amount) + ")"; + } else if (item.amount >= 1000000) { + SendAmount = "@gre@" + item.amount / 1000000 + + " million @whi@(" + Misc.format(item.amount) + + ")"; + } else { + SendAmount = "" + Misc.format(item.amount); + } + + if (Count == 0) { + SendTrade = ItemAssistant.getItemName(item.id); + } else { + SendTrade = SendTrade + "\\n" + + ItemAssistant.getItemName(item.id); + } + if (item.stackable) { + SendTrade = SendTrade + " x " + SendAmount; + } + Count++; + } + } + player.getPlayerAssistant().sendFrame126(SendTrade, 3558); + // TODO: find out what 197 does eee 3213 + player.getPlayerAssistant().sendFrame248(3443, 197); + } + + public void giveItems() { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o == null) { + return; + } + try { + for (GameItem item : o.getTrading().offeredItems) { + String itemName = ItemAssistant.getItemName(item.id); + if (item.id > 0) { + player.getItemAssistant().addItem(item.id, item.amount); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(o.playerName, "tradesgave", o.playerName + " traded " + player.playerName + " and gave " + item.amount + " " + itemName + ""); + } + } + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "tradesrecieved", player.playerName + " was traded by " + o.playerName + " and recieved " + item.amount + " " + itemName + ""); + } + } + player.getPlayerAssistant().removeAllWindows(); + player.tradeResetNeeded = true; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.inTrade && player.tradeResetNeeded) { + Client o = (Client) PlayerHandler.players[player.tradeWith]; + if (o != null) { + if (o.tradeResetNeeded) { + player.getTrading().resetTrade(); + o.getTrading().resetTrade(); + container.stop(); + } else { + container.stop(); + } + } else { + container.stop(); + } + } else { + container.stop(); + } + } + + @Override + public void stop() { + player.tradeResetNeeded = false; + } + }, 1); + } catch (Exception e) { + } + } + +} diff --git a/2006Redone Server/src/redone/game/players/antimacro/AntiBotting.java b/2006Redone Server/src/redone/game/players/antimacro/AntiBotting.java new file mode 100644 index 00000000..2be51d92 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/antimacro/AntiBotting.java @@ -0,0 +1,29 @@ +package redone.game.players.antimacro; + +import redone.game.players.Client; +import redone.util.Misc; + +/** + * Anti bot + * @author Andrew + */ + +public class AntiBotting { + + public static void botCheckInterface(Client client) { + int x = Misc.random(190); + int y = Misc.random(190); + + client.getActionSender().setInterfaceOffset(x, y, 6015); + client.getActionSender().setInterfaceOffset(x, y, 6016); + client.getActionSender().setInterfaceOffset(x, y, 6017); + client.getActionSender().setInterfaceOffset(x, y, 6018); + client.getActionSender().setInterfaceOffset(x, y, 6019); + client.getActionSender().setInterfaceOffset(x-18, y, 6020); + client.getPlayerAssistant().sendFrame126("I'm not a bot!", 6020); + client.getPlayerAssistant().showInterface(6014); + client.isBotting = true; + client.getActionSender().sendMessage("@red@Are you a bot?@bla@"); + } + +} diff --git a/2006Redone Server/src/redone/game/players/antimacro/AntiSpam.java b/2006Redone Server/src/redone/game/players/antimacro/AntiSpam.java new file mode 100644 index 00000000..95f09751 --- /dev/null +++ b/2006Redone Server/src/redone/game/players/antimacro/AntiSpam.java @@ -0,0 +1,37 @@ +package redone.game.players.antimacro; + +import redone.game.players.Client; + +/** + * AntiSpam + * @author Andrew (I'm A Boss on Rune-Server and Mr Extremez on Mopar & Runelocus) + */ + +public class AntiSpam { + + private final static String[] BLOCKED_WORDS = { + "(dot)", ".com", "tk", ".org", ".net", ".info", ".cam", ".c0m", ". net", "(,)com", + ".inf0", ".0rg", "(.)", ".biz", ".co.uk", ". com", ". info", ". c0m", ",com", + ". biz", ". tk", ". 0rg", ". cam", ". inf0", "c'om", "c'0m", ". org", "dupe", + "http", "no-ip", "tradereq", "duelreq", "www", "vww", "c' om", "c' 0m", "w-w-w", + "w'ww", "w'w'w", "w 'ww", "w' w' w", "ww' w", "wvv", "ww", "wwv", "vvv", "vwv", + "w)w)w", "?com", "/com", "'com", "(com)", "(w)(w)(w)", "bot", "sythe", "abusewith.us", + "osrs", "2007rs", "runerebels", "06prime", "2006prime", "arios498", "ariosrsps", "coom" + }; + + public static boolean blockedWords(Client player, String word, boolean chat) { + for (int i = 0; i < BLOCKED_WORDS.length; i++) { + if (player.getPlayerAssistant().isPlayer()) { + if (word.contains(BLOCKED_WORDS[i]) || word.equalsIgnoreCase(player.playerPass)) { + player.getActionSender().sendMessage("You can't say that word!"); + if (chat) { + player.setChatTextUpdateRequired(false); + } + return false; + } + } + } + return true; + } + +} diff --git a/2006Redone Server/src/redone/game/shops/ShopAssistant.java b/2006Redone Server/src/redone/game/shops/ShopAssistant.java new file mode 100644 index 00000000..b42d0fdd --- /dev/null +++ b/2006Redone Server/src/redone/game/shops/ShopAssistant.java @@ -0,0 +1,598 @@ +package redone.game.shops; + +import redone.Constants; +import redone.game.items.Item; +import redone.game.items.ItemAssistant; +import redone.game.items.ItemDefinitions; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.util.GameLogger; + + +/** + * Many Fixes/Things Added + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class ShopAssistant { + + private final Client player; + + public ShopAssistant(Client client) { + player = client; + } + + public static final int RANGE_SHOP = 111, PEST_SHOP = 175, CASTLE_SHOP = 112; + + public boolean shopSellsItem(int itemID) { + for (int i = 0; i < ShopHandler.ShopItems.length; i++) { + if (itemID == ShopHandler.ShopItems[player.myShopId][i] - 1) { + return true; + } + } + return false; + } + + /** + * Shops + **/ + + public void openShop(int ShopID) { + player.getActionSender().sendSound(1465, 100, 0); + player.getItemAssistant().resetItems(3823); + resetShop(ShopID); + player.isShopping = true; + player.myShopId = ShopID; + player.getPlayerAssistant().sendFrame248(3824, 3822); + player.getPlayerAssistant().sendFrame126(ShopHandler.ShopName[ShopID], 3901); + } + + public void updatePlayerShop() { + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (PlayerHandler.players[i] != null) { + if (PlayerHandler.players[i].isShopping == true + && PlayerHandler.players[i].myShopId == player.myShopId + && i != player.playerId) { + PlayerHandler.players[i].updateShop = true; + } + } + } + } + + public void updateshop(int i) { + resetShop(i); + } + + public void resetShop(int ShopID) { + synchronized (player) { + int TotalItems = 0; + for (int i = 0; i < ShopHandler.MaxShopItems; i++) { + if (ShopHandler.ShopItems[ShopID][i] > 0) { + TotalItems++; + } + } + if (TotalItems > ShopHandler.MaxShopItems) { + TotalItems = ShopHandler.MaxShopItems; + } + player.getOutStream().createFrameVarSizeWord(53); + player.getOutStream().writeWord(3900); + player.getOutStream().writeWord(TotalItems); + int TotalCount = 0; + for (int i = 0; i < ShopHandler.ShopItems.length; i++) { + if (ShopHandler.ShopItems[ShopID][i] > 0 + || i <= ShopHandler.ShopItemsStandard[ShopID]) { + if (ShopHandler.ShopItemsN[ShopID][i] > 254) { + player.getOutStream().writeByte(255); + player.getOutStream().writeDWord_v2( + ShopHandler.ShopItemsN[ShopID][i]); + } else { + player.getOutStream().writeByte( + ShopHandler.ShopItemsN[ShopID][i]); + } + if (ShopHandler.ShopItems[ShopID][i] > Constants.ITEM_LIMIT + || ShopHandler.ShopItems[ShopID][i] < 0) { + ShopHandler.ShopItems[ShopID][i] = Constants.ITEM_LIMIT; + } + player.getOutStream().writeWordBigEndianA( + ShopHandler.ShopItems[ShopID][i]); + TotalCount++; + } + if (TotalCount > TotalItems) { + break; + } + } + player.getOutStream().endFrameVarSizeWord(); + player.flushOutStream(); + } + } + + public double getItemShopValue(int ItemID, int Type, int fromSlot) { + double ShopValue = 1; + double TotPrice = 0; + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + if (ItemDefinitions.getDef()[i] != null) { + ShopValue = (int) ItemDefinitions.getDef()[ItemID].highAlch/3 *5; + //ShopValue = (int) ItemDefinitions.getDef()[ItemID].shopValue; + } + } + + TotPrice = ShopValue; + + if (ShopHandler.ShopBModifier[player.myShopId] == 1) { + TotPrice *= 1; + TotPrice *= 1; + if (Type == 1) { + TotPrice *= 1; + } + } else if (Type == 1) { + TotPrice *= 1; + } + return TotPrice; + } + + public int getItemShopValue(int itemId) { + return (int) ItemDefinitions.getDef()[itemId].highAlch/3 *5; + } + + + /** + * buy item from shop (Shop Price) + **/ + + public void buyFromShopPrice(int removeId, int removeSlot) { + int ShopValue = (int) Math.floor(getItemShopValue(removeId, 0, removeSlot)); + int SpecialValue = getTokkulValue(removeId); + String ShopAdd = ""; + if (player.myShopId == 138 || player.myShopId == 139 || player.myShopId == 58) { + player.getActionSender().sendMessage( + ItemAssistant.getItemName(removeId) + ": currently costs " + SpecialValue + " tokkul."); + return; + } + if (player.myShopId == PEST_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId)+": currently costs " + getPestItemValue(removeId) + " pest control points."); + return; + } + if (player.myShopId == CASTLE_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId)+": currently costs " + getCastleItemValue(removeId) + " castle wars tickets."); + return; + } + if (player.myShopId == RANGE_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId)+": currently costs " + getRGItemValue(removeId) + " archery tickets."); + return; + } + if (ShopValue >= 1000 && ShopValue < 1000000) { + ShopAdd = " (" + ShopValue / 1000 + "K)"; + } else if (ShopValue >= 1000000) { + ShopAdd = " (" + ShopValue / 1000000 + " million)"; + } + player.getActionSender().sendMessage( + ItemAssistant.getItemName(removeId) + ": currently costs " + + ShopValue + " coins" + ShopAdd); + } + + public int getCastleItemValue(int id) { + switch (id) { + /*Red Items*/ + case 4071: + return 4; + case 4069: + return 8; + case 4070: + case 4072: + return 6; + case 4068: + return 5; + /*Silver/Blue Items*/ + case 4506: + return 40; + case 4504: + return 80; + case 4505: + case 4507: + return 60; + case 4503: + return 50; + /*Gold/Blue Items*/ + case 4511: + return 400; + case 4509: + return 800; + case 4510: + case 4512: + return 600; + case 4508: + return 500; + /*Capes & Hoods*/ + case 4513: + case 4514: + case 4515: + case 4516: + return 10; + } + return 0; + } + + + public int getPestItemValue(int id) { + switch (id) { + } + return 0; + } + + public int getRGItemValue(int id) { + switch (id) { + case 47: + return 4; + case 1133: + return 51; + case 1135: + return 2400; + case 829: + return 15; + case 1169: + return 100; + case 892: + return 40; + } + return 0; + } + + + public int getTokkulValue(int id) { + switch (id) { + case 438: + case 436: + return 4; + case 453: + return 25; + case 1623: + return 37; + case 1621: + return 75; + case 6571: + return 300000; + case 554: + case 555: + case 556: + case 557: + return 6; + case 558: + case 559: + return 4; + case 562: + return 135; + case 560: + return 270; + case 6522: + return 375; + case 6523: + return 60000; + case 6524: + return 67500; + case 6525: + return 37500; + case 6526: + return 52500; + case 6527: + return 45000; + case 6528: + return 75000; + case 6568: + return 90000; + } + return 0; + } + + /** + * Sell item to shop (Shop Price) + **/ + public void sellToShopPrice(int removeId, int removeSlot) { + for (int i : Constants.ITEM_SELLABLE) { + if (i == removeId) { + player.getActionSender().sendMessage("You can't sell " + ItemAssistant.getItemName(removeId).toLowerCase() + "."); + return; + } + } + boolean IsIn = false; + if (ShopHandler.ShopSModifier[player.myShopId] > 1) { + for (int j = 0; j <= ShopHandler.ShopItemsStandard[player.myShopId]; j++) { + if (removeId == (ShopHandler.ShopItems[player.myShopId][j] - 1)) { + IsIn = true; + break; + } + } + } else { + IsIn = true; + } + if (IsIn == false) { + player.getActionSender().sendMessage("You can't sell " + ItemAssistant.getItemName(removeId).toLowerCase() + " to this store."); + } else { + int ShopValue = (int) Math.floor(getItemShopValue(removeId, 1, removeSlot) *.85); + String ShopAdd = ""; + if (ShopValue >= 1000 && ShopValue < 1000000) { + ShopAdd = " (" + (ShopValue / 1000) + "K)"; + } else if (ShopValue >= 1000000) { + ShopAdd = " (" + (ShopValue / 1000000) + " million)"; + } + if (player.myShopId != RANGE_SHOP && player.myShopId != PEST_SHOP && player.myShopId != CASTLE_SHOP && player.myShopId != 138 && player.myShopId != 58 && player.myShopId != 139) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId) + ": shop will buy for " + ShopValue + " coins." + ShopAdd); + } else if (player.myShopId == RANGE_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId) + ": shop will buy for " + getRGItemValue(removeId) + " archery tickets." + ShopAdd); + } else if (player.myShopId == PEST_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId) + ": shop will buy for " + getPestItemValue(removeId) + " pest control points." + ShopAdd); + } else if (player.myShopId == CASTLE_SHOP) { + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId) + ": shop will buy for " + getCastleItemValue(removeId) + " castle war tickets." + ShopAdd); + } + player.getActionSender().sendMessage(ItemAssistant.getItemName(removeId) + ": shop will buy for " + ShopValue + " coins." + ShopAdd); + } + } + + public boolean sellItem(int itemID, int fromSlot, int amount) { + for (int i : Constants.ITEM_SELLABLE) { + if (i == itemID) { + player.getItemAssistant(); + player.getActionSender().sendMessage("You can't sell " + ItemAssistant.getItemName(itemID).toLowerCase() + "."); + return false; + } + } + if (player.playerRights == 2 && !Constants.ADMIN_CAN_SELL_ITEMS) { + player.getActionSender().sendMessage("Selling items as an admin has been disabled."); + return false; + } + if(!player.isShopping) { + return false; + } + + if (amount > 0 && itemID == (player.playerItems[fromSlot] - 1)) { + if (ShopHandler.ShopSModifier[player.myShopId] > 1) { + boolean IsIn = false; + for (int i = 0; i <= ShopHandler.ShopItemsStandard[player.myShopId]; i++) { + if (itemID == (ShopHandler.ShopItems[player.myShopId][i] - 1)) { + IsIn = true; + break; + } + } + if (IsIn == false) { + player.getItemAssistant(); + player.getActionSender().sendMessage("You can't sell " + ItemAssistant.getItemName(itemID).toLowerCase() + " to this store."); + return false; + } + } + + if (amount > player.playerItemsN[fromSlot] && (ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isNoteable == true || ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isStackable == true)) { + amount = player.playerItemsN[fromSlot]; + } else if (amount > player.getItemAssistant().getItemAmount(itemID) && ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isNoteable == false && ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isStackable == false) { + amount = player.getItemAssistant().getItemAmount(itemID); + } + // double ShopValue; + // double TotPrice; + int TotPrice2 = 0; + String itemName = ItemAssistant.getItemName(itemID).toLowerCase(); + for (int i = amount; i > 0; i--) { + TotPrice2 = (int) Math.floor(getItemShopValue(itemID, 1, fromSlot) *.85); + if (player.getItemAssistant().freeSlots() > 0 || player.getItemAssistant().playerHasItem(995)) { + if (ItemDefinitions.getDef()[itemID].isNoteable == false) { + player.getItemAssistant().deleteItem(itemID, player.getItemAssistant().getItemSlot(itemID), 1); + } else { + player.getItemAssistant().deleteItem(itemID, fromSlot, 1); + } + player.getItemAssistant().addItem(995, TotPrice2); + addShopItem(itemID, 1); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "shopselling", player.playerName + " sold " + itemName + " to store id: " + player.myShopId + " for" + GameLogger.formatCurrency(TotPrice2) + " coins"); + } + } else { + player.getActionSender().sendMessage("You don't have enough space in your inventory."); + break; + } + } + player.getItemAssistant().resetItems(3823); + resetShop(player.myShopId); + updatePlayerShop(); + return true; + } + return true; + } + + public boolean addShopItem(int itemID, int amount) { + boolean Added = false; + if (amount <= 0) { + return false; + } + if (Item.itemIsNote[itemID]) { + itemID = player.getItemAssistant().getUnnotedItem(itemID); + } + for (int i = 0; i < ShopHandler.ShopItems.length; i++) { + if (ShopHandler.ShopItems[player.myShopId][i] - 1 == itemID) { + ShopHandler.ShopItemsN[player.myShopId][i] += amount; + Added = true; + } + } + if (Added == false) { + for (int i = 0; i < ShopHandler.ShopItems.length; i++) { + if (ShopHandler.ShopItems[player.myShopId][i] == 0) { + ShopHandler.ShopItems[player.myShopId][i] = itemID + 1; + ShopHandler.ShopItemsN[player.myShopId][i] = amount; + ShopHandler.ShopItemsDelay[player.myShopId][i] = 0; + break; + } + } + } + return true; + } + + private static final int FISHING_ITEMS[] = {383, 371, 377, 359, 321, 341, 353, 345, 327, 317}; + + public boolean buyItem(int itemID, int fromSlot, int amount) { + if (amount > 0) { + if (amount > ShopHandler.ShopItemsN[player.myShopId][fromSlot]) { + amount = ShopHandler.ShopItemsN[player.myShopId][fromSlot]; + } + if(!player.isShopping) { + return false; + } + if (ShopHandler.ShopItems[player.myShopId][fromSlot] - 1 != itemID || ShopHandler.ShopItems[player.myShopId][fromSlot] < 0) { + return false; + } + for (int i = 0; i < FISHING_ITEMS.length; i++) { + if (player.myShopId == 32 && itemID == FISHING_ITEMS[i]) { + player.getActionSender().sendMessage("You can't buy that item from this store!"); + return false; + } + } + if (!shopSellsItem(itemID)) { + return false; + } + // double ShopValue; + // double TotPrice; + int TotPrice2 = 0; + // int Overstock; + int Slot = 0; + int tokkulSlot = 0;// Tokkul + int rangeSlot = 0; + int castleSlot = 0; + for (int i = amount; i > 0; i--) { + if (player.myShopId != 138 && player.myShopId != 58 && player.myShopId != 139 && player.myShopId != RANGE_SHOP && player.myShopId != PEST_SHOP && player.myShopId != CASTLE_SHOP) { + TotPrice2 = (int) Math.floor(getItemShopValue(itemID, 0, fromSlot)); + } else if (player.myShopId == 138 || player.myShopId == 58 || player.myShopId == 139) { + TotPrice2 = getTokkulValue(itemID); + } else if (player.myShopId == RANGE_SHOP) { + TotPrice2 = getRGItemValue(itemID); + } else if (player.myShopId == PEST_SHOP) { + TotPrice2 = getPestItemValue(itemID); + } else if (player.myShopId == CASTLE_SHOP) { + TotPrice2 = getCastleItemValue(itemID); + } + Slot = player.getItemAssistant().getItemSlot(995); + tokkulSlot = player.getItemAssistant().getItemSlot(6529); + rangeSlot = player.getItemAssistant().getItemSlot(1464); + castleSlot = player.getItemAssistant().getItemSlot(4067); + if (Slot == -1) { + if (player.myShopId != 138 && player.myShopId != 139 && player.myShopId != 58 && player.myShopId != RANGE_SHOP && player.myShopId != CASTLE_SHOP && player.myShopId != PEST_SHOP) { + player.getActionSender().sendMessage("You don't have enough coins."); + break; + } + } + if (rangeSlot == -1) { + if (player.myShopId == RANGE_SHOP) { + player.getActionSender().sendMessage("You don't have enough archery tickets to buy that."); + break; + } + } + if (castleSlot == -1) { + if (player.myShopId == CASTLE_SHOP) { + player.getActionSender().sendMessage("You don't have enough castle wars tickets to buy that."); + break; + } + } + if (tokkulSlot == -1) { + if (player.myShopId == 138 || player.myShopId == 58 || player.myShopId == 139) { + player.getActionSender().sendMessage("You don't have enough tokkul to buy that."); + break; + } + } + + if (TotPrice2 <= 1) { + TotPrice2 = (int) Math.floor(getItemShopValue(itemID, 0, fromSlot)); + TotPrice2 *= 1.66; + } + + String itemName = ItemAssistant.getItemName(itemID).toLowerCase(); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "shopbuying", player.playerName + " bought " + itemName + " from store id: " + player.myShopId + " for" + GameLogger.formatCurrency(TotPrice2) + " coins"); + } + + // TzHaar Shops + if (player.myShopId == 138 || player.myShopId == 139 || player.myShopId == 58) { + if (player.playerItemsN[tokkulSlot] >= TotPrice2) { + if (player.getItemAssistant().freeSlots() > 0) { + player.getItemAssistant().deleteItem(6529, tokkulSlot, TotPrice2); + player.getItemAssistant().addItem(itemID, 1); + ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= 1; + ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; + ShopHandler.ShopItemsRestock[player.myShopId][fromSlot] = System.currentTimeMillis(); + if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) { + ShopHandler.ShopItems[player.myShopId][fromSlot] = 0; + } + } else { + player.getActionSender() + .sendMessage( + "You don't have enough space in your inventory."); + break; + } + } else { + player.getActionSender().sendMessage( + "You don't have enough tokkul."); + break; + } + } else if (player.myShopId == RANGE_SHOP) { + if (player.playerItemsN[rangeSlot] >= TotPrice2) { + if (player.getItemAssistant().freeSlots() > 0) { + player.getItemAssistant().deleteItem(1464, rangeSlot, TotPrice2); + player.getItemAssistant().addItem(itemID, 1); + ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= 1; + ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; + if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) { + ShopHandler.ShopItems[player.myShopId][fromSlot] = 0; + } + } else { + player.getActionSender() + .sendMessage( + "You don't have enough space in your inventory."); + break; + } + } else { + player.getActionSender().sendMessage( + "You don't have enough archery tickets."); + break; + } + } else if (player.myShopId == CASTLE_SHOP) { + if (player.playerItemsN[castleSlot] >= TotPrice2) { + if (player.getItemAssistant().freeSlots() > 0) { + player.getItemAssistant().deleteItem(4067, castleSlot, TotPrice2); + player.getItemAssistant().addItem(itemID, 1); + ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= 1; + ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; + if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) { + ShopHandler.ShopItems[player.myShopId][fromSlot] = 0; + } + } else { + player.getActionSender() + .sendMessage( + "You don't have enough space in your inventory."); + break; + } + } + } else { + if (player.playerItemsN[Slot] >= TotPrice2) { + if (player.getItemAssistant().freeSlots() > 0) { + player.getItemAssistant().deleteItem(995, + player.getItemAssistant().getItemSlot(995), + TotPrice2); + player.getItemAssistant().addItem(itemID, 1); + ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= 1; + ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; + if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) { + ShopHandler.ShopItems[player.myShopId][fromSlot] = 0; + } + } else { + player.getActionSender() + .sendMessage( + "You don't have enough space in your inventory."); + break; + } + } else { + player.getActionSender().sendMessage( + "You don't have enough coins."); + break; + } + } + } + player.getItemAssistant().resetItems(3823); + resetShop(player.myShopId); + updatePlayerShop(); + return true; + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/shops/ShopHandler.java b/2006Redone Server/src/redone/game/shops/ShopHandler.java new file mode 100644 index 00000000..a54b408d --- /dev/null +++ b/2006Redone Server/src/redone/game/shops/ShopHandler.java @@ -0,0 +1,178 @@ +package redone.game.shops; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +/** + * Shops + **/ + +public class ShopHandler { + + public static int MaxShops = 200; + public static int MaxShopItems = 200; + public static int MaxShowDelay = 10; + public static int MaxSpecShowDelay = 60; + public static int TotalShops = 0; + public static int[][] ShopItems = new int[MaxShops][MaxShopItems]; + public static int[][] ShopItemsN = new int[MaxShops][MaxShopItems]; + public static int[][] ShopItemsDelay = new int[MaxShops][MaxShopItems]; + public static int[][] ShopItemsSN = new int[MaxShops][MaxShopItems]; + public static int[] ShopItemsStandard = new int[MaxShops]; + public static String[] ShopName = new String[MaxShops]; + public static int[] ShopSModifier = new int[MaxShops]; + public static int[] ShopBModifier = new int[MaxShops]; + public static long[][] ShopItemsRestock = new long[MaxShops][MaxShopItems]; + + public ShopHandler() { + for (int i = 0; i < MaxShops; i++) { + for (int j = 0; j < MaxShopItems; j++) { + ResetItem(i, j); + ShopItemsSN[i][j] = 0; + } + ShopItemsStandard[i] = 0; + ShopSModifier[i] = 0; + ShopBModifier[i] = 0; + ShopName[i] = ""; + } + TotalShops = 0; + loadShops("shops.cfg"); + } + + public static int restockTimeItem(int itemId) { + switch(itemId) { + + default: + return 86400000; + } + + } + + public void process() { + boolean DidUpdate = false; + for (int i = 1; i <= TotalShops; i++) { + for (int j = 0; j < MaxShopItems; j++) { + if (ShopItems[i][j] > 0) { + if (ShopItemsDelay[i][j] >= MaxShowDelay) { + if (j <= ShopItemsStandard[i] && ShopItemsN[i][j] <= ShopItemsSN[i][j]) { + if (ShopItemsN[i][j] < ShopItemsSN[i][j] && System.currentTimeMillis() - ShopItemsRestock[i][j] > restockTimeItem(ShopItems[i][j])) { + ShopItemsN[i][j] += 1; + ShopItemsDelay[i][j] = 1; + ShopItemsDelay[i][j] = 0; + DidUpdate = true; + ShopItemsRestock[i][j] = System.currentTimeMillis(); + } + } else if (ShopItemsDelay[i][j] >= MaxSpecShowDelay) { + DiscountItem(i, j); + ShopItemsDelay[i][j] = 0; + DidUpdate = true; + } + } + ShopItemsDelay[i][j]++; + } + } + if (DidUpdate) { + for (int k = 1; k < PlayerHandler.players.length; k++) { + if (PlayerHandler.players[k] != null) { + if (PlayerHandler.players[k].isShopping && PlayerHandler.players[k].myShopId == i) { + PlayerHandler.players[k].updateShop = true; + PlayerHandler.players[k].updateshop(i); + } + } + } + DidUpdate = false; + } + } + } + + private void DiscountItem(int ShopID, int ArrayID) { + ShopItemsN[ShopID][ArrayID] -= 1; + if (ShopItemsN[ShopID][ArrayID] <= 0) { + ShopItemsN[ShopID][ArrayID] = 0; + ResetItem(ShopID, ArrayID); + } + } + + private void ResetItem(int ShopID, int ArrayID) { + ShopItems[ShopID][ArrayID] = 0; + ShopItemsN[ShopID][ArrayID] = 0; + ShopItemsDelay[ShopID][ArrayID] = 0; + } + + + public boolean loadShops(String FileName) { + String line = ""; + String token = ""; + String token2 = ""; + String token2_2 = ""; + String[] token3 = new String[(MaxShopItems * 2)]; + boolean EndOfFile = false; + BufferedReader characterfile = null; + try { + characterfile = new BufferedReader(new FileReader("./Data/CFG/" + FileName)); + } catch (FileNotFoundException fileex) { + Misc.println(FileName + ": file not found."); + return false; + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception) { + Misc.println(FileName + ": error loading file."); + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token2_2 = token2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token3 = token2_2.split("\t"); + if (token.equals("shop")) { + int ShopID = Integer.parseInt(token3[0]); + ShopName[ShopID] = token3[1].replaceAll("_", " "); + ShopSModifier[ShopID] = Integer.parseInt(token3[2]); + ShopBModifier[ShopID] = Integer.parseInt(token3[3]); + for (int i = 0; i < ((token3.length - 4) / 2); i++) { + if (token3[(4 + (i * 2))] != null) { + ShopItems[ShopID][i] = (Integer.parseInt(token3[(4 + (i * 2))]) + 1); + ShopItemsN[ShopID][i] = Integer.parseInt(token3[(5 + (i * 2))]); + ShopItemsSN[ShopID][i] = Integer.parseInt(token3[(5 + (i * 2))]); + ShopItemsStandard[ShopID]++; + } else { + break; + } + } + TotalShops++; + } + } else { + if (line.equals("[ENDOFSHOPLIST]")) { + try { + characterfile.close(); + } catch (IOException ioexception) { + } + } + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return false; + } +} diff --git a/2006Redone Server/src/redone/game/shops/Shops.java b/2006Redone Server/src/redone/game/shops/Shops.java new file mode 100644 index 00000000..d961190d --- /dev/null +++ b/2006Redone Server/src/redone/game/shops/Shops.java @@ -0,0 +1,103 @@ +package redone.game.shops; + +import java.util.HashMap; + +import redone.game.content.randomevents.RandomEventHandler; +import redone.game.players.Client; + +/** + * Shops + * @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus) + */ + +public class Shops { + + public enum Shop { + SHOP1(588, 2), SHOP2(550, 3), SHOP3(575, 4), SHOP4(2356, 5), SHOP5( + 3796, 6), SHOP6(1860, 7), SHOP7(559, 9), SHOP8(562, 10), SHOP9( + 581, 11), SHOP10(548, 12), SHOP11(554, 13), SHOP12(601, 14), SHOP13( + 1301, 15), SHOP14(1039, 16), SHOP15(2353, 17), SHOP16(3166, 18), SHOP17( + 2161, 19), SHOP18(2162, 20), SHOP19(600, 21), SHOP20(603, 22), SHOP21( + 593, 23), SHOP22(545, 24), SHOP23(585, 25), SHOP24(2305, 26), SHOP25( + 2307, 27), SHOP26(2304, 28), SHOP27(2306, 29), SHOP28(517, 30), SHOP29( + 558, 31), SHOP30(576, 32), SHOP31(1369, 33), SHOP32(1038, 35), SHOP33( + 1433, 36), SHOP34(584, 37), SHOP35(540, 38), SHOP36(2157, 39), SHOP37( + 538, 40), SHOP38(1303, 41), SHOP39(578, 42), SHOP40(587, 43), SHOP41( + 1398, 44), SHOP42(556, 45), SHOP43(1865, 46), SHOP44(543, 47), SHOP45( + 2198, 48), SHOP46(580, 49), SHOP47(1862, 50), SHOP48(583, 51), SHOP49( + 553, 52), SHOP50(461, 53), SHOP51(903, 54), SHOP551(2258, 55), SHOP52( + 1435, 56), SHOP53(3800, 57), SHOP54(2623, 58), SHOP55(594, 59), SHOP56( + 579, 60), SHOP57(2160, 61), SHOP58(2191, 61), SHOP59(589, 62), SHOP60( + 549, 63), SHOP61(542, 64), SHOP62(3038, 65), SHOP63(544, 66), SHOP64( + 541, 67), SHOP65(1434, 68), SHOP66(577, 69), SHOP67(539, 70), SHOP68( + 1980, 71), SHOP69(546, 72), SHOP70(382, 73), SHOP71(3541, 74), SHOP72( + 520, 75), SHOP73(1436, 76), SHOP74(590, 77), SHOP75(971, 78), SHOP76( + 1917, 79), SHOP77(1040, 80), SHOP78(563, 81), SHOP79(522, 82), SHOP80( + 524, 83), SHOP81(526, 84), SHOP82(2154, 85), SHOP83(1334, 86), SHOP84( + 2552, 87), SHOP85(528, 88), SHOP86(1254, 89), SHOP87(2086, 90), SHOP88( + 3824, 91), SHOP89(1866, 92), SHOP90(1699, 93), SHOP91(1282, 94), SHOP92( + 530, 95), SHOP93(516, 96), SHOP94(560, 97), SHOP95(471, 98), //SHOP96(1208, 99), + SHOP97(532, 100), SHOP98(3797, 101), SHOP99(534, 102), SHOP100( + 836, 103), SHOP101(551, 104), SHOP102(586, 105), SHOP103(564, + 106), SHOP104(747, 107), SHOP105(573, 108), SHOP106(1316, 108), SHOP107( + 547, 108), SHOP114(1787, 110), SHOP116(1526, 112), SHOP115(568, + 113), SHOP118(1083, 114), SHOP119(735, 115), SHOP120(793, 116), SHOP121( + 794, 116), SHOP122(1079, 117), SHOP123(682, 119), SHOP124(683, + 120), SHOP125(692, 121), SHOP126(1658, 122), SHOP127(461, 123), + // SHOP128(537, 124), + // SHOP129(536, 125), + SHOP130(904, 126), SHOP131(2152, 127), SHOP132(2153, 128), SHOP133( + 2151, 129), SHOP134(2158, 130), SHOP135(2156, 131), SHOP136( + 2159, 132), SHOP137(851, 133), SHOP138(602, 134), SHOP139(596, + 135), SHOP140(597, 136), SHOP141(1784, 137), SHOP142(2620, 138), SHOP143( + 2622, 139), SHOP144(552, 88), SHOP145(1778, 140), SHOP146(1782, + 141), SHOP147(849, 142); + + private final int npcId, shopId; + + public static HashMap npc = new HashMap(); + + public static Shop forId(int id) { + return npc.get(id); + } + + static { + for (Shop f : Shop.values()) + npc.put(f.getNpc(), f); + } + + private Shop(int npcId, int shopId) { + this.npcId = npcId; + this.shopId = shopId; + } + + public int getNpc() { + return npcId; + } + + public int getShop() { + return shopId; + } + + } + + public static void dialogueShop(Client c, int npcClick) { + final Shop shops = Shop.forId(npcClick); + if (shops == null) + return; + if (npcClick == shops.getNpc()) { + c.getDialogueHandler().sendDialogues(1322, shops.getNpc()); + } + } + + public static void openShop(Client c, int npcClickId) { + final Shop shops = Shop.forId(npcClickId); + if (shops == null) + return; + if (npcClickId == shops.getNpc()) { + c.getShopAssistant().openShop(shops.getShop()); + RandomEventHandler.addRandom(c); + } + } + +} diff --git a/2006Redone Server/src/redone/net/ActionSender.java b/2006Redone Server/src/redone/net/ActionSender.java new file mode 100644 index 00000000..ac4f6e36 --- /dev/null +++ b/2006Redone Server/src/redone/net/ActionSender.java @@ -0,0 +1,629 @@ +package redone.net; + +import java.text.DecimalFormat; + +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.world.clip.Region; + +public class ActionSender { + + private final Client player; + + public ActionSender(Client client) { + this.player = client; + } + + + public ActionSender sendClan(String name, String message, String clan, int rights) { + player.outStream.createFrameVarSizeWord(217); + player.outStream.writeString(name); + player.outStream.writeString(message); + player.outStream.writeString(clan); + player.outStream.writeWord(rights); + player.outStream.endFrameVarSize(); + return this; + } + + public ActionSender createPlayersObjectAnim(int X, int Y, int animationID, int tileObjectType, int orientation) { + try{ + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(Y - (player.mapRegionY * 8)); + player.getOutStream().writeByteC(X - (player.mapRegionX * 8)); + int x = 0; + int y = 0; + player.getOutStream().createFrame(160); + player.getOutStream().writeByteS(((x&7) << 4) + (y&7));//tiles away - could just send 0 + player.getOutStream().writeByteS((tileObjectType<<2) +(orientation&3)); + player.getOutStream().writeWordA(animationID);// animation id + } catch(Exception e){ + e.printStackTrace(); + } + return this; + } + + + public ActionSender setInterfaceOffset(int x, int y, int id) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(70); + player.getOutStream().writeWord(x); + player.getOutStream().writeWordBigEndian(y); + player.getOutStream().writeWordBigEndian(id); + player.flushOutStream(); + } + return this; + } + + public ActionSender shakeScreen(int verticleAmount, int verticleSpeed, + int horizontalAmount, int horizontalSpeed) { + player.getOutStream().createFrame(35); // Creates frame 35. + player.getOutStream().writeByte(verticleAmount); + player.getOutStream().writeByte(verticleSpeed); + player.getOutStream().writeByte(horizontalAmount); + player.getOutStream().writeByte(horizontalSpeed); + return this; + } + + public ActionSender chatbox(int i1) { + if (player.getOutStream() != null && player != null) { + player.outStream.createFrame(218); + player.outStream.writeWordBigEndianA(i1); + player.updateRequired = true; + player.appearanceUpdateRequired = true; + } + return this; + } + + public ActionSender sendMessage(String s) { + if (player.getOutStream() != null) { + player.getOutStream().createFrameVarSize(253); + player.getOutStream().writeString(s); + player.getOutStream().endFrameVarSize(); + } + return this; + } + + public ActionSender setSidebarInterface(int menuId, int form) { + if (player.getOutStream() != null) { + player.getOutStream().createFrame(71); + player.getOutStream().writeWord(form); + player.getOutStream().writeByteA(menuId); + } + return this; + } + + /** + * Flashes Sidebar Icon + */ + + public ActionSender flashSideBarIcon(int i1) { + // Makes the sidebar Icons flash + // Usage: i1 = 0 through -12 inorder to work + player.outStream.createFrame(24); + player.outStream.writeByteA(i1); + player.updateRequired = true; + player.appearanceUpdateRequired = true; + return this; + } + + public ActionSender createPlayerHints(int type, int id) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(254); + player.getOutStream().writeByte(type); + player.getOutStream().writeWord(id); + player.getOutStream().write3Byte(0); + player.flushOutStream(); + } + return this; + } + + public ActionSender createObjectHints(int x, int y, int height, int pos) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(254); + player.getOutStream().writeByte(pos); + player.getOutStream().writeWord(x); + player.getOutStream().writeWord(y); + player.getOutStream().writeByte(height); + player.flushOutStream(); + } + return this; + } + + public ActionSender createProjectile(int x, int y, int offX, int offY, + int angle, int speed, int gfxMoving, int startHeight, + int endHeight, int lockon, int time) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream() + .writeByteC(y - player.getMapRegionY() * 8 - 2); + player.getOutStream() + .writeByteC(x - player.getMapRegionX() * 8 - 3); + player.getOutStream().createFrame(117); + player.getOutStream().writeByte(angle); + player.getOutStream().writeByte(offY); + player.getOutStream().writeByte(offX); + player.getOutStream().writeWord(lockon); + player.getOutStream().writeWord(gfxMoving); + player.getOutStream().writeByte(startHeight); + player.getOutStream().writeByte(endHeight); + player.getOutStream().writeWord(time); + player.getOutStream().writeWord(speed); + player.getOutStream().writeByte(16); + player.getOutStream().writeByte(64); + player.flushOutStream(); + } + return this; + } + + public ActionSender createProjectile2(int x, int y, int offX, int offY, + int angle, int speed, int gfxMoving, int startHeight, + int endHeight, int lockon, int time, int slope) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream() + .writeByteC(y - player.getMapRegionY() * 8 - 2); + player.getOutStream() + .writeByteC(x - player.getMapRegionX() * 8 - 3); + player.getOutStream().createFrame(117); + player.getOutStream().writeByte(angle); + player.getOutStream().writeByte(offY); + player.getOutStream().writeByte(offX); + player.getOutStream().writeWord(lockon); + player.getOutStream().writeWord(gfxMoving); + player.getOutStream().writeByte(startHeight); + player.getOutStream().writeByte(endHeight); + player.getOutStream().writeWord(time); + player.getOutStream().writeWord(speed); + player.getOutStream().writeByte(slope); + player.getOutStream().writeByte(64); + player.flushOutStream(); + } + return this; + } + + /** + * Objects, add and remove + **/ + public ActionSender object(int objectId, int objectX, int objectY, int face, int objectType) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC( + objectY - player.getMapRegionY() * 8); + player.getOutStream().writeByteC( + objectX - player.getMapRegionX() * 8); + player.getOutStream().createFrame(101); + player.getOutStream().writeByteC((objectType << 2) + (face & 3)); + player.getOutStream().writeByte(0); + if (objectId != -1) { // removing + player.getOutStream().createFrame(151); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWordBigEndian(objectId); + player.getOutStream() + .writeByteS((objectType << 2) + (face & 3)); + } + player.flushOutStream(); + } + return this; + } + + public ActionSender object(int objectId, int objectX, int objectY, int objectH, int face, int objectType) { + if (player.heightLevel != objectH) { + return this; + } + if (Misc.goodDistance(objectX, objectY, player.absX, player.absY, 60)) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(objectY - player.getMapRegionY() * 8); + player.getOutStream().writeByteC(objectX - player.getMapRegionX() * 8); + player.getOutStream().createFrame(101); + player.getOutStream().writeByteC((objectType << 2) + (face & 3)); + player.getOutStream().writeByte(0); + if (objectId != -1) { // removing + player.getOutStream().createFrame(151); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWordBigEndian(objectId); + player.getOutStream().writeByteS((objectType << 2) + (face & 3)); + } + player.flushOutStream(); + } + } + return this; + } + + public ActionSender tempSong(int songID, int songID2) { + player.outStream.createFrame(121); + player.outStream.writeWordBigEndian(songID); + player.outStream.writeWordBigEndian(songID2); + player.flushOutStream(); + return this; + } + + public ActionSender frame174(int sound, int vol, int delay) { + player.outStream.createFrame(174); + player.outStream.writeWord(sound); + player.outStream.writeByte(vol); + player.outStream.writeWord(delay); + player.updateRequired = true; + player.appearanceUpdateRequired = true; + return this; + } + + public ActionSender frame174(int id, int type, int delay, int volume) { + if (player.outStream != null && player != null && id != -1) { + player.outStream.createFrame(174); + player.outStream.writeWord(id); + player.outStream.writeWord(delay); + player.outStream.writeWord(volume); + player.flushOutStream(); + } + return this; + } + + public ActionSender writeWeight(int weight) { + player.outStream.createFrame(240); + DecimalFormat twoDForm = new DecimalFormat("#.##"); + player.outStream.writeWord(Integer.valueOf(twoDForm.format(weight))); + return this; + } + + public ActionSender sendConfig(int id, int state) { + if (player.getOutStream() != null && player != null) { + if (state < 128) { + + } + if (state < Byte.MIN_VALUE || state > Byte.MAX_VALUE) { + player.getOutStream().createFrame(87); + player.getOutStream().writeWordBigEndian_dup(id); + player.getOutStream().writeDWord_v1(state); + player.flushOutStream(); + } else { + player.getOutStream().createFrame(36); + player.getOutStream().writeWordBigEndian(id); + player.getOutStream().writeByte(state); + player.flushOutStream(); + } + } + return this; + } + + public ActionSender multiWay(int i1) { + player.outStream.createFrame(61); + player.outStream.writeByte(i1); + player.updateRequired = true; + player.setAppearanceUpdateRequired(true); + return this; + } + + public ActionSender sendColor(int id, int color) { + if (player.getOutStream() != null && player != null) { + player.outStream.createFrame(122); + player.outStream.writeWordBigEndianA(id); + player.outStream.writeWordBigEndianA(color); + } + return this; + } + + public ActionSender sendCrashFrame() { // used for crashing cheat + // clients + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(123); + player.flushOutStream(); + } + return this; + } + + public ActionSender createStillGfx(int id, int x, int y, int height, + int time) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.getOutStream() != null) { + if (person.distanceToPoint(x, y) <= 25) { + person.getPlayerAssistant().stillGfx(id, x, y, + height, time); + } + } + } + } + } + return this; + } + + public ActionSender object(int objectId, int objectX, int objectY, + int objectType) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC( + objectY - player.getMapRegionY() * 8); + player.getOutStream().writeByteC( + objectX - player.getMapRegionX() * 8); + player.getOutStream().createFrame(101); + player.getOutStream().writeByteC((objectType << 2) + (0 & 3)); + player.getOutStream().writeByte(0); + if (objectId != -1) { // removing + player.getOutStream().createFrame(151); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWordBigEndian(objectId); + player.getOutStream().writeByteS((objectType << 2) + (0 & 3)); + } + player.flushOutStream(); + } + return this; + } + + public ActionSender itemOnInterface(int interfaceChild, int zoom, int itemId) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(246); + player.getOutStream().writeWordBigEndian(interfaceChild); + player.getOutStream().writeWord(zoom); + player.getOutStream().writeWord(itemId); + player.flushOutStream(); + } + return this; + } + + public ActionSender setConfig(int id, int state) { + player.outStream.createFrame(36); + player.outStream.writeWordBigEndian(id); + player.outStream.writeByte(state); + return this; + } + + public ActionSender sendLink(String s) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrameVarSizeWord(187); + player.getOutStream().writeString(s); + } + return this; + } + + public ActionSender setSkillLevel(int skillNum, int currentLevel, int XP) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(134); + player.getOutStream().writeByte(skillNum); + player.getOutStream().writeDWord_v1(XP); + player.getOutStream().writeByte(currentLevel); + player.flushOutStream(); + } + return this; + } + + /** + * Show an arrow icon on the selected player. + * + * @Param i - Either 0 or 1; 1 is arrow, 0 is none. + * @Param j - The player/Npc that the arrow will be displayed above. + * @Param k - Keep this set as 0 + * @Param l - Keep this set as 0 + */ + public ActionSender drawHeadicon(int i, int j, int k, int l) { + // synchronized(c) { + player.outStream.createFrame(254); + player.outStream.writeByte(i); + + if (i == 1 || i == 10) { + player.outStream.writeWord(j); + player.outStream.writeWord(k); + player.outStream.writeByte(l); + } else { + player.outStream.writeWord(k); + player.outStream.writeWord(l); + player.outStream.writeByte(j); + } + return this; + } + + // object + + public ActionSender createArrow(int x, int y, int height, int pos) { + if (player != null) { + player.getOutStream().createFrame(254); // The packet ID + player.getOutStream().writeByte(pos); // Position on Square(2 = + // middle, 3 + // = west, 4 = east, 5 = + // south, + // 6 = north) + player.getOutStream().writeWord(x); // X-Coord of Object + player.getOutStream().writeWord(y); // Y-Coord of Object + player.getOutStream().writeByte(height); // Height off Ground + } + return this; + } + + // npc + + public ActionSender createArrow(int type, int id) { + if (player != null) { + player.getOutStream().createFrame(254); // The packet ID + player.getOutStream().writeByte(type); // 1=NPC, 10=Player + player.getOutStream().writeWord(id); // NPC/Player ID + player.getOutStream().write3Byte(0); // Junk + } + return this; + } + + public ActionSender checkObjectSpawn(int objectId, int objectX, int objectY, int face, int objectType) { + if (player.distanceToPoint(objectX, objectY) < 60) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC( + objectY - player.getMapRegionY() * 8); + player.getOutStream().writeByteC( + objectX - player.getMapRegionX() * 8); + player.getOutStream().createFrame(101); + player.getOutStream() + .writeByteC((objectType << 2) + (face & 3)); + player.getOutStream().writeByte(0); + if (objectId != -1) { // removing + player.getOutStream().createFrame(151); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWordBigEndian(objectId); + player.getOutStream().writeByteS( + (objectType << 2) + (face & 3)); + } + player.flushOutStream(); + } + if (objectId > 0) { + Region.addObject(objectId, objectX, objectX, player.heightLevel, objectType, face, false); + } + } + return this; + } + + public ActionSender createObjectSpawn(int objectId, int objectX, int objectY, int height, int face, int objectType) { + if (player.heightLevel != height) { + return this; + } + if (player.distanceToPoint(objectX, objectY) < 60) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(objectY - player.getMapRegionY() * 8); + player.getOutStream().writeByteC(objectX - player.getMapRegionX() * 8); + player.getOutStream().createFrame(101); + player.getOutStream().writeByteC((objectType << 2) + (face & 3)); + player.getOutStream().writeByte(0); + if (objectId != -1) { // removing + player.getOutStream().createFrame(151); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWordBigEndian(objectId); + player.getOutStream().writeByteS((objectType << 2) + (face & 3)); + } + player.flushOutStream(); + } + } + return this; + } + + /** + * Show option, attack, trade, follow etc + **/ + public String optionType = "null"; + + public ActionSender showOption(int i, int l, String s, int a) { + // synchronized(c) { + if (player.getOutStream() != null && player != null) { + if (!optionType.equalsIgnoreCase(s)) { + optionType = s; + player.getOutStream().createFrameVarSize(104); + player.getOutStream().writeByteC(i); + player.getOutStream().writeByteA(l); + player.getOutStream().writeString(s); + player.getOutStream().endFrameVarSize(); + player.flushOutStream(); + } + } + return this; + } + + /** + * sendSong(id); + */ + + public ActionSender sendSong(int id) { + if (player.getOutStream() != null && player != null && id != -1) { + player.getOutStream().createFrame(74); + player.getOutStream().writeWordBigEndian(id); + } + return this; + } + + /** + * sendQuickSong(id, delay); - used for things such as level up music + */ + + public ActionSender sendQuickSong(int id, int songDelay) { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(121); + player.getOutStream().writeWordBigEndian(id); + player.getOutStream().writeWordBigEndian(songDelay); + player.flushOutStream(); + } + return this; + } + + /** + * sendSound(id, volume, delay); + */ + + public ActionSender sendSound(int id, int type, int delay, int volume) { + if (player.getOutStream() != null && player != null && id != -1) { + player.getOutStream().createFrame(174); + player.getOutStream().writeWord(id); + player.getOutStream().writeByte(type); + player.getOutStream().writeWord(delay); + player.getOutStream().writeWord(volume); + player.flushOutStream(); + } + return this; + } + + /** + * Send Misc Songs + */ + + public ActionSender sendSound(int id, int volume, int delay) { + frame174(id, volume, delay); + player.updateRequired = true; + player.appearanceUpdateRequired = true; + return this; + } + + public ActionSender sendClearScreen() { + if (player.getOutStream() != null && player != null) { + player.getOutStream().createFrame(219); + player.flushOutStream(); + } + return this; + } + + public ActionSender createGroundItem(int itemID, int itemX, int itemY, int itemAmount) { + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(itemY - 8 * player.mapRegionY); + player.getOutStream().writeByteC(itemX - 8 * player.mapRegionX); + player.getOutStream().createFrame(44); + player.getOutStream().writeWordBigEndianA(itemID); + player.getOutStream().writeWord(itemAmount); + player.getOutStream().writeByte(0); + player.flushOutStream(); + return this; + } + + public ActionSender createGroundItem(int itemID, int itemX, int itemY, int itemAmount, int height) { + if (player.heightLevel != height) { + return this; + } + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(itemY - 8 * player.mapRegionY); + player.getOutStream().writeByteC(itemX - 8 * player.mapRegionX); + player.getOutStream().createFrame(44); + player.getOutStream().writeWordBigEndianA(itemID); + player.getOutStream().writeWord(itemAmount); + player.getOutStream().writeByte(0); + player.flushOutStream(); + return this; + } + + + /** + * Pickup Item + **/ + + public ActionSender removeGroundItem(int itemID, int itemX, int itemY, int Amount) { + if (player == null) { + return this; + } + player.getOutStream().createFrame(85); + player.getOutStream().writeByteC(itemY - 8 * player.mapRegionY); + player.getOutStream().writeByteC(itemX - 8 * player.mapRegionX); + player.getOutStream().createFrame(156); + player.getOutStream().writeByteS(0); + player.getOutStream().writeWord(itemID); + player.flushOutStream(); + return this; + } + +} diff --git a/2006Redone Server/src/redone/net/CodecFactory.java b/2006Redone Server/src/redone/net/CodecFactory.java new file mode 100644 index 00000000..c3fc3662 --- /dev/null +++ b/2006Redone Server/src/redone/net/CodecFactory.java @@ -0,0 +1,40 @@ +package redone.net; + +import org.apache.mina.filter.codec.ProtocolCodecFactory; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolEncoder; + +/** + * Provides access to the encoders and decoders for the 508 protocol. + * + * @author Graham + */ +public class CodecFactory implements ProtocolCodecFactory { + + /** + * The encoder. + */ + private final ProtocolEncoder encoder = new RS2ProtocolEncoder(); + + /** + * The decoder. + */ + private final ProtocolDecoder decoder = new RS2LoginProtocolDecoder(); + + @Override + /** + * Get the encoder. + */ + public ProtocolEncoder getEncoder() throws Exception { + return encoder; + } + + @Override + /** + * Get the decoder. + */ + public ProtocolDecoder getDecoder() throws Exception { + return decoder; + } + +} diff --git a/2006Redone Server/src/redone/net/ConnectionHandler.java b/2006Redone Server/src/redone/net/ConnectionHandler.java new file mode 100644 index 00000000..e8c39957 --- /dev/null +++ b/2006Redone Server/src/redone/net/ConnectionHandler.java @@ -0,0 +1,63 @@ +package redone.net; + +import org.apache.mina.common.IdleStatus; +import org.apache.mina.common.IoHandler; +import org.apache.mina.common.IoSession; +import org.apache.mina.filter.codec.ProtocolCodecFilter; + +import redone.game.players.Client; + +public class ConnectionHandler implements IoHandler { + + @Override + public void exceptionCaught(IoSession arg0, Throwable arg1) + throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public void messageReceived(IoSession arg0, Object arg1) throws Exception { + if (arg0.getAttachment() != null) { + Client plr = (Client) arg0.getAttachment(); + plr.queueMessage((Packet) arg1); + } + } + + @Override + public void messageSent(IoSession arg0, Object arg1) throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public void sessionClosed(IoSession arg0) throws Exception { + if (arg0.getAttachment() != null) { + Client plr = (Client) arg0.getAttachment(); + plr.disconnected = true; + } + HostList.getHostList().remove(arg0); + } + + @Override + public void sessionCreated(IoSession arg0) throws Exception { + if (!HostList.getHostList().add(arg0)) { + arg0.close(); + } else { + arg0.setAttribute("inList", Boolean.TRUE); + } + } + + @Override + public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception { + arg0.close(); + } + + @Override + public void sessionOpened(IoSession arg0) throws Exception { + arg0.setIdleTime(IdleStatus.BOTH_IDLE, 60); + arg0.getFilterChain().addLast("protocolFilter", + new ProtocolCodecFilter(new CodecFactory())); + } + +} diff --git a/2006Redone Server/src/redone/net/ConnectionThrottleFilter.java b/2006Redone Server/src/redone/net/ConnectionThrottleFilter.java new file mode 100644 index 00000000..b765aeb9 --- /dev/null +++ b/2006Redone Server/src/redone/net/ConnectionThrottleFilter.java @@ -0,0 +1,132 @@ +package redone.net; + +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.mina.common.IoFilter; +import org.apache.mina.common.IoFilterAdapter; +import org.apache.mina.common.IoSession; + +/** + * A {@link IoFilter} which blocks connections from connecting at a rate faster + * than the specified interval. + * + * @author The Apache MINA Project (dev@mina.apache.org) + * @version $Rev$, $Date$ + */ +public class ConnectionThrottleFilter extends IoFilterAdapter { + + private long allowedInterval; + private final Map clients; + private final Map counts; + private final Set connectedAddresses; + + /** + * Constructor that takes in a specified wait time. + * + * @param allowedInterval + * The number of milliseconds a client is allowed to wait before + * making another successful connection + */ + public ConnectionThrottleFilter(long allowedInterval) { + this.allowedInterval = allowedInterval; + clients = Collections.synchronizedMap(new HashMap()); + counts = Collections + .synchronizedMap(new HashMap()); + connectedAddresses = new HashSet(); + } + + /** + * Sets the interval between connections from a client. This value is + * measured in milliseconds. + * + * @param allowedInterval + * The number of milliseconds a client is allowed to wait before + * making another successful connection + */ + public void setAllowedInterval(long allowedInterval) { + this.allowedInterval = allowedInterval; + } + + public void delayClient(IoSession session, int delay) { + long d = System.currentTimeMillis() - delay; + clients.put(getAddress(session), d); + } + + private InetAddress getAddress(IoSession io) { + return ((InetSocketAddress) io.getRemoteAddress()).getAddress(); + } + + /** + * Method responsible for deciding if a connection is OK to continue + * + * @param session + * The new session that will be verified + * @return True if the session meets the criteria, otherwise false + */ + public boolean isConnectionOk(IoSession session) { + InetAddress addr = getAddress(session); + long now = System.currentTimeMillis(); + if (clients.containsKey(addr)) { + long lastConnTime = clients.get(addr); + + if (now - lastConnTime < allowedInterval) { + int c = 0; + if (!counts.containsKey(addr)) { + counts.put(addr, 0); + } else { + c = counts.get(addr) + 1; + } + if (c >= 350) { + + c = 0; + } + counts.put(addr, c); + // Logger.err("["+host+"] Session dropped (delay="+(now-lastConnTime)+"ms)"); + return false; + } else { + clients.put(addr, now); + return true; + } + } else { + clients.put(addr, now); + return true; + } + } + + public void closedSession(IoSession io) { + connectedAddresses.remove(getAddress(io)); + } + + public void acceptedLogin(IoSession io) { + connectedAddresses.add(getAddress(io)); + } + + public boolean isConnected(IoSession io) { + return connectedAddresses.contains(getAddress(io)); + } + + public int[] getSizes() { + return new int[] { clients.size(), counts.size(), + connectedAddresses.size() }; + } + + public void connectionOk(IoSession io) { + counts.remove(getAddress(io)); + } + + @Override + public void sessionCreated(NextFilter nextFilter, IoSession session) + throws Exception { + if (!isConnectionOk(session)) { + session.close(); + return; + } + nextFilter.sessionCreated(session); + } +} diff --git a/2006Redone Server/src/redone/net/GameCodecFactory.java b/2006Redone Server/src/redone/net/GameCodecFactory.java new file mode 100644 index 00000000..0e43239a --- /dev/null +++ b/2006Redone Server/src/redone/net/GameCodecFactory.java @@ -0,0 +1,46 @@ +package redone.net; + +import org.apache.mina.filter.codec.ProtocolCodecFactory; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolEncoder; + +import redone.util.ISAACRandomGen; + +/** + * Provides access to the encoders and decoders for the 508 protocol. + * + * @author Graham + */ +public class GameCodecFactory implements ProtocolCodecFactory { + + /** + * The encoder. + */ + private final ProtocolEncoder encoder = new RS2ProtocolEncoder(); + + /** + * The decoder. + */ + private final ProtocolDecoder decoder; + + public GameCodecFactory(ISAACRandomGen inC) { + decoder = new RS2ProtocolDecoder(inC); + } + + @Override + /** + * Get the encoder. + */ + public ProtocolEncoder getEncoder() throws Exception { + return encoder; + } + + @Override + /** + * Get the decoder. + */ + public ProtocolDecoder getDecoder() throws Exception { + return decoder; + } + +} diff --git a/2006Redone Server/src/redone/net/HostList.java b/2006Redone Server/src/redone/net/HostList.java new file mode 100644 index 00000000..67b87110 --- /dev/null +++ b/2006Redone Server/src/redone/net/HostList.java @@ -0,0 +1,57 @@ +package redone.net; + +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.Map; + +import org.apache.mina.common.IoSession; + +import redone.Connection; +import redone.Constants; + +public class HostList { + + private static HostList list = new HostList(); + + public static HostList getHostList() { + return list; + } + + private final Map connections = new HashMap(); + + public synchronized boolean add(IoSession session) { + String addr = ((InetSocketAddress) session.getRemoteAddress()) + .getAddress().getHostAddress(); + Integer amt = connections.get(addr); + if (amt == null) { + amt = 1; + } else { + amt += 1; + } + if (amt > Constants.IPS_ALLOWED || Connection.isIpBanned(addr)) { + return false; + } else { + connections.put(addr, amt); + return true; + } + } + + public synchronized void remove(IoSession session) { + if (session.getAttribute("inList") != Boolean.TRUE) { + return; + } + String addr = ((InetSocketAddress) session.getRemoteAddress()) + .getAddress().getHostAddress(); + Integer amt = connections.get(addr); + if (amt == null) { + return; + } + amt -= 1; + if (amt <= 0) { + connections.remove(addr); + } else { + connections.put(addr, amt); + } + } + +} diff --git a/2006Redone Server/src/redone/net/Packet.java b/2006Redone Server/src/redone/net/Packet.java new file mode 100644 index 00000000..b64f352c --- /dev/null +++ b/2006Redone Server/src/redone/net/Packet.java @@ -0,0 +1,304 @@ +package redone.net; + +import org.apache.mina.common.IoSession; + +/** + * Immutable packet object. + * + * @author Graham + */ +public final class Packet { + + public static enum Size { + Fixed, VariableByte, VariableShort + }; + + /** + * The associated IO session + */ + private final IoSession session; + /** + * The ID of the packet + */ + private final int pID; + /** + * The length of the payload + */ + private final int pLength; + /** + * The payload + */ + private final byte[] pData; + /** + * The current index into the payload buffer for reading + */ + private int caret = 0; + /** + * Whether this packet is without the standard packet header + */ + private final boolean bare; + private Size size = Size.Fixed; + + public Packet(IoSession session, int pID, byte[] pData, boolean bare, Size s) { + this.session = session; + this.pID = pID; + this.pData = pData; + pLength = pData.length; + this.bare = bare; + size = s; + } + + /** + * Creates a new packet with the specified parameters. + * + * @param session + * The session to associate with the packet + * @param pID + * The ID of the packet + * @param pData + * The payload of the packet + * @param bare + * Whether this packet is bare, which means that it does not + * include the standard packet header + */ + public Packet(IoSession session, int pID, byte[] pData, boolean bare) { + this(session, pID, pData, bare, Size.Fixed); + } + + /** + * Creates a new packet with the specified parameters. The packet is + * considered not to be a bare packet. + * + * @param session + * The session to associate with the packet + * @param pID + * The ID of the packet + * @param pData + * The payload the packet + */ + public Packet(IoSession session, int pID, byte[] pData) { + this(session, pID, pData, false); + } + + /** + * Returns the IO session associated with the packet, if any. + * + * @return The IoSession object, or null if none. + */ + public IoSession getSession() { + return session; + } + + /** + * Checks if this packet is considered to be a bare packet, which means that + * it does not include the standard packet header (ID and length values). + * + * @return Whether this packet is a bare packet + */ + public boolean isBare() { + return bare; + } + + public Size getSize() { + return size; + } + + /** + * Returns the packet ID. + * + * @return The packet ID + */ + public int getId() { + return pID; + } + + /** + * Returns the length of the payload of this packet. + * + * @return The length of the packet's payload + */ + public int getLength() { + return pLength; + } + + /** + * Returns the entire payload data of this packet. + * + * @return The payload byte array + */ + public byte[] getData() { + return pData; + } + + /** + * Returns the remaining payload data of this packet. + * + * @return The payload byte array + */ + public byte[] getRemainingData() { + byte[] data = new byte[pLength - caret]; + for (int i = 0; i < data.length; i++) { + data[i] = pData[i + caret]; + } + caret += data.length; + return data; + + } + + /** + * Reads the next byte from the payload. + * + * @return A byte + */ + public byte readByte() { + return pData[caret++]; + } + + /** + * Reads the next short from the payload. + * + * @return A short + */ + public short readShort() { + return (short) ((short) ((pData[caret++] & 0xff) << 8) | (short) (pData[caret++] & 0xff)); + } + + public int readLEShortA() { + int i = (pData[caret++] - 128 & 0xff) + ((pData[caret++] & 0xff) << 8); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int readLEShort() { + int i = (pData[caret++] & 0xff) + ((pData[caret++] & 0xff) << 8); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + /** + * Reads the next int from the payload. + * + * @return An int + */ + public int readInt() { + return (pData[caret++] & 0xff) << 24 | (pData[caret++] & 0xff) << 16 + | (pData[caret++] & 0xff) << 8 | pData[caret++] & 0xff; + } + + public int readLEInt() { + return pData[caret++] & 0xff | (pData[caret++] & 0xff) << 8 + | (pData[caret++] & 0xff) << 16 | (pData[caret++] & 0xff) << 24; + } + + /** + * Reads the next long from the payload. + * + * @return A long + */ + public long readLong() { + return (long) (pData[caret++] & 0xff) << 56 + | (long) (pData[caret++] & 0xff) << 48 + | (long) (pData[caret++] & 0xff) << 40 + | (long) (pData[caret++] & 0xff) << 32 + | (long) (pData[caret++] & 0xff) << 24 + | (long) (pData[caret++] & 0xff) << 16 + | (long) (pData[caret++] & 0xff) << 8 | pData[caret++] & 0xff; + } + + /** + * Reads the string which is formed by the unread portion of the payload. + * + * @return A String + */ + public String readString() { + return readString(pLength - caret); + } + + public String readRS2String() { + int start = caret; + while (pData[caret++] != 0) { + ; + } + return new String(pData, start, caret - start - 1); + } + + public void readBytes(byte[] buf, int off, int len) { + for (int i = 0; i < len; i++) { + buf[off + i] = pData[caret++]; + } + } + + /** + * Reads a string of the specified length from the payload. + * + * @param length + * The length of the string to be read + * @return A String + */ + public String readString(int length) { + String rv = new String(pData, caret, length); + caret += length; + return rv; + } + + /** + * Skips the specified number of bytes in the payload. + * + * @param x + * The number of bytes to be skipped + */ + public void skip(int x) { + caret += x; + } + + public int remaining() { + return pData.length - caret; + } + + /** + * Returns this packet in string form. + * + * @return A String representing this packet + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("[id=" + pID + ",len=" + pLength + ",data=0x"); + for (int x = 0; x < pLength; x++) { + sb.append(byteToHex(pData[x], true)); + } + sb.append("]"); + return sb.toString(); + } + + private static String byteToHex(byte b, boolean forceLeadingZero) { + StringBuilder out = new StringBuilder(); + int ub = b & 0xff; + if (ub / 16 > 0 || forceLeadingZero) { + out.append(hex[ub / 16]); + } + out.append(hex[ub % 16]); + return out.toString(); + } + + private static final char[] hex = "0123456789ABCDEF".toCharArray(); + + public int readShortA() { + caret += 2; + return ((pData[caret - 2] & 0xFF) << 8) + + (pData[caret - 1] - 128 & 0xFF); + } + + public byte readByteC() { + return (byte) -readByte(); + } + + public byte readByteS() { + return (byte) (128 - readByte()); + } + +} diff --git a/2006Redone Server/src/redone/net/PacketBuffer.java b/2006Redone Server/src/redone/net/PacketBuffer.java new file mode 100644 index 00000000..f1c7ff15 --- /dev/null +++ b/2006Redone Server/src/redone/net/PacketBuffer.java @@ -0,0 +1,104 @@ +package redone.net; + +/** + * Represents a packet buffer. + * + * @author Ultimate1 + * @author blakeman8192 + */ + +public class PacketBuffer { + + private int caret; + private byte[] buffer; + + public PacketBuffer(int capcity) { + buffer = new byte[capcity]; + caret = 0; + } + + public void setBuffer(byte[] buffer) { + this.buffer = buffer; + caret = 0; + } + + public PacketBuffer setOpcode(int opcode) { + return addByte(opcode); + } + + public PacketBuffer addByte(int i) { + buffer[caret++] = (byte) i; + return this; + } + + public int getByte() { + return buffer[caret++] & 0xff; + } + + public PacketBuffer addBoolean(boolean val) { + return addByte(val == true ? 1 : 0); + } + + public boolean getBoolean() { + return getByte() == 1; + } + + public PacketBuffer addShort(int i) { + return addByte(i >> 8).addByte(i); + } + + public int getShort() { + return getByte() << 8 | getByte(); + } + + public PacketBuffer addInt(int i) { + return addShort(i >> 16).addShort(i); + } + + public int getInt() { + return getShort() << 16 | getShort(); + } + + public PacketBuffer addLong(long i) { + return addInt((int) (i >> 32)).addInt((int) i); + } + + public long getLong() { + return (long) getInt() << 32L | getInt(); + } + + public PacketBuffer addString(String s) { + for (byte b : s.getBytes()) { + addByte(b); + } + return addByte('\n'); + } + + public String getString() { + int c; + StringBuilder builder = new StringBuilder(); + while ((c = getByte()) != '\n') { + builder.append((char) c); + } + return builder.toString(); + } + + public byte[] getBuffer() { + byte[] newBuffer = new byte[caret + 1]; + newBuffer[0] = (byte) caret; + System.arraycopy(buffer, 0, newBuffer, 1, caret); + return newBuffer; + } + + public int getLength() { + return buffer.length; + } + + public void reset() { + caret = 0; + for (int i = 0; i < buffer.length; i++) { + buffer[i] = 0; + } + buffer = null; + } +} diff --git a/2006Redone Server/src/redone/net/PacketBuilder.java b/2006Redone Server/src/redone/net/PacketBuilder.java new file mode 100644 index 00000000..78c3dc6c --- /dev/null +++ b/2006Redone Server/src/redone/net/PacketBuilder.java @@ -0,0 +1,10 @@ +package redone.net; + +/** + * Packet builder interface + * + * @author Graham + */ +public interface PacketBuilder { + +} diff --git a/2006Redone Server/src/redone/net/RS2LoginProtocolDecoder.java b/2006Redone Server/src/redone/net/RS2LoginProtocolDecoder.java new file mode 100644 index 00000000..ea83eaeb --- /dev/null +++ b/2006Redone Server/src/redone/net/RS2LoginProtocolDecoder.java @@ -0,0 +1,301 @@ +package redone.net; + +import java.math.BigInteger; +import java.net.InetSocketAddress; + +import org.apache.mina.common.ByteBuffer; +import org.apache.mina.common.IoFuture; +import org.apache.mina.common.IoFutureListener; +import org.apache.mina.common.IoSession; +import org.apache.mina.filter.codec.CumulativeProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolCodecFilter; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; + +import redone.Connection; +import redone.Constants; +import redone.Server; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.game.players.PlayerSave; +import redone.util.HostBlacklist; +import redone.util.ISAACRandomGen; + +/** + * Login protocol decoder. + * + * @author Graham + * @author Ryan / Lmctruck30 <- login Protocol fixes + */ + +public class RS2LoginProtocolDecoder extends CumulativeProtocolDecoder { + + private static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + private static final BigInteger RSA_EXPONENT = new BigInteger("33280025241734061313051117678670856264399753710527826596057587687835856000539511539311834363046145710983857746766009612538140077973762171163294453513440619295457626227183742315140865830778841533445402605660729039310637444146319289077374748018792349647460850308384280105990607337322160553135806205784213241305"); + + + /** + * Parses the data in the provided byte buffer and writes it to + * out as a Packet. + * + * @param session + * The IoSession the data was read from + * @param in + * The buffer + * @param out + * The decoder output stream to which to write the + * Packet + * @return Whether enough data was available to create a packet + */ + @Override + public boolean doDecode(IoSession session, ByteBuffer in, + ProtocolDecoderOutput out) { + synchronized (session) { + Object loginStageObj = session.getAttribute("LOGIN_STAGE"); + int loginStage = 0; + if (loginStageObj != null) { + loginStage = (Integer) loginStageObj; + } + // Logger.log("recv login packet, stage: "+loginStage); + switch (loginStage) { + case 0: + if (2 <= in.remaining()) { + int protocol = in.get() & 0xff; + @SuppressWarnings("unused") + int nameHash = in.get() & 0xff; + if (protocol == 14) { + long serverSessionKey = ((long) (java.lang.Math + .random() * 99999999D) << 32) + + (long) (java.lang.Math.random() * 99999999D); + StaticPacketBuilder s1Response = new StaticPacketBuilder(); + s1Response + .setBare(true) + .addBytes(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }) + .addByte((byte) 0).addLong(serverSessionKey); + session.setAttribute("SERVER_SESSION_KEY", + serverSessionKey); + session.write(s1Response.toPacket()); + session.setAttribute("LOGIN_STAGE", 1); + } + return true; + } else { + in.rewind(); + return false; + } + case 1: + @SuppressWarnings("unused") + int loginType = -1, + loginPacketSize = -1, + loginEncryptPacketSize = -1; + if (2 <= in.remaining()) { + loginType = in.get() & 0xff; // should be 16 or 18 + loginPacketSize = in.get() & 0xff; + loginEncryptPacketSize = loginPacketSize - (36 + 1 + 1 + 2); + if (loginPacketSize <= 0 || loginEncryptPacketSize <= 0) { + System.out.println("Zero or negative login size."); + session.close(); + return false; + } + } else { + in.rewind(); + return false; + } + if (loginPacketSize <= in.remaining()) { + int magic = in.get() & 0xff; + int version = in.getUnsignedShort(); + if (magic != 255) { + // System.out.println("Wrong magic id."); + session.close(); + return false; + } + if (version != 1) { + // Dont Add Anything + } + @SuppressWarnings("unused") + int lowMem = in.get() & 0xff; + for (int i = 0; i < 9; i++) { + in.getInt(); + } + loginEncryptPacketSize--; + if(loginEncryptPacketSize != (in.get() & 0xff)) { + System.out.println("Encrypted size mismatch."); + session.close(); + return false; + } + byte[] encryptionBytes = new byte[loginEncryptPacketSize]; + in.get(encryptionBytes); + ByteBuffer rsaBuffer = ByteBuffer.wrap(new BigInteger(encryptionBytes).modPow(RSA_EXPONENT, RSA_MODULUS).toByteArray()); + if((rsaBuffer.get() & 0xff) != 10) { + System.out.println("Encrypted id != 10."); + session.close(); + return false; + } + long clientSessionKey = rsaBuffer.getLong(); + long serverSessionKey = rsaBuffer.getLong(); + int uid = rsaBuffer.getInt(); + if(uid != 314268572) { + session.close(); + return false; + } + String name = readRS2String(rsaBuffer); + String pass = readRS2String(rsaBuffer); + int sessionKey[] = new int[4]; + sessionKey[0] = (int) (clientSessionKey >> 32); + sessionKey[1] = (int) clientSessionKey; + sessionKey[2] = (int) (serverSessionKey >> 32); + sessionKey[3] = (int) serverSessionKey; + ISAACRandomGen inC = new ISAACRandomGen(sessionKey); + for (int i = 0; i < 4; i++) + sessionKey[i] += 50; + ISAACRandomGen outC = new ISAACRandomGen(sessionKey); + load(session, uid, name, pass, inC, outC, version); + session.getFilterChain().remove("protocolFilter"); + session.getFilterChain().addLast("protocolFilter", new ProtocolCodecFilter(new GameCodecFactory(inC))); + return true; + } else { + in.rewind(); + return false; + } + } + } + return false; + } + + + private synchronized void load(final IoSession session, final int uid, + String name, String pass, final ISAACRandomGen inC, + ISAACRandomGen outC, int version) { + session.setAttribute("opcode", -1); + session.setAttribute("size", -1); + int returnCode = 2; + + name = name.trim(); + name = name.toLowerCase(); + // pass = pass.toLowerCase(); + + String hostName = ((InetSocketAddress) session.getRemoteAddress()) + .getAddress().getHostName(); + + //if (version != 1) { + //returnCode = 31; + //d} + + if (HostBlacklist.isBlocked(hostName)) { + returnCode = 11; + } + + if (!name.matches("[A-Za-z0-9 ]+")) { + returnCode = 4; + } + + if (name.length() > 12) { + returnCode = 8; + } + + Client cl = new Client(session, -1); + cl.playerName = name; + cl.playerName2 = cl.playerName; + cl.playerPass = pass; + + cl.setInStreamDecryption(inC); + cl.setOutStreamDecryption(outC); + cl.outStream.packetEncryption = outC; + cl.saveCharacter = false; + char first = name.charAt(0); + cl.properName = Character.toUpperCase(first) + + name.substring(1, name.length()); + + if (Connection.isNamedBanned(cl.playerName)) { + returnCode = 4; + } + + + if (PlayerHandler.isPlayerOn(name)) { + returnCode = 5; + } + + if (PlayerHandler.playerCount >= Constants.MAX_PLAYERS) { + returnCode = 7; + } + + if (Server.UpdateServer) { + returnCode = 14; + } + + if (returnCode == 2) { + int load = PlayerSave.loadGame(cl, cl.playerName, cl.playerPass); + if (load == 0) { + cl.addStarter = true; + } + if (load == 3) { + returnCode = 3; + cl.saveFile = false; + } else { + for (int i = 0; i < cl.playerEquipment.length; i++) { + if (cl.playerEquipment[i] == 0) { + cl.playerEquipment[i] = -1; + cl.playerEquipmentN[i] = 0; + } + } + if (!Server.playerHandler.newPlayerClient(cl)) { + returnCode = 7; + cl.saveFile = false; + } else { + cl.saveFile = true; + } + } + } + + cl.packetType = -1; + cl.packetSize = 0; + + StaticPacketBuilder bldr = new StaticPacketBuilder(); + bldr.setBare(true); + bldr.addByte((byte) returnCode); + if (returnCode == 2) { + cl.saveCharacter = true; + if (cl.playerRights == 3) { + bldr.addByte((byte) 2); + } else { + bldr.addByte((byte) cl.playerRights); + } + } else { + bldr.addByte((byte) 0); + } + bldr.addByte((byte) 0); + cl.isActive = true; + Packet pkt = bldr.toPacket(); + session.setAttachment(cl); + session.write(pkt).addListener(new IoFutureListener() { + + @Override + public void operationComplete(IoFuture arg0) { + session.getFilterChain().remove("protocolFilter"); + session.getFilterChain().addFirst("protocolFilter", + new ProtocolCodecFilter(new GameCodecFactory(inC))); + } + }); + } + + private synchronized String readRS2String(ByteBuffer in) { + StringBuilder sb = new StringBuilder(); + byte b; + while ((b = in.get()) != 10) { + sb.append((char) b); + } + return sb.toString(); + } + + /** + * Releases the buffer used by the given session. + * + * @param session + * The session for which to release the buffer + * @throws Exception + * if failed to dispose all resources + */ + @Override + public void dispose(IoSession session) throws Exception { + super.dispose(session); + } + +} diff --git a/2006Redone Server/src/redone/net/RS2ProtocolDecoder.java b/2006Redone Server/src/redone/net/RS2ProtocolDecoder.java new file mode 100644 index 00000000..4ab759f7 --- /dev/null +++ b/2006Redone Server/src/redone/net/RS2ProtocolDecoder.java @@ -0,0 +1,145 @@ +package redone.net; + +import org.apache.mina.common.ByteBuffer; +import org.apache.mina.common.IoSession; +import org.apache.mina.filter.codec.CumulativeProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; + +import redone.game.players.Client; +import redone.util.ISAACRandomGen; + +public class RS2ProtocolDecoder extends CumulativeProtocolDecoder { + + private final ISAACRandomGen isaac; + + /** + * To make sure only the CodecFactory can initialise us. + */ + protected RS2ProtocolDecoder(ISAACRandomGen isaac) { + this.isaac = isaac; + } + + /** + * Decodes a message. + * + * @param session + * @param in + * @param out + * @return + */ + @Override + protected boolean doDecode(IoSession session, ByteBuffer in, + ProtocolDecoderOutput out) throws Exception { + synchronized (session) { + /* + * Fetch the ISAAC cipher for this session. + */ + // ISAACRandomGen inCipher = ((Player) + // session.getAttribute("player")).getInStreamDecryption(); + + /* + * Fetch any cached opcodes and sizes, reset to -1 if not present. + */ + int opcode = (Integer) session.getAttribute("opcode"); + int size = (Integer) session.getAttribute("size"); + + /* + * If the opcode is not present. + */ + if (opcode == -1) { + /* + * Check if it can be read. + */ + if (in.remaining() >= 1) { + /* + * Read and decrypt the opcode. + */ + opcode = in.get() & 0xFF; + opcode = opcode - isaac.getNextKey() & 0xFF; + + /* + * Find the packet size. + */ + size = Client.PACKET_SIZES[opcode]; + + /* + * Set the cached opcode and size. + */ + session.setAttribute("opcode", opcode); + session.setAttribute("size", size); + } else { + /* + * We need to wait for more data. + */ + return false; + } + } + + /* + * If the packet is variable-length. + */ + if (size == -1) { + /* + * Check if the size can be read. + */ + if (in.remaining() >= 1) { + /* + * Read the packet size and cache it. + */ + size = in.get() & 0xFF; + session.setAttribute("size", size); + } else { + /* + * We need to wait for more data. + */ + return false; + } + } + + /* + * If the packet payload (data) can be read. + */ + if (in.remaining() >= size) { + /* + * Read it. + */ + byte[] data = new byte[size]; + in.get(data); + ByteBuffer payload = ByteBuffer.allocate(data.length); + payload.put(data); + payload.flip(); + + /* + * Produce and write the packet object. + */ + out.write(new Packet(session, opcode, data)); + + /* + * Reset the cached opcode and sizes. + */ + session.setAttribute("opcode", -1); + session.setAttribute("size", -1); + + /* + * Indicate we are ready to read another packet. + */ + return true; + } + + /* + * We need to wait for more data. + */ + return false; + } + } + + @Override + /** + * Releases resources used by this decoder. + * @param session + */ + public void dispose(IoSession session) throws Exception { + super.dispose(session); + } + +} diff --git a/2006Redone Server/src/redone/net/RS2ProtocolEncoder.java b/2006Redone Server/src/redone/net/RS2ProtocolEncoder.java new file mode 100644 index 00000000..d16b05d6 --- /dev/null +++ b/2006Redone Server/src/redone/net/RS2ProtocolEncoder.java @@ -0,0 +1,82 @@ +package redone.net; + +import org.apache.mina.common.ByteBuffer; +import org.apache.mina.common.IoSession; +import org.apache.mina.filter.codec.ProtocolEncoder; +import org.apache.mina.filter.codec.ProtocolEncoderOutput; + +public class RS2ProtocolEncoder implements ProtocolEncoder { + + /** + * Only CodecFactory can create us. + */ + protected RS2ProtocolEncoder() { + } + + @Override + /** + * Encodes a message. + * @param session + * @param message + * @param out + */ + public void encode(IoSession session, Object message, + ProtocolEncoderOutput out) throws Exception { + try { + synchronized (session) { + Packet p = (Packet) message; + byte[] data = p.getData(); + int dataLength = p.getLength(); + ByteBuffer buffer; + if (!p.isBare()) { + buffer = ByteBuffer.allocate(dataLength + 3); + int id = p.getId(); + buffer.put((byte) id); + if (p.getSize() != Packet.Size.Fixed) { // variable length + // Logger.log("variable length: id="+id+",dataLength="+dataLength); + if (p.getSize() == Packet.Size.VariableByte) { + if (dataLength > 255) { + // then we can represent + // with 8 bits! + throw new IllegalArgumentException( + "Tried to send packet length " + + dataLength + + " in 8 bits [pid=" + + p.getId() + "]"); + } + buffer.put((byte) dataLength); + } else if (p.getSize() == Packet.Size.VariableShort) { + if (dataLength > 65535) { + // then we can represent + // with 16 bits! + throw new IllegalArgumentException( + "Tried to send packet length " + + dataLength + + " in 16 bits [pid=" + + p.getId() + "]"); + } + buffer.put((byte) (dataLength >> 8)); + buffer.put((byte) dataLength); + } + } + } else { + buffer = ByteBuffer.allocate(dataLength); + } + buffer.put(data, 0, dataLength); + buffer.flip(); + out.write(buffer); + } + } catch (Exception err) { + err.printStackTrace(); + } + } + + @Override + /** + * Releases resources used by this encoder. + * @param session + */ + public void dispose(IoSession session) throws Exception { + } + +} diff --git a/2006Redone Server/src/redone/net/StaticPacketBuilder.java b/2006Redone Server/src/redone/net/StaticPacketBuilder.java new file mode 100644 index 00000000..96389986 --- /dev/null +++ b/2006Redone Server/src/redone/net/StaticPacketBuilder.java @@ -0,0 +1,385 @@ +package redone.net; + +/** + * A mutable sequence of bytes used to construct the immutable + * Packet objects. By default, methods use big endian byte + * ordering. + */ +public class StaticPacketBuilder implements PacketBuilder { + + /** + * Default capacity + */ + private static final int DEFAULT_SIZE = 32; + /** + * The payload buffer + */ + private byte[] payload; + /** + * Current number of bytes used in the buffer + */ + private int curLength; + /** + * ID of the packet + */ + private int id; + /** + * Current index into the buffer by bits + */ + private int bitPosition = 0; + private Packet.Size size = Packet.Size.Fixed; + /** + * Whether this packet does not use the standard packet header + */ + private boolean bare = false; + + /** + * Bitmasks for addBits() + */ + private static int bitmasks[] = { 0, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, + 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff, 0xffff, + 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, + 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, + 0x3fffffff, 0x7fffffff, -1 }; + + /** + * Constructs a packet builder with no data and an initial capacity of + * DEFAULT_SIZE. + * + * @see DEFAULT_SIZE + */ + public StaticPacketBuilder() { + this(DEFAULT_SIZE); + } + + public byte[] getPayload() { + return payload; + } + + /** + * Constructs a packet builder with no data and an initial capacity of + * capacity. + * + * @param capacity + * The initial capacity of the buffer + */ + public StaticPacketBuilder(int capacity) { + payload = new byte[capacity]; + } + + /** + * Ensures that the buffer is at least minimumBytes bytes. + * + * @param minimumCapacity + * The size needed + */ + private void ensureCapacity(int minimumCapacity) { + if (minimumCapacity >= payload.length) { + expandCapacity(minimumCapacity); + } + } + + /** + * Expands the buffer to the specified size. + * + * @param minimumCapacity + * The minimum capacity to which to expand + * @see java.lang.AbstractStringBuilder#expandCapacity(int) + */ + private void expandCapacity(int minimumCapacity) { + int newCapacity = (payload.length + 1) * 2; + if (newCapacity < 0) { + newCapacity = Integer.MAX_VALUE; + } else if (minimumCapacity > newCapacity) { + newCapacity = minimumCapacity; + } + byte[] newPayload = new byte[newCapacity]; + try { + while (curLength > payload.length) { + curLength--; + } + System.arraycopy(payload, 0, newPayload, 0, curLength); + } catch (Exception e) { + + } + payload = newPayload; + } + + /** + * Sets this packet as bare. A bare packet will contain only the payload + * data, rather than having the standard packet header prepended. + * + * @param bare + * Whether this packet is to be sent bare + */ + public StaticPacketBuilder setBare(boolean bare) { + this.bare = bare; + return this; + } + + /** + * Sets the ID for this packet. + * + * @param id + * The ID of the packet + */ + public StaticPacketBuilder setId(int id) { + this.id = id; + return this; + } + + public StaticPacketBuilder setSize(Packet.Size s) { + size = s; + return this; + } + + public StaticPacketBuilder initBitAccess() { + bitPosition = curLength * 8; + return this; + } + + public StaticPacketBuilder finishBitAccess() { + curLength = (bitPosition + 7) / 8; + return this; + } + + /** + * TODO needs a proper description. + */ + public StaticPacketBuilder addBits(int numBits, int value) { + int bytePos = bitPosition >> 3; + int bitOffset = 8 - (bitPosition & 7); + bitPosition += numBits; + curLength = (bitPosition + 7) / 8; + ensureCapacity(curLength); + for (; numBits > bitOffset; bitOffset = 8) { + payload[bytePos] &= ~bitmasks[bitOffset]; // mask out the desired + // area + payload[bytePos++] |= value >> numBits - bitOffset + & bitmasks[bitOffset]; + + numBits -= bitOffset; + } + if (numBits == bitOffset) { + payload[bytePos] &= ~bitmasks[bitOffset]; + payload[bytePos] |= value & bitmasks[bitOffset]; + } else { + payload[bytePos] &= ~(bitmasks[numBits] << bitOffset - numBits); + payload[bytePos] |= (value & bitmasks[numBits]) << bitOffset + - numBits; + } + return this; + } + + /** + * Adds the contents of byte array data to the + * packet. The size of this packet will grow by the length of the provided + * array. + * + * @param data + * The bytes to add to this packet + * @return A reference to this object + */ + public StaticPacketBuilder addBytes(byte[] data) { + return addBytes(data, 0, data.length); + } + + /** + * Adds the contents of byte array data, starting + * at index offset. The size of this packet will grow by + * len bytes. + * + * @param data + * The bytes to add to this packet + * @param offset + * The index of the first byte to append + * @param len + * The number of bytes to append + * @return A reference to this object + */ + public StaticPacketBuilder addBytes(byte[] data, int offset, int len) { + int newLength = curLength + len; + ensureCapacity(newLength); + System.arraycopy(data, offset, payload, curLength, len); + curLength = newLength; + return this; + } + + public StaticPacketBuilder addLEShortA(int i) { + ensureCapacity(curLength + 2); + addByte((byte) (i + 128), false); + addByte((byte) (i >> 8), false); + return this; + } + + public StaticPacketBuilder addShortA(int i) { + ensureCapacity(curLength + 2); + addByte((byte) (i >> 8), false); + addByte((byte) (i + 128), false); + return this; + } + + /** + * Adds a byte to the data buffer. The size of this packet will + * grow by one byte. + * + * @param val + * The byte value to add + * @return A reference to this object + */ + public StaticPacketBuilder addByte(byte val) { + return addByte(val, true); + } + + public StaticPacketBuilder addByteA(int i) { + return addByte((byte) (i + 128), true); + } + + /** + * Adds a byte to the data buffer. The size of this packet will + * grow by one byte. + * + * @param val + * The byte value to add + * @param checkCapacity + * Whether the buffer capacity should be checked + * @return A reference to this object + */ + private StaticPacketBuilder addByte(byte val, boolean checkCapacity) { + if (checkCapacity) { + ensureCapacity(curLength + 1); + } + payload[curLength++] = val; + return this; + } + + /** + * Adds a short to the data stream. The size of this packet + * will grow by two bytes. + * + * @param val + * The short value to add + * @return A reference to this object + */ + public StaticPacketBuilder addShort(int val) { + ensureCapacity(curLength + 2); + addByte((byte) (val >> 8), false); + addByte((byte) val, false); + return this; + } + + public StaticPacketBuilder addLEShort(int val) { + ensureCapacity(curLength + 2); + addByte((byte) val, false); + addByte((byte) (val >> 8), false); + return this; + } + + public StaticPacketBuilder setShort(int val, int offset) { + payload[offset++] = (byte) (val >> 8); + payload[offset++] = (byte) val; + if (curLength < offset + 2) { + curLength += 2; + } + return this; + } + + /** + * Adds a int to the data stream. The size of this packet will + * grow by four bytes. + * + * @param val + * The int value to add + * @return A reference to this object + */ + public StaticPacketBuilder addInt(int val) { + ensureCapacity(curLength + 4); + addByte((byte) (val >> 24), false); + addByte((byte) (val >> 16), false); + addByte((byte) (val >> 8), false); + addByte((byte) val, false); + return this; + } + + public StaticPacketBuilder addInt1(int val) { + ensureCapacity(curLength + 4); + addByte((byte) (val >> 8), false); + addByte((byte) val, false); + addByte((byte) (val >> 24), false); + addByte((byte) (val >> 16), false); + return this; + } + + public StaticPacketBuilder addInt2(int val) { + ensureCapacity(curLength + 4); + addByte((byte) (val >> 16), false); + addByte((byte) (val >> 24), false); + addByte((byte) val, false); + addByte((byte) (val >> 8), false); + return this; + } + + public StaticPacketBuilder addLEInt(int val) { + ensureCapacity(curLength + 4); + addByte((byte) val, false); + addByte((byte) (val >> 8), false); + addByte((byte) (val >> 16), false); + addByte((byte) (val >> 24), false); + return this; + } + + /** + * Adds a long to the data stream. The size of this packet will + * grow by eight bytes. + * + * @param val + * The long value to add + * @return A reference to this object + */ + public StaticPacketBuilder addLong(long val) { + addInt((int) (val >> 32)); + addInt((int) (val & -1L)); + return this; + } + + public StaticPacketBuilder addLELong(long val) { + addLEInt((int) (val & -1L)); + addLEInt((int) (val >> 32)); + return this; + } + + @SuppressWarnings("deprecation") + public StaticPacketBuilder addString(String s) { + ensureCapacity(curLength + s.length() + 1); + s.getBytes(0, s.length(), payload, curLength); + curLength += s.length(); + payload[curLength++] = 0; + return this; + } + + public int getLength() { + return curLength; + } + + /** + * Returns a Packet object for the data contained in this + * builder. + * + * @return A Packet object + */ + public Packet toPacket() { + byte[] data = new byte[curLength]; + System.arraycopy(payload, 0, data, 0, curLength); + return new Packet(null, id, data, bare, size); + } + + public StaticPacketBuilder addByteC(int val) { + addByte((byte) -val); + return this; + } + + public StaticPacketBuilder addByteS(int val) { + addByte((byte) (128 - val)); + return this; + } +} diff --git a/2006Redone Server/src/redone/net/packets/PacketHandler.java b/2006Redone Server/src/redone/net/packets/PacketHandler.java new file mode 100644 index 00000000..c933b340 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/PacketHandler.java @@ -0,0 +1,176 @@ +package redone.net.packets; + +import redone.Constants; +import redone.game.dialogues.Dialogue; +import redone.game.players.Client; +import redone.net.packets.impl.AttackPlayer; +import redone.net.packets.impl.Bank10; +import redone.net.packets.impl.Bank5; +import redone.net.packets.impl.BankAll; +import redone.net.packets.impl.BankX1; +import redone.net.packets.impl.BankX2; +import redone.net.packets.impl.ChallengePlayer; +import redone.net.packets.impl.ChangeAppearance; +import redone.net.packets.impl.ChangeRegions; +import redone.net.packets.impl.Chat; +import redone.net.packets.impl.ClanChat; +import redone.net.packets.impl.ClickItem; +import redone.net.packets.impl.ClickNPC; +import redone.net.packets.impl.ClickObject; +import redone.net.packets.impl.ClickTab; +import redone.net.packets.impl.ClickingButtons; +import redone.net.packets.impl.ClickingInGame; +import redone.net.packets.impl.ClickingStuff; +import redone.net.packets.impl.Commands; +import redone.net.packets.impl.DropItem; +import redone.net.packets.impl.FollowPlayer; +import redone.net.packets.impl.IdleLogout; +import redone.net.packets.impl.ItemClick2; +import redone.net.packets.impl.ItemClick2OnGroundItem; +import redone.net.packets.impl.ItemClick3; +import redone.net.packets.impl.ItemOnGroundItem; +import redone.net.packets.impl.ItemOnItem; +import redone.net.packets.impl.ItemOnNpc; +import redone.net.packets.impl.ItemOnObject; +import redone.net.packets.impl.ItemOnPlayer; +import redone.net.packets.impl.MagicOnFloorItems; +import redone.net.packets.impl.MagicOnItems; +import redone.net.packets.impl.MoveItems; +import redone.net.packets.impl.PickupItem; +import redone.net.packets.impl.PrivateMessaging; +import redone.net.packets.impl.RemoveItem; +import redone.net.packets.impl.Report; +import redone.net.packets.impl.SilentPacket; +import redone.net.packets.impl.Trade; +import redone.net.packets.impl.Walking; +import redone.net.packets.impl.WearItem; + +public class PacketHandler { + + private static PacketType packetId[] = new PacketType[256]; + + static { + + SilentPacket u = new SilentPacket(); + packetId[3] = u; + packetId[202] = u; + packetId[77] = u; + packetId[86] = u; + packetId[78] = u; + packetId[36] = u; + packetId[226] = u; + packetId[246] = u; + packetId[148] = u; + packetId[183] = u; + packetId[230] = u; + packetId[136] = u; + packetId[189] = u; + packetId[152] = u; + packetId[200] = u; + packetId[85] = u; + packetId[165] = u; + packetId[238] = u; + packetId[150] = u; + packetId[60] = new ClanChat(); + packetId[120] = new ClickTab(); + packetId[14] = new ItemOnPlayer(); + packetId[40] = new Dialogue(); + ClickObject co = new ClickObject(); + packetId[132] = co; + packetId[252] = co; + packetId[70] = co; + packetId[234] = co; + packetId[57] = new ItemOnNpc(); + ClickNPC cn = new ClickNPC(); + packetId[72] = cn; + packetId[131] = cn; + packetId[155] = cn; + packetId[17] = cn; + packetId[21] = cn; + packetId[218] = new Report(); + packetId[16] = new ItemClick2(); + packetId[75] = new ItemClick3(); + packetId[122] = new ClickItem(); + packetId[241] = new ClickingInGame(); + packetId[4] = new Chat(); + packetId[236] = new PickupItem(); + packetId[87] = new DropItem(); + packetId[185] = new ClickingButtons(); + packetId[130] = new ClickingStuff(); + packetId[103] = new Commands(); + packetId[214] = new MoveItems(); + packetId[237] = new MagicOnItems(); + packetId[181] = new MagicOnFloorItems(); + packetId[202] = new IdleLogout(); + AttackPlayer ap = new AttackPlayer(); + packetId[73] = ap; + packetId[249] = ap; + packetId[128] = new ChallengePlayer(); + packetId[139] = new Trade(); + packetId[39] = new FollowPlayer(); + packetId[41] = new WearItem(); + packetId[145] = new RemoveItem(); + packetId[117] = new Bank5(); + packetId[43] = new Bank10(); + packetId[129] = new BankAll(); + packetId[101] = new ChangeAppearance(); + PrivateMessaging pm = new PrivateMessaging(); + packetId[188] = pm; + packetId[126] = pm; + packetId[215] = pm; + packetId[59] = pm; + packetId[95] = pm; + packetId[133] = pm; + packetId[135] = new BankX1(); + packetId[208] = new BankX2(); + Walking w = new Walking(); + packetId[98] = w; + packetId[164] = w; + packetId[248] = w; + packetId[53] = new ItemOnItem(); + packetId[192] = new ItemOnObject(); + packetId[25] = new ItemOnGroundItem(); + ChangeRegions cr = new ChangeRegions(); + packetId[121] = cr; + packetId[210] = cr; + packetId[253] = new ItemClick2OnGroundItem(); + // packetId[ContinueDialoguePacketHandler.CONTINUE] = new + // ContinueDialoguePacketHandler(); + } + + /*public static void processPacket(Client c, int packetType, int packetSize) { + if (packetType == -1) { + return; + } + PacketType p = packetId[packetType]; + if (p != null) { + try { + // System.out.println("packet: " + packetType); + p.processPacket(c, packetType, packetSize); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + System.out.println("Unhandled packet type: " + packetType + + " - size: " + packetSize); + } + }*/ + + public static void processPacket(Client c, int packetType, int packetSize) { + PacketType p = packetId[packetType]; + if(p != null && packetType > 0 && packetType < 257 && packetType == c.packetType && packetSize == c.packetSize) { + if (Constants.sendServerPackets && c.playerRights == 3) { + c.getActionSender().sendMessage("PacketType: " + packetType + ". PacketSize: " + packetSize + "."); + } + try { + p.processPacket(c, packetType, packetSize); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + c.disconnected = true; + System.out.println(c.playerName + "is sending invalid PacketType: " + packetType + ". PacketSize: " + packetSize); + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/PacketType.java b/2006Redone Server/src/redone/net/packets/PacketType.java new file mode 100644 index 00000000..286f161d --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/PacketType.java @@ -0,0 +1,8 @@ +package redone.net.packets; + +import redone.game.players.Client; + +public interface PacketType { + + public void processPacket(Client c, int packetType, int packetSize); +} diff --git a/2006Redone Server/src/redone/net/packets/impl/AttackPlayer.java b/2006Redone Server/src/redone/net/packets/impl/AttackPlayer.java new file mode 100644 index 00000000..47450bd8 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/AttackPlayer.java @@ -0,0 +1,309 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.game.content.combat.magic.CastOnOther; +import redone.game.content.combat.magic.MagicData; +import redone.game.content.combat.range.RangeData; +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; + +/** + * Attack Player + **/ +public class AttackPlayer implements PacketType { + + public static final int ATTACK_PLAYER = 73, MAGE_PLAYER = 249; + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + c.playerIndex = 0; + c.npcIndex = 0; + switch (packetType) { + + /** + * Attack player + **/ + case ATTACK_PLAYER: + c.playerIndex = c.getInStream().readSignedWordBigEndian(); + if (PlayerHandler.players[c.playerIndex] == null) { + break; + } + + if (c.inDuelArena() && !c.duelingArena()) { + c.getChallengePlayer().processPacket(c, packetType, packetSize); + } + + if (c.respawnTimer > 0) { + break; + } + + if (c.autocastId > 0) { + c.autocasting = true; + } + + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't attack players, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + + if (!c.autocasting && c.spellId > 0) { + c.spellId = 0; + } + c.mageFollow = false; + c.spellId = 0; + c.usingMagic = false; + boolean usingBow = false; + boolean usingOtherRangeWeapons = false; + boolean usingArrows = false; + boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185; + for (int bowId : RangeData.BOWS) { + if (c.playerEquipment[c.playerWeapon] == bowId) { + usingBow = true; + for (int arrowId : RangeData.ARROWS) { + if (c.playerEquipment[c.playerArrows] == arrowId) { + usingArrows = true; + } + } + } + } + for (int otherRangeId : RangeData.OTHER_RANGE_WEAPONS) { + if (c.playerEquipment[c.playerWeapon] == otherRangeId) { + usingOtherRangeWeapons = true; + } + } + if (c.duelStatus == 5) { + if (c.duelCount > 0) { + c.getActionSender().sendMessage( + "The duel hasn't started yet!"); + c.playerIndex = 0; + return; + } + if (c.duelRule[9]) { + boolean canUseWeapon = false; + for (int funWeapon : Constants.FUN_WEAPONS) { + if (c.playerEquipment[c.playerWeapon] == funWeapon) { + canUseWeapon = true; + } + } + if (!canUseWeapon) { + c.getActionSender().sendMessage( + "You can only use fun weapons in this duel!"); + return; + } + } + + if (c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) { + c.getActionSender().sendMessage( + "Range has been disabled in this duel!"); + return; + } + if (c.duelRule[3] && !usingBow && !usingOtherRangeWeapons) { + c.getActionSender().sendMessage( + "Melee has been disabled in this duel!"); + return; + } + } + + if ((usingBow || c.autocasting) + && c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[c.playerIndex].getX(), + PlayerHandler.players[c.playerIndex].getY(), 6)) { + c.usingBow = true; + c.stopMovement(); + } + + if (usingOtherRangeWeapons + && c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[c.playerIndex].getX(), + PlayerHandler.players[c.playerIndex].getY(), 3)) { + c.usingRangeWeapon = true; + c.stopMovement(); + } + if (!usingBow) { + c.usingBow = false; + } + if (!usingOtherRangeWeapons) { + c.usingRangeWeapon = false; + } + + if (!usingCross && !usingArrows && usingBow + && c.playerEquipment[c.playerWeapon] < 4212 + && c.playerEquipment[c.playerWeapon] > 4223) { + c.getActionSender().sendMessage( + "You have run out of arrows!"); + return; + } + if (RangeData.correctBowAndArrows(c) < c.playerEquipment[c.playerArrows] + && Constants.CORRECT_ARROWS + && usingBow + && !RangeData.usingCrystalBow(c) + && c.playerEquipment[c.playerWeapon] != 9185) { + c.getActionSender().sendMessage( + "You can't use " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerArrows]) + .toLowerCase() + + "s with a " + + ItemAssistant.getItemName( + c.playerEquipment[c.playerWeapon]) + .toLowerCase() + "."); + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + return; + } + if (c.playerEquipment[c.playerWeapon] == 9185 + && !c.getCombatAssistant().properBolts()) { + c.getActionSender().sendMessage( + "You must use bolts with a crossbow."); + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + return; + } + if (c.getCombatAssistant().checkReqs()) { + c.followId = c.playerIndex; + if (!c.usingMagic && !usingBow && !usingOtherRangeWeapons) { + c.followDistance = 1; + c.getPlayerAssistant().followPlayer(); + } + if (c.attackTimer <= 0) { + // c.getPacketDispatcher().sendMessage("Tried to attack..."); + // c.getCombat().attackPlayer(c.playerIndex); + // c.attackTimer++; + } + } + break; + + /** + * Attack player with magic + **/ + case MAGE_PLAYER: + if (!c.mageAllowed) { + c.mageAllowed = true; + break; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't mage players, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + // c.usingSpecial = false; + // c.getItems().updateSpecialBar(); + + c.playerIndex = c.getInStream().readSignedWordA(); + int castingSpellId = c.getInStream().readSignedWordBigEndian(); + c.usingMagic = false; + + boolean teleother = CastOnOther.castOnOtherSpells(c); + + if (PlayerHandler.players[c.playerIndex] == null) { + break; + } + + if (c.respawnTimer > 0) { + break; + } + + if (c.playerRights == 3) { + c.getActionSender().sendMessage( + "Casting Spell id: " + c.castingSpellId + "."); + } + switch (c.castingSpellId) { + case 12425: + CastOnOther.teleOtherDistance(c, 1, c.playerIndex); + break; + case 12435: + CastOnOther.teleOtherDistance(c, 1, c.playerIndex); + break; + case 12455: + CastOnOther.teleOtherDistance(c, 2, c.playerIndex); + break; + } + if (teleother) { + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + if (c.inTrade) { + c.getTrading().declineTrade(true); + } + } + + for (int i = 0; i < MagicData.MAGIC_SPELLS.length; i++) { + if (castingSpellId == MagicData.MAGIC_SPELLS[i][0]) { + c.spellId = i; + c.usingMagic = true; + break; + } + } + + if (c.autocasting) { + c.autocasting = false; + } + + if (!teleother) { + if (!c.getCombatAssistant().checkReqs()) { + break; + } + + if (c.duelStatus == 5) { + if (c.duelCount > 0) { + c.getActionSender().sendMessage( + "The duel hasn't started yet!"); + c.playerIndex = 0; + return; + } + if (c.duelRule[4]) { + c.getActionSender().sendMessage( + "Magic has been disabled in this duel!"); + return; + } + } + + for (int r = 0; r < c.REDUCE_SPELLS.length; r++) { // reducing + // spells, + // confuse + // etc + if (PlayerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == MagicData.MAGIC_SPELLS[c.spellId][0]) { + if (System.currentTimeMillis() + - PlayerHandler.players[c.playerIndex].reduceSpellDelay[r] < PlayerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[r]) { + c.getActionSender() + .sendMessage( + "That player is currently immune to this spell."); + c.usingMagic = false; + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + } + break; + } + } + + if (System.currentTimeMillis() + - PlayerHandler.players[c.playerIndex].teleBlockDelay < PlayerHandler.players[c.playerIndex].teleBlockLength + && MagicData.MAGIC_SPELLS[c.spellId][0] == 12445) { + c.getActionSender().sendMessage( + "That player is already affected by this spell."); + c.usingMagic = false; + c.stopMovement(); + c.getCombatAssistant().resetPlayerAttack(); + } + + if (c.usingMagic) { + if (c.goodDistance(c.getX(), c.getY(), + PlayerHandler.players[c.playerIndex].getX(), + PlayerHandler.players[c.playerIndex].getY(), 7)) { + c.stopMovement(); + } + if (c.getCombatAssistant().checkReqs()) { + c.followId = c.playerIndex; + c.mageFollow = true; + } + } + } + break; + + } + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Bank10.java b/2006Redone Server/src/redone/net/packets/impl/Bank10.java new file mode 100644 index 00000000..b23206b8 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Bank10.java @@ -0,0 +1,98 @@ +package redone.net.packets.impl; + +import redone.game.content.random.PartyRoom; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Bank 10 Items + **/ +public class Bank10 implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int interfaceId = player.getInStream().readUnsignedWordBigEndian(); + int removeId = player.getInStream().readUnsignedWordA(); + int removeSlot = player.getInStream().readUnsignedWordA(); + + switch (interfaceId) { + + case 4233: + case 4239: + case 4245: + JewelryMaking.mouldItem(player, removeId, 10); + break; + + case 1688: + player.getPlayerAssistant().useOperate(removeId); + break; + case 3900: + player.getShopAssistant().buyItem(removeId, removeSlot, 5); + break; + + case 3823: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + player.getShopAssistant().sellItem(removeId, removeSlot, 5); + break; + + case 7423: + if (player.storing) { + return; + } + player.getItemAssistant().bankItem(removeId, removeSlot, 10); + player.getItemAssistant().resetItems(7423); + break; + + case 5064: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + if (player.inPartyRoom) { + PartyRoom.depositItem(player, removeId, 10); + break; + } + if (player.inTrade) { + player.getActionSender().sendMessage("You can't store items while trading!"); + return; + } + player.getItemAssistant().bankItem(removeId, removeSlot, 10); + break; + + case 5382: + player.getItemAssistant().fromBank(removeId, removeSlot, 10); + break; + + case 3322: + if (player.duelStatus <= 0) { + player.getTrading().tradeItem(removeId, removeSlot, 10); + } else { + player.getDueling().stakeItem(removeId, removeSlot, 10); + } + break; + + case 3415: + if (player.duelStatus <= 0) { + player.getTrading().fromTrade(removeId, removeSlot, 10); + } + break; + + case 6669: + player.getDueling().fromDuel(removeId, removeSlot, 10); + break; + + case 1119: + case 1120: + case 1121: + case 1122: + case 1123: + player.getSmithing().readInput(player.playerLevel[player.playerSmithing], + Integer.toString(removeId), player, 10); + break; + + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Bank5.java b/2006Redone Server/src/redone/net/packets/impl/Bank5.java new file mode 100644 index 00000000..86861ebe --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Bank5.java @@ -0,0 +1,97 @@ +package redone.net.packets.impl; + +import redone.game.content.random.PartyRoom; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Bank 5 Items + **/ +public class Bank5 implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int interfaceId = player.getInStream().readSignedWordBigEndianA(); + int removeId = player.getInStream().readSignedWordBigEndianA(); + int removeSlot = player.getInStream().readSignedWordBigEndian(); + + switch (interfaceId) { + + case 4233: + case 4239: + case 4245: + JewelryMaking.mouldItem(player, removeId, 5); + break; + case 3900: + player.getShopAssistant().buyItem(removeId, removeSlot, 1); + break; + + case 3823: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + if (player.inTrade) { + player.getTrading().declineTrade(true); + } + player.getShopAssistant().sellItem(removeId, removeSlot, 1); + break; + + case 7423: + if (player.storing) { + return; + } + player.getItemAssistant().bankItem(removeId, removeSlot, 5); + player.getItemAssistant().resetItems(7423); + break; + + case 5064: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + if (player.inPartyRoom) { + PartyRoom.depositItem(player, removeId, 5); + break; + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't store items while trading!"); + return; + } + player.getItemAssistant().bankItem(removeId, removeSlot, 5); + break; + + case 5382: + player.getItemAssistant().fromBank(removeId, removeSlot, 5); + break; + + case 3322: + if (player.duelStatus <= 0) { + player.getTrading().tradeItem(removeId, removeSlot, 5); + } else { + player.getDueling().stakeItem(removeId, removeSlot, 5); + } + break; + + case 3415: + if (player.duelStatus <= 0) { + player.getTrading().fromTrade(removeId, removeSlot, 5); + } + break; + + case 6669: + player.getDueling().fromDuel(removeId, removeSlot, 5); + break; + + case 1119: + case 1120: + case 1121: + case 1122: + case 1123: + player.getSmithing().readInput(player.playerLevel[player.playerSmithing], + Integer.toString(removeId), player, 5); + break; + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/BankAll.java b/2006Redone Server/src/redone/net/packets/impl/BankAll.java new file mode 100644 index 00000000..d2902c23 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/BankAll.java @@ -0,0 +1,134 @@ +package redone.net.packets.impl; + +import redone.game.content.random.PartyRoom; +import redone.game.items.GameItem; +import redone.game.items.Item; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Bank All Items + **/ +public class BankAll implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int removeSlot = player.getInStream().readUnsignedWordA(); + int interfaceId = player.getInStream().readUnsignedWord(); + int removeId = player.getInStream().readUnsignedWordA(); + switch (interfaceId) { + case 3900: + player.getShopAssistant().buyItem(removeId, removeSlot, 10); + break; + + case 3823: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + player.getShopAssistant().sellItem(removeId, removeSlot, 10); + break; + + case 7423: + if (player.storing) { + + return; + } + player.getItemAssistant().bankItem(player.playerItems[removeSlot], + removeSlot, player.playerItemsN[removeSlot]); + player.getItemAssistant().resetItems(7423); + break; + + case 5064: + if(!player.getItemAssistant().playerHasItem(removeId)) { + return; + } + if (player.inPartyRoom) { + PartyRoom.depositItem(player, removeId, player.getItemAssistant() + .itemAmount(player.playerItems[removeSlot])); + break; + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't store items while trading!"); + return; + } + if (Item.itemStackable[removeId]) { + player.getItemAssistant().bankItem(player.playerItems[removeSlot], + removeSlot, player.playerItemsN[removeSlot]); + } else { + player.getItemAssistant().bankItem( + player.playerItems[removeSlot], + removeSlot, + player.getItemAssistant().itemAmount( + player.playerItems[removeSlot])); + } + break; + + case 5382: + player.getItemAssistant().fromBank(player.bankItems[removeSlot], removeSlot, + player.bankItemsN[removeSlot]); + break; + + case 3322: + if (player.duelStatus <= 0) { + if (Item.itemStackable[removeId]) { + player.getTrading().tradeItem(removeId, removeSlot, + player.playerItemsN[removeSlot]); + } else { + player.getTrading().tradeItem(removeId, removeSlot, 28); + } + } else { + if (Item.itemStackable[removeId] || Item.itemIsNote[removeId]) { + player.getDueling().stakeItem(removeId, removeSlot, + player.playerItemsN[removeSlot]); + } else { + player.getDueling().stakeItem(removeId, removeSlot, 28); + } + } + break; + + case 3415: + if (player.duelStatus <= 0) { + if (Item.itemStackable[removeId]) { + for (GameItem item : player.getTrading().offeredItems) { + if (item.id == removeId) { + player.getTrading() + .fromTrade( + removeId, + removeSlot, + player.getTrading().offeredItems + .get(removeSlot).amount); + } + } + } else { + for (GameItem item : player.getTrading().offeredItems) { + if (item.id == removeId) { + player.getTrading().fromTrade(removeId, removeSlot, 28); + } + } + } + } + break; + + case 6669: + if (Item.itemStackable[removeId] || Item.itemIsNote[removeId]) { + for (GameItem item : player.getDueling().stakedItems) { + if (item.id == removeId) { + player.getDueling() + .fromDuel( + removeId, + removeSlot, + player.getDueling().stakedItems + .get(removeSlot).amount); + } + } + + } else { + player.getDueling().fromDuel(removeId, removeSlot, 28); + } + break; + + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/BankX1.java b/2006Redone Server/src/redone/net/packets/impl/BankX1.java new file mode 100644 index 00000000..f76a1bb3 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/BankX1.java @@ -0,0 +1,45 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Bank X Items + **/ +public class BankX1 implements PacketType { + + public static final int PART1 = 135; + public static final int PART2 = 208; + public int XremoveSlot, XinterfaceID, XremoveID, Xamount; + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + if (packetType == 135) { + c.xRemoveSlot = c.getInStream().readSignedWordBigEndian(); + c.xInterfaceId = c.getInStream().readUnsignedWordA(); + c.xRemoveId = c.getInStream().readSignedWordBigEndian(); + } + if (c.xInterfaceId == 3900) { + c.getShopAssistant().buyItem(c.xRemoveId, c.xRemoveSlot, 20);// buy + // 20 + c.xRemoveSlot = 0; + c.xInterfaceId = 0; + c.xRemoveId = 0; + return; + } else { + if (c.xInterfaceId == 7423) { + c.getItemAssistant().bankItem(c.xRemoveId, c.xRemoveSlot, + Xamount);// Depo + // 1 + c.getItemAssistant().resetItems(7423); + } + } + + if (packetType == PART1) { + synchronized (c) { + c.getOutStream().createFrame(27); + } + } + + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/BankX2.java b/2006Redone Server/src/redone/net/packets/impl/BankX2.java new file mode 100644 index 00000000..a08e6e2f --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/BankX2.java @@ -0,0 +1,70 @@ +package redone.net.packets.impl; + +import redone.game.content.random.PartyRoom; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Bank X Items + **/ +public class BankX2 implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int Xamount = player.getInStream().readDWord(); + if (Xamount < 0) { + Xamount = player.getItemAssistant().getItemAmount(player.xRemoveId); + } + if (Xamount == 0) { + Xamount = 1; + } + switch (player.xInterfaceId) { + case 5064: + if(!player.getItemAssistant().playerHasItem(player.playerItems[player.xRemoveSlot], Xamount)) + return; + if (player.inPartyRoom) { + PartyRoom.depositItem(player, player.xRemoveId, player.getItemAssistant().itemAmount(player.playerItems[player.xRemoveSlot])); + break; + } + if (player.inTrade) { + player.getActionSender().sendMessage("You can't store items while trading!"); + return; + } + player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot], player.xRemoveSlot, Xamount); + break; + + case 5382: + if(!player.getItemAssistant().playerHasItem(player.playerItems[player.xRemoveSlot], Xamount)) + return; + player.getItemAssistant().fromBank(player.bankItems[player.xRemoveSlot], player.xRemoveSlot, Xamount); + break; + + case 7423: + if (player.storing) { + return; + } + player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot], + player.xRemoveSlot, Xamount); + player.getItemAssistant().resetItems(7423); + break; + + case 3322: + if (player.duelStatus <= 0) { + player.getTrading().tradeItem(player.xRemoveId, player.xRemoveSlot, Xamount); + } else { + player.getDueling().stakeItem(player.xRemoveId, player.xRemoveSlot, Xamount); + } + break; + + case 3415: + if (player.duelStatus <= 0) { + player.getTrading().fromTrade(player.xRemoveId, player.xRemoveSlot, Xamount); + } + break; + + case 6669: + player.getDueling().fromDuel(player.xRemoveId, player.xRemoveSlot, Xamount); + break; + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ChallengePlayer.java b/2006Redone Server/src/redone/net/packets/impl/ChallengePlayer.java new file mode 100644 index 00000000..af3db04f --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ChallengePlayer.java @@ -0,0 +1,36 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; + +/** + * Challenge Player + **/ +public class ChallengePlayer implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + switch (packetType) { + case 128: + int answerPlayer = c.getInStream().readUnsignedWord(); + if(PlayerHandler.players[answerPlayer] == null || answerPlayer == c.playerId) + return; + + if (c.duelingArena() || c.duelStatus == 5) { + c.getActionSender().sendMessage("You can't challenge inside the arena!"); + return; + } + + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't challenge players, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (c.inDuelArena()) { + c.getDueling().requestDuel(answerPlayer); + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ChangeAppearance.java b/2006Redone Server/src/redone/net/packets/impl/ChangeAppearance.java new file mode 100644 index 00000000..e6031fea --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ChangeAppearance.java @@ -0,0 +1,90 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Change appearance + **/ + +public class ChangeAppearance implements PacketType { + + private static final int[][] MALE_VALUES = { { 0, 8 }, // head + { 10, 17 }, // jaw + { 18, 25 }, // torso + { 26, 31 }, // arms + { 33, 34 }, // hands + { 36, 40 }, // legs + { 42, 43 }, // feet + }; + + private static final int[][] FEMALE_VALUES = { { 45, 54 }, // head + { -1, -1 }, // jaw + { 56, 60 }, // torso + { 61, 65 }, // arms + { 67, 68 }, // hands + { 70, 77 }, // legs + { 79, 80 }, // feet + }; + + private static final int[][] ALLOWED_COLORS = { { 0, 11 }, // hair color + { 0, 15 }, // torso color + { 0, 15 }, // legs color + { 0, 5 }, // feet color + { 0, 7 } // skin color + }; + + @Override + public void processPacket(final Client client, final int packetType, + final int packetSize) { + final int gender = client.getInStream().readSignedByte(); + + if (gender != 0 && gender != 1) { + return; + } + + final int[] apperances = new int[MALE_VALUES.length]; // apperance's + // value + // check + for (int i = 0; i < apperances.length; i++) { + int value = client.getInStream().readSignedByte(); + if (value < (gender == 0 ? MALE_VALUES[i][0] : FEMALE_VALUES[i][0]) + || value > (gender == 0 ? MALE_VALUES[i][1] + : FEMALE_VALUES[i][1])) { + value = gender == 0 ? MALE_VALUES[i][0] : FEMALE_VALUES[i][0]; + } + apperances[i] = value; + } + + final int[] colors = new int[ALLOWED_COLORS.length]; // color value + // check + for (int i = 0; i < colors.length; i++) { + int value = client.getInStream().readSignedByte(); + if (value < ALLOWED_COLORS[i][0] || value > ALLOWED_COLORS[i][1]) { + value = ALLOWED_COLORS[i][0]; + } + colors[i] = value; + } + + if (client.canChangeAppearance) { + client.playerAppearance[0] = gender; // gender + client.playerAppearance[1] = apperances[0]; // head + client.playerAppearance[2] = apperances[2]; // torso + client.playerAppearance[3] = apperances[3]; // arms + client.playerAppearance[4] = apperances[4]; // hands + client.playerAppearance[5] = apperances[5]; // legs + client.playerAppearance[6] = apperances[6]; // feet + client.playerAppearance[7] = apperances[1]; // beard + client.playerAppearance[8] = colors[0]; // hair colour + client.playerAppearance[9] = colors[1]; // torso colour + client.playerAppearance[10] = colors[2]; // legs colour + client.playerAppearance[11] = colors[3]; // feet colour + client.playerAppearance[12] = colors[4]; // skin colour + + client.getPlayerAssistant().removeAllWindows(); + client.getPlayerAssistant().requestUpdates(); + client.canChangeAppearance = false; + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ChangeRegions.java b/2006Redone Server/src/redone/net/packets/impl/ChangeRegions.java new file mode 100644 index 00000000..e1fabfc5 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ChangeRegions.java @@ -0,0 +1,34 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.Server; +import redone.game.content.music.Music; +import redone.game.globalworldobjects.Doors; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.world.GlobalDropsHandler; + +/** + * Change Regions + */ +public class ChangeRegions implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + if (Constants.SOUND && c.musicOn) { + Music.playMusic(c); + } + Server.objectHandler.updateObjects(c);//testing + Doors.getSingleton().load(); + Server.itemHandler.reloadItems(c); + Server.objectManager.loadObjects(c); + GlobalDropsHandler.load(c); + c.getPlayerAssistant().removeObjects();// testing + c.saveFile = true; + if (c.skullTimer > 0) { + c.isSkulled = true; + c.headIconPk = 0; + c.getPlayerAssistant().requestUpdates(); + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Chat.java b/2006Redone Server/src/redone/net/packets/impl/Chat.java new file mode 100644 index 00000000..d492ec63 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Chat.java @@ -0,0 +1,32 @@ +package redone.net.packets.impl; + +import redone.Connection; +import redone.game.players.Client; +import redone.game.players.antimacro.AntiSpam; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * Chat + **/ +public class Chat implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.setChatTextEffects(player.getInStream().readUnsignedByteS()); + player.setChatTextColor(player.getInStream().readUnsignedByteS()); + player.setChatTextSize((byte) (player.packetSize - 2)); + player.inStream.readBytes_reverseA(player.getChatText(), player.getChatTextSize(), 0); + ReportHandler.addText(player.playerName, player.getChatText(), packetSize - 2); + String word = Misc.textUnpack(player.getChatText(), player.packetSize - 2).toLowerCase(); + if (AntiSpam.blockedWords(player, word, true) && !Connection.isMuted(player)) { + player.setChatTextUpdateRequired(true); + } + System.out.println(word); + if (Connection.isMuted(player)) { + player.getActionSender().sendMessage("You are muted and can't speak."); + player.setChatTextUpdateRequired(false); + return; + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClanChat.java b/2006Redone Server/src/redone/net/packets/impl/ClanChat.java new file mode 100644 index 00000000..b94e1bb1 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClanChat.java @@ -0,0 +1,20 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * Chat + **/ +public class ClanChat implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + String textSent = Misc.longToPlayerName2(c.getInStream().readQWord()); + textSent = textSent.replaceAll("_", " "); + // c.sendMessage(textSent); + Server.clanChat.handleClanChat(c, textSent); + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickItem.java b/2006Redone Server/src/redone/net/packets/impl/ClickItem.java new file mode 100644 index 00000000..88cb98d4 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickItem.java @@ -0,0 +1,293 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.game.content.consumables.Beverages; +import redone.game.content.consumables.Kebabs; +import redone.game.content.consumables.Beverages.beverageData; +import redone.game.content.minigames.TreasureTrails; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.skills.core.Prayer; +import redone.game.content.skills.herblore.Herblore; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.ExperienceLamp; +import redone.game.items.impl.Flowers; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.util.GameLogger; +import redone.util.Misc; + +/** + * Clicking an item, bury bone, eat food etc + **/ +public class ClickItem implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.getInStream().readSignedWordBigEndianA(); + int itemSlot = player.getInStream().readUnsignedWordA(); + int itemId = player.getInStream().readUnsignedWordBigEndian(); + if (itemId != player.playerItems[itemSlot] - 1) { + return; + } + if(!player.getItemAssistant().playerHasItem(itemId, 1)) { + return; + } + if (itemId == 6) { + player.getCannon().placeCannon(); + } + if (player.isBotting) { + player.getActionSender().sendMessage("You can't click items until you confirm you aren't botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + String itemName = ItemAssistant.getItemName(itemId).toLowerCase(); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "clickitem", player.playerName + " clicked item " + itemName + ""); + } + if (!CastleWars.deleteCastleWarsItems(player, itemId)) { + return; + } + if(CastleWars.isInCw(player) && itemId == 4053) { + player.getItemAssistant().deleteItem(4053, player.getItemAssistant().getItemSlot(4053), 1); + //npc id, x, y, height, walk, hp, maxhit, att, def + Server.npcHandler.spawnNpc2(1532, player.absX, player.absY, player.heightLevel, 0, 200, 0, 0, 100); + player.getActionSender().sendMessage("You setup a barricade."); + } else if (!CastleWars.isInCw(player) && itemId == 4053) { + player.getActionSender().sendMessage("You need to be in castlewars to drop a barricade."); + player.getItemAssistant().deleteItem2(itemId, player.getItemAssistant().getItemAmount(itemId)); + } + if (itemId >= 5509 && itemId <= 5514) { + int pouch = -1; + int a = itemId; + if (a == 5509) { + pouch = 0; + } + if (a == 5510) { + pouch = 1; + } + if (a == 5512) { + pouch = 2; + } + if (a == 5514) { + pouch = 3; + } + player.getPlayerAssistant().fillPouch(pouch); + return; + } + switch (itemId) { + + case 407: + if (Misc.random(1) == 0) { + player.getItemAssistant().addItem(409, 1); + player.getItemAssistant().deleteItem2(407, 1); + } else { + if (Misc.random(1) == 0) { + player.getItemAssistant().addItem(411, 1); + player.getItemAssistant().deleteItem2(409, 1); + } else if (Misc.random(1) == 1) { + player.getItemAssistant().addItem(413, 1); + player.getItemAssistant().deleteItem2(407, 1); + } + } + break; + + case 2329: + player.getItemAssistant().deleteItem2(2329, 1); + player.getItemAssistant().addItem(2313, 1); + break; + + case 550: + player.getPlayerAssistant().showMap(); + break; + + case 583: + Server.trawler.bail(player); + break; + case 585: + Server.trawler.emptyBucket(player); + break; + + case 33: + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(36, 1); + break; + + case 32: + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(38, 1); + break; + + case 594: + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(596, 1); + break; + + case 4550: + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(4548, 1); + break; + + case 4537: + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(4539, 1); + break; + + case 1971: + Kebabs.eat(player, itemSlot); + break; + + case 2528: + case 4447: + ExperienceLamp.rubLamp(player, itemId); + break; + + case 2677: + player.getItemAssistant().deleteItem(itemId, 1); + TreasureTrails.addClueReward(player, 0); + break; + + case 2678: + player.getItemAssistant().deleteItem(itemId, 1); + TreasureTrails.addClueReward(player, 1); + break; + + case 2679: + player.getItemAssistant().deleteItem(itemId, 1); + TreasureTrails.addClueReward(player, 2); + break; + + case 299: + new Flowers(player); + player.dialogueAction = 21; + break; + + case 4155:// enchanted gem + player.getDialogueHandler().sendOption4("How many kills do I have left?", + "Who are you?", "Where are you located?", + "How many slayer points do I have?"); + player.dialogueAction = 145; + break; + + case 3691: + player.getItemAssistant().deleteItem2(3691, 1); + player.getItemAssistant().addItem(3690, 1); + player.getPlayerAssistant().startTeleport(2661, 3310, 0, "modern"); + break; + + // case 2528: + // ExperienceLamp.showInterface(c); + // break; + + case 5070: + player.getActionSender().sendMessage("You search the nest."); + player.getItemAssistant().addItem(5076, 1); + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(5075, 1); + break; + + case 5071: + player.getActionSender().sendMessage("You search the nest."); + player.getItemAssistant().addItem(5078, 1); + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(5075, 1); + break; + + case 5072: + player.getActionSender().sendMessage("You search the nest."); + player.getItemAssistant().addItem(5077, 1); + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(5075, 1); + break; + + case 5073: + player.getItemAssistant().handleTreeSeeds(itemId); + break; + + case 5074: + player.getItemAssistant().handleRings(itemId); + break; + + case 7413: + player.getItemAssistant().handleNonTreeSeeds(itemId); + break; + + case 2297: + player.getItemAssistant().addItem(2299, 1); + player.getItemAssistant().deleteItem2(2297, 1); + break; + + case 2299: + player.getItemAssistant().deleteItem2(2299, 1); + break; + + case 2301: + player.getItemAssistant().addItem(2303, 1); + player.getItemAssistant().deleteItem2(2301, 1); + break; + + case 2303: + player.getItemAssistant().deleteItem2(2303, 1); + break; + + case 2520: + player.forcedChat("Come on Dobbin, we can win the race!"); + player.startAnimation(918); + break; + case 2522: + player.forcedChat("Come on Dobbin, we can win the race!"); + player.startAnimation(919); + break; + case 2524: + player.forcedChat("Hi-ho Silver, and away!"); + player.startAnimation(920); + break; + case 2526: + player.forcedChat("Neahhhyyy! Giddy-up horsey!"); + player.startAnimation(921); + break; + + case 405: + player.getItemAssistant().addCasketRewards(itemId); + break; + + case 433: + player.getDialogueHandler().sendStatement("Visit the city of the white knights."); + player.nextChat = 0; + player.isBanking = false; + break; + + case 2714: + player.getItemAssistant().deleteItem2(itemId, 1); + player.getItemAssistant().addItem(995, 450); + player.getItemAssistant().addItem(1639, 1); + player.getItemAssistant().addItem(1635, 1); + player.pirateTreasure = 6; + break; + } + + for (final beverageData b : beverageData.values()) { + if (itemId == b.getBev()) { + Beverages.drinkBeverage(player, itemId, itemSlot); + } + } + + if (player.getFood().isFood(itemId)) { + player.getFood().eat(itemId, itemSlot); + } + if (Prayer.playerBones(player, itemId)) { + Prayer.buryBones(player, itemId, itemSlot); + } + if (player.getPotions().isPotion(itemId)) { + player.getPotions().handlePotion(itemId, itemSlot); + } + if (Herblore.isHerb(itemId)) { + Herblore.handleHerbCleaning(player, itemId, itemSlot); + return; + } + if (itemId == 952) { + player.getBarrows().spadeDigging(); + return; + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickNPC.java b/2006Redone Server/src/redone/net/packets/impl/ClickNPC.java new file mode 100644 index 00000000..61c1be5f --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickNPC.java @@ -0,0 +1,363 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.combat.magic.MagicData; +import redone.game.content.combat.range.RangeData; +import redone.game.content.skills.thieving.Pickpocket; +import redone.game.items.ItemAssistant; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Click NPC + */ +public class ClickNPC implements PacketType { + + public static final int ATTACK_NPC = 72, MAGE_NPC = 131, FIRST_CLICK = 155, + SECOND_CLICK = 17, THIRD_CLICK = 21; + + @Override + public void processPacket(final Client client, int packetType, int packetSize) { + client.npcIndex = 0; + client.npcClickIndex = 0; + client.playerIndex = 0; + client.clickNpcType = 0; + client.getPlayerAssistant().resetFollow(); + client.getCombatAssistant().resetPlayerAttack(); + client.getPlayerAssistant().requestUpdates(); + switch (packetType) { + + /** + * Attack npc melee or range + **/ + case ATTACK_NPC: + if (client.tutorialProgress == 24) { + client.getActionSender().chatbox(6180); + client.getDialogueHandler() + .chatboxText( + client, + "While you are fighting you will see a bar over your head. The", + "bar shows how much health you have left. Your opponent will", + "have one too. You will continue to attack the rat until it's dead", + "or you do something else.", + "Sit back and watch"); + client.getActionSender().chatbox(6179); + + } + if (client.tutorialProgress == 33) { + client.getActionSender() + .sendMessage( + "You can't range these chickens you have to mage them!"); + return; + } + if (!client.mageAllowed) { + client.mageAllowed = true; + client.getActionSender().sendMessage("I can't reach that."); + break; + } + client.npcIndex = client.getInStream().readUnsignedWordA(); + if (NpcHandler.npcs[client.npcIndex] == null) { + client.npcIndex = 0; + break; + } + if (NpcHandler.npcs[client.npcIndex].MaxHP == 0) { + client.npcIndex = 0; + break; + } + if (NpcHandler.npcs[client.npcIndex] == null) { + break; + } + if (client.autocastId > 0) { + client.autocasting = true; + } + if (!client.autocasting && client.spellId > 0) { + client.spellId = 0; + } + client.faceUpdate(client.npcIndex); + client.usingMagic = false; + boolean usingBow = false; + boolean usingOtherRangeWeapons = false; + boolean usingArrows = false; + boolean usingCross = client.playerEquipment[client.playerWeapon] == 9185; + if (client.playerEquipment[client.playerWeapon] >= 4214 + && client.playerEquipment[client.playerWeapon] <= 4223) { + usingBow = true; + } + for (int bowId : RangeData.BOWS) { + if (client.playerEquipment[client.playerWeapon] == bowId) { + usingBow = true; + for (int arrowId : RangeData.ARROWS) { + if (client.playerEquipment[client.playerArrows] == arrowId) { + usingArrows = true; + } + } + } + } + for (int otherRangeId : RangeData.OTHER_RANGE_WEAPONS) { + if (client.playerEquipment[client.playerWeapon] == otherRangeId) { + usingOtherRangeWeapons = true; + } + } + if ((usingBow || client.autocasting) + && client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcIndex].getX(), + NpcHandler.npcs[client.npcIndex].getY(), 7)) { + client.stopMovement(); + } + + if (usingOtherRangeWeapons + && client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcIndex].getX(), + NpcHandler.npcs[client.npcIndex].getY(), 4)) { + client.stopMovement(); + } + if (!usingCross && !usingArrows && usingBow + && client.playerEquipment[client.playerWeapon] < 4212 + && client.playerEquipment[client.playerWeapon] > 4223 && !usingCross) { + client.getActionSender().sendMessage( + "You have run out of arrows!"); + break; + } + if (RangeData.correctBowAndArrows(client) < client.playerEquipment[client.playerArrows] + && Constants.CORRECT_ARROWS + && usingBow + && !RangeData.usingCrystalBow(client) + && client.playerEquipment[client.playerWeapon] != 9185) { + client.getActionSender().sendMessage( + "You can't use " + + ItemAssistant.getItemName( + client.playerEquipment[client.playerArrows]) + .toLowerCase() + + "s with a " + + ItemAssistant.getItemName( + client.playerEquipment[client.playerWeapon]) + .toLowerCase() + "."); + client.stopMovement(); + client.getCombatAssistant().resetPlayerAttack(); + return; + } + if (client.playerEquipment[client.playerWeapon] == 9185 + && !client.getCombatAssistant().properBolts()) { + client.getActionSender().sendMessage( + "You must use bolts with a crossbow."); + client.stopMovement(); + client.getCombatAssistant().resetPlayerAttack(); + return; + } + + if (client.followId > 0) { + client.getPlayerAssistant().resetFollow(); + } + if (client.attackTimer <= 0) { + client.getCombatAssistant().attackNpc(client.npcIndex); + client.attackTimer++; + } + + break; + + /** + * Attack npc with magic + **/ + case MAGE_NPC: + if (client.tutorialProgress == 33) { + client.getActionSender().chatbox(6180); + client.getDialogueHandler() + .chatboxText( + client, + "", + "All you need to do is move on to the mainland. Just speak", + "with Terrova and he'll teleport you to Lumbridge Castle.", + "", "You have almost completed the tutorial!"); + client.getActionSender().chatbox(6179); + // c.getDialogues().sendStatement4("You have almost completed the tutorial!", + // "All you need to do is move on to the mainland. Just speak", + // "with Terrova and he'll teleport you to Lumbridge.", ""); + client.tutorialProgress = 34; + client.getActionSender().createArrow(1, 9); + } + if (!client.mageAllowed) { + client.mageAllowed = true; + client.getActionSender().sendMessage("I can't reach that."); + break; + } + // c.usingSpecial = false; + // c.getItems().updateSpecialBar(); + + client.npcIndex = client.getInStream().readSignedWordBigEndianA(); + int castingSpellId = client.getInStream().readSignedWordA(); + client.usingMagic = false; + + if (NpcHandler.npcs[client.npcIndex] == null) { + break; + } + + if (NpcHandler.npcs[client.npcIndex].MaxHP == 0 + || NpcHandler.npcs[client.npcIndex].npcType == 944) { + client.getActionSender().sendMessage( + "You can't attack this npc."); + break; + } + + for (int i = 0; i < MagicData.MAGIC_SPELLS.length; i++) { + if (castingSpellId == MagicData.MAGIC_SPELLS[i][0]) { + client.spellId = i; + client.usingMagic = true; + break; + } + } + + if (client.autocasting) { + client.autocasting = false; + } + + if (client.usingMagic) { + if (client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcIndex].getX(), + NpcHandler.npcs[client.npcIndex].getY(), 6)) { + client.stopMovement(); + } + if (client.attackTimer <= 0) { + client.getCombatAssistant().attackNpc(client.npcIndex); + client.attackTimer++; + } + } + + break; + + case FIRST_CLICK: + client.npcClickIndex = client.inStream.readSignedWordBigEndian(); + client.npcType = NpcHandler.npcs[client.npcClickIndex].npcType; + if (client.goodDistance(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), client.getX(), + client.getY(), 2)) { + client.turnPlayerTo(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex].facePlayer(client.playerId); + client.getNpcs().firstClickNpc(client.npcType); + } else { + client.clickNpcType = 1; + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (client.clickNpcType == 1 + && NpcHandler.npcs[client.npcClickIndex] != null) { + if (client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), 1)) { + client.turnPlayerTo( + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex] + .facePlayer(client.playerId); + client.getNpcs().firstClickNpc(client.npcType); + container.stop(); + } + } + if (client.clickNpcType == 0 || client.clickNpcType > 1) { + container.stop(); + } + } + + @Override + public void stop() { + client.clickNpcType = 0; + } + }, 1); + } + break; + + case SECOND_CLICK: + client.npcClickIndex = client.inStream.readUnsignedWordBigEndianA(); + client.npcType = NpcHandler.npcs[client.npcClickIndex].npcType; + if (client.goodDistance(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), client.getX(), + client.getY(), 2)) { + client.turnPlayerTo(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex].facePlayer(client.playerId); + client.getNpcs().secondClickNpc(client.npcType); + if (Pickpocket.isNPC(client, client.npcType)) { + Pickpocket.attemptPickpocket(client, client.npcType); + return; + } + } else { + client.clickNpcType = 2; + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (client.clickNpcType == 2 + && NpcHandler.npcs[client.npcClickIndex] != null) { + if (client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), 1)) { + client.turnPlayerTo( + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex] + .facePlayer(client.playerId); + client.getNpcs().secondClickNpc(client.npcType); + container.stop(); + } + } + if (client.clickNpcType < 2 || client.clickNpcType > 2) { + container.stop(); + } + } + + @Override + public void stop() { + client.clickNpcType = 0; + } + }, 1); + } + break; + + case THIRD_CLICK: + client.npcClickIndex = client.inStream.readSignedWord(); + client.npcType = NpcHandler.npcs[client.npcClickIndex].npcType; + if (client.goodDistance(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), client.getX(), + client.getY(), 2)) { + client.turnPlayerTo(NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex].facePlayer(client.playerId); + client.getNpcs().thirdClickNpc(client.npcType); + } else { + client.clickNpcType = 3; + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (client.clickNpcType == 3 + && NpcHandler.npcs[client.npcClickIndex] != null) { + if (client.goodDistance(client.getX(), client.getY(), + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY(), 1)) { + client.turnPlayerTo( + NpcHandler.npcs[client.npcClickIndex].getX(), + NpcHandler.npcs[client.npcClickIndex].getY()); + NpcHandler.npcs[client.npcClickIndex] + .facePlayer(client.playerId); + client.getNpcs().thirdClickNpc(client.npcType); + container.stop(); + } + } + if (client.clickNpcType < 3) { + container.stop(); + } + } + + @Override + public void stop() { + client.clickNpcType = 0; + } + }, 1); + } + break; + } + + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickObject.java b/2006Redone Server/src/redone/net/packets/impl/ClickObject.java new file mode 100644 index 00000000..e076db1b --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickObject.java @@ -0,0 +1,1150 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.minigames.castlewars.CastleWarObjects; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.skills.core.Mining; +import redone.game.content.skills.core.Woodcutting; +import redone.game.content.skills.thieving.Stalls; +import redone.game.globalworldobjects.Doors; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class ClickObject implements PacketType { + + public static final int FIRST_CLICK = 132, SECOND_CLICK = 252, + THIRD_CLICK = 70, FOURTH_CLICK = 234; + + @Override + public void processPacket(final Client player, int packetType, + int packetSize) { + player.clickObjectType = player.objectX = player.objectId = player.objectY = 0; + player.objectYOffset = player.objectXOffset = 0; + player.getPlayerAssistant().resetFollow(); + player.getCombatAssistant().resetPlayerAttack(); + player.getPlayerAssistant().requestUpdates(); + switch (packetType) { + + case FIRST_CLICK: + player.objectX = player.getInStream().readSignedWordBigEndianA(); + player.objectId = player.getInStream().readUnsignedWord(); + player.objectY = player.getInStream().readUnsignedWordA(); + player.objectDistance = 1; + player.turnPlayerTo(player.objectX, player.objectY); + if (player.playerRights == 3) { + player.getActionSender().sendMessage("ObjectId: " + player.objectId + " ObjectX: " + player.objectX + " ObjectY: " + player.objectY + " Objectclick = 1, Xoff: " + (player.getX() - player.objectX) + " Yoff: " + (player.getY() - player.objectY)); + } + if(player.goodDistance(player.getX(), player.getY(), player.objectX, player.objectY, 1)) { + if (Doors.getSingleton().handleDoor(player.objectId, player.objectX, player.objectY, player.heightLevel)) { + } + } + + /*if (client.performingAction) { + return; + }*/ + + if (Stalls.isObject(player.objectId)) { + Stalls.attemptStall(player, player.objectId, player.objectX, player.objectX); + return; + } + + if (player.teleTimer > 0) { + player.getActionSender().sendMessage( + "You cannot use objects while teleporting."); + return; + } + if (Math.abs(player.getX() - player.objectX) > 25 || Math.abs(player.getY() - player.objectY) > 25) { + player.resetWalkingQueue(); + break; + } + if (Mining.rockExists(player, player.objectId)) { + player.objectDistance = 5; + } + if (Woodcutting.playerTrees(player, player.objectId)) { + player.objectDistance = 3; + } + switch (player.objectId) { + case 1276: + Woodcutting.startWoodcutting(player, 0, player.objectX, player.objectY, player.clickObjectType); + break; + case 1278: + Woodcutting.startWoodcutting(player, 1, player.objectX, player.objectY, player.clickObjectType); + break; + case 1286: + Woodcutting.startWoodcutting(player, 2, player.objectX, player.objectY, player.clickObjectType); + break; + case 1281: + Woodcutting.startWoodcutting(player, 3, player.objectX, player.objectY, player.clickObjectType); + break; + case 1308: + Woodcutting.startWoodcutting(player, 4, player.objectX, player.objectY, player.clickObjectType); + break; + case 5552: + Woodcutting.startWoodcutting(player, 5, player.objectX, player.objectY, player.clickObjectType); + break; + case 1307: + Woodcutting.startWoodcutting(player, 6, player.objectX, player.objectY, player.clickObjectType); + break; + case 1309: + Woodcutting.startWoodcutting(player, 7, player.objectX, player.objectY, player.clickObjectType); + break; + case 1306: + Woodcutting.startWoodcutting(player, 8, player.objectX, player.objectY, player.clickObjectType); + break; + case 5551: + Woodcutting.startWoodcutting(player, 9, player.objectX, player.objectY, player.clickObjectType); + break; + case 5553: + Woodcutting.startWoodcutting(player, 10, player.objectX, player.objectY, player.clickObjectType); + break; + case 3033: + Woodcutting.startWoodcutting(player, 11, player.objectX, player.objectY, player.clickObjectType); + break; + case 3037: + Woodcutting.startWoodcutting(player, 12, player.objectX, player.objectY, player.clickObjectType); + break; + case 1282: + Woodcutting.startWoodcutting(player, 13, player.objectX, player.objectY, player.clickObjectType); + break; + case 1383: + Woodcutting.startWoodcutting(player, 14, player.objectX, player.objectY, player.clickObjectType); + break; + case 2023: + Woodcutting.startWoodcutting(player, 15, player.objectX, player.objectY, player.clickObjectType); + break; + case 1319: + Woodcutting.startWoodcutting(player, 16, player.objectX, player.objectY, player.clickObjectType); + break; + case 1318: + Woodcutting.startWoodcutting(player, 17, player.objectX, player.objectY, player.clickObjectType); + break; + case 1315: + Woodcutting.startWoodcutting(player, 18, player.objectX, player.objectY, player.clickObjectType); + break; + case 1316: + Woodcutting.startWoodcutting(player, 19, player.objectX, player.objectY, player.clickObjectType); + break; + case 1332: + Woodcutting.startWoodcutting(player, 20, player.objectX, player.objectY, player.clickObjectType); + break; + + case 1292: + if (player.spiritTree == false && player.clickedTree == true) { + player.getActionSender().sendMessage("You have already spawned a tree spirit."); + return; + } + if (player.spiritTree == false && player.clickedTree == false) { + player.getActionSender().sendMessage("You attempt to chop the tree, and a tree spirit appears."); + NpcHandler.spawnNpc(player, 655, player.getX(), player.getY(), 0, 0, 225, 20, 80, 80, true, false); + player.clickedTree = true; + } else if (player.spiritTree == true) { + Woodcutting.startWoodcutting(player, 21, player.objectX, player.objectY, player.clickObjectType); + } + break; + + case 1294: + case 1293: + case 1317: + player.getPlayerAssistant().spiritTree(); + break; + + case 2164: + case 2165: + Server.trawler.fixNet(player); + break; + + case 4462: + case 4460: + case 4461: + case 4463: + case 4464: + case 4459: + if (!CastleWars.isInCw(player)) { + player.getActionSender().sendMessage("You have to be in castle wars to use these objects."); + CastleWars.resetPlayer(player); + return; + } + CastleWarObjects.handleObject(player, player.objectId, player.objectX, player.objectY); + break; + + case 2513: + player.getRangersGuild().fireAtTarget(); + break; + + case 12163: + case 12164: + case 12165: + case 12166: + player.objectDistance = 4; + break; + + case 8930: + player.fade(1975, 4409, 3); + break; + case 8929: + player.fade(2442, 10147, 0); + break; + + case 12982: + if (player.absY == 3278) { + player.objectYOffset = 2; + } + break; + + case 300: + if (player.objectX == 3093 && player.objectY == 3509) { + player.objectDistance = 2; + } + break; + case 2479: + case 2482: + case 10596: + case 10595: + case 1725: + case 2483: + case 4568: + case 2145: + player.objectDistance = 3; + break; + + case 11993: + case 245: + case 246: + case 273: + case 272: + case 8959: + player.objectDistance = 1; + break; + + case 492: + case 5100: + case 12127: + case 5083: + case 4551: + case 4558: + case 2634: + case 1742: + case 2484: + case 8966: + case 993: + case 2230: + case 2265: + case 4569: + case 5098: + case 5096: + case 5094: + case 3828: + player.objectDistance = 2; + break; + + + case 2617: + if (player.objectX == 3077 && player.objectY == 9768) { + player.objectDistance = 3; + } + break; + + case 2781: + if (player.objectX == 3272 && player.objectY == 3185) { + player.objectDistance = 3; + } + break; + + case 2216: + if (player.absX == 2880) { + player.objectXOffset = 3; + player.objectYOffset = 1; + } + break; + + case 3760: + if (player.objectX == 2892 && player.objectY == 10072) { + player.objectYOffset = 2; + } + break; + + case 96: + if (player.objectX == 2638 && player.objectY == 9763 + || player.objectY == 9740) { + player.objectXOffset = 3; + player.objectYOffset = 1; + } + break; + + case 2323: + if (player.objectX == 2703 && player.objectY == 3205) { + player.objectXOffset = 2; + } + break; + + case 2322: + if (player.objectX == 2705 && player.objectY == 3209) { + player.objectXOffset = 4; + } + break; + + case 190: + player.objectDistance = 3; + break; + + case 154: + player.objectDistance = 2; + break; + + case 10885: + player.objectYOffset = -3; + player.objectXOffset = 1; + break; + + case 10859: + if (player.objectX == 3356 && player.objectY == 2847) { + player.objectXOffset = 1; + player.objectYOffset = -1; + } else if (player.objectX == 3364 && player.objectY == 2833) { + player.objectXOffset = 2; + player.objectYOffset = 1; + } else { + player.objectYOffset = 2; + } + break; + + case 10860: + if (player.objectX == 3372 && player.objectY == 2839) { + player.objectYOffset = 2; + } + break; + + case 10886: + player.objectXOffset = 2; + player.objectYOffset = 1; + break; + + case 10862: + if (player.objectX == 3362 && player.objectY == 2849) { + player.objectXOffset = -3; + } + break; + + case 6552: + if (player.absX == 3234) { + player.objectXOffset = 2; + player.objectYOffset = 1; + } + break; + + case 2711: + if (player.objectX == 2631 && player.objectY == 3322) { + player.objectXOffset = 1; + player.objectYOffset = 3; + } + break; + + case 3044: + if (player.objectX == 3078 && player.objectY == 9495) { + player.objectDistance = 3; + } + break; + + case 1737: + if (player.objectX == 2662 && player.objectY == 3291) { + player.objectYOffset = 3; + } + break; + + case 11737: + player.objectYOffset = 1; + break; + + case 11724: + if (player.absX == 2971) { + player.objectXOffset = 3; + } + break; + + case 11729: + if (player.absY == 3340) { + player.objectYOffset = 2; + } + break; + + case 11732: + if (player.objectX == 3034 && player.objectY == 3363) { + player.objectXOffset = 2; + } else if (player.objectX == 3048 && player.objectY == 3352) { + player.objectYOffset = 2; + } + break; + + case 11735: + if (player.absY == 3340 || player.absY == 3384) { + player.objectYOffset = 2; + } + break; + + case 11725: + if (player.absY == 3348) { + player.objectYOffset = 1; + } + break; + + case 5097: + if (player.objectX == 2635 && player.objectY == 9514) { + player.objectXOffset = 2; + player.objectYOffset = 3; + } + break; + + case 1726: + if (player.absX == 3285 && player.absY == 3492) { + player.objectDistance = 1; + } else { + player.objectXOffset = 2; + } + break; + + case 1568: + if (player.objectX == 2399 && player.objectY == 3099) { + player.getActionSender() + .object(9472, 2399, 3099, 0, 10); + } + if (player.objectX == 2400 && player.objectY == 3108) { + player.getActionSender() + .object(9472, 2400, 3108, 2, 10); + } + break; + + case 4437: + if (player.getItemAssistant().playerHasItem(1265, 1)) { + player.getActionSender().sendMessage( + "You start to break up the rocks..."); + player.startAnimation(625); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + container.stop(); + player.startAnimation(65535); + } + + @Override + public void stop() { + player.getActionSender().object(-1, + player.objectX, player.objectY, 0, 10); + player.getActionSender().object(4438, + player.objectX, player.objectY, 0, 10); + player.getActionSender().sendMessage( + "You break up the rocks."); + } + }, 3); + } + break; + + case 4438: + if (player.getItemAssistant().playerHasItem(1265, 1)) { + player.getActionSender().sendMessage( + "You start to break up the rocks..."); + player.startAnimation(625); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + stop(); + player.startAnimation(65535); + } + + @Override + public void stop() { + player.getActionSender().object(-1, + player.objectX, player.objectY, 0, 10); + player.getActionSender().sendMessage( + "You break up the rocks."); + } + }, 3); + } + break; + + case 4448: + if (player.getItemAssistant().playerHasItem(1265, 1)) { + player.getActionSender().sendMessage( + "You start to mine the wall..."); + player.startAnimation(625); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + stop(); + player.startAnimation(65535); + player.getActionSender().sendMessage( + "You collapse the cave wall."); + } + + @Override + public void stop() { + if ((player.objectX == 2390 || player.objectX == 2393) + && (player.objectY == 9503 || player.objectY == 9500)) { // east + // cave + // side + player.getActionSender().object(-1, 2391, + 9501, 0, 10); + player.getActionSender().object(4437, 2391, + 9501, 0, 10); + CastleWars.collapseCave(1); + } + if ((player.objectX == 2399 || player.objectX == 2402) + && (player.objectY == 9511 || player.objectY == 9514)) { // north + // cave + // side + player.getActionSender().object(-1, 2400, + 9512, 1, 10); + player.getActionSender().object(4437, 2400, + 9512, 1, 10); + CastleWars.collapseCave(0); + } + if ((player.objectX == 2408 || player.objectX == 2411) + && (player.objectY == 9502 || player.objectY == 9505)) { // west + // cave + // side + player.getActionSender().object(-1, 2409, + 9503, 0, 10); + player.getActionSender().object(4437, 2409, + 9503, 0, 10); + CastleWars.collapseCave(3); + } + if ((player.objectX == 2400 || player.objectX == 2403) + && (player.objectY == 9496 || player.objectY == 9493)) { // south + // cave + // side + player.getActionSender().object(-1, 2401, + 9494, 1, 10); + player.getActionSender().object(4437, 2401, + 9494, 1, 10); + CastleWars.collapseCave(2); + } + } + }, 3); + } + break; + + case 1733: + if (player.objectX == 3058 && player.objectY == 3376) { + player.getPlayerAssistant().movePlayer(3058, 9776, 0); + } else if (player.objectX == 2603 && player.objectY == 3078) { + player.objectXOffset = 3; + player.objectYOffset = 1; + } + break; + + case 55: + if (player.objectX == 3061 && player.objectY == 3374) { + player.getPlayerAssistant().movePlayer(3058, 9776, 0); + } + break; + + case 9472: + if (player.objectX == 2399 && player.objectY == 3099) { + player.startAnimation(828); + player.stopMovement(); + player.resetWalkingQueue(); + player.getPlayerAssistant().requestUpdates(); + player.getPlayerAssistant().removeAllWindows(); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + container.stop(); + player.startAnimation(65535); + player.getPlayerAssistant().movePlayer(2400, 9507, + 0); + } + + @Override + public void stop() { + + } + }, 1); + } + if (player.objectX == 2400 && player.objectY == 3108) { + player.startAnimation(828); + player.stopMovement(); + player.resetWalkingQueue(); + player.getPlayerAssistant().requestUpdates(); + player.getPlayerAssistant().removeAllWindows(); + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + stop(); + player.startAnimation(65535); + player.getPlayerAssistant().movePlayer(2399, 9500, 0); + } + + @Override + public void stop() { + + } + }, 1); + } + break; + + case 4407: + player.objectXOffset = 2; + break; + + case 4387: + CastleWars.addToWaitRoom(player, 1); // saradomin + break; + + case 4388: + CastleWars.addToWaitRoom(player, 2); // zamorak + break; + + case 4408: + CastleWars.addToWaitRoom(player, 3); // guthix + break; + + case 4389: // sara + case 4390: // zammy waiting room portal + CastleWars.leaveWaitingRoom(player); + break; + + /* + * werewolf agility course stepping stone + */ + case 5138: + case 5136: + case 5141: + case 5133: + case 5152: + player.objectDistance = 2; + break; + /* + * agility pyramid gap + */ + case 10863: + case 10857: + player.objectDistance = 4; + break; + /* + * rope swing in barbarian agility arena + */ + case 2282: + player.objectDistance = 4; + break; + + case 2294: + player.objectDistance = 4; + break; + + case 9295: + if (player.absX == 3155) { + player.objectDistance = 2; + } + break; + + case 2491: + if (player.objectX == 2926 && player.objectY == 4817) { + player.objectXOffset = 1; + player.objectYOffset = -3; + } + if (player.objectX == 2927 && player.objectY == 4814) { + player.objectXOffset = -1; + player.objectYOffset = 3; + } + if (player.objectX == 2893 && player.objectY == 4812) { + player.objectXOffset = 2; + player.objectYOffset = 5; + } + if (player.objectX == 2925 && player.objectY == 4848) { + player.objectXOffset = 2; + player.objectYOffset = 5; + } + if (player.objectX == 2891 && player.objectY == 4847) { + player.objectXOffset = 2; + player.objectYOffset = -1; + } + break; + + case 2609: + player.objectYOffset = 2; + break; + + case 4755: + player.objectYOffset = 1; + break; + + case 7056: + player.objectXOffset = 2; + break; + + case 26983: + case 26982: + case 24355: + case 24354: + player.objectYOffset = 1; + player.objectDistance = 0; + break; + + case 1722: + if (player.absX == 3159) { + player.objectXOffset = 3; + } else if (player.objectX == 3175 && player.objectY == 3420) { + player.objectXOffset = 1; + player.objectYOffset = 3; + } else if (player.objectX == 3177 && player.objectY == 3401) { + player.objectXOffset = 3; + player.objectYOffset = 1; + } else if (player.absY == 3298) { + player.objectYOffset = 3; + } + break; + + case 11666: + player.objectXOffset = -1; + player.objectYOffset = -1; + break; + + case 1723: + if (player.objectX == 3100 && player.objectY == 3266 + || player.objectX == 2663 && player.objectY == 3321) { + player.objectXOffset = 2; + player.objectYOffset = 1; + } else if (player.objectX == 3259 && player.objectY == 3447 + || player.objectX == 2590 && player.objectY == 3090 + || player.objectX == 3212 && player.objectY == 3474) { + player.objectYOffset = 2; + } else if (player.objectX == 2590 && player.objectY == 3085) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } + break; + + case 1738: + if (player.objectX == 3204 && player.objectY == 3207 || player.objectX == 2648 && player.objectY == 3310) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } else if (player.objectX == 3204 && player.objectY == 3229) { + player.objectXOffset = 2; + } else if (player.objectX == 2839 && player.objectY == 3537 || player.objectX == 2673 && player.objectY == 3300 || player.objectX == 2728 && player.objectY == 3460) { + player.objectXOffset = 2; + player.objectYOffset = 1; + } else if (player.absX == 2746) { + player.objectXOffset = 2; + } else if (player.objectX == 3010 && player.objectY == 3515 || player.objectX == 2648 && player.objectY == 3310) { + player.objectDistance = 2; + } else if (player.objectX == 2895 && player.objectY == 3513 || player.objectX == 3144 && player.objectY == 3447) { + player.objectDistance = 3; + } + break; + + case 1739: + if (player.objectX == 3204 && player.objectY == 3207) { + player.objectDistance = 3; + } else if (player.objectX == 3204 && player.objectY == 3229) { + player.objectXOffset = 2; + } else if (player.objectX == 3204 && player.objectY == 3207) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } + break; + + case 1740: + if (player.objectX == 3205 && player.objectY == 3208) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } else if (player.objectX == 3144 && player.objectY == 3448) { + player.objectDistance = 1; + } + break; + + case 12536: + player.objectXOffset = 2; + player.objectYOffset = 1; + break; + + case 12537: + player.objectXOffset = 1; + player.objectYOffset = 2; + break; + + case 12538: + player.objectYOffset = 1; + break; + + case 2287: + if (player.absX == 2552 && player.absY == 3561) { + player.objectYOffset = 2; + } else if (player.absX == 2552 && player.absY == 3558) { + player.objectYOffset = -1; + } + break; + + case 1734: + if (player.objectX == 2569 && player.objectY == 9522) { + player.objectXOffset = 1; + player.objectYOffset = 3; + } else if (player.objectX == 3187 && player.objectY == 9833) { + player.objectXOffset = 3; + player.objectYOffset = 1; + } + break; + + case 4493: + case 4494: + case 4495: + case 4496: + player.objectDistance = 5; + break; + + case 6522: + case 10229: + player.objectDistance = 2; + break; + + case 4417: + if (player.objectX == 2425 && player.objectY == 3074) { + player.objectYOffset = 2; + } + break; + + case 4420: + if (player.getX() >= 2383 && player.getX() <= 2385) { + player.objectYOffset = 1; + } else { + player.objectYOffset = -2; + } + // fall through + break; + + case 2878: + case 2879: + player.objectDistance = 3; + break; + + case 2558: + player.objectDistance = 0; + if (player.absX > player.objectX && player.objectX == 3044) { + player.objectXOffset = 1; + } + if (player.absY > player.objectY) { + player.objectYOffset = 1; + } + if (player.absX < player.objectX && player.objectX == 3038) { + player.objectXOffset = -1; + } + break; + + case 9356: + player.objectDistance = 2; + break; + + case 1815: + case 1816: + case 5959: + case 5960: + player.objectDistance = 0; + break; + + case 9293: + player.objectDistance = 2; + break; + + case 4418: + if (player.objectX == 2374 && player.objectY == 3131) { + player.objectYOffset = -2; + } else if (player.objectX == 2369 && player.objectY == 3126) { + player.objectXOffset = 2; + } else if (player.objectX == 2380 && player.objectY == 3127) { + player.objectYOffset = 2; + } else if (player.objectX == 2369 && player.objectY == 3126) { + player.objectXOffset = 2; + } else if (player.objectX == 2374 && player.objectY == 3131) { + player.objectYOffset = -2; + } + break; + + case 9706: + player.objectDistance = 0; + player.objectXOffset = 1; + break; + + case 9707: + player.objectDistance = 0; + player.objectYOffset = -1; + break; + + case 4419: + if (player.getX() >= 2417 && player.getX() <= 2418) { + player.objectYOffset = 3; + } else { + player.objectYOffset = -1; + player.objectXOffset = -3; + player.objectDistance = 3; + } + break; + + case 6707: + player.objectYOffset = 3; + break; + + case 6823: + player.objectDistance = 2; + player.objectYOffset = 1; + break; + + case 6706: + player.objectXOffset = 2; + break; + + case 6772: + player.objectDistance = 2; + player.objectYOffset = 1; + break; + + case 6705: + player.objectYOffset = -1; + break; + + case 6822: + player.objectDistance = 2; + player.objectYOffset = 1; + break; + + case 6704: + player.objectYOffset = -1; + break; + + case 6773: + player.objectDistance = 2; + player.objectXOffset = 1; + player.objectYOffset = 1; + break; + + case 6703: + player.objectXOffset = -1; + break; + + case 6771: + player.objectDistance = 2; + player.objectXOffset = 1; + player.objectYOffset = 1; + break; + + case 6702: + player.objectXOffset = -1; + break; + + case 6821: + player.objectDistance = 2; + player.objectXOffset = 1; + player.objectYOffset = 1; + break; + + /* + * case 1276: case 1278: case 1306: case 1307: case 1308: case 1309: + * case 1281: case 1319: case 1332: case 1318: case 1330: + * client.objectDistance = 3; break; + */ + + default: + player.objectDistance = 1; + player.objectXOffset = 0; + player.objectYOffset = 0; + break; + } + if (player.goodDistance(player.objectX + player.objectXOffset, + player.objectY + player.objectYOffset, player.getX(), + player.getY(), player.objectDistance)) { + player.getObjects().firstClickObject(player.objectId, + player.objectX, player.objectY); + } else { + player.clickObjectType = 1; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.clickObjectType == 1 + && player.goodDistance(player.objectX + + player.objectXOffset, player.objectY + + player.objectYOffset, player.getX(), + player.getY(), player.objectDistance)) { + player.getObjects().firstClickObject( + player.objectId, player.objectX, + player.objectY); + container.stop(); + } + if (player.clickObjectType > 1 + || player.clickObjectType == 0) { + container.stop(); + } + } + + @Override + public void stop() { + player.clickObjectType = 0; + } + }, 1); + } + break; + + case SECOND_CLICK: + player.objectId = player.getInStream().readUnsignedWordBigEndianA(); + player.objectY = player.getInStream().readSignedWordBigEndian(); + player.objectX = player.getInStream().readUnsignedWordA(); + player.objectDistance = 1; + if (player.playerRights == 3) { + player.getActionSender().sendMessage("ObjectId: " + player.objectId + " ObjectX: " + player.objectX + " ObjectY: " + player.objectY + " Objectclick = 2, Xoff: " + (player.getX() - player.objectX) + " Yoff: " + (player.getY() - player.objectY)); + } + if (Stalls.isObject(player.objectId)) { + Stalls.attemptStall(player, player.objectId, player.objectX, player.objectX); + return; + } + switch (player.objectId) { + case 6162: + case 6163: + case 6164: + case 6165: + case 6166: + case 9390: + player.objectDistance = 2; + break; + + case 12537: + player.objectDistance = 2; + break; + + case 2781: + if (player.objectX == 3272 && player.objectY == 3185) { + player.objectDistance = 3; + } + break; + + case 1739: + if (player.objectX == 3204 && player.objectY == 3207) { + player.objectDistance = 3; + } else if (player.objectX == 3204 && player.objectY == 3229) { + player.objectXOffset = 2; + } else if (player.objectX == 3204 && player.objectY == 3207) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } + break; + + default: + player.objectDistance = 1; + player.objectXOffset = 0; + player.objectYOffset = 0; + break; + } + if (player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().secondClickObject(player.objectId, player.objectX, player.objectY); + } else { + player.clickObjectType = 2; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.clickObjectType == 2 && player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().secondClickObject(player.objectId, player.objectX, player.objectY); + container.stop(); + } + if (player.clickObjectType != 2) { + container.stop(); + } + } + @Override + public void stop() { + player.clickObjectType = 0; + } + }, 1); + } + break; + + case THIRD_CLICK: // 'F' + player.objectX = player.getInStream().readSignedWordBigEndian(); + player.objectY = player.getInStream().readUnsignedWord(); + player.objectId = player.getInStream().readUnsignedWordBigEndianA(); + if (player.playerRights == 3) { + player.getActionSender().sendMessage("ObjectId: " + player.objectId + " ObjectX: " + player.objectX + " ObjectY: " + player.objectY + " Objectclick = 3, Xoff: " + (player.getX() - player.objectX) + " Yoff: " + (player.getY() - player.objectY)); + } + switch (player.objectId) { + case 12537: + player.objectDistance = 2; + break; + case 1739: + if (player.objectX == 3204 && player.objectY == 3207) { + player.objectDistance = 3; + } else if (player.objectX == 3204 && player.objectY == 3229) { + player.objectXOffset = 2; + } else if (player.objectX == 3204 && player.objectY == 3207) { + player.objectXOffset = 1; + player.objectYOffset = 2; + } + break; + default: + player.objectDistance = 1; + break; + } + player.objectXOffset = 0; + player.objectYOffset = 0; + if (player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().thirdClickObject(player.objectId, player.objectX, player.objectY); + } else { + player.clickObjectType = 3; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.clickObjectType == 3 && player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().thirdClickObject(player.objectId, player.objectX, player.objectY); + container.stop(); + } + if (player.clickObjectType < 3) { + container.stop(); + } + } + + @Override + public void stop() { + player.clickObjectType = 0; + } + }, 1); + } + break; + + + case FOURTH_CLICK: + player.objectX = player.getInStream().readSignedWordBigEndianA(); + player.objectId = player.getInStream().readUnsignedWordA(); + player.objectY = player.getInStream().readUnsignedWordBigEndianA(); + if (player.playerRights == 3) { + player.getActionSender().sendMessage("ObjectId: " + player.objectId + " ObjectX: " + player.objectX + " ObjectY: " + player.objectY + " Objectclick = 4, Xoff: " + (player.getX() - player.objectX) + " Yoff: " + (player.getY() - player.objectY)); + } + switch (player.objectId) { + default: + player.objectDistance = 1; + break; + } + player.objectXOffset = 0; + player.objectYOffset = 0; + if (player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().fourthClickObject(player.objectId, player.objectX, player.objectY); + } else { + player.clickObjectType = 4; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (player.clickObjectType == 4 && player.goodDistance(player.objectX + player.objectXOffset, player.objectY + player.objectYOffset, player.getX(), player.getY(), player.objectDistance)) { + player.getObjects().fourthClickObject(player.objectId, player.objectX, player.objectY); + container.stop(); + } + if (player.clickObjectType < 4) { + container.stop(); + } + } + + @Override + public void stop() { + player.clickObjectType = 0; + } + }, 1); + } + break; + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickTab.java b/2006Redone Server/src/redone/net/packets/impl/ClickTab.java new file mode 100644 index 00000000..b0753188 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickTab.java @@ -0,0 +1,149 @@ +package redone.net.packets.impl; + +import redone.game.items.ItemAssistant; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class ClickTab implements PacketType { + + @Override + public void processPacket(final Client c, int packetType, int packetSize) { + switch (packetSize) { + case 1:// first part. + if (c.tutorialProgress == 0) { // wrench + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "On the side panel you can now see a variety of options from", + "changing your graphic settings and audio and music volume", + "to selecting whether your player should accept help from", + "other players. Don't worry about these too much for now.", + "@blu@Player controls"); + c.getActionSender().chatbox(6179); + c.tutorialProgress = 1; + } else if (c.tutorialProgress == 3) { // backpack + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "You can click on the backpack icon at any time to view the", + "items that you currently have in your inventory. You will see", + "that you now have an axe in your inventory. Use this to get", + "some logs by clicking on one of the trees in the area.", + "Cut down a tree"); + c.getActionSender().createArrow(3099, 3095, c.getH(), 2); + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 4) { // Skills tab + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "Here you will see how good your skills are. As you move your", + "mouse over any of the icons in this panel, the small yellow", + "popup box will show you the exact amount of experience you", + "have and how much is needed to get to the next level.", + "Your skill stats"); + c.tutorialProgress = 5; + c.getActionSender().chatbox(6179); + c.getActionSender().createArrow(1, 2); + } else if (c.tutorialProgress == 9) { // Music tab + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "From this interface you can control the music that is played.", + "As you explore the world, more of the tunes will become", + "unlocked. Once you've examined this menu use the next door", + "to continue. If you need a recap, talk to the Master Chef", + "The music player"); + c.getActionSender().createArrow(3073, 3090, c.getH(), 2); + c.tutorialProgress = 10; + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 10) { // Emotes aNd running + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "For those situations where words don't quite describe how you", + "feel, try an emote. Go ahead, try one out! You might notice", + "that some of the emotes are grey and cannot be used now.", + "As you progress further into the game you'll gain more.", + "Emotes"); + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 12) { // Quest Tab + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "", + "This is your Quest Journal, a list of all the quests in the game.", + "Talk to the Quest Guide again for an explaination.", + "", "Your Quest Journal"); + c.tutorialProgress = 13; + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 21) { // Worn inventory + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "You can see what items you are wearing in the worn inventory", + "to the left of the screen with their combined statistics on the", + "right. Let's add something. Left click your dagger to 'wield' it.", + "", "Worn interface"); + c.getActionSender().chatbox(6179); + c.tutorialProgress = 22; + } else if (c.tutorialProgress == 23) { // Attack syle tabs + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "From this interface you can select the type of attack your", + "character will use. Different monsters have different", + "weaknesses. If you hover your mouse over the buttons, you", + "will see the type of XP you will receive when using each attack.", + "This is your combat interface"); + c.tutorialProgress = 24; + c.getActionSender().chatbox(6179); + c.getItemAssistant() + .sendWeapon( + c.playerEquipment[c.playerWeapon], + ItemAssistant + .getItemName(c.playerEquipment[c.playerWeapon])); + c.getActionSender().createArrow(3111, 9518, c.getH(), 2); + } else if (c.tutorialProgress == 29) { // Prayer + c.getDialogueHandler().sendDialogues(3092, 222); + } else if (c.tutorialProgress == 30) { // friends tab + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "This will be explaing by Brother Brace shortly, but first click", + "on the other flashing face to the right of your screen.", + "", "", "This is your friends list"); + c.getActionSender().setSidebarInterface(9, 5715); + c.getActionSender().flashSideBarIcon(-9); + c.tutorialProgress = 31; + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 31) { // ignores tab + c.getActionSender().chatbox(6180); + c.getDialogueHandler() + .chatboxText( + c, + "The two lists - friends and ignore - can be very helpful for", + "keeping track of when your friends are online or for blocking", + "messages from people you simply don't like. Speak with", + "Brother Brace and he will tell you more.", + "This is your ignore list"); + c.getActionSender().chatbox(6179); + } else if (c.tutorialProgress == 32) { // Final magic tab + c.tutorialProgress = 33; + c.getDialogueHandler().sendDialogues(3108, 946); + } + break; + + } + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java b/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java new file mode 100644 index 00000000..ea3fc355 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java @@ -0,0 +1,2630 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.Server; +import redone.game.content.combat.Specials; +import redone.game.content.combat.magic.CastOnOther; +import redone.game.content.combat.magic.MagicData; +import redone.game.content.combat.magic.MagicTeleports; +import redone.game.content.combat.prayer.ActivatePrayers; +import redone.game.content.music.Music; +import redone.game.content.music.sound.SoundList; +import redone.game.content.quests.QuestAssistant; +import redone.game.content.random.PartyRoom; +import redone.game.content.randomevents.SandwhichLady; +import redone.game.content.skills.cooking.Cooking; +import redone.game.content.skills.cooking.CookingTutorialIsland; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.content.skills.crafting.LeatherMaking; +import redone.game.content.skills.crafting.Pottery; +import redone.game.content.skills.crafting.Spinning; +import redone.game.content.skills.crafting.Tanning; +import redone.game.content.skills.crafting.CraftingData.tanningData; +import redone.game.content.skills.fletching.LogCutting; +import redone.game.content.skills.herblore.Herblore; +import redone.game.content.skills.smithing.SilverCrafting; +import redone.game.content.skills.smithing.Smelting; +import redone.game.content.traveling.GnomeGlider; +import redone.game.items.GameItem; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.ExperienceLamp; +import redone.game.items.impl.Flowers; +import redone.game.items.impl.LightSources; +import redone.game.items.impl.Teles; +import redone.game.objects.impl.Climbing; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * Clicking most buttons + **/ +public class ClickingButtons implements PacketType { + + @Override + public void processPacket(final Client player, int packetType, int packetSize) { + int actionButtonId = Misc.hexToInt(player.getInStream().buffer, 0, packetSize); + player.getGlassBlowing().handleActionButtin(actionButtonId); + GnomeGlider.flightButtons(player, actionButtonId); + player.getEmoteHandler().startEmote(actionButtonId); + QuestAssistant.questButtons(player, actionButtonId); + LogCutting.handleClick(player, actionButtonId); + Smelting.getBar(player, actionButtonId); + ExperienceLamp.buttons(player, actionButtonId); + Herblore.handleHerbloreButtons(player, actionButtonId); + LeatherMaking.craftLeather(player, actionButtonId); + SandwhichLady.handleOptions(player, actionButtonId); + SilverCrafting.makeSilver(player, actionButtonId, 0); + Climbing.handleLadderButtons(player, actionButtonId); + Specials.specialClicking(player, actionButtonId); + if (player.musicOn == true) { + player.getPlayList().handleButton(actionButtonId); + } + + for (tanningData t : tanningData.values()) { + if (actionButtonId == t.getButtonId(actionButtonId)) { + Tanning.tanHide(player, actionButtonId); + } + } + if (player.isDead) { + return; + } + + if (player.playerRights == 3) { + player.getActionSender().sendMessage( + player.playerName + " - actionbutton: " + actionButtonId); + } + + if (player.isAutoButton(actionButtonId)) { + player.assignAutocast(actionButtonId); + } + + switch (actionButtonId) { + + + case 71074: + if (player.clanId >= 0) { + if (Server.clanChat.clans[player.clanId].owner + .equalsIgnoreCase(player.playerName)) { + Server.clanChat + .sendLootShareMessage( + player.clanId, + "Lootshare has been toggled to " + + (!Server.clanChat.clans[player.clanId].lootshare ? "on" + : "off") + + " by the clan leader."); + Server.clanChat.clans[player.clanId].lootshare = !Server.clanChat.clans[player.clanId].lootshare; + } else + player.getActionSender().sendMessage("Only the owner of the clan has the power to do that."); + } + break; + case 70212: + if (player.clanId > -1) + Server.clanChat.leaveClan(player.playerId, player.clanId); + else + player.getActionSender().sendMessage("You are not in a clan."); + break; + case 62137: + if (player.clanId >= 0) { + player.getActionSender().sendMessage("You are already in a clan."); + break; + } + if (player.getOutStream() != null) { + player.getOutStream().createFrame(187); + player.flushOutStream(); + } + break; + + case 55096: + player.getPlayerAssistant().removeAllWindows(); + player.droppedItem = -1; + break; + + case 55095: + player.getItemAssistant().destroyItem(player.droppedItem); + player.droppedItem = -1; + break; + + case 50235: + MagicTeleports.paddewwaTeleport(player); + break; + + case 50245: + MagicTeleports.senntisenTeleport(player); + break; + + case 50253: + MagicTeleports.kharyllTeleport(player); + break; + + case 51005: + MagicTeleports.lassarTeleport(player); + break; + + case 51013: + MagicTeleports.dareeyakTeleport(player); + break; + + case 51023: + MagicTeleports.carrallangarTeleport(player); + break; + + case 51031: + MagicTeleports.annakarlTeleport(player); + break; + + case 51039: + MagicTeleports.ghorrockTeleport(player); + break; + + case 4140: + MagicTeleports.varrockTeleport(player); + break; + + case 4143: + MagicTeleports.lumbridgeTeleport(player); + break; + + case 4146: + MagicTeleports.faladorTeleport(player); + break; + + case 4150: + MagicTeleports.camelotTeleport(player); + break; + + case 6004: + MagicTeleports.ardougneTeleport(player); + break; + + case 6005: + MagicTeleports.watchTowerTeleport(player); + break; + + case 29031: + MagicTeleports.trollhiemTeleport(player); + break; + + case 72038: + MagicTeleports.apeAtollTeleport(player); + break; + + /** + * End of Modern Teleports + */ + + case 4135: + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't do this in trade!"); + return; + } + if (player.playerLevel[6] < 15) { + player.getPlayerAssistant() + .sendFrame126( + "You need a magic level of @blu@15 @bla@to cast bones to bananas", + 357); + player.getPlayerAssistant().sendChatInterface(356); + return; + } + if (!player.getItemAssistant().playerHasItem(526, 1)) { + player.getActionSender().sendMessage( + "You don't have any bones!"); + return; + } + if (!player.getItemAssistant().playerHasItem(561, 1) + || !player.getItemAssistant().playerHasItem(555, 2) + || !player.getItemAssistant().playerHasItem(557, 2)) { + player.getPlayerAssistant() + .sendFrame126( + "You do not have the correct runes to cast this spell.", + 357); + player.getPlayerAssistant().sendChatInterface(356); + return; + } + if (System.currentTimeMillis() - player.boneDelay > 2000) { + player.getItemAssistant().deleteItem2(561, 1); + player.getItemAssistant().deleteItem2(557, 2); + player.getItemAssistant().deleteItem2(555, 2); + player.getPlayerAssistant().addSkillXP(40, 6); + player.getPlayerAssistant().refreshSkill(6); + player.startAnimation(722); + player.gfx100(141); + player.getPlayerAssistant().sendFrame106(6); + player.getActionSender().sendSound( + SoundList.BONES_TO_BANNAS, 100, 0); + player.boneDelay = System.currentTimeMillis(); + do { + player.getItemAssistant().deleteItem2(526, 1); + player.getItemAssistant().addItem(1963, 1); + } while (player.getItemAssistant().playerHasItem(526, 1)); + } + break; + + case 62005: + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't do this in trade!"); + return; + } + if (player.playerLevel[6] < 60) { + player.getPlayerAssistant() + .sendFrame126( + "You need a magic level of @blu@60 @blu@ to cast bones to peaches.", + 357); + player.getPlayerAssistant().sendChatInterface(356); + return; + } + if (!player.getItemAssistant().playerHasItem(526, 1)) { + player.getActionSender().sendMessage( + "You don't have any bones!"); + return; + } + if (!player.getItemAssistant().playerHasItem(561, 2) + || !player.getItemAssistant().playerHasItem(555, 4) + || !player.getItemAssistant().playerHasItem(557, 4)) { + player.getPlayerAssistant() + .sendFrame126( + "You do not have the correct runes to cast this spell.", + 357); + player.getPlayerAssistant().sendChatInterface(356); + return; + } + if (System.currentTimeMillis() - player.boneDelay > 2000) { + player.getItemAssistant().deleteItem2(561, 2); + player.getItemAssistant().deleteItem2(557, 4); + player.getItemAssistant().deleteItem2(555, 4); + player.getPlayerAssistant().addSkillXP(40, 6); + player.getPlayerAssistant().refreshSkill(6); + player.startAnimation(722); + player.gfx100(311); + player.getPlayerAssistant().sendFrame106(6); + player.boneDelay = System.currentTimeMillis(); + do { + player.getItemAssistant().deleteItem2(526, 1); + player.getItemAssistant().addItem(6883, 1); + } while (player.getItemAssistant().playerHasItem(526, 1)); + } + break; + + case 14067: + player.canChangeAppearance = false; + break; + + case 34185: + case 34193: + case 34189: + if (player.clickedSpinning == true) { + Spinning.getAmount(player, 1); + } + break; + + case 34184: + case 34188: + case 34192: + if (player.clickedSpinning == true) { + Spinning.getAmount(player, 5); + } + break; + + case 34183: + case 34187: + case 34191: + if (player.clickedSpinning == true) { + Spinning.getAmount(player, 10); + } + break; + + case 34182: + case 34186: + case 34190: + if (player.clickedSpinning == true) { + Spinning.getAmount(player, 28); + } + break; + + /* + * Item on interface 5 + */ + // item 1 + case 34245: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1787, 6.3, 1, 1); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1787, 1931, 1, 6.3, 1); + } + break; + case 34244: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1787, 6.3, 1, 5); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1787, 1931, 1, 6.3, 5); + } + break; + case 34243: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1787, 6.3, 1, 10); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1787, 1931, 1, 6.3, 10); + } + break; + case 34242: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1787, 6.3, 1, 28); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1787, 1931, 1, 6.3, 28); + } + break; + // item 2 + case 34249: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1789, 15, 7, 1); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1789, 2313, 7, 10, 1); + } + break; + case 34248: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1789, 15, 7, 5); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1789, 2313, 7, 10, 5); + } + break; + case 34247: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1789, 15, 7, 10); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1789, 2313, 7, 10, 10); + } + break; + case 34246: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1789, 15, 7, 28); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1789, 2313, 7, 10, 28); + } + break; + // item 3 + case 34253: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1791, 18, 8, 1); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1791, 1923, 8, 15, 1); + } + break; + case 34252: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1791, 18, 8, 5); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1791, 1923, 8, 15, 5); + } + break; + case 34251: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1791, 18, 8, 10); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1791, 1923, 8, 15, 10); + } + break; + case 34250: + if (player.showedUnfire == true) { + Pottery.makeUnfire(player, 1791, 18, 8, 28); + } + if (player.showedFire == true) { + Pottery.makeFire(player, 1791, 1923, 8, 15, 28); + } + break; + + case 23132: + player.getPlayerAssistant().closeAllWindows(); + player.isBotting = false; + player.getActionSender().sendMessage("You are not botting."); + break; + + case 9118: + player.getPlayerAssistant().closeAllWindows(); + break; + + case 49022: + CastOnOther.teleOtherLocation(player, player.teleotherType, false); + break; + + case 49024: + CastOnOther.teleOtherLocation(player, player.teleotherType, true); + break; + + case 8100: + player.playerAppearance[7] = 11; // beard 11: long + player.getPlayerAssistant().requestUpdates(); + break; + + case 8101: + player.playerAppearance[7] = 10; // beard 10: goatee + player.getPlayerAssistant().requestUpdates(); + break; + + case 8102: + player.playerAppearance[7] = 13; // beard 13: mustache + player.getPlayerAssistant().requestUpdates(); + break; + + case 8103: + player.playerAppearance[7] = 15; // beard 15: Chin strap + player.getPlayerAssistant().requestUpdates(); + break; + + case 8104: + player.playerAppearance[7] = 17; // beard 17: Barbarian beard? + player.getPlayerAssistant().requestUpdates(); + break; + + case 8105: + player.playerAppearance[7] = 12; // beard 12: Egyptian beard? + player.getPlayerAssistant().requestUpdates(); + break; + + case 8106: + player.playerAppearance[7] = 14; // beard 14: Clean shaven + player.getPlayerAssistant().requestUpdates(); + break; + + case 8107: + player.playerAppearance[7] = 16; // beard 16: Goatee + Chin + // strap + player.getPlayerAssistant().requestUpdates(); + break; + + case 8088: + player.playerAppearance[8] = 0; // hair/beard color: Dark-brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 8089: + player.playerAppearance[8] = 1; // hair/beard color: White + player.getPlayerAssistant().requestUpdates(); + break; + + case 8090: + player.playerAppearance[8] = 2; // hair/beard color: Gray + player.getPlayerAssistant().requestUpdates(); + break; + + case 8091: + player.playerAppearance[8] = 3; // hair/beard color: Black + player.getPlayerAssistant().requestUpdates(); + break; + + case 8092: + player.playerAppearance[8] = 4; // hair/beard color: Orange + player.getPlayerAssistant().requestUpdates(); + break; + + case 8093: + player.playerAppearance[8] = 5; // hair/beard color: Blonde + player.getPlayerAssistant().requestUpdates(); + break; + + case 8094: + player.playerAppearance[8] = 6; // hair/beard color: Light-brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 8095: + player.playerAppearance[8] = 7; // hair/beard color: Brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 8096: + player.playerAppearance[8] = 8; // hair/beard color: Cyan + player.getPlayerAssistant().requestUpdates(); + break; + + case 8097: + player.playerAppearance[8] = 9; // hair/beard color: Green + player.getPlayerAssistant().requestUpdates(); + break; + + case 8098: + player.playerAppearance[8] = 10; // hair/beard color: Red + player.getPlayerAssistant().requestUpdates(); + break; + + case 8099: + player.playerAppearance[8] = 11; // hair/beard color: Pink + player.getPlayerAssistant().requestUpdates(); + break; + + case 10229: + player.playerAppearance[1] = 0; // 0: Bald + player.getPlayerAssistant().requestUpdates(); + break; + + case 10230: + player.playerAppearance[1] = 1; // 1: Dreadlocks + player.getPlayerAssistant().requestUpdates(); + break; + + case 10231: + player.playerAppearance[1] = 2; // 2: Long hair + player.getPlayerAssistant().requestUpdates(); + break; + + case 10232: + player.playerAppearance[1] = 3; // 3: Medium hair + player.getPlayerAssistant().requestUpdates(); + break; + + case 10233: + player.playerAppearance[1] = 4; // 4: Monk + player.getPlayerAssistant().requestUpdates(); + break; + + case 10234: + player.playerAppearance[1] = 5; // 5: Comb-over + player.getPlayerAssistant().requestUpdates(); + break; + + case 10235: + player.playerAppearance[1] = 6; // 6: Close-cropped + player.getPlayerAssistant().requestUpdates(); + break; + + case 10236: + player.playerAppearance[1] = 7; // Wild spikes + player.getPlayerAssistant().requestUpdates(); + break; + + case 10237: + player.playerAppearance[1] = 8; // Spikes + player.getPlayerAssistant().requestUpdates(); + break; + + case 10217: + player.playerAppearance[8] = 0; // hair/beard color: Dark-brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 10218: + player.playerAppearance[8] = 1; // hair/beard color: White + player.getPlayerAssistant().requestUpdates(); + break; + + case 10219: + player.playerAppearance[8] = 2; // hair/beard color: Gray + player.getPlayerAssistant().requestUpdates(); + break; + + case 10220: + player.playerAppearance[8] = 3; // hair/beard color: Black + player.getPlayerAssistant().requestUpdates(); + break; + + case 10221: + player.playerAppearance[8] = 4; // hair/beard color: Orange + player.getPlayerAssistant().requestUpdates(); + break; + + case 10222: + player.playerAppearance[8] = 5; // hair/beard color: Blonde + player.getPlayerAssistant().requestUpdates(); + break; + + case 10223: + player.playerAppearance[8] = 6; // hair/beard color: Light-brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 10224: + player.playerAppearance[8] = 7; // hair/beard color: Brown + player.getPlayerAssistant().requestUpdates(); + break; + + case 10225: + player.playerAppearance[8] = 8; // hair/beard color: Cyan + player.getPlayerAssistant().requestUpdates(); + break; + + case 10226: + player.playerAppearance[8] = 9; // hair/beard color: Green + player.getPlayerAssistant().requestUpdates(); + break; + + case 10227: + player.playerAppearance[8] = 10; // hair/beard color: Red + player.getPlayerAssistant().requestUpdates(); + break; + + case 10228: + player.playerAppearance[8] = 11; // hair/beard color: Pink + player.getPlayerAssistant().requestUpdates(); + break; + + case 10193: + player.getItemAssistant().deleteItem2(995, 2000); + player.getPlayerAssistant().removeAllWindows(); + break; + + case 8065: + player.getItemAssistant().deleteItem2(995, 2000); + player.getPlayerAssistant().removeAllWindows(); + break; + /** End of Hairdresser buttons */ + + case 3166: + case 3165: + case 3164: + case 3163: + Music.playMusic(player); + player.musicOn = true; + break; + + case 3162: + if (player.musicOn == true) { + player.musicOn = false; + } else { + player.getActionSender().sendMessage("Your music is already turned off."); + } + break; + + case 8198: + PartyRoom.accept(player); + break; + + case 53152: + if (player.tutorialProgress < 36) { + CookingTutorialIsland.getAmount(player, 1); + } else { + Cooking.cookItem(player, player.cookingItem, 1, + player.cookingObject); + } + break; + + case 53151: + if (player.tutorialProgress < 36) { + CookingTutorialIsland.getAmount(player, 5); + } else { + Cooking.cookItem(player, player.cookingItem, 5, + player.cookingObject); + } + break; + + case 53150: + if (player.tutorialProgress < 36) { + CookingTutorialIsland.getAmount(player, 10); + } else { + Cooking.cookItem(player, player.cookingItem, 10, player.cookingObject); + } + break; + + case 53149: + if (player.tutorialProgress < 36) { + CookingTutorialIsland.getAmount(player, 28); + } else { + Cooking.cookItem(player, player.cookingItem, 28, + player.cookingObject); + } + break; + + case 58074: + player.getBankPin().closeBankPin(); + break; + + case 58073: + if (player.hasBankpin && !player.requestPinDelete) { + player.requestPinDelete = true; + player.getBankPin().dateRequested(); + player.getBankPin().dateExpired(); + player.getDialogueHandler().sendDialogues(1017, 1); + player.getActionSender() + .sendMessage( + "[Notice] A PIN delete has been requested. Your PIN will be deleted in " + + player.getBankPin().recovery_Delay + + " days."); + player.getActionSender().sendMessage( + "To cancel this change just type in the correct PIN."); + } else { + player.getActionSender() + .sendMessage( + "[Notice] Your PIN is already pending deletion. Please wait the entire 2 days."); + player.getPlayerAssistant().closeAllWindows(); + } + break; + + case 58025: + case 58026: + case 58027: + case 58028: + case 58029: + case 58030: + case 58031: + case 58032: + case 58033: + case 58034: + player.getBankPin().bankPinEnter(actionButtonId); + break; + + case 58230: + if (!player.hasBankpin) { + player.getBankPin().openPin(); + } else if (player.hasBankpin && player.enterdBankpin) { + player.getBankPin().resetBankPin(); + player.getActionSender().sendMessage( + "Your PIN has been deleted as requested."); + } else { + player.getActionSender() + .sendMessage( + "Please enter your Bank Pin before requesting a delete."); + player.getActionSender() + .sendMessage( + "You can do this by simply opening your bank. This is to verify it's really you."); + player.getPlayerAssistant().closeAllWindows(); + } + break; + + case 34142: // tab 1 + player.getSkillInterfaces().menuCompilation(1); + break; + + case 34119: // tab 2 + player.getSkillInterfaces().menuCompilation(2); + break; + + case 34120: // tab 3 + player.getSkillInterfaces().menuCompilation(3); + break; + + case 34123: // tab 4 + player.getSkillInterfaces().menuCompilation(4); + break; + + case 34133: // tab 5 + player.getSkillInterfaces().menuCompilation(5); + break; + + case 34136: // tab 6 + player.getSkillInterfaces().menuCompilation(6); + break; + + case 34139: // tab 7 + player.getSkillInterfaces().menuCompilation(7); + break; + + case 34155: // tab 8 + player.getSkillInterfaces().menuCompilation(8); + break; + + case 34158: // tab 9 + player.getSkillInterfaces().menuCompilation(9); + break; + + case 34161: // tab 10 + player.getSkillInterfaces().menuCompilation(10); + break; + + case 59199: // tab 11 + player.getSkillInterfaces().menuCompilation(11); + break; + + case 59202: // tab 12 + player.getSkillInterfaces().menuCompilation(12); + break; + case 59203: // tab 13 + player.getSkillInterfaces().menuCompilation(13); + break; + + case 33206: // attack + player.getSkillInterfaces().attackComplex(1); + player.getSkillInterfaces().selected = 0; + break; + case 33209: // strength + player.getSkillInterfaces().strengthComplex(1); + player.getSkillInterfaces().selected = 1; + break; + case 33212: // Defence + player.getSkillInterfaces().defenceComplex(1); + player.getSkillInterfaces().selected = 2; + break; + case 33215: // range + player.getSkillInterfaces().rangedComplex(1); + player.getSkillInterfaces().selected = 3; + break; + case 33218: // prayer + player.getSkillInterfaces().prayerComplex(1); + player.getSkillInterfaces().selected = 4; + break; + case 33221: // mage + player.getSkillInterfaces().magicComplex(1); + player.getSkillInterfaces().selected = 5; + break; + case 33224: // runecrafting + player.getSkillInterfaces().runecraftingComplex(1); + player.getSkillInterfaces().selected = 6; + break; + case 33207: // hp + player.getSkillInterfaces().hitpointsComplex(1); + player.getSkillInterfaces().selected = 7; + break; + case 33210: // agility + player.getSkillInterfaces().agilityComplex(1); + player.getSkillInterfaces().selected = 8; + break; + case 33213: // herblore + player.getSkillInterfaces().herbloreComplex(1); + player.getSkillInterfaces().selected = 9; + break; + case 33216: // theiving + player.getSkillInterfaces().thievingComplex(1); + player.getSkillInterfaces().selected = 10; + break; + case 33219: // crafting + player.getSkillInterfaces().craftingComplex(1); + player.getSkillInterfaces().selected = 11; + break; + case 33222: // fletching + player.getSkillInterfaces().fletchingComplex(1); + player.getSkillInterfaces().selected = 12; + break; + case 47130:// slayer + player.getSkillInterfaces().slayerComplex(1); + player.getSkillInterfaces().selected = 13; + break; + case 33208: // mining + player.getSkillInterfaces().miningComplex(1); + player.getSkillInterfaces().selected = 14; + break; + case 33211: // smithing + player.getSkillInterfaces().smithingComplex(1); + player.getSkillInterfaces().selected = 15; + break; + case 33214: // fishing + player.getSkillInterfaces().fishingComplex(1); + player.getSkillInterfaces().selected = 16; + break; + case 33217: // cooking + player.getSkillInterfaces().cookingComplex(1); + player.getSkillInterfaces().selected = 17; + break; + case 33220: // firemaking + player.getSkillInterfaces().firemakingComplex(1); + player.getSkillInterfaces().selected = 18; + break; + case 33223: // woodcut + player.getSkillInterfaces().woodcuttingComplex(1); + player.getSkillInterfaces().selected = 19; + break; + case 54104: // farming + player.getSkillInterfaces().farmingComplex(1); + player.getSkillInterfaces().selected = 20; + break; + + case 151: + if (player.autoRet == 1) { + player.autoRet = 0; + player.getPlayerAssistant().sendConfig(172, 1); + } else { + player.getActionSender().sendMessage("Your auto retaliate is already turned off."); + } + break; + + case 150: + if (player.autoRet == 0) { + player.autoRet = 1; + player.getPlayerAssistant().sendConfig(172, 0); + } else { + player.getActionSender().sendMessage("Your auto retaliate is already turned on."); + } + break; + + // 1st tele option + case 9190: + if (player.dialogueAction == 10) { + player.getPlayerAssistant().spellTeleport(2845, 4832, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 11) { + player.getPlayerAssistant().spellTeleport(2786, 4839, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 12) { + player.getPlayerAssistant().spellTeleport(2398, 4841, 0); + player.dialogueAction = -1; + } + break; + + // mining - 3046,9779,0 + // smithing - 3079,9502,0 + + // 2nd tele option + case 9191: + if (player.dialogueAction == 10) { + player.getPlayerAssistant().spellTeleport(2796, 4818, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 11) { + player.getPlayerAssistant().spellTeleport(2527, 4833, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 12) { + player.getPlayerAssistant().spellTeleport(2464, 4834, 0); + player.dialogueAction = -1; + } + break; + // 3rd tele option + + case 9192: + if (player.dialogueAction == 10) { + player.getPlayerAssistant().spellTeleport(2713, 4836, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 11) { + player.getPlayerAssistant().spellTeleport(2162, 4833, 0); + player.dialogueAction = -1; + } else if (player.dialogueAction == 12) { + player.getPlayerAssistant().spellTeleport(2207, 4836, 0); + player.dialogueAction = -1; + } + break; + // 4th tele option + case 9193: + if (player.dialogueAction == 10) { + player.getPlayerAssistant().spellTeleport(2660, 4839, 0); + player.dialogueAction = -1; + } + break; + // 5th tele option + case 9194: + if (player.dialogueAction == 10 || player.dialogueAction == 11) { + player.dialogueId++; + player.getDialogueHandler().sendDialogues(player.dialogueId, 0); + } else if (player.dialogueAction == 12) { + player.dialogueId = 17; + player.getDialogueHandler().sendDialogues(player.dialogueId, 0); + } + break; + + case 58253: + // c.getPA().showInterface(15106); + player.getItemAssistant().writeBonus(); + break; + + case 59004: + player.getPlayerAssistant().removeAllWindows(); + break; + + case 1093: + case 1094: + case 1097: + if (player.autocastId > 0) { + player.getPlayerAssistant().resetAutocast(); + } else { + if (player.playerMagicBook == 1) { + if (player.playerEquipment[player.playerWeapon] == 4675) { + player.getActionSender().setSidebarInterface(0, + 1689); + } else { + player.getActionSender() + .sendMessage( + "You can't autocast ancients without an ancient staff."); + } + } else if (player.playerMagicBook == 0) { + if (player.playerEquipment[player.playerWeapon] == 4170) { + player.getActionSender().setSidebarInterface(0, + 12050); + } else { + player.getActionSender().setSidebarInterface(0, + 1829); + } + } + + } + break; + + case 9167: + switch (player.dialogueAction) { + case 63: + player.getDialogueHandler().sendDialogues(166, player.npcType); + return; + case 64: + player.getDialogueHandler().sendDialogues(173, player.npcType); + return; + case 60: + player.getDialogueHandler().sendDialogues(277, player.npcType); + return; + case 61: + player.getDialogueHandler().sendDialogues(295, player.npcType); + return; + case 129: + player.getDialogueHandler().sendDialogues(231, player.npcType); + return; + case 58: + player.getDialogueHandler().sendDialogues(540, player.npcType); + return; + case 68: + player.getDialogueHandler().sendDialogues(39, player.npcType); + return; + case 124: + player.getDialogueHandler().sendDialogues(194, player.npcType); + return; + case 230: + player.getDialogueHandler().sendDialogues(1053, player.npcType); + return; + case 251: + player.getPlayerAssistant().openUpBank(); + player.nextChat = 0; + return; + case 144: + player.getDialogueHandler().sendDialogues(1314, player.npcType); + return; + case 502: + player.getDialogueHandler().sendDialogues(1026, player.npcType); + return; + case 1301: // first option haircut. + player.getDialogueHandler().sendDialogues(1302, 598); + return; + case 53: + if (player.objectId == 1293 || player.objectId == 1317) { + player.getPlayerAssistant().startTeleport(2542, 3169, 0, "modern"); + } else { + player.getActionSender().sendMessage("You can't teleport there, because you are already there!"); + player.getPlayerAssistant().closeAllWindows(); + } + return; + case 159: + player.getDialogueHandler().sendDialogues(3161, player.npcType); + return; + case 167: + player.getDialogueHandler().sendDialogues(1343, player.npcType); + return; + case 222: + player.getDialogueHandler().sendDialogues(911, player.npcType); + player.dialogueAction = -1; + return; + case 182: + player.getDialogueHandler().sendNpcChat1("No, I was hoping someone could help me find it though.", player.talkingNpc, "Squire"); + player.nextChat = 0; + return; + case 188: + player.getDialogueHandler().sendDialogues(3129, 945); + return; + case 185: + player.getDialogueHandler().sendDialogues(629, player.npcType); + return; + } + player.dialogueAction = 0; + player.getPlayerAssistant().removeAllWindows(); + break; + + case 9168: + switch (player.dialogueAction) { + case 63: + player.getDialogueHandler().sendDialogues(167, player.npcType); + return; + case 64: + player.getDialogueHandler().sendDialogues(174, player.npcType); + return; + case 60: + player.getDialogueHandler().sendDialogues(279, player.npcType); + return; + case 61: + player.getDialogueHandler().sendDialogues(297, player.npcType); + return; + case 124: + player.getDialogueHandler().sendDialogues(192, player.npcType); + return; + case 126: + player.getDialogueHandler().sendDialogues(203, player.npcType); + return; + case 58: + player.getDialogueHandler().sendDialogues(538, player.npcType); + return; + case 68: + player.getDialogueHandler().sendDialogues(40, player.npcType); + return; + case 230: + player.getDialogueHandler().sendDialogues(1049, player.npcType); + break; + case 251: + player.getBankPin().bankPinSettings(); + player.nextChat = 0; + return; + case 502: + player.getDialogueHandler().sendDialogues(1022, player.npcType); + return; + case 1301: + player.getDialogueHandler().sendDialogues(1308, 598); + return; + case 144: + player.getDialogueHandler().sendDialogues(1315, player.npcType); + return; + case 53: + if (player.objectId == 1294 || player.objectId == 1317) { + player.getPlayerAssistant().startTeleport(2461, 3444, 0, + "modern"); + } else { + player.getActionSender().sendMessage("You can't teleport there, because you are already there!"); + player.getPlayerAssistant().closeAllWindows(); + } + return; + case 159: + player.getDialogueHandler().sendDialogues(3195, player.npcType); + return; + case 167: + player.getDialogueHandler().sendDialogues(1344, player.npcType); + return; + case 222: + player.getDialogueHandler().sendDialogues(912, player.npcType); + player.dialogueAction = -1; + return; + case 182: + player.getDialogueHandler().sendDialogues(615, player.npcType); + return; + case 188: + player.getDialogueHandler().sendDialogues(3130, 945); + return; + case 185: + player.getDialogueHandler().sendDialogues(628, player.npcType); + return; + } + player.dialogueAction = 0; + player.getPlayerAssistant().removeAllWindows(); + break; + + case 9169: + switch (player.dialogueAction) { + case 63: + player.getDialogueHandler().sendDialogues(168, player.npcType); + return; + case 64: + player.getDialogueHandler().sendDialogues(175, player.npcType); + return; + case 60: + player.getDialogueHandler().sendDialogues(278, player.npcType); + return; + case 61: + player.getDialogueHandler().sendDialogues(296, player.npcType); + return; + case 53: + if (player.objectId == 1294 || player.objectId == 1293) { + player.getPlayerAssistant().startTeleport(3179, 3507, 0, + "modern"); + } else { + player.getActionSender().sendMessage("You can't teleport there, because you are already there!"); + player.getPlayerAssistant().closeAllWindows(); + } + return; + case 129: + player.getDialogueHandler().sendDialogues(232, player.npcType); + return; + case 126: + player.getDialogueHandler().sendDialogues(204, player.npcType); + return; + case 144: + player.getDialogueHandler().sendDialogues(1316, player.npcType); + return; + case 124: + player.getDialogueHandler().sendDialogues(3193, 741); + return; + case 58: + player.getDialogueHandler().sendDialogues(539, player.npcType); + return; + case 68: + player.getDialogueHandler().sendDialogues(41, player.npcType); + return; + case 230: + player.getDialogueHandler().sendDialogues(1050, player.npcType); + break; + case 251: + player.getDialogueHandler().sendDialogues(1015, 494); + return; + case 502: + player.getDialogueHandler().sendDialogues(1025, player.npcType); + return; + case 1301: + player.getDialogueHandler().sendDialogues(1306, 598); + return; + case 222: + player.getDialogueHandler().sendDialogues(913, player.npcType); + player.dialogueAction = -1; + return; + case 167: + player.getDialogueHandler().sendDialogues(1342, player.npcType); + return; + case 159: + player.getDialogueHandler().sendDialogues(3160, player.npcType); + return; + case 182: + player.getDialogueHandler().sendNpcChat1("Of course he is angry...", player.talkingNpc, "Squire"); + player.nextChat = 0; + return; + case 188: + player.getDialogueHandler().sendDialogues(3131, 945); + return; + case 185: + player.getDialogueHandler().sendDialogues(630, player.npcType); + return; + } + player.dialogueAction = 0; + player.getPlayerAssistant().removeAllWindows(); + break; + + case 9157:// barrows tele to tunnels + if (player.dialogueAction == 1) { + int r = 4; + // int r = Misc.random(3); + + switch (r) { + case 0: + player.getPlayerAssistant().movePlayer(3534, 9677, 0); + break; + + case 1: + player.getPlayerAssistant().movePlayer(3534, 9712, 0); + break; + + case 2: + player.getPlayerAssistant().movePlayer(3568, 9712, 0); + break; + + case 3: + player.getPlayerAssistant().movePlayer(3568, 9677, 0); + break; + case 4: + player.getPlayerAssistant().movePlayer(3551, 9694, 0); + break; + } + } else if (player.dialogueAction == 2) { + player.getPlayerAssistant().movePlayer(2507, 4717, 0); + } else if (player.dialogueAction == 7) { + player.getPlayerAssistant().startTeleport(3088, 3933, 0, "modern"); + player.getActionSender().sendMessage( + "NOTE: You are now in the wilderness..."); + } else if (player.dialogueAction == 8) { + player.getPlayerAssistant().resetBarrows(); + player.getActionSender().sendMessage( + "Your barrows have been reset."); + } else if (player.dialogueAction == 29) { + player.getDialogueHandler().sendDialogues(480, player.npcType); + return; + } else if (player.dialogueAction == 30) { + player.getDialogueHandler().sendDialogues(488, player.npcType); + return; + } else if (player.dialogueAction == 34) { + player.getDialogueHandler().sendDialogues(361, player.npcType); + return; + } else if (player.dialogueAction == 50) { + player.getPlayerAssistant().startTeleport(2898, 3562, 0, + "modern"); + Teles.necklaces(player); + return; + } else if (player.dialogueAction == 55) { + player.getDialogueHandler().sendDialogues(91, player.npcType); + return; + } else if (player.dialogueAction == 56) { + player.getDialogueHandler().sendDialogues(96, player.npcType); + return; + } else if (player.dialogueAction == 57) { + player.getDialogueHandler().sendDialogues(57, player.npcType); + return; + } else if (player.dialogueAction == 3222) { + player.getBarrows().checkCoffins(); + player.getPlayerAssistant().removeAllWindows(); + return; + } else if (player.dialogueAction == 3218) { + player.getDialogueHandler().sendDialogues(3219, 0); + return; + } else if (player.dialogueAction == 65) { + player.getDialogueHandler().sendDialogues(179, player.npcType); + return; + } else if (player.dialogueAction == 66) { + player.getDialogueHandler().sendDialogues(182, player.npcType); + return; + } else if (player.dialogueAction == 67) { + player.getDialogueHandler().sendDialogues(36, player.npcType); + return; + } else if (player.dialogueAction == 68) { + player.getDialogueHandler().sendDialogues(587, player.npcType); + return; + } else if (player.dialogueAction == 70) { + player.getDialogueHandler().sendDialogues(1009, player.npcType); + return; + } else if (player.dialogueAction == 71) { + player.getDialogueHandler().sendDialogues(556, player.npcType); + return; + } else if (player.dialogueAction == 72) { + player.getDialogueHandler().sendDialogues(563, player.npcType); + return; + } else if (player.dialogueAction == 73) { + player.getDialogueHandler().sendDialogues(579, player.npcType); + return; + } else if (player.dialogueAction == 74) { + player.getDialogueHandler().sendDialogues(534, player.npcType); + return; + } else if (player.dialogueAction == 90) { + player.getDialogueHandler().sendDialogues(12, player.npcType); + return; + } else if (player.dialogueAction == 91) { + player.getDialogueHandler().sendDialogues(16, player.npcType); + return; + } else if (player.dialogueAction == 92) { + player.getDialogueHandler().sendDialogues(9, player.npcType); + return; + } else if (player.dialogueAction == 93) { + player.getDialogueHandler().sendDialogues(23, player.npcType); + return; + } else if (player.dialogueAction == 118) { + player.getDialogueHandler().sendDialogues(394, player.npcType); + return; + } else if (player.dialogueAction == 119) { + player.getDialogueHandler().sendDialogues(399, player.npcType); + return; + } else if (player.dialogueAction == 120) { + player.getDialogueHandler().sendDialogues(406, player.npcType); + return; + } else if (player.dialogueAction == 121) { + player.getDialogueHandler().sendDialogues(438, player.npcType); + return; + } else if (player.dialogueAction == 125) { + player.getDialogueHandler().sendDialogues(154, player.npcType); + return; + } else if (player.dialogueAction == 127) { + player.getDialogueHandler().sendDialogues(210, player.npcType); + return; + } else if (player.dialogueAction == 128) { + player.getDialogueHandler().sendDialogues(223, player.npcType); + return; + } else if (player.dialogueAction == 130) { + player.getDialogueHandler().sendDialogues(594, player.npcType); + return; + } else if (player.dialogueAction == 132) { + player.getDialogueHandler().sendDialogues(1013, player.npcType); + } else if (player.dialogueAction == 133) { + player.getDialogueHandler().sendDialogues(1016, player.npcType); + } else if (player.dialogueAction == 140) { + player.getDialogueHandler().sendDialogues(198, player.npcType); + return; + } else if (player.dialogueAction == 141) { + player.getDialogueHandler().sendDialogues(1020, player.npcType); + return; + } else if (player.dialogueAction == 143) { + player.getDialogueHandler().sendDialogues(1232, player.npcType); + return; + } else if (player.dialogueAction == 168) { + player.getDialogueHandler().sendDialogues(476, player.npcType); + return; + } else if (player.dialogueAction == 508) { + player.getDialogueHandler().sendDialogues(1026, player.npcType); + return; + } else if (player.dialogueAction == 855) { + player.getItemAssistant().removeAllItems(); + } else if (player.dialogueAction == 146) { + player.getDialogueHandler().sendDialogues(1325, player.npcType); + return; + } else if (player.dialogueAction == 177) { + player.getDialogueHandler().sendDialogues(1376, player.npcType); + return; + } else if (player.dialogueAction == 151) { + player.getDialogueHandler().sendDialogues(2998, player.npcType); + return; + } else if (player.dialogueAction == 152) { + player.getDialogueHandler().sendDialogues(3121, player.npcType); + return; + } else if (player.dialogueAction == 154) { + player.getDialogueHandler().sendDialogues(3137, player.npcType); + return; + } else if (player.dialogueAction == 155) { + player.getDialogueHandler().sendDialogues(3142, player.npcType); + return; + } else if (player.dialogueAction == 156) { + player.getDialogueHandler().sendDialogues(3147, player.npcType); + return; + } else if (player.dialogueAction == 157) { + player.getDialogueHandler().sendDialogues(3153, player.npcType); + return; + } else if (player.dialogueAction == 158) { + player.getDialogueHandler().sendDialogues(3156, player.npcType); + return; + } else if (player.dialogueAction == 3111) { + player.getDialogueHandler().sendDialogues(3112, 946); + return; + } else if (player.dialogueAction == 162) { + player.getDialogueHandler().sendDialogues(3170, player.npcType); + return; + } else if (player.dialogueAction == 163) { + player.getDialogueHandler().sendDialogues(3129, player.npcType); + return; + } else if (player.dialogueAction == 164) { + player.getDialogueHandler().sendDialogues(3177, 510); + return; + } else if (player.dialogueAction == 165) { + player.getDialogueHandler().sendDialogues(3182, 510); + return; + } else if (player.dialogueAction == 166) { + player.getDialogueHandler().sendDialogues(1340, player.npcType); + return; + } else if (player.dialogueAction == 170) { + player.getDialogueHandler().sendDialogues(1348, player.npcType); + return; + } else if (player.dialogueAction == 171) { + player.getDialogueHandler().sendDialogues(1352, player.npcType); + return; + } else if (player.dialogueAction == 172) { + player.getDialogueHandler().sendDialogues(1355, player.npcType); + return; + } else if (player.dialogueAction == 173) { + player.getDialogueHandler().sendDialogues(1360, player.npcType); + return; + } else if (player.dialogueAction == 175) { + player.getDialogueHandler().sendDialogues(3192, player.npcType); + return; + } else if (player.dialogueAction == 176) { + player.getDialogueHandler().sendDialogues(1372, player.npcType); + return; + } else if (player.dialogueAction == 178) { + player.getDialogueHandler().sendDialogues(3186, player.npcType); + return; + } else if (player.dialogueAction == 179) { + player.getDialogueHandler().sendDialogues(1380, player.npcType); + return; + } else if (player.dialogueAction == 180) { + player.getDialogueHandler().sendDialogues(3197, player.npcType); + return; + } else if (player.dialogueAction == 181) { + player.getDialogueHandler().sendDialogues(612, player.npcType); + return; + } else if (player.dialogueAction == 183) { + player.getDialogueHandler().sendDialogues(620, player.npcType); + return; + } else if (player.dialogueAction == 184) { + player.getDialogueHandler().sendDialogues(624, player.npcType); + return; + } else if (player.dialogueAction == 186) { + player.getItemAssistant().deleteItem2(1929, 1); + player.getItemAssistant().deleteItem2(1933, 1); + player.getItemAssistant().addItem(1953, 1); + player.getItemAssistant().addItem(1925, 1); + player.getItemAssistant().addItem(1931, 1); + player.getPlayerAssistant().addSkillXP(1, player.playerCooking); + player.nextChat = 0; + } else if (player.dialogueAction == 187) { + player.getItemAssistant().deleteItem2(1933, 1); + player.getItemAssistant().deleteItem2(1937, 1); + player.getItemAssistant().addItem(1953, 1); + player.getItemAssistant().addItem(1925, 1); + player.getItemAssistant().addItem(1935, 1); + player.getPlayerAssistant().addSkillXP(1, player.playerCooking); + player.nextChat = 0; + } else if (player.dialogueAction == 189) { + player.getDialogueHandler().sendDialogues(3210, player.npcType); + return; + } else if (player.dialogueAction == 161) {// rod + player.getPlayerAssistant().startTeleport(3313, 3234, 0, "modern"); + Teles.necklaces(player); + return; + } + player.dialogueAction = 0; + player.getPlayerAssistant().removeAllWindows(); + break; + + case 9158: + if (player.dialogueAction == 8) { + player.getPlayerAssistant().fixAllBarrows(); + } else if (player.dialogueAction == 29) { + player.getDialogueHandler().sendDialogues(481, player.npcType); + return; + } else if (player.dialogueAction == 34) { + player.getDialogueHandler().sendDialogues(359, player.npcType); + return; + } else if (player.dialogueAction == 50) { + player.getPlayerAssistant().startTeleport(2545, 3569, 0, "modern"); + Teles.necklaces(player); + return; + } else if (player.dialogueAction == 55) { + player.getDialogueHandler().sendDialogues(92, player.npcType); + return; + } else if (player.dialogueAction == 56) { + player.getDialogueHandler().sendDialogues(95, player.npcType); + return; + } else if (player.dialogueAction == 74) { + player.getDialogueHandler().sendDialogues(535, player.npcType); + return; + } else if (player.dialogueAction == 57) { + player.getDialogueHandler().sendDialogues(58, player.npcType); + return; + } else if (player.dialogueAction == 62) { + player.getDialogueHandler().sendDialogues(309, player.npcType); + return; + } else if (player.dialogueAction == 67) { + player.getDialogueHandler().sendDialogues(35, player.npcType); + return; + } else if (player.dialogueAction == 68) { + player.getDialogueHandler().sendDialogues(586, player.npcType); + return; + } else if (player.dialogueAction == 71) { + player.getDialogueHandler().sendDialogues(582, player.npcType); + return; + } else if (player.dialogueAction == 72) { + player.getDialogueHandler().sendDialogues(562, player.npcType); + return; + } else if (player.dialogueAction == 73) { + player.getDialogueHandler().sendDialogues(580, player.npcType); + return; + } else if (player.dialogueAction == 90) { + player.getDialogueHandler().sendDialogues(13, player.npcType); + return; + } else if (player.dialogueAction == 91) { + player.getDialogueHandler().sendDialogues(17, player.npcType); + return; + } else if (player.dialogueAction == 118) { + player.getDialogueHandler().sendDialogues(392, player.npcType); + return; + } else if (player.dialogueAction == 119) { + player.getDialogueHandler().sendDialogues(404, player.npcType); + return; + } else if (player.dialogueAction == 120) { + player.getDialogueHandler().sendDialogues(404, player.npcType); + return; + } else if (player.dialogueAction == 121) { + player.getDialogueHandler().sendDialogues(437, player.npcType); + return; + } else if (player.dialogueAction == 125) { + player.getDialogueHandler().sendDialogues(163, player.npcType); + return; + } else if (player.dialogueAction == 130) { + player.getDialogueHandler().sendDialogues(593, player.npcType); + return; + } else if (player.dialogueAction == 131) { + JewelryMaking.mouldInterface(player); + return; + } else if (player.dialogueAction == 141) { + player.getDialogueHandler().sendDialogues(1021, player.npcType); + return; + } else if (player.dialogueAction == 143) { + player.getDialogueHandler().sendDialogues(1233, player.npcType); + return; + } else if (player.dialogueAction == 161) {// rod + player.getPlayerAssistant().startTeleport(2441, 3090, 0, "modern"); + Teles.necklaces(player); + return; + } else if (player.dialogueAction == 508) { + player.getDialogueHandler().sendDialogues(1025, player.npcType); + return; + } else if (player.dialogueAction == 146) { + player.getDialogueHandler().sendDialogues(1324, player.npcType); + return; + } else if (player.dialogueAction == 177) { + player.getDialogueHandler().sendDialogues(1375, player.npcType); + return; + } else if (player.dialogueAction == 21) { + Flowers.harvestFlower(player, Flowers.lastObject); + player.getPlayerAssistant().removeAllWindows(); + } else if (player.dialogueAction == 3111) { + player.getDialogueHandler().sendDialogues(3117, 946); + return; + } else if (player.dialogueAction == 152) { + player.getDialogueHandler().sendDialogues(3120, player.npcType); + return; + } else if (player.dialogueAction == 151) { + player.getDialogueHandler().sendDialogues(3000, player.npcType); + player.getPlayerAssistant().removeAllWindows(); + return; + } else if (player.dialogueAction == 154) { + player.getDialogueHandler().sendDialogues(3135, player.npcType); + return; + } else if (player.dialogueAction == 155) { + player.getDialogueHandler().sendDialogues(3141, player.npcType); + return; + } else if (player.dialogueAction == 156) { + player.getDialogueHandler().sendDialogues(3146, player.npcType); + return; + } else if (player.dialogueAction == 157) { + player.getDialogueHandler().sendDialogues(3152, player.npcType); + return; + } else if (player.dialogueAction == 158) { + player.getDialogueHandler().sendDialogues(3157, player.npcType); + return; + } else if (player.dialogueAction == 162) { + player.getDialogueHandler().sendDialogues(3169, player.npcType); + return; + } else if (player.dialogueAction == 163) { + player.getDialogueHandler().sendDialogues(3131, player.npcType); + return; + } else if (player.dialogueAction == 164) { + player.getDialogueHandler().sendDialogues(3175, player.npcType); + return; + } else if (player.dialogueAction == 165) { + player.getDialogueHandler().sendDialogues(3180, player.npcType); + return; + } else if (player.dialogueAction == 166) { + player.getDialogueHandler().sendDialogues(1339, player.npcType); + return; + } else if (player.dialogueAction == 168) { + player.getDialogueHandler().sendDialogues(1337, player.npcType); + return; + } else if (player.dialogueAction == 170) { + player.getDialogueHandler().sendDialogues(1347, player.npcType); + return; + } else if (player.dialogueAction == 171) { + player.getDialogueHandler().sendDialogues(1351, player.npcType); + return; + } else if (player.dialogueAction == 172) { + player.getDialogueHandler().sendDialogues(1356, player.npcType); + return; + } else if (player.dialogueAction == 173) { + player.getDialogueHandler().sendDialogues(1361, player.npcType); + return; + } else if (player.dialogueAction == 175) { + player.getDialogueHandler().sendDialogues(3191, player.npcType); + return; + } else if (player.dialogueAction == 176) { + player.getDialogueHandler().sendDialogues(1371, player.npcType); + return; + } else if (player.dialogueAction == 178) { + player.getDialogueHandler().sendDialogues(3185, player.npcType); + return; + } else if (player.dialogueAction == 179) { + player.getDialogueHandler().sendDialogues(1381, player.npcType); + return; + } else if (player.dialogueAction == 180) { + player.getDialogueHandler().sendDialogues(3199, player.npcType); + return; + } else if (player.dialogueAction == 181) { + player.getDialogueHandler().sendNpcChat1("No I like my job as Squire, I just need some help.", player.talkingNpc, "Squire"); + player.nextChat = 0; + return; + } else if (player.dialogueAction == 183) { + player.getDialogueHandler().sendPlayerChat1("Well I hope you find it soon."); + player.nextChat = 0; + return; + } else if (player.dialogueAction == 184) { + player.getDialogueHandler().sendPlayerChat1("No, I've got lots of mining work to do."); + player.nextChat = 0; + return; + } else if (player.dialogueAction == 186) { + player.getItemAssistant().deleteItem2(1929, 1); + player.getItemAssistant().deleteItem2(1933, 1); + player.getItemAssistant().addItem(2307, 1); + player.getItemAssistant().addItem(1925, 1); + player.getItemAssistant().addItem(1931, 1); + player.getPlayerAssistant().addSkillXP(1, player.playerCooking); + player.nextChat = 0; + } else if (player.dialogueAction == 187) { + player.getItemAssistant().deleteItem2(1933, 1); + player.getItemAssistant().deleteItem2(1937, 1); + player.getItemAssistant().addItem(1953, 1); + player.getItemAssistant().addItem(1925, 1); + player.getItemAssistant().addItem(1935, 1); + player.getPlayerAssistant().addSkillXP(1, player.playerCooking); + player.nextChat = 0; + } else if (player.dialogueAction == 189) { + player.getDialogueHandler().sendDialogues(3212, player.npcType); + return; + } + player.dialogueAction = 0; + player.getPlayerAssistant().removeAllWindows(); + break; + + case 9178: + if (player.dialogueAction == 2) { + player.getPlayerAssistant().startTeleport(3428, 3538, 0, "modern"); + } + if (player.dialogueAction == 122 && player.objectId == 12164 || player.objectId == 12163 || player.objectId == 12166) {//barb + player.getPlayerAssistant().startTeleport(3112, 3410, 0, "modern"); + } else if (player.objectId == 12165) { + if (player.dialogueAction == 122) { + player.getActionSender().sendMessage("You can't take the canoe to barbarian village because you're already there!"); + player.getPlayerAssistant().handleCanoe(); + } + } + if (player.dialogueAction == 4) { + player.getPlayerAssistant().startTeleport(3565, 3314, 0, + "modern"); + } + if (player.dialogueAction == 3) { + player.getPlayerAssistant().startTeleport(3088, 3500, 0, + "modern"); + } + if (player.dialogueAction == 31) { + player.getDialogueHandler().sendDialogues(500, player.npcType); + } + if (player.dialogueAction == 32) { + player.getDialogueHandler().sendDialogues(340, player.npcType); + } + if (player.dialogueAction == 33) { + player.getDialogueHandler().sendDialogues(354, player.npcType); + } + if (player.dialogueAction == 35) { + player.getDialogueHandler().sendDialogues(378, player.npcType); + } + if (player.dialogueAction == 51) { + player.getPlayerAssistant().gloryTeleport(3088, 3500, 0, + "modern"); + } + Teles.necklaces(player); + if (player.dialogueAction == 52) { + player.getDialogueHandler().sendDialogues(52, player.npcType); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(1005, player.npcType); + } + if (player.dialogueAction == 228) { + player.getDialogueHandler().sendDialogues(1045, player.npcType); + } + /* + * if (client.dialogueAction == 142) + * client.getDialogues().handleDialogues(1231, client.npcType); + */ + if (player.dialogueAction == 145) { + player.getDialogueHandler().sendDialogues(1318, player.SlayerMaster); + } + if (player.dialogueAction == 153) { + player.getDialogueHandler().sendDialogues(3123, player.npcType); + } + if (player.dialogueAction == 160) { + player.getDialogueHandler().sendDialogues(3164, player.npcType); + } + if (player.dialogueAction == 142) { + player.getDialogueHandler().sendDialogues(1234, player.npcType); + } + if (player.dialogueAction == 485) { + player.getRangersGuild().buyArrows(); + } + if (player.dialogueAction == 700) { + player.getDialogueHandler().sendDialogues(28, player.npcType); + } + break; + + case 9179: + if (player.dialogueAction == 2) { + player.getPlayerAssistant().startTeleport(2884, 3395, 0, + "modern"); + } + if (player.dialogueAction == 122 && player.objectId == 12163 || player.objectId == 12165 || player.objectId == 12166) {//champ + player.getPlayerAssistant().startTeleport(3203, 3343, 0, "modern"); + } else if (player.objectId == 12164) { + if (player.dialogueAction == 122) { + player.getActionSender().sendMessage("You can't take the canoe to the Champion Guild because you're already there!"); + player.getPlayerAssistant().handleCanoe(); + } + } + if (player.dialogueAction == 4) { + player.getPlayerAssistant().startTeleport(2444, 5170, 0, + "modern"); + } + if (player.dialogueAction == 3) { + player.getPlayerAssistant().startTeleport(3243, 3513, 0, + "modern"); + } + if (player.dialogueAction == 31) { + player.getDialogueHandler().sendDialogues(502, player.npcType); + } + if (player.dialogueAction == 32) { + player.getDialogueHandler().sendDialogues(341, player.npcType); + } + if (player.dialogueAction == 33) { + player.getDialogueHandler().sendDialogues(356, player.npcType); + } + if (player.dialogueAction == 35) { + player.getDialogueHandler().sendDialogues(376, player.npcType); + } + if (player.dialogueAction == 51) { + player.getPlayerAssistant().gloryTeleport(3293, 3174, 0, + "modern"); + } + Teles.necklaces(player); + if (player.dialogueAction == 52) { + player.getDialogueHandler().sendDialogues(64, player.npcType); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(500002, player.npcType); + } + if (player.dialogueAction == 228) { + player.getDialogueHandler().sendDialogues(1042, player.npcType); + } + if (player.dialogueAction == 145) { + player.getDialogueHandler().sendDialogues(1319, player.SlayerMaster); + } + if (player.dialogueAction == 153) { + player.getDialogueHandler().sendDialogues(3124, player.npcType); + } + if (player.dialogueAction == 160) { + player.getDialogueHandler().sendDialogues(3164, player.npcType); + } + if (player.dialogueAction == 142) { + player.getDialogueHandler().sendDialogues(1235, player.npcType); + } + if (player.dialogueAction == 485) { + player.getRangersGuild().exchangePoints(); + } + if (player.dialogueAction == 700) { + player.getDialogueHandler().sendDialogues(29, player.npcType); + } + break; + + case 9180: + if (player.dialogueAction == 2) { + player.getPlayerAssistant().startTeleport(2471, 10137, 0, + "modern"); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(500003, player.npcType); + } + if (player.dialogueAction == 122 && player.objectId == 12164 || player.objectId == 12165 || player.objectId == 12166) {//lumby + player.getPlayerAssistant().startTeleport(3243, 3237, 0, "modern"); + } else if (player.objectId == 12163) { + if (player.dialogueAction == 122) { + player.getActionSender().sendMessage("You can't take the canoe to Lumbridge because you're already there!"); + player.getPlayerAssistant().handleCanoe(); + } + } + if (player.dialogueAction == 3) { + player.getPlayerAssistant().startTeleport(3363, 3676, 0, + "modern"); + } + if (player.dialogueAction == 4) { + player.getPlayerAssistant().startTeleport(2659, 2676, 0, + "modern"); + } + if (player.dialogueAction == 31) { + player.getDialogueHandler().sendDialogues(501, player.npcType); + } + if (player.dialogueAction == 32) { + player.getDialogueHandler().sendDialogues(342, player.npcType); + } + if (player.dialogueAction == 33) { + player.getDialogueHandler().sendDialogues(355, player.npcType); + } + if (player.dialogueAction == 35) { + player.getDialogueHandler().sendDialogues(377, player.npcType); + } + if (player.dialogueAction == 51) { + player.getPlayerAssistant().gloryTeleport(2911, 3152, 0, + "modern"); + } + Teles.necklaces(player); + if (player.dialogueAction == 52) { + player.getDialogueHandler().sendDialogues(65, player.npcType); + } + if (player.dialogueAction == 700) { + player.getDialogueHandler().sendDialogues(30, player.npcType); + } + if (player.dialogueAction == 228) { + player.getDialogueHandler().sendDialogues(1041, player.npcType); + } + if (player.dialogueAction == 145) { + player.getDialogueHandler().sendDialogues(1320, player.SlayerMaster); + } + if (player.dialogueAction == 153) { + player.getDialogueHandler().sendDialogues(3125, player.npcType); + } + if (player.dialogueAction == 160) { + player.getDialogueHandler().sendDialogues(3165, player.npcType); + } + if (player.dialogueAction == 142) { + player.getDialogueHandler().sendDialogues(1236, player.npcType); + } + if (player.dialogueAction == 485) { + player.getRangersGuild().howAmIDoing(); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(1003, player.npcType); + } + break; + + case 9181: + if (player.dialogueAction == 2) { + player.getPlayerAssistant().startTeleport(2669, 3714, 0, "modern"); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(500004, player.npcType); + } + if (player.dialogueAction == 122 && player.objectId == 12163 || player.objectId == 12164 || player.objectId == 12165) {//edge + player.getPlayerAssistant().startTeleport(3132, 3509, 0, "modern"); + } else if (player.objectId == 12166) { + if (player.dialogueAction == 122) { + player.getActionSender().sendMessage("You can't take the canoe to Edgeville because you're already there!"); + player.getPlayerAssistant().handleCanoe(); + } + } + if (player.dialogueAction == 3) { + player.getPlayerAssistant().startTeleport(2540, 4716, 0, + "modern"); + } + if (player.dialogueAction == 51) { + player.getPlayerAssistant().gloryTeleport(3103, 3249, 0, + "modern"); + } + Teles.necklaces(player); + if (player.dialogueAction == 52) { + player.getDialogueHandler().sendDialogues(63, player.npcType); + } + if (player.dialogueAction == 700) { + player.getDialogueHandler().sendDialogues(31, player.npcType); + } + if (player.dialogueAction == 69) { + player.getDialogueHandler().sendDialogues(1004, player.npcType); + } + if (player.dialogueAction == 228) { + player.getDialogueHandler().sendDialogues(1038, player.npcType); + } + if (player.dialogueAction == 145) { + player.getDialogueHandler().sendDialogues(1321, player.SlayerMaster); + } + if (player.dialogueAction == 153) { + player.getDialogueHandler().sendDialogues(3126, player.npcType); + } + if (player.dialogueAction == 160) { + player.getDialogueHandler().sendDialogues(3166, player.npcType); + } + if (player.dialogueAction == 142) { + player.getDialogueHandler().sendDialogues(1231, player.npcType); + } + if (player.dialogueAction == 485) { + player.getPlayerAssistant().closeAllWindows(); + } + if (player.dialogueAction == 700) { + player.getDialogueHandler().sendDialogues(28, player.npcType); + } + break; + + /** Dueling **/ + case 26065: // no forfeit + case 26040: + player.duelSlot = -1; + player.getDueling().selectRule(0); + break; + + case 26066: // no movement + case 26048: + player.duelSlot = -1; + player.getDueling().selectRule(1); + break; + + case 26069: // no range + case 26042: + player.duelSlot = -1; + player.getDueling().selectRule(2); + break; + + case 26070: // no melee + case 26043: + player.duelSlot = -1; + player.getDueling().selectRule(3); + break; + + case 26071: // no mage + case 26041: + player.duelSlot = -1; + player.getDueling().selectRule(4); + break; + + case 26072: // no drinks + case 26045: + player.duelSlot = -1; + player.getDueling().selectRule(5); + break; + + case 26073: // no food + case 26046: + player.duelSlot = -1; + player.getDueling().selectRule(6); + break; + + case 26074: // no prayer + case 26047: + player.duelSlot = -1; + player.getDueling().selectRule(7); + break; + + case 26076: // obsticals + case 26075: + player.duelSlot = -1; + player.getDueling().selectRule(8); + break; + + case 2158: // fun weapons + case 2157: + player.duelSlot = -1; + player.getDueling().selectRule(9); + break; + + case 30136: // sp attack + case 30137: + player.duelSlot = -1; + player.getDueling().selectRule(10); + break; + + case 53245: // no helm + player.duelSlot = 0; + player.getDueling().selectRule(11); + break; + + case 53246: // no cape + player.duelSlot = 1; + player.getDueling().selectRule(12); + break; + + case 53247: // no ammy + player.duelSlot = 2; + player.getDueling().selectRule(13); + break; + + case 53249: // no weapon. + player.duelSlot = 3; + player.getDueling().selectRule(14); + break; + + case 53250: // no body + player.duelSlot = 4; + player.getDueling().selectRule(15); + break; + + case 53251: // no shield + player.duelSlot = 5; + player.getDueling().selectRule(16); + break; + + case 53252: // no legs + player.duelSlot = 7; + player.getDueling().selectRule(17); + break; + + case 53255: // no gloves + player.duelSlot = 9; + player.getDueling().selectRule(18); + break; + + case 53254: // no boots + player.duelSlot = 10; + player.getDueling().selectRule(19); + break; + + case 53253: // no rings + player.duelSlot = 12; + player.getDueling().selectRule(20); + break; + + case 53248: // no arrows + player.duelSlot = 13; + player.getDueling().selectRule(21); + break; + + case 26018: + if (player.inDuelArena()) { + Client opponent = (Client) PlayerHandler.players[player.duelingWith]; + if (opponent == null) { + player.getDueling().declineDuel(); + return; + } + + if (player.duelRule[2] && player.duelRule[3] + && player.duelRule[4]) { + player.getActionSender() + .sendMessage( + "You won't be able to attack the player with the rules you have set."); + break; + } + player.duelStatus = 2; + if (player.duelStatus == 2) { + player.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 6684); + opponent.getPlayerAssistant().sendFrame126( + "Other player has accepted.", 6684); + } + if (opponent.duelStatus == 2) { + opponent.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 6684); + player.getPlayerAssistant().sendFrame126( + "Other player has accepted.", 6684); + } + + if (player.duelStatus == 2 && opponent.duelStatus == 2) { + player.duelStatus = 3; + opponent.duelStatus = 3; + player.getDueling().confirmDuel(); + opponent.getDueling().confirmDuel(); + } + } else { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + player.getDueling().declineDuel(); + o.getDueling().declineDuel(); + player.getActionSender().sendMessage( + "You can't stake out of the Duel Arena."); + } + break; + + case 25120: + if (player.inDuelArena()) { + if (player.duelStatus == 5) { + break; + } + Client o1 = (Client) PlayerHandler.players[player.duelingWith]; + if (o1 == null) { + player.getDueling().declineDuel(); + return; + } + + player.duelStatus = 4; + if (o1.duelStatus == 4 && player.duelStatus == 4) { + player.getDueling().startDuel(); + o1.getDueling().startDuel(); + o1.duelCount = 4; + player.duelCount = 4; + player.duelDelay = System.currentTimeMillis(); + o1.duelDelay = System.currentTimeMillis(); + } else { + player.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 6571); + o1.getPlayerAssistant().sendFrame126( + "Other player has accepted", 6571); + } + } else { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + player.getDueling().declineDuel(); + o.getDueling().declineDuel(); + player.getActionSender().sendMessage( + "You can't stake out of the Duel Arena."); + } + break; + + /* + * if (System.currentTimeMillis() - duelDelay > 800 && duelCount > 0) { + * if (duelCount != 1) { forcedChat("" + (--duelCount)); duelDelay = + * System.currentTimeMillis(); } else { damageTaken = new + * int[Config.MAX_PLAYERS]; forcedChat("FIGHT!"); duelCount = 0; } } + */ + + case 4169: // god spell charge + player.usingMagic = true; + if (!player.getCombatAssistant().checkMagicReqs(48)) { + break; + } + + if (System.currentTimeMillis() - player.godSpellDelay < Constants.GOD_SPELL_CHARGE) { + player.getActionSender().sendMessage( + "You still feel the charge in your body!"); + break; + } + player.godSpellDelay = System.currentTimeMillis(); + player.getActionSender().sendMessage( + "You feel charged with a magical power!"); + player.gfx100(MagicData.MAGIC_SPELLS[48][3]); + player.startAnimation(MagicData.MAGIC_SPELLS[48][2]); + player.usingMagic = false; + break; + + case 153: + if (player.tutorialProgress == 11) { + player.getDialogueHandler().sendDialogues(3041, 0); + } + player.getPlayerAssistant().sendConfig(173, 1); + player.isRunning2 = true; + break; + + case 152: + /*if (client.performingAction) { + return; + }*/ + player.isRunning2 = false; + player.getPlayerAssistant().sendConfig(173, 0); + break; + + case 9154: + player.logout(); + break; + + case 21010: + if (player.isBanking) { + player.takeAsNote = true; + } else { + player.getActionSender().sendMessage("You must be banking to do this!"); + } + break; + + case 21011: + if (player.isBanking) { + player.takeAsNote = false; + } else { + player.getActionSender().sendMessage("You must be banking to do this!"); + } + break; + + case 9125: // Accurate + case 6221: // range accurate + case 22228: // punch (unarmed) + case 48010: // flick (whip) + case 21200: // spike (pickaxe) + case 1080: // bash (staff) + case 6168: // chop (axe) + case 6236: // accurate (long bow) + case 17102: // accurate (darts) + case 8234: // stab (dagger) + case 14218: // mace + case 14221: // mace + player.fightMode = 0;// attack + if (player.playerName.equalsIgnoreCase("andrew")) { + player.getActionSender().sendMessage("Fight mode = 0."); + } + if (player.autocasting) { + player.getPlayerAssistant().resetAutocast(); + } + break; + + case 9126: // Defensive + case 48008: // deflect (whip) + case 22229: // block (unarmed) + case 21201: // block (pickaxe) + case 1078: // focus - block (staff) + case 6169: // block (axe) + case 33019: // fend (hally) + case 18078: // block (spear) + case 8235: // block (dagger) + case 14219: // mace + player.fightMode = 1;// def + if (player.playerName.equalsIgnoreCase("andrew")) { + player.getActionSender().sendMessage("Fight mode = 1."); + } + if (player.autocasting) { + player.getPlayerAssistant().resetAutocast(); + } + break; + + case 9128: // Aggressive + case 6220: // range rapid + case 22230: // kick (unarmed) + case 21203: // impale (pickaxe) + case 21202: // smash (pickaxe) + case 1079: // pound (staff) + case 6171: // hack (axe) + case 6170: // smash (axe) + case 33020: // swipe (hally) + case 6235: // rapid (long bow) + case 17101: // repid (darts) + case 8237: // lunge (dagger) + case 8236: // slash (dagger) + case 14220: // mace + player.fightMode = 2;// shared + if (player.playerName.equalsIgnoreCase("andrew")) { + player.getActionSender().sendMessage("Fight mode = 2."); + } + if (player.autocasting) { + player.getPlayerAssistant().resetAutocast(); + } + break; + + case 9127: // Controlled + case 48009: // lash (whip) + case 33018: // jab (hally) + case 6234: // longrange (long bow) + case 6219: // longrange + case 18077: // lunge (spear) + case 18080: // swipe (spear) + case 18079: // pound (spear) + case 17100: // longrange (darts) + player.fightMode = 3;// block + if (player.playerName.equalsIgnoreCase("andrew")) { + player.getActionSender().sendMessage("Fight mode = 3."); + } + if (player.autocasting) { + player.getPlayerAssistant().resetAutocast(); + } + break; + + + /** Prayers **/ + case 21233: // thick skin + ActivatePrayers.activatePrayer(player, 0); + break; + case 21234: // burst of str + ActivatePrayers.activatePrayer(player, 1); + break; + case 21235: // charity of thought + ActivatePrayers.activatePrayer(player, 2); + break; + case 70080: // range + ActivatePrayers.activatePrayer(player, 3); + break; + case 70082: // mage + ActivatePrayers.activatePrayer(player, 4); + break; + case 21236: // rockskin + ActivatePrayers.activatePrayer(player, 5); + break; + case 21237: // super human + ActivatePrayers.activatePrayer(player, 6); + break; + case 21238: // improved reflexes + ActivatePrayers.activatePrayer(player, 7); + break; + case 21239: // hawk eye + ActivatePrayers.activatePrayer(player, 8); + break; + case 21240: + ActivatePrayers.activatePrayer(player, 9); + break; + case 21241: // protect Item + ActivatePrayers.activatePrayer(player, 10); + break; + case 70084: // 26 range + ActivatePrayers.activatePrayer(player, 11); + break; + case 70086: // 27 mage + ActivatePrayers.activatePrayer(player, 12); + break; + case 21242: // steel skin + ActivatePrayers.activatePrayer(player, 13); + break; + case 21243: // ultimate str + ActivatePrayers.activatePrayer(player, 14); + break; + case 21244: // incredible reflex + ActivatePrayers.activatePrayer(player, 15); + break; + case 21245: // protect from magic + ActivatePrayers.activatePrayer(player, 16); + break; + case 21246: // protect from range + ActivatePrayers.activatePrayer(player, 17); + break; + case 21247: // protect from melee + ActivatePrayers.activatePrayer(player, 18); + break; + case 70088: // 44 range + ActivatePrayers.activatePrayer(player, 19); + break; + case 70090: // 45 mystic + ActivatePrayers.activatePrayer(player, 20); + break; + case 2171: // retrui + ActivatePrayers.activatePrayer(player, 21); + break; + case 2172: // redem + ActivatePrayers.activatePrayer(player, 22); + break; + case 2173: // smite + ActivatePrayers.activatePrayer(player, 23); + break; + case 70092: // chiv + ActivatePrayers.activatePrayer(player, 24); + break; + case 70094: // piety + ActivatePrayers.activatePrayer(player, 25); + break; + + case 13092: + if (System.currentTimeMillis() - player.lastButton < 400) { + + player.lastButton = System.currentTimeMillis(); + + break; + + } else { + + player.lastButton = System.currentTimeMillis(); + + } + Client ot = (Client) PlayerHandler.players[player.tradeWith]; + if (ot == null) { + player.getTrading().declineTrade(); + player.getActionSender().sendMessage( + "Trade declined as the other player has disconnected."); + break; + } + player.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 3431); + ot.getPlayerAssistant().sendFrame126("Other player has accepted", + 3431); + player.goodTrade = true; + ot.goodTrade = true; + + for (GameItem item : player.getTrading().offeredItems) { + if (item.id > 0) { + if (ot.getItemAssistant().freeSlots() < player.getTrading().offeredItems + .size()) { + player.getActionSender().sendMessage( + ot.playerName + + " only has " + + ot.getItemAssistant().freeSlots() + + " free slots, please remove " + + (player.getTrading().offeredItems + .size() - ot.getItemAssistant() + .freeSlots()) + " items."); + ot.getActionSender().sendMessage( + player.playerName + + " has to remove " + + (player.getTrading().offeredItems + .size() - ot.getItemAssistant() + .freeSlots()) + + " items or you could offer them " + + (player.getTrading().offeredItems + .size() - ot.getItemAssistant() + .freeSlots()) + " items."); + player.goodTrade = false; + ot.goodTrade = false; + player.getPlayerAssistant().sendFrame126( + "Not enough inventory space...", 3431); + ot.getPlayerAssistant().sendFrame126( + "Not enough inventory space...", 3431); + break; + } else { + player.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 3431); + ot.getPlayerAssistant().sendFrame126( + "Other player has accepted", 3431); + player.goodTrade = true; + ot.goodTrade = true; + } + } + } + if (player.inTrade && !player.tradeConfirmed && ot.goodTrade + && player.goodTrade) { + player.tradeConfirmed = true; + if (ot.tradeConfirmed) { + player.getTrading().confirmScreen(); + ot.getTrading().confirmScreen(); + break; + } + + } + + break; + + case 13218: + if (System.currentTimeMillis() - player.lastButton < 400) { + + player.lastButton = System.currentTimeMillis(); + + break; + + } else { + + player.lastButton = System.currentTimeMillis(); + + } + player.tradeAccepted = true; + Client ot1 = (Client) PlayerHandler.players[player.tradeWith]; + if (ot1 == null) { + player.getTrading().declineTrade(); + player.getActionSender().sendMessage( + "Trade declined as the other player has disconnected."); + break; + } + + if (player.inTrade && player.tradeConfirmed && ot1.tradeConfirmed + && !player.tradeConfirmed2) { + player.tradeConfirmed2 = true; + if (ot1.tradeConfirmed2) { + player.acceptedTrade = true; + ot1.acceptedTrade = true; + player.getTrading().giveItems(); + ot1.getTrading().giveItems(); + break; + } + ot1.getPlayerAssistant().sendFrame126( + "Other player has accepted.", 3535); + player.getPlayerAssistant().sendFrame126( + "Waiting for other player...", 3535); + } + + break; + /* Player Options */ + case 74176: + if (!player.mouseButton) { + player.mouseButton = true; + player.getPlayerAssistant().sendConfig(500, 1); + player.getPlayerAssistant().sendConfig(170, 1); + } else if (player.mouseButton) { + player.mouseButton = false; + player.getPlayerAssistant().sendConfig(500, 0); + player.getPlayerAssistant().sendConfig(170, 0); + } + break; + case 3189: + if (player.splitChat == false) { + player.getPlayerAssistant().sendConfig(502, 1); + player.getPlayerAssistant().sendConfig(287, 1); + player.splitChat = true; + } else if (player.splitChat == true) { + player.getPlayerAssistant().sendConfig(502, 0); + player.getPlayerAssistant().sendConfig(287, 0); + player.splitChat = false; + } + break; + case 74180: + if (!player.chatEffects) { + player.chatEffects = true; + player.getPlayerAssistant().sendConfig(501, 1); + player.getPlayerAssistant().sendConfig(171, 0); + } else { + player.chatEffects = false; + player.getPlayerAssistant().sendConfig(501, 0); + player.getPlayerAssistant().sendConfig(171, 1); + } + break; + case 74188: + if (!player.acceptAid) { + player.acceptAid = true; + player.getPlayerAssistant().sendConfig(503, 1); + player.getPlayerAssistant().sendConfig(427, 1); + } else { + player.acceptAid = false; + player.getPlayerAssistant().sendConfig(503, 0); + player.getPlayerAssistant().sendConfig(427, 0); + } + break; + case 74192: + if (!player.isRunning2) { + player.isRunning2 = true; + player.getPlayerAssistant().sendConfig(504, 1); + player.getPlayerAssistant().sendConfig(173, 1); + } else { + player.isRunning2 = false; + player.getPlayerAssistant().sendConfig(504, 0); + player.getPlayerAssistant().sendConfig(173, 0); + } + break; + + //case 74201:// brightness1 + case 3138: + LightSources.brightness1(player); + break; + + //case 74203:// brightness2 + case 3140: + LightSources.brightness2(player); + break; + + //case 74204:// brightness3 + case 3142: + LightSources.brightness3(player); + break; + + //case 74205:// brightness4 + case 3144: + LightSources.brightness4(player); + break; + + case 74206:// area1 + player.getPlayerAssistant().sendConfig(509, 1); + player.getPlayerAssistant().sendConfig(510, 0); + player.getPlayerAssistant().sendConfig(511, 0); + player.getPlayerAssistant().sendConfig(512, 0); + break; + case 74207:// area2 + player.getPlayerAssistant().sendConfig(509, 0); + player.getPlayerAssistant().sendConfig(510, 1); + player.getPlayerAssistant().sendConfig(511, 0); + player.getPlayerAssistant().sendConfig(512, 0); + break; + case 74208:// area3 + player.getPlayerAssistant().sendConfig(509, 0); + player.getPlayerAssistant().sendConfig(510, 0); + player.getPlayerAssistant().sendConfig(511, 1); + player.getPlayerAssistant().sendConfig(512, 0); + break; + case 74209:// area4 + player.getPlayerAssistant().sendConfig(509, 0); + player.getPlayerAssistant().sendConfig(510, 0); + player.getPlayerAssistant().sendConfig(511, 0); + player.getPlayerAssistant().sendConfig(512, 1); + break; + + case 24017: + player.getPlayerAssistant().resetAutocast(); + player.getItemAssistant() + .sendWeapon( + player.playerEquipment[player.playerWeapon], + ItemAssistant + .getItemName(player.playerEquipment[player.playerWeapon])); + break; + + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickingInGame.java b/2006Redone Server/src/redone/net/packets/impl/ClickingInGame.java new file mode 100644 index 00000000..f0d98702 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickingInGame.java @@ -0,0 +1,16 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Clicking in game + **/ +public class ClickingInGame implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickingStuff.java b/2006Redone Server/src/redone/net/packets/impl/ClickingStuff.java new file mode 100644 index 00000000..d29c5edd --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ClickingStuff.java @@ -0,0 +1,52 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * Clicking stuff (interfaces) + **/ +public class ClickingStuff implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + if (player.playerIsBusy()) { + player.playerIsBusy = false; + } + if (player.isBanking) + player.isBanking = false; + if(player.isShopping) + player.isShopping = false; + if (player.inTrade) { + if (!player.acceptedTrade) { + Client opponent = (Client) PlayerHandler.players[player.tradeWith]; + opponent.tradeAccepted = false; + player.tradeAccepted = false; + opponent.tradeStatus = 0; + player.tradeStatus = 0; + player.tradeConfirmed = false; + player.tradeConfirmed2 = false; + player.getActionSender().sendMessage("@red@Trade has been declined."); + opponent.getActionSender().sendMessage("@red@Other player has declined the trade."); + Misc.println("trade reset"); + player.getTrading().declineTrade(); + } + } + + if(player.openDuel && player.duelStatus >= 1 && player.duelStatus <= 4) { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if (o != null) + if (player.duelStatus >= 1 && player.duelStatus <= 4) + player.getDueling().declineDuel(); + o.getDueling().declineDuel(); + } + + if (player.duelStatus == 6) { + player.getDueling().claimStakedItems(); + } + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Commands.java b/2006Redone Server/src/redone/net/packets/impl/Commands.java new file mode 100644 index 00000000..587f521d --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Commands.java @@ -0,0 +1,512 @@ +package redone.net.packets.impl; + +import redone.Connection; +import redone.Constants; +import redone.game.items.ItemAssistant; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; +import redone.util.GameLogger; +import redone.util.Misc; +import redone.world.clip.Region; + +public class Commands implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + String playerCommand = player.getInStream().readString(); + if ((playerCommand.startsWith("ban") || playerCommand.startsWith("ip") || playerCommand.startsWith("mute") || playerCommand.startsWith("un")) && player.playerRights > 0 && player.playerRights < 4) { + GameLogger.writeLog(player.playerName, "commands", player.playerName + " used command: " + playerCommand + ""); + } + if (player.playerRights >= 0) { + playerCommands(player, playerCommand); + } + if (player.membership || player.playerRights > 1) { + donatorCommands(player, playerCommand); + } + if (player.playerRights >= 1) { + moderatorCommands(player, playerCommand); + } + if (player.playerRights >= 2 && player.playerRights < 4) { + adminCommands(player, playerCommand); + } + if (player.playerRights == 3) { + developerCommands(player, playerCommand); + } + } + + public static void playerCommands(Client player, String playerCommand) { + if (playerCommand.equalsIgnoreCase("players")) { + if (PlayerHandler.getPlayerCount() > 1) { + player.getActionSender().sendMessage("There are currently " + PlayerHandler.getPlayerCount() + " players online."); + } else { + player.getActionSender().sendMessage("There is currently " + PlayerHandler.getPlayerCount() + " player online."); + } + } + + if (playerCommand.contains("clip") && player.playerRights < 2) { + return; + } + + } + + public static void donatorCommands(Client player, String playerCommand) { + + } + + public static void moderatorCommands(Client player, String playerCommand) { + if (playerCommand.startsWith("yell")) { + for (int j = 0; j < PlayerHandler.players.length; j++) { + if (PlayerHandler.players[j] != null) { + Client c2 = (Client)PlayerHandler.players[j]; + if (player.playerRights == 1) { + c2.getActionSender().sendMessage("@blu@[Moderator]@bla@"+ Misc.optimizeText(player.playerName) +": " + Misc.optimizeText(playerCommand.substring(5)) +""); + } else if (player.playerRights == 2) { + c2.getActionSender().sendMessage("@gre@[Administator]@bla@"+ Misc.optimizeText(player.playerName) +": " + Misc.optimizeText(playerCommand.substring(5)) +""); + } else if (player.playerRights == 3) { + c2.getActionSender().sendMessage("@red@[Owner]@bla@"+ Misc.optimizeText(player.playerName) +": " + Misc.optimizeText(playerCommand.substring(5)) +""); + } + } + } + } + + if (playerCommand.startsWith("mute")) { + try { + String playerToBan = playerCommand.substring(5); + Connection.addNameToMuteList(playerToBan); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToBan)) { + Client c2 = (Client)PlayerHandler.players[i]; + c2.getActionSender().sendMessage("You have been muted by: " + player.playerName); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("ipmute")) { + try { + String playerToBan = playerCommand.substring(7); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToBan)) { + Connection.addIpToMuteList(PlayerHandler.players[i].connectedFrom); + player.getActionSender().sendMessage("You have IP Muted the user: "+PlayerHandler.players[i].playerName); + Client c2 = (Client)PlayerHandler.players[i]; + c2.getActionSender().sendMessage("You have been muted by: " + player.playerName); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("unipmute")) { + try { + String playerToBan = playerCommand.substring(9); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToBan)) { + Connection.unIPMuteUser(PlayerHandler.players[i].connectedFrom); + player.getActionSender().sendMessage("You have Un Ip-Muted the user: "+PlayerHandler.players[i].playerName); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("unmute")) { + try { + String playerToBan = playerCommand.substring(7); + Connection.unMuteUser(playerToBan); + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + } + + public static void adminCommands(Client player, String playerCommand) { + + if (playerCommand.equalsIgnoreCase("clearbank")) { + player.getItemAssistant().clearBank(); + } + + if (playerCommand.startsWith("ipban")) { // use as ::ipban name + try { + String playerToBan = playerCommand.substring(6); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToBan)) { + Connection.addIpToBanList(PlayerHandler.players[i].connectedFrom); + Connection.addIpToFile(PlayerHandler.players[i].connectedFrom); + player.getActionSender().sendMessage("You have IP banned the user: "+PlayerHandler.players[i].playerName+" with the host: "+PlayerHandler.players[i].connectedFrom); + PlayerHandler.players[i].disconnected = true; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("ban") && playerCommand.charAt(3) == ' ') { // use as ::ban name + try { + String playerToBan = playerCommand.substring(4); + Connection.addNameToBanList(playerToBan); + Connection.addNameToFile(playerToBan); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToBan)) { + PlayerHandler.players[i].disconnected = true; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("unban")) { + try { + String playerToBan = playerCommand.substring(6); + Connection.removeNameFromBanList(playerToBan); + player.getActionSender().sendMessage(playerToBan + " has been unbanned."); + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.equalsIgnoreCase("empty")) { + player.getPlayerAssistant().handleEmpty(); + } + + if (playerCommand.startsWith("dialogue")) { + int npcType = 1552; + int id = Integer.parseInt(playerCommand.split(" ")[1]); + player.getDialogueHandler().sendDialogues(id, npcType); + } + + if (playerCommand.startsWith("interface")) { + String[] args = playerCommand.split(" "); + player.getPlayerAssistant().showInterface(Integer.parseInt(args[1])); + } + + if (playerCommand.startsWith("gfx")) { + String[] args = playerCommand.split(" "); + player.gfx0(Integer.parseInt(args[1])); + } + + if (playerCommand.startsWith("anim")) { + String[] args = playerCommand.split(" "); + player.startAnimation(Integer.parseInt(args[1])); + player.getPlayerAssistant().requestUpdates(); + } + + if (playerCommand.equalsIgnoreCase("mypos")) { + player.getActionSender().sendMessage("X: " + player.absX); + player.getActionSender().sendMessage("Y: " + player.absY); + player.getActionSender().sendMessage("H: " + player.heightLevel); + } + + if (playerCommand.startsWith("bank")) { + player.getPlayerAssistant().openUpBank(); + } + + + if (playerCommand.startsWith("xteletome")) { + try { + String teleTo = playerCommand.substring(10); + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (PlayerHandler.players[i] != null) { + if (PlayerHandler.players[i].playerName.equalsIgnoreCase(teleTo)) { + Client p = (Client) PlayerHandler.players[i]; + player.getActionSender().sendMessage(p.playerName + " has been teleported to you."); + p.getPlayerAssistant().movePlayer(player.absX, player.absY, player.heightLevel); + } + } + } + } catch (Exception e) { + player.getActionSender().sendMessage("Player is not online."); + } + } + + if (playerCommand.startsWith("xteleto")) { + String name = playerCommand.substring(8); + for (int i = 0; i < PlayerHandler.players.length; i++) { + if (PlayerHandler.players[i] != null) { + if (PlayerHandler.players[i].playerName.equalsIgnoreCase(name)) { + player.getPlayerAssistant().movePlayer(PlayerHandler.players[i].getX(), PlayerHandler.players[i].getY(), PlayerHandler.players[i].heightLevel); + } + } + } + } + if (playerCommand.startsWith("tele")) { + String[] arg = playerCommand.split(" "); + if (arg.length > 3) { + player.getPlayerAssistant().movePlayer(Integer.parseInt(arg[1]), Integer.parseInt(arg[2]), Integer.parseInt(arg[3])); + } else if (arg.length == 3) { + player.getPlayerAssistant().movePlayer(Integer.parseInt(arg[1]), Integer.parseInt(arg[2]), player.heightLevel); + } + } + + if (playerCommand.equalsIgnoreCase("up")) { + player.getPlayerAssistant().movePlayer(player.absX, player.absY, player.heightLevel + 1); + player.getActionSender().sendMessage("You are now on height level " + player.heightLevel + "."); + } + + if (playerCommand.equalsIgnoreCase("down2")) { + player.getPlayerAssistant().movePlayer(player.absX, player.absY + 6400, player.heightLevel); + } + + if (playerCommand.equalsIgnoreCase("down")) { + player.getPlayerAssistant().movePlayer(player.absX, player.absY, player.heightLevel - 1); + player.getActionSender().sendMessage("You are now on height level " + player.heightLevel + "."); + } + + if (playerCommand.equalsIgnoreCase("up2")) { + player.getPlayerAssistant().movePlayer(player.absX, player.absY - 6400, player.heightLevel); + } + + if (playerCommand.equals("spec")) { + player.specAmount = 100.0; + } + + if (playerCommand.startsWith("setlevel")) { + try { + String[] args = playerCommand.split(" "); + int skill = Integer.parseInt(args[1]); + int level = Integer.parseInt(args[2]); + if (level > 99) { + level = 99; + } else if (level < 0) { + level = 1; + } + player.playerXP[skill] = player.getPlayerAssistant().getXPForLevel(level) + 5; + player.playerLevel[skill] = player.getPlayerAssistant().getLevelForXP(player.playerXP[skill]); + player.getPlayerAssistant().refreshSkill(skill); + player.getPlayerAssistant().levelUp(skill); + } catch (Exception e) { + + } + } + + if (playerCommand.equalsIgnoreCase("spellbook")) { + if (player.inWild()) { + return; + } + if (player.playerMagicBook == 0) { + player.playerMagicBook = 1; + player.getActionSender().setSidebarInterface(6, 12855); + player.getActionSender().sendMessage("An ancient wisdomin fills your mind."); + player.getPlayerAssistant().resetAutocast(); + } else if (player.playerMagicBook == 1) { + player.getActionSender().setSidebarInterface(6, 1151); // modern + player.playerMagicBook = 0; + player.getActionSender().sendMessage( "You feel a drain on your memory."); + player.autocastId = -1; + player.getPlayerAssistant().resetAutocast(); + } + } + + if (playerCommand.startsWith("item")) { + try { + String[] args = playerCommand.split(" "); + if (args.length == 3) { + int newItemID = Integer.parseInt(args[1]); + int newItemAmount = Integer.parseInt(args[2]); + if (newItemID <= 10000 && newItemID >= 0) { + player.getItemAssistant().addItem(newItemID, newItemAmount); + if (player.isBusy()) { + player.getPlayerAssistant().closeAllWindows(); + } + player.getActionSender().sendMessage("You spawn (" + newItemAmount + ") "+ ItemAssistant.getItemName(newItemID) + "."); + } else { + player.getActionSender().sendMessage("No such item."); + } + } else { + player.getActionSender().sendMessage("Use as ::item 995 200"); + } + } catch (Exception e) { + } + } + + if (playerCommand.equalsIgnoreCase("master")) { + for (int i = 0; i < 25; i++) { + player.playerLevel[i] = 99; + player.playerXP[i] = player.getPlayerAssistant().getXPForLevel(100); + player.getPlayerAssistant().refreshSkill(i); + } + player.getPlayerAssistant().requestUpdates(); + } + + + } + + public static void developerCommands(Client player, String playerCommand) { + + if (playerCommand.startsWith("giveadmin")) { + try { + String playerToAdmin = playerCommand.substring(10); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToAdmin)) { + Client c2 = (Client)PlayerHandler.players[i]; + player.getActionSender().sendMessage("You have given " + playerToAdmin + " admin."); + c2.playerRights = 2; + c2.logout(); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("demote")) { + try { + String playerToAdmin = playerCommand.substring(7); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToAdmin)) { + Client c2 = (Client)PlayerHandler.players[i]; + player.getActionSender().sendMessage("You have demoted " + playerToAdmin + "."); + c2.playerRights = 0; + c2.logout(); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("givemod")) { + try { + String playerToMod = playerCommand.substring(8); + for(int i = 0; i < Constants.MAX_PLAYERS; i++) { + if(PlayerHandler.players[i] != null) { + if(PlayerHandler.players[i].playerName.equalsIgnoreCase(playerToMod)) { + Client c2 = (Client)PlayerHandler.players[i]; + player.getActionSender().sendMessage("You have given " + playerToMod + " mod."); + c2.playerRights = 1; + c2.logout(); + break; + } + } + } + } catch(Exception e) { + player.getActionSender().sendMessage("Player Must Be Offline."); + } + } + + if (playerCommand.startsWith("object")) { + String[] args = playerCommand.split(" "); + player.getActionSender().object(Integer.parseInt(args[1]), player.absX, player.absY, player.heightLevel, 0, 10); + Region.addObject(Integer.parseInt(args[1]), player.absX, player.absY, player.heightLevel, 10, 0, false); + } + + if (playerCommand.startsWith("object2")) { + String[] args = playerCommand.split(" "); + player.getActionSender().object(Integer.parseInt(args[1]), player.absX, player.absY, player.heightLevel, 0, 0); + Region.addObject(Integer.parseInt(args[1]), player.absX, player.absY, player.heightLevel, 0, 0, false); + } + + if (playerCommand.startsWith("npc")) { + try { + int newNPC = Integer.parseInt(playerCommand.substring(4)), maxHit = NpcHandler.getNpcListCombat(newNPC) / 10, + attack = NpcHandler.getNpcListCombat(newNPC), defence = NpcHandler.getNpcListCombat(newNPC); + boolean attackPlayer = NpcHandler.getNpcListCombat(newNPC) > 0; + if (newNPC > 0) { + NpcHandler.spawnNpc(player, newNPC, player.absX, player.absY, player.heightLevel, 0, NpcHandler.getNpcListHP(newNPC), maxHit, attack, defence, attackPlayer, false); + player.getActionSender().sendMessage("You spawn a " + NpcHandler.getNpcListName(newNPC).toLowerCase() + "."); + //player.npcSpawned = newNPC; + } else { + player.getActionSender().sendMessage("Npc " + newNPC + " does not exist."); + } + } catch (Exception e) { + + } + } + + if (playerCommand.equalsIgnoreCase("cantAttack")) { + if (player.npcCanAttack == true) { + player.getActionSender().sendMessage("Npcs can no longer attack you."); + player.npcCanAttack = false; + } else if (player.npcCanAttack == false) { + player.getActionSender().sendMessage("Npcs can attack you again."); + player.npcCanAttack = true; + } + } + + if (playerCommand.startsWith("sound")) { + String[] args = playerCommand.split(" "); + player.getActionSender().sendSound(Integer.parseInt(args[1]), 100, 0); + } + + if (playerCommand.startsWith("tutprog")) { + String[] args = playerCommand.split(" "); + int id = Integer.parseInt(args[1]); + player.tutorialProgress = id; + } + + if (playerCommand.startsWith("song")) { + String[] args = playerCommand.split(" "); + int id = Integer.parseInt(args[1]); + player.getActionSender().sendSong(id); + } + + if (playerCommand.equalsIgnoreCase("run")) { + player.getActionSender().sendMessage("You have refilled your run-energy!"); + player.playerEnergy = 100; + } + + if (playerCommand.equalsIgnoreCase("runes")) { + final int amount = 10000; + final int[][] RUNES = { { 554, amount }, { 555, amount }, + { 556, amount }, { 557, amount }, { 558, amount }, + { 559, amount }, { 560, amount }, { 561, amount }, + { 562, amount }, { 563, amount }, { 564, amount }, + { 565, amount }, { 566, amount }, { 1963, 1 }, }; + for (int[] element : RUNES) { + int item = element[0]; + int amountToRecieve = element[1]; + player.getItemAssistant().addItem(item, amountToRecieve); + } + } + + if (playerCommand.startsWith("sidebars")) { + player.getPlayerAssistant().sendSidebars(); + } + + if (playerCommand.startsWith("update")) { + try { + String[] args = playerCommand.split(" "); + if (args.length == 2) { + int seconds = Integer.parseInt(args[1]); + PlayerHandler.updateSeconds = seconds; + PlayerHandler.updateAnnounced = false; + PlayerHandler.updateRunning = true; + PlayerHandler.updateStartTime = System.currentTimeMillis(); + } else { + player.getActionSender().sendMessage("Use as ::update (seconds)"); + } + } catch (Exception e) { + } + } + + } + + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/net/packets/impl/Countdown.java b/2006Redone Server/src/redone/net/packets/impl/Countdown.java new file mode 100644 index 00000000..de6c0358 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Countdown.java @@ -0,0 +1,127 @@ +package redone.net.packets.impl; + +/** + * @author Jayden + */ + +public class Countdown { + private long endMillis; + private long countdownMillis; + private long setMillis; + + public Countdown() { + endMillis = System.currentTimeMillis(); + } + + public Countdown(long endMillis) { + this.endMillis = endMillis; + } + + public void setTimeMillis(long millis) { + this.setMillis = millis; + } + + public void addDays(int days) { + endMillis += days * 24 * 60 * 60 * 1000; + } + + public void addHours(int hours) { + endMillis += hours * 60 * 60 * 1000; + } + + public void addMinutes(int minutes) { + endMillis += minutes * 60 * 1000; + } + + public void addSeconds(int seconds) { + endMillis += seconds * 1000; + } + + public void removeDays(int days) { + endMillis -= days * 24 * 60 * 60 * 1000; + } + + public void removeHours(int hours) { + endMillis -= hours * 60 * 60 * 1000; + } + + public void removeMinutes(int minutes) { + endMillis -= minutes * 60 * 1000; + } + + public void removeSeconds(int seconds) { + endMillis -= seconds * 1000; + } + + public int getSeconds() { + calculate(); + int seconds = (int) (countdownMillis / 1000); + if (seconds > 60) { + seconds = seconds % 60; + } + return seconds; + } + + public int getMinutes() { + calculate(); + int minutes = (int) (countdownMillis / (60 * 1000)); + if (minutes >= 60) { + minutes = minutes % 60; + } + return minutes; + } + + public int getHours() { + calculate(); + int hours = (int) (countdownMillis / (60 * 60 * 1000)); + if (hours >= 24) { + hours = hours % 24; + } + return hours; + } + + public int getDays() { + calculate(); + return (int) (countdownMillis / (24 * 60 * 60 * 1000)); + } + + public int getTotalSeconds() { + calculate(); + return (int) (countdownMillis / 1000); + } + + public int getTotalMinutes() { + calculate(); + return (int) (countdownMillis / (60 * 1000)); + } + + public String daysToString() { + int days = getDays(); + return (days == 0 ? "a day" : days + (days == 1 ? " day" : " days")); + } + + public String minutesToString() { + int minutes = getMinutes(); + return (minutes == 0 ? "a minute" : minutes + (minutes == 1 ? " minute" : " minutes")); + } + + public String secondsToString() { + int seconds = getSeconds(); + return (seconds + (seconds == 1 ? " second" : " seconds")); + } + + public long getEndMillis() { + return endMillis; + } + + public boolean finished() { + if (getDays() <= 0 && getHours() <= 0 && getMinutes() <= 0 && getSeconds() <= 0) { + return true; + } + return false; + } + + private void calculate() { + countdownMillis = endMillis - (System.currentTimeMillis() - setMillis); + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/DropItem.java b/2006Redone Server/src/redone/net/packets/impl/DropItem.java new file mode 100644 index 00000000..f9125058 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/DropItem.java @@ -0,0 +1,366 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.Server; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.music.sound.SoundList; +import redone.game.content.skills.SkillHandler; +import redone.game.content.skills.firemaking.Firemaking; +import redone.game.content.skills.firemaking.LogData; +import redone.game.items.impl.RareProtection; +import redone.game.npcs.impl.Pets; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Drop Item + **/ +public class DropItem implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int itemId = player.getInStream().readUnsignedWordA(); + player.getInStream().readUnsignedByte(); + player.getInStream().readUnsignedByte(); + int slot = player.getInStream().readUnsignedWordA(); + if (player.isBotting) { + player.getActionSender().sendMessage("You can't drop items, until you confirm you aren't botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + if (!player.getItemAssistant().playerHasItem(itemId) || !RareProtection.doOtherDupe(player, itemId) || System.currentTimeMillis() - player.alchDelay < 1800 || player.stopPlayerPacket || System.currentTimeMillis() - player.buryDelay < 1800 || !CastleWars.deleteCastleWarsItems(player, itemId)) { + return; + } + for (LogData logData : LogData.values()) { + if (itemId == logData.getLogId()) { + Firemaking.pickedUpFiremakingLog = false; + } + } + for (LogData logData : LogData.values()) { + if (itemId == logData.getLogId()) { + if (Server.objectManager.objectExists(player.absX, player.absY)) { + player.getActionSender().sendMessage( + "You cannot drop a log here."); + return; + } + } + } + if (player.duelingArena()) { + player.getActionSender().sendMessage( + "You can't drop items inside the arena!"); + return; + } + if (player.inTrade) { + player.getActionSender().sendMessage( + "You can't drop items while trading!"); + return; + } + if (player.hasNpc == true) { + player.getActionSender().sendMessage( + "You already have a pet dropped."); + return; + } + SkillHandler.resetSkills(player); + if (player.tutorialProgress < 36 && Constants.TUTORIAL_ISLAND) { + player.getActionSender().sendMessage( + "You can't drop items on tutorial island!"); + return; + } + switch (itemId) { + case 1560: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1559: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1558: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1557: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1556: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1555: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Kitten."); + } + break; + case 1561: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 1562: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 1563: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 1564: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 1565: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 7583: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage( + "You drop your Hell Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Hell Kitten."); + } + break; + case 1566: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage("You drop your Cat."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Cat."); + } + break; + case 7585: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage( + "You drop your Hell Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Hell Kitten."); + } + break; + case 4045: + if (CastleWars.isInCw(player)) { + int explosiveHit = 15; + player.startAnimation(827); + player.getItemAssistant().deleteItem(itemId, slot, player.playerItemsN[slot]); + player.handleHitMask(explosiveHit); + player.dealDamage(explosiveHit); + player.getPlayerAssistant().refreshSkill(3); + player.forcedText = "Ow! That really hurt!"; + player.forcedChatUpdateRequired = true; + player.updateRequired = true; + } else { + player.getItemAssistant().deleteItem(4045, player.getItemAssistant().getItemAmount(4045)); + player.getItemAssistant().deleteItem(4046, player.getItemAssistant().getItemAmount(4046)); + player.getActionSender().sendMessage("You can't do that! Your not in castle wars!"); + } + break; + case 7584: + if (!player.hasNpc) { + Server.npcHandler.spawnNpc3(player, Pets.summonItemId(itemId), + player.absX, player.absY - 1, player.heightLevel, 0, 120, 25, 200, + 200, false, false, true); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + player.hasNpc = true; + player.getPlayerAssistant().followPlayer(); + player.getActionSender().sendMessage( + "You drop your Hell Kitten."); + } else { + player.getActionSender().sendMessage( + "You already dropped your Hell Kitten."); + } + break; + } + + boolean droppable = true; + /*for (int i : Constants.UNDROPPABLE_ITEMS) { + if (i == itemId) { + droppable = false; + break; + } + }*/ + + for (int p : Pets.CAT_ITEMS) { + if (p == itemId) { + if (player.hasNpc == true) { + droppable = false; + break; + } + } + } + + if (player.playerItemsN[slot] != 0 && itemId != -1 + && player.playerItems[slot] == itemId + 1) { + if (droppable) { + for (int i = 0; i < Constants.DESTROYABLE_ITEMS.length; i++) { + if (itemId == Constants.DESTROYABLE_ITEMS[i]) { + player.droppedItem = itemId; + player.getItemAssistant().destroyInterface(itemId); + return; + } + } + if (player.underAttackBy > 0) { + if (player.getShopAssistant().getItemShopValue(itemId) > 1000) { + player.getActionSender() + .sendMessage( + "You may not drop items worth more than 1000 while in combat."); + return; + } + } + Server.itemHandler.createGroundItem(player, itemId, player.getX(), + player.getY(), player.playerItemsN[slot], player.getId()); + player.getItemAssistant().deleteItem(itemId, slot, + player.playerItemsN[slot]); + if (Constants.SOUND) { + player.getActionSender().sendSound(SoundList.ITEM_DROP, 100, + 0); + } + } else { + player.getActionSender().sendMessage( + "This items cannot be dropped."); + } + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/FollowPlayer.java b/2006Redone Server/src/redone/net/packets/impl/FollowPlayer.java new file mode 100644 index 00000000..cca90be8 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/FollowPlayer.java @@ -0,0 +1,35 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; + +public class FollowPlayer implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int followPlayer = c.getInStream().readUnsignedWordBigEndian(); + if (PlayerHandler.players[followPlayer] == null) { + return; + } + if (c.isBotting == true) { + c.getActionSender().sendMessage("You can't follow players, until you confirm you are not botting."); + c.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + c.stopMovement(); + c.getPlayerAssistant().resetFollow(); + return; + } + /*if (c.performingAction) { + c.stopMovement(); + c.getPlayerAssistant().resetFollow(); + return; + }*/ + c.playerIndex = 0; + c.npcIndex = 0; + c.mageFollow = false; + c.usingBow = false; + c.usingRangeWeapon = false; + c.followDistance = 1; + c.followId = followPlayer; + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/IdleLogout.java b/2006Redone Server/src/redone/net/packets/impl/IdleLogout.java new file mode 100644 index 00000000..cec8a09d --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/IdleLogout.java @@ -0,0 +1,21 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * @author Andrew + */ + +public class IdleLogout implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + if (player.underAttackBy > 0 || player.underAttackBy2 > 0) { + return; + } else { + player.logout(); + //Misc.println(player.playerName + " is idle, kicked."); + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemClick2.java b/2006Redone Server/src/redone/net/packets/impl/ItemClick2.java new file mode 100644 index 00000000..f35b5295 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemClick2.java @@ -0,0 +1,33 @@ +package redone.net.packets.impl; + +import redone.game.items.impl.HandleEmpty; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Item Click 2 Or Alternative Item Option 1 + * + * @author Ryan / Lmctruck30 Proper Streams + */ + +public class ItemClick2 implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int itemId = c.getInStream().readSignedWordA(); + + if (!c.getItemAssistant().playerHasItem(itemId, 1)) { + return; + } + + if (HandleEmpty.canEmpty(c, itemId)) { + HandleEmpty.handleEmptyItem(c, itemId, HandleEmpty.filledToEmpty(c, itemId)); + return; + } + + switch (itemId) { + } + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemClick2OnGroundItem.java b/2006Redone Server/src/redone/net/packets/impl/ItemClick2OnGroundItem.java new file mode 100644 index 00000000..116d383b --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemClick2OnGroundItem.java @@ -0,0 +1,28 @@ +package redone.net.packets.impl; + +import redone.game.content.skills.firemaking.Firemaking; +import redone.game.content.skills.firemaking.LogData; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class ItemClick2OnGroundItem implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + final int itemX = c.getInStream().readSignedWordBigEndian(); + final int itemY = c.getInStream().readSignedWordBigEndianA(); + final int itemId = c.getInStream().readUnsignedWordA(); + System.out.println("ItemClick2OnGroundItem - " + c.playerName + " - " + + itemId + " - " + itemX + " - " + itemY); + if (c.absX != itemX || c.absY != itemY) { + c.getActionSender().sendMessage("You can't do that there!"); + return; + } + for (LogData l : LogData.values()) { + if (itemId == l.getLogId()) { + Firemaking.attemptFire(c, 590, itemId, itemX, itemY, true); + return; + } + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemClick3.java b/2006Redone Server/src/redone/net/packets/impl/ItemClick3.java new file mode 100644 index 00000000..f575c438 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemClick3.java @@ -0,0 +1,87 @@ +package redone.net.packets.impl; + +import redone.game.items.impl.HandleEmpty; +import redone.game.items.impl.Teles; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * Item Click 3 Or Alternative Item Option 1 + * + * @author Ryan / Lmctruck30 Proper Streams + */ + +public class ItemClick3 implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int itemId11 = player.getInStream().readSignedWordBigEndianA(); + int itemId1 = player.getInStream().readSignedWordA(); + int itemId = player.getInStream().readSignedWordA(); + if (!player.getItemAssistant().playerHasItem(itemId, 1)) { + return; + } + if (HandleEmpty.canEmpty(player, itemId)) { + HandleEmpty.handleEmptyItem(player, itemId, HandleEmpty.filledToEmpty(player, itemId)); + return; + } + if (player.duelStatus > 0 && player.duelStatus < 5 || player.tradeStatus == 1) { + return; + } + switch (itemId) { + + case 2552: + case 2554: + case 2556: + case 2558: + case 2560: + case 2562: + case 2564: + case 2566: + player.itemUsing = itemId; + Teles.useROD(player); + break; + + case 1712: + case 1710: + case 1708: + case 1706: + player.itemUsing = itemId; + Teles.useAOG(player); + break; + + case 3853: + case 3855: + case 3857: + case 3859: + case 3861: + case 3863: + case 3865: + case 3867: + player.itemUsing = itemId; + Teles.useGN(player); + break; + + case 1933: + player.getItemAssistant().deleteItem2(1933, 1); + player.getItemAssistant().addItem(1931, 1); + break; + + case 1921: + player.getItemAssistant().deleteItem2(1921, 1); + player.getItemAssistant().addItem(1923, 1); + break; + + default: + + if (player.playerRights == 3) { + Misc.println(player.playerName + " - Item3rdOption: " + itemId + + " : " + itemId11 + " : " + itemId1); + } + break; + } + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemOnGroundItem.java b/2006Redone Server/src/redone/net/packets/impl/ItemOnGroundItem.java new file mode 100644 index 00000000..bf6bbec8 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemOnGroundItem.java @@ -0,0 +1,44 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.game.content.skills.firemaking.Firemaking; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.util.Misc; + +public class ItemOnGroundItem implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.getInStream().readSignedWordBigEndian(); + int itemUsed = player.getInStream().readSignedWordA(); + int groundItem = player.getInStream().readUnsignedWord(); + int gItemY = player.getInStream().readSignedWordA(); + int itemUsedSlot = player.getInStream().readSignedWordBigEndianA(); + int gItemX = player.getInStream().readUnsignedWord(); + if (!player.getItemAssistant().playerHasItem(itemUsed, 1, itemUsedSlot)) { + return; + } + if (!Server.itemHandler.itemExists(groundItem, gItemX, gItemY)) { + return; + } + + switch (itemUsed) { + case 590: + case 7331: + case 7330: + case 7329: + Firemaking.attemptFire(player, itemUsed, groundItem, gItemX, gItemY, + true); + break; + + default: + if (player.playerRights == 3) { + Misc.println("ItemUsed " + itemUsed + " on Ground Item " + + groundItem); + } + break; + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemOnItem.java b/2006Redone Server/src/redone/net/packets/impl/ItemOnItem.java new file mode 100644 index 00000000..6613ba62 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemOnItem.java @@ -0,0 +1,21 @@ +package redone.net.packets.impl; + +import redone.game.items.UseItem; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class ItemOnItem implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int usedWithSlot = player.getInStream().readUnsignedWord(); + int itemUsedSlot = player.getInStream().readUnsignedWordA(); + int useWith = player.playerItems[usedWithSlot] - 1; + int itemUsed = player.playerItems[itemUsedSlot] - 1; + if (!player.getItemAssistant().playerHasItem(useWith, 1, usedWithSlot)|| !player.getItemAssistant().playerHasItem(itemUsed, 1, itemUsedSlot)) { + return; + } + UseItem.ItemonItem(player, itemUsed, useWith); + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemOnNpc.java b/2006Redone Server/src/redone/net/packets/impl/ItemOnNpc.java new file mode 100644 index 00000000..3ff38920 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemOnNpc.java @@ -0,0 +1,53 @@ +package redone.net.packets.impl; + +import redone.game.content.skills.SkillHandler; +import redone.game.items.UseItem; +import redone.game.npcs.NpcHandler; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class ItemOnNpc implements PacketType { + + @Override + public void processPacket(final Client player, int packetType, int packetSize) { + final int itemId = player.getInStream().readSignedWordA(); + final int i = player.getInStream().readSignedWordA(); + final int slot = player.getInStream().readSignedWordBigEndian(); + final int npcId = NpcHandler.npcs[i].npcType; + SkillHandler.resetItemOnNpc(player); + if (player.playerRights == 3) { + player.getActionSender().sendMessage("Item id: " + itemId + " slot: " + slot + " i: " + i); + } + if (player.getItemAssistant().freeSlots() < 1) { + player.getActionSender().sendMessage("Your inventory is full."); + return; + } + if (player == null || player.disconnected == true || !player.getItemAssistant().playerHasItem(itemId, 1, slot) || NpcHandler.npcs[i] == null || NpcHandler.npcs[i].isDead || player.isDead || player.isTeleporting) { + return; + } + player.faceNpc(i); + switch(npcId) { + case 43: + NpcHandler.npcs[i].requestTransformTime(player, 1735, 893, 43, 42, 50); + break; + } + if (player.getItemAssistant().playerHasItem(995, 1) && npcId == 736) { + player.getItemAssistant().deleteItem2(995, 1); + player.getDialogueHandler().sendNpcChat1("Thanks!", player.npcType, "Emily"); + } + if (player.getItemAssistant().playerHasItem(1927, 1) && player.gertCat == 2 && npcId == 2997) { + player.getDialogueHandler().sendDialogues(319, npcId); + player.getItemAssistant().deleteItem2(1927, 1); + player.getItemAssistant().addItem(1925, 1); + player.gertCat = 3; + } else if (player.getItemAssistant().playerHasItem(1552, 1) && player.gertCat == 3 && npcId == 2997) { + player.getDialogueHandler().sendDialogues(323, npcId); + player.getItemAssistant().deleteItem2(1552, 1); + player.gertCat = 4; + } else if (player.getItemAssistant().playerHasItem(1554, 1) && player.gertCat == 5 && npcId == 2997) { + player.getItemAssistant().deleteItem2(1554, 1); + player.getDialogueHandler().sendDialogues(326, npcId); + } + UseItem.ItemonNpc(player, itemId, slot, i); + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemOnObject.java b/2006Redone Server/src/redone/net/packets/impl/ItemOnObject.java new file mode 100644 index 00000000..1327bdec --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemOnObject.java @@ -0,0 +1,219 @@ +package redone.net.packets.impl; + +import redone.game.content.skills.cooking.Cooking; +import redone.game.content.skills.cooking.CookingTutorialIsland; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.content.skills.crafting.Pottery; +import redone.game.content.skills.crafting.Spinning; +import redone.game.items.UseItem; +import redone.game.items.impl.Fillables; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.world.clip.Region; + +public class ItemOnObject implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.getInStream().readUnsignedWord(); + int objectId = player.getInStream().readSignedWordBigEndian(); + int objectY = player.getInStream().readSignedWordBigEndianA(); + player.getInStream().readUnsignedWord(); + int objectX = player.getInStream().readSignedWordBigEndianA(); + int itemId = player.getInStream().readUnsignedWord(); + player.cookingCoords[0] = objectX; + player.cookingCoords[1] = objectY; + player.turnPlayerTo(objectX, objectY); + player.objectX = objectX; + player.objectY = objectY; + if (!player.getItemAssistant().playerHasItem(itemId, 1)) { + return; + } + if (player.playerRights == 3) { + player.getActionSender().sendMessage( + "Object Id:" + objectId + " ObjectX: " + objectX + + " ObjectY: " + objectY + "."); + } + switch (objectId) { + case 3044: + if (itemId == 438 || itemId == 436) { + if (player.getItemAssistant().playerHasItem(438) && player.getItemAssistant().playerHasItem(436)) { + if (player.tutorialProgress == 19) { + player.startAnimation(899); + player.getActionSender().sendSound(352, 100, 1); + player.getActionSender().sendMessage("You smelt the copper and tin together in the furnace."); + player.getItemAssistant().deleteItem2(438, 1); + player.getItemAssistant().deleteItem2(436, 1); + player.getActionSender().sendMessage("You retrieve a bar of bronze."); + player.getItemAssistant().addItem(2349, 1); + player.getDialogueHandler().sendDialogues(3062, -1); + } else if (player.tutorialProgress > 19) { + player.startAnimation(899); + player.getActionSender().sendSound(352, 100, 1); + player.getActionSender().sendMessage("You smelt the copper and tin together in the furnace."); + player.getItemAssistant().deleteItem2(438, 1); + player.getItemAssistant().deleteItem2(436, 1); + player.getActionSender().sendMessage("You retrieve a bar of bronze."); + player.getItemAssistant().addItem(2349, 1); + } + } + } + break; + case 2645: + if (itemId == 1925) { + player.getItemAssistant().deleteItem(itemId, 1); + player.getItemAssistant().addItem(1783, 1); + } else { + player.getActionSender().sendMessage("You need a bucket of sand to do that!"); + } + break; + case 12269: + case 2732: + case 114: + case 2727: + case 385: + case 14919: + case 2728: + case 9682: + if (player.absX == 3014 && player.absY > 3235 && player.absY < 3238 + || player.absX == 3012 && player.absY == 3239 || player.absX == 3020 + && player.absY > 3236 && player.absY < 3239 || player.absX > 2805 + && player.absX < 2813 || player.absY > 3437 && player.absY < 3442) { + return; + } + if (player.tutorialProgress < 36 || player.isInTut()) { + CookingTutorialIsland.cookThisFood(player, itemId, objectId); + } else { + Cooking.startCooking(player, itemId, objectId); + } + break; + + case 14921: + case 9390: + case 2781: + case 2785: + case 2966: + case 3294: + case 3413: + case 4304: + case 4305: + case 6189: + case 6190: + case 11009: + case 11010: + case 11666: + case 12100: + case 12809: + if (itemId == 2357) { + JewelryMaking.mouldInterface(player); + /*} else if (itemId == SilverCrafting.SILVER_BAR) { + Menus.sendSkillMenu(c, "silverCrafting");*/ + } + break; + + case 2452: + case 2453: + case 2454: + case 2455: + case 2456: + case 2457: + case 2458: + case 2459: + case 2460: + case 2461: + case 2462: + player.getRC().enterAltar(objectId, itemId); + break; + + case 3039:// tutorial island need to check if it needs break or not + if (player.getItemAssistant().playerHasItem(2307) + && player.tutorialProgress == 8) { + player.startAnimation(896); + player.getPlayerAssistant().requestUpdates(); + player.getItemAssistant().deleteItem(2307, 1); + player.getItemAssistant().addItem(2309, 1); + player.getDialogueHandler().sendDialogues(3037, 0); + } + break; + + case 10093: + if (player.getItemAssistant().playerHasItem(1927, 1)) { + player.turnPlayerTo(player.objectX, player.objectY); + player.startAnimation(883); + player.getItemAssistant().addItem(2130, 1); + player.getItemAssistant().deleteItem(1927, 1); + player.getPlayerAssistant().addSkillXP(18, player.playerCooking); + } else { + player.getActionSender().sendMessage("You need a bucket of milk to do this."); + } + break; + } + + if (itemId == 1710 || itemId == 1708 || itemId == 1706 + || itemId == 1704 && objectId == 2638) { // glory + int amount = player.getItemAssistant().getItemCount(1710) + + player.getItemAssistant().getItemCount(1708) + + player.getItemAssistant().getItemCount(1706) + + player.getItemAssistant().getItemCount(1704); + int[] glories = { 1710, 1708, 1706, 1704 }; + for (int i : glories) { + player.getItemAssistant().deleteItem(i, + player.getItemAssistant().getItemCount(i)); + } + player.startAnimation(832); + player.getItemAssistant().addItem(1712, amount); + } + + if (itemId == 954 && objectId == 3827 && player.rope == false) { + player.getActionSender().object(3828, 3227, 3108, 0, 0, 10); + Region.addObject(3828, 3227, 3108, 0, 0, 0, false); + player.rope = true; + } + + if (itemId == 954 && objectId == 3830 && player.rope2 == false) { + player.getActionSender().object(3828, 3509, 9497, 2, 0, 10); + Region.addObject(3828, 3509, 9497, 2, 0, 0, false); + player.rope2 = true; + } + + if (itemId == 1737 || itemId == 1779 && objectId == 2644) { + Spinning.showSpinning(player); + } + + if (itemId == 1761 && objectId == 2642) { + Pottery.showUnfire(player); + } + + if (itemId == 954 && objectId == 2327) { + player.getPlayerAssistant().movePlayer(2505, 3087, 0); + player.getItemAssistant().deleteItem2(954, 1); + } else if (objectId == 2327 && itemId != 954) { + player.getActionSender().sendMessage("You need a rope to swing across."); + } + + if (objectId == 2327 && player.absX == 2511 && player.absY == 3092) { + player.getPlayerAssistant().movePlayer(2510, 3096, 0); + } + + /* + * if (itemId == 1779 && objectId == 2644) { int amount = + * (c.getItemAssistant().getItemCount(1777)); int[] spin = {1777}; for + * (int i : spin) { c.getItemAssistant().deleteItem(i, + * c.getItemAssistant().getItemCount(i)); } c.startAnimation(883); + * c.getItemAssistant().addItem(1777, amount); } + */ + + if (Fillables.canFill(itemId, objectId) && player.getItemAssistant().playerHasItem(itemId)) { + int amount = player.getItemAssistant().getItemCount(itemId); + player.getItemAssistant().deleteItem(itemId, amount); + player.getItemAssistant().addItem(Fillables.counterpart(itemId), amount); + player.getActionSender().sendMessage(Fillables.fillMessage(itemId, objectId)); + player.startAnimation(832); + return; + } + + UseItem.ItemonObject(player, objectId, objectX, objectY, itemId); + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ItemOnPlayer.java b/2006Redone Server/src/redone/net/packets/impl/ItemOnPlayer.java new file mode 100644 index 00000000..5fb5aace --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ItemOnPlayer.java @@ -0,0 +1,53 @@ +package redone.net.packets.impl; + +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; +import redone.util.Misc; + +/** + * @author JaydenD12/Jaydennn + */ + +public class ItemOnPlayer implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int playerId = c.inStream.readUnsignedWord(); + int itemId = c.playerItems[c.inStream.readSignedWordBigEndian()] - 1; + switch (itemId) { + + case 962: + Client o = (Client) PlayerHandler.players[playerId]; + if (!RareProtection.CRACKERS && c.playerRights < 3) { + int delete = c.getItemAssistant().getItemCount(962); + c.getItemAssistant().deleteItem2(962, delete); + c.getActionSender().sendMessage("You can't do that!"); + return; + } + c.gfx0(176); + c.startAnimation(451); + c.getActionSender().sendMessage( + "You pull the Christmas Cracker..."); + o.getActionSender().sendMessage( + "You pull the Christmas Cracker..."); + c.getItemAssistant().deleteItem(962, 1); + if (Misc.random(3) == 1) { + o.forcedText = "Yay I got the Cracker!"; + o.forcedChatUpdateRequired = true; + o.getItemAssistant().addItem(1038 + Misc.random(5) * 2, 1); + } else { + c.forcedText = "Yay I got the Cracker!"; + c.forcedChatUpdateRequired = true; + c.getItemAssistant().addItem(1038 + Misc.random(5) * 2, 1); + } + c.turnPlayerTo(o.absX, o.absY); + break; + default: + c.getActionSender().sendMessage("Nothing interesting happens."); + break; + } + + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/MagicOnFloorItems.java b/2006Redone Server/src/redone/net/packets/impl/MagicOnFloorItems.java new file mode 100644 index 00000000..994354cb --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/MagicOnFloorItems.java @@ -0,0 +1,113 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.combat.magic.MagicData; +import redone.game.items.Item; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Magic on floor items + **/ +public class MagicOnFloorItems implements PacketType { + + @Override + public void processPacket(final Client c, int packetType, int packetSize) { + final int itemY = c.getInStream().readSignedWordBigEndian(); + int itemId = c.getInStream().readUnsignedWord(); + final int itemX = c.getInStream().readSignedWordBigEndian(); + c.getInStream().readUnsignedWordA(); + + if (!Server.itemHandler.itemExists(itemId, itemX, itemY)) { + c.stopMovement(); + return; + } + c.usingMagic = true; + if (!c.getCombatAssistant().checkMagicReqs(51)) { + c.stopMovement(); + return; + } + + if ((c.getItemAssistant().freeSlots() >= 1 || c.getItemAssistant() + .playerHasItem(itemId, 1)) + && Item.itemStackable[itemId] + || c.getItemAssistant().freeSlots() > 0 + && !Item.itemStackable[itemId]) { + if (c.goodDistance(c.getX(), c.getY(), itemX, itemY, 12)) { + c.walkingToItem = true; + int offY = (c.getX() - itemX) * -1; + int offX = (c.getY() - itemY) * -1; + c.teleGrabX = itemX; + c.teleGrabY = itemY; + c.teleGrabItem = itemId; + c.turnPlayerTo(itemX, itemY); + c.teleGrabDelay = System.currentTimeMillis(); + c.startAnimation(MagicData.MAGIC_SPELLS[51][2]); + c.gfx100(MagicData.MAGIC_SPELLS[51][3]); + c.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, + 0, 72); + c.getPlayerAssistant().createPlayersProjectile(c.getX(), + c.getY(), offX, offY, 50, 70, + MagicData.MAGIC_SPELLS[51][4], 50, 10, 0, 50); + c.getPlayerAssistant().addSkillXP( + MagicData.MAGIC_SPELLS[51][7], 6); + c.getPlayerAssistant().refreshSkill(6); + c.stopMovement(); + CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!c.walkingToItem) { + stop(); + } + if (System.currentTimeMillis() - c.teleGrabDelay > 1550 + && c.usingMagic) { + if (Server.itemHandler.itemExists(c.teleGrabItem, + c.teleGrabX, c.teleGrabY) + && c.goodDistance(c.getX(), c.getY(), + itemX, itemY, 12)) { + Server.itemHandler.removeGroundItem(c, + c.teleGrabItem, c.teleGrabX, + c.teleGrabY, true); + c.usingMagic = false; + container.stop(); + } + } + } + + @Override + public void stop() { + c.walkingToItem = false; + } + }, 1); + } + } else { + c.getActionSender().sendMessage( + "You don't have enough space in your inventory."); + c.stopMovement(); + } + + if (c.goodDistance(c.getX(), c.getY(), itemX, itemY, 12)) { + int offY = (c.getX() - itemX) * -1; + int offX = (c.getY() - itemY) * -1; + c.teleGrabX = itemX; + c.teleGrabY = itemY; + c.teleGrabItem = itemId; + c.turnPlayerTo(itemX, itemY); + c.teleGrabDelay = System.currentTimeMillis(); + c.startAnimation(MagicData.MAGIC_SPELLS[51][2]); + c.gfx100(MagicData.MAGIC_SPELLS[51][3]); + c.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, 0, + 72); + c.getPlayerAssistant().createPlayersProjectile(c.getX(), c.getY(), + offX, offY, 50, 70, MagicData.MAGIC_SPELLS[51][4], 50, 10, + 0, 50); + c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[51][7], 6); + c.getPlayerAssistant().refreshSkill(6); + c.stopMovement(); + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/MagicOnItems.java b/2006Redone Server/src/redone/net/packets/impl/MagicOnItems.java new file mode 100644 index 00000000..437b19ba --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/MagicOnItems.java @@ -0,0 +1,26 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Magic on items + **/ +public class MagicOnItems implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + int slot = player.getInStream().readSignedWord(); + int itemId = player.getInStream().readSignedWordA(); + player.getInStream().readSignedWord(); + int spellId = player.getInStream().readSignedWordA(); + if(!player.getItemAssistant().playerHasItem(itemId, 1, slot)) { + return; + } + player.usingMagic = true; + player.getPlayerAssistant().magicOnItems(slot, itemId, spellId); + player.usingMagic = false; + + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/MoveItems.java b/2006Redone Server/src/redone/net/packets/impl/MoveItems.java new file mode 100644 index 00000000..5bb0164a --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/MoveItems.java @@ -0,0 +1,32 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Move Items + **/ +public class MoveItems implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int interfaceId = c.getInStream().readSignedWordBigEndianA(); + boolean insertMode = c.getInStream().readSignedByteC() == 1; + int from = c.getInStream().readSignedWordBigEndianA(); + int to = c.getInStream().readSignedWordBigEndian(); + // c.sendMessage("junk: " + somejunk); + if (c.inTrade) { + c.getTrading().declineTrade(); + return; + } + if (c.tradeStatus == 1) { + c.getTrading().declineTrade(); + return; + } + if (c.duelStatus == 1) { + c.getDueling().declineDuel(); + return; + } + c.getItemAssistant().moveItems(from, to, interfaceId, insertMode); + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/PickupItem.java b/2006Redone Server/src/redone/net/packets/impl/PickupItem.java new file mode 100644 index 00000000..1e29416e --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/PickupItem.java @@ -0,0 +1,106 @@ +package redone.net.packets.impl; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.minigames.castlewars.CastleWars; +import redone.game.content.music.sound.SoundList; +import redone.game.content.skills.SkillHandler; +import redone.game.content.skills.firemaking.Firemaking; +import redone.game.content.skills.firemaking.LogData; +import redone.game.items.ItemAssistant; +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.net.packets.PacketType; +import redone.util.GameLogger; +import redone.world.GlobalDropsHandler; + +/** + * Pickup Item + **/ +public class PickupItem implements PacketType { + + + @Override + public void processPacket(final Client player, int packetType, int packetSize) { + player.pItemY = player.getInStream().readSignedWordBigEndian(); + player.pItemId = player.getInStream().readUnsignedWord(); + player.pItemX = player.getInStream().readSignedWordBigEndian(); + if (Math.abs(player.getX() - player.pItemX) > 25 || Math.abs(player.getY() - player.pItemY) > 25) { + player.resetWalkingQueue(); + return; + } + if(!Server.itemHandler.itemExists(player.pItemId, player.pItemX, player.pItemY)) { + player.stopMovement(); + return; + } + player.getCombatAssistant().resetPlayerAttack(); + if (player.stopPlayerPacket) { + return; + } + if (player.isBotting) { + player.getActionSender().sendMessage("You can't pickup items, until you confirm you aren't botting."); + player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); + return; + } + String itemName = ItemAssistant.getItemName(player.pItemId).toLowerCase(); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "pickupitem", player.playerName + " picked up " + itemName + " itemX: " + player.pItemX + ", itemY: " + player.pItemY + ""); + } + if (!CastleWars.deleteCastleWarsItems(player, player.pItemId)) { + return; + } + if (!RareProtection.doOtherDupe(player, player.pItemId)) { + return; + } + if (player.pItemY > 9817 && player.pItemY < 9825 && player.pItemX > 3186 && player.pItemX < 3197 || player.pItemX > 3107 && player.pItemX < 3113 && player.pItemY > 3155 && player.pItemY < 3159 && player.heightLevel == 2) { + player.getActionSender().sendMessage( + "You can't pick up these items!"); + return; + } + for (LogData logData : LogData.values()) { + if (player.isFiremaking == true && player.pItemId == logData.getLogId()) { + player.getActionSender().sendMessage("You can't do that!"); + Firemaking.stopFiremaking = true; + return; + } + } + for (LogData logData : LogData.values()) { + if (player.pItemId == logData.getLogId()) { + Firemaking.pickedUpFiremakingLog = true; + } + } + SkillHandler.resetSkills(player); + player.getCombatAssistant().resetPlayerAttack(); + if (player.getX() == player.pItemX && player.getY() == player.pItemY + || player.getX() - 1 == player.pItemX && player.getY() == player.pItemY + || player.getY() - 1 == player.pItemY && player.getX() == player.pItemX + || player.getX() + 1 == player.pItemX && player.getY() == player.pItemY + || player.getY() + 1 == player.pItemY && player.getX() == player.pItemX) { + Server.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, + player.pItemY, true); + player.getActionSender().sendSound(SoundList.ITEM_PICKUP, 100, 0); + GlobalDropsHandler.pickup(player, player.pItemId, player.pItemX, player.pItemY); + } else { + player.walkingToItem = true; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!player.walkingToItem) { + container.stop(); + } + if (player.getX() == player.pItemX && player.getY() == player.pItemY && player.walkingToItem) { + Server.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, player.pItemY, true); + container.stop(); + } + } + + @Override + public void stop() { + player.walkingToItem = false; + } + }, 1); + } + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/PrivateMessaging.java b/2006Redone Server/src/redone/net/packets/impl/PrivateMessaging.java new file mode 100644 index 00000000..9563093e --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/PrivateMessaging.java @@ -0,0 +1,159 @@ +package redone.net.packets.impl; + +import redone.Connection; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.game.players.antimacro.AntiSpam; +import redone.net.packets.PacketType; +import redone.util.GameLogger; +import redone.util.Misc; + +/** + * Private messaging, friends etc + **/ +public class PrivateMessaging implements PacketType { + + public final int ADD_FRIEND = 188, SEND_PM = 126, REMOVE_FRIEND = 215, + CHANGE_PM_STATUS = 95, REMOVE_IGNORE = 59, ADD_IGNORE = 133; + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + switch (packetType) { + + case ADD_FRIEND: + player.friendUpdate = true; + long friendToAdd = player.getInStream().readQWord(); + boolean canAdd = true; + + for (long friend : player.friends) { + if (friend != 0 && friend == friendToAdd) { + canAdd = false; + player.getActionSender().sendMessage(friendToAdd + " is already on your friends list."); + } + } + if (canAdd) { + for (int i1 = 0; i1 < player.friends.length; i1++) { + if (player.friends[i1] == 0) { + player.friends[i1] = friendToAdd; + for (int i2 = 1; i2 < PlayerHandler.players.length; i2++) { + if (PlayerHandler.players[i2] != null && PlayerHandler.players[i2].isActive && Misc.playerNameToInt64(PlayerHandler.players[i2].playerName) == friendToAdd) { + Client o = (Client) PlayerHandler.players[i2]; + if (o != null) { + if (PlayerHandler.players[i2].privateChat == 0 || PlayerHandler.players[i2].privateChat == 1 && o.getPlayerAssistant().isInPM(Misc.playerNameToInt64(player.playerName))) { + player.getPlayerAssistant().loadPM(friendToAdd, 1); + break; + } + } + } + } + break; + } + } + } + break; + + case SEND_PM: + long sendMessageToFriendId = player.getInStream().readQWord(); + byte pmchatText[] = new byte[100]; + int pmchatTextSize = (byte) (packetSize - 8); + player.getInStream().readBytes(pmchatText, pmchatTextSize, 0); + String word = Misc.textUnpack(pmchatText, player.packetSize - 2).toLowerCase();// used + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "pmsent", player.playerName + " said " + Misc.textUnpack(pmchatText, packetSize - 8) + ""); + } + if (!AntiSpam.blockedWords(player, word, false) || Connection.isMuted(player)) { + return; + } + for (long friend : player.friends) { + if (friend == sendMessageToFriendId) { + boolean pmSent = false; + + for (int i2 = 1; i2 < PlayerHandler.players.length; i2++) { + if (PlayerHandler.players[i2] != null && PlayerHandler.players[i2].isActive && Misc.playerNameToInt64(PlayerHandler.players[i2].playerName) == sendMessageToFriendId) { + Client o = (Client) PlayerHandler.players[i2]; + if (o != null) { + if (PlayerHandler.players[i2].privateChat == 0 || PlayerHandler.players[i2].privateChat == 1 && o.getPlayerAssistant().isInPM(Misc.playerNameToInt64(player.playerName))) { + if (friend == sendMessageToFriendId) { + o.getPlayerAssistant().sendPM(Misc.playerNameToInt64(player.playerName), player.playerRights, pmchatText, pmchatTextSize); + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(o.playerName, "pmrecieved", player.playerName + " said to " + o.playerName + " " + Misc.textUnpack(pmchatText, packetSize - 8) + ""); + } + pmSent = true; + } + } + } + break; + } + } + if (!pmSent) { + player.getActionSender().sendMessage("That player is currently offline."); + break; + } + } + } + break; + + case REMOVE_FRIEND: + player.friendUpdate = true; + long friendToRemove = player.getInStream().readQWord(); + + for (int i1 = 0; i1 < player.friends.length; i1++) { + if (player.friends[i1] == friendToRemove) { + for (int i2 = 1; i2 < PlayerHandler.players.length; i2++) { + Client o = (Client) PlayerHandler.players[i2]; + if (o != null) { + if (player.friends[i1] == Misc + .playerNameToInt64(PlayerHandler.players[i2].playerName)) { + o.getPlayerAssistant().updatePM(player.playerId, 0); + break; + } + } + } + player.friends[i1] = 0; + break; + } + } + break; + + case REMOVE_IGNORE: + player.friendUpdate = true; + long ignore = player.getInStream().readQWord(); + + for (int i = 0; i < player.ignores.length; i++) { + if (player.ignores[i] == ignore) { + player.ignores[i] = 0; + break; + } + } + break; + + case CHANGE_PM_STATUS: + // int tradeAndCompete = c.getInStream().readUnsignedByte(); + player.privateChat = player.getInStream().readUnsignedByte(); + // int publicChat = c.getInStream().readUnsignedByte(); + for (int i1 = 1; i1 < PlayerHandler.players.length; i1++) { + if (PlayerHandler.players[i1] != null + && PlayerHandler.players[i1].isActive) { + Client o = (Client) PlayerHandler.players[i1]; + if (o != null) { + o.getPlayerAssistant().updatePM(player.playerId, 1); + } + } + } + break; + + case ADD_IGNORE: + player.friendUpdate = true; + long ignoreAdd = player.getInStream().readQWord(); + for (int i = 0; i < player.ignores.length; i++) { + if (player.ignores[i] == 0) { + player.ignores[i] = ignoreAdd; + break; + } + } + break; + + } + + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/RemoveItem.java b/2006Redone Server/src/redone/net/packets/impl/RemoveItem.java new file mode 100644 index 00000000..e0c40aaa --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/RemoveItem.java @@ -0,0 +1,97 @@ +package redone.net.packets.impl; + +import redone.game.content.random.PartyRoom; +import redone.game.content.skills.crafting.JewelryMaking; +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Remove Item + **/ +public class RemoveItem implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int interfaceId = c.getInStream().readUnsignedWordA(); + int removeSlot = c.getInStream().readUnsignedWordA(); + int removeId = c.getInStream().readUnsignedWordA(); + if (removeId == 88) { + c.weight += 4.5; + c.getActionSender().writeWeight((int) c.weight); + } + if (!RareProtection.removeItem(c, removeId)) { + return; + } + switch (interfaceId) { + + case 4233: + case 4239: + case 4245: + JewelryMaking.mouldItem(c, removeId, 1); + break; + + case 7423: + if (c.inTrade) { + c.getTrading().declineTrade(true); + return; + } + c.getItemAssistant().bankItem(removeId, removeSlot, 1); + c.getItemAssistant().resetItems(7423); + break; + + case 1688: + c.getItemAssistant().removeItem(removeId, removeSlot); + break; + + case 5064: + if (c.inPartyRoom) { + PartyRoom.depositItem(c, removeId, 1); + } else { + c.getItemAssistant().bankItem(removeId, removeSlot, 1); + } + break; + + case 5382: + c.getItemAssistant().fromBank(removeId, removeSlot, 1); + break; + + case 3900: + c.getShopAssistant().buyFromShopPrice(removeId, removeSlot); + break; + + case 3823: + c.getShopAssistant().sellToShopPrice(removeId, removeSlot); + break; + + case 3322: + if (c.duelStatus <= 0) { + c.getTrading().tradeItem(removeId, removeSlot, 1); + } else { + c.getDueling().stakeItem(removeId, removeSlot, 1); + } + break; + + case 3415: + if (c.duelStatus <= 0) { + c.getTrading().fromTrade(removeId, removeSlot, 1); + } + break; + + case 6669: + c.getDueling().fromDuel(removeId, removeSlot, 1); + break; + + case 1119: + case 1120: + case 1121: + case 1122: + case 1123: + c.getSmithing().readInput(c.playerLevel[c.playerSmithing], + Integer.toString(removeId), c, 1); + break; + + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Report.java b/2006Redone Server/src/redone/net/packets/impl/Report.java new file mode 100644 index 00000000..f4826f77 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Report.java @@ -0,0 +1,17 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +public class Report implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + try { + ReportHandler.handleReport(c); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/ReportHandler.java b/2006Redone Server/src/redone/net/packets/impl/ReportHandler.java new file mode 100644 index 00000000..6eebb7c5 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/ReportHandler.java @@ -0,0 +1,192 @@ +package redone.net.packets.impl; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import redone.game.players.Client; +import redone.util.Misc; + +public class ReportHandler { + + public static String[] savedNames = new String[500]; + public static String[] savedSpeach = new String[500]; + public static String[] savedTimes = new String[500]; + + /** + * Reports + */ + + public static final String[] reportNames = { "Offensive language", + "Item scamming", "Password scamming", "Bug abuse", + "Staff impersonation", "Account Sharing/Trading", "Macroing", + "Multiple Logging in", "Encouragig others to break the rules", + "Misuse of Customer Support", "Advertising", "Real World Trading", + "Asking for personal detail" }; + + /** + * Adding texts + * + * @param name + * The player's name. + * @param data + * The data. + * @param dataLength + * The data's length. + */ + + public static void addText(String name, byte[] data, int dataLength) { + for (int i = 499; i > 0; i--) { + savedNames[i] = savedNames[i - 1]; + savedSpeach[i] = savedSpeach[i - 1]; + savedTimes[i] = savedTimes[i - 1]; + } + savedNames[0] = name; + savedSpeach[0] = Misc.textUnpack(data, dataLength); + String minute = new SimpleDateFormat("mm").format(new Date()); + String second = new SimpleDateFormat("ss").format(new Date()); + String hour = new SimpleDateFormat("hh").format(new Date()); + savedTimes[0] = hour + ":" + minute + ":" + second; + } + + /** + * Report Handler + * + * @param c + * Client x + * @throws Exception + * ex + */ + + public static void handleReport(Client c) throws Exception { + String player = Misc.longToReportPlayerName(c.inStream.readQWord2()); + player = player.replaceAll("_", " "); + byte rule = (byte) c.inStream.readUnsignedByte(); + int mute = c.getInStream().readUnsignedByte(); + + if (c.lastReported.equalsIgnoreCase(player) && System.currentTimeMillis() - c.lastReport < 60000) { + c.getActionSender().sendMessage("You can only report a player once every 60 seconds."); + return; + } + if (c.playerName.equalsIgnoreCase(player)) { + c.getActionSender().sendMessage("You cannot report yourself!"); + return; + } + if (hasSpoke(player)) { + String sendText = ""; + + for (int i = 20; i > 0; i--) { + if (savedNames[i] != null) { + if (savedNames[i].equalsIgnoreCase(c.playerName) + || savedNames[i].equalsIgnoreCase(player)) { + sendText += " -[" + savedTimes[i] + ": " + + savedNames[i] + "]: " + savedSpeach[i] + + "\r\n"; + } + } + } + + sendText = sendText.replaceAll("'", " "); + String month = getMonth(new SimpleDateFormat("MM") + .format(new Date())); + String day = new SimpleDateFormat("dd").format(new Date()); + writeReport("" + player + " was reported by " + c.playerName + ", " + + reportNames[rule] + ", " + month + ", " + day + "", + sendText + ".", reportNames[rule]); + c.getActionSender() + .sendMessage( + "Thank you, your report has been received and will be reviewed."); + if (mute == 1 && c.playerRights > 0) { + c.getActionSender() + .sendMessage( + "This user is not muted yet! Go to the MODCP on the forums to mute him!"); + c.getActionSender() + .sendMessage( + "After you have muted him there, do ::update (username) to finish the mute!"); + } + c.lastReported = player; + c.lastReport = System.currentTimeMillis(); + } else { + c.getActionSender() + .sendMessage( + "You can only report someone who has spoken in the last 60 seconds."); + } + } + + /** + * Saves Reports to System + * + * @param data + * The data. + * @param text + * The text. + * @param file + * The file. + */ + + public static void writeReport(String data, String text, String file) { + BufferedWriter bw = null; + try { + int time = (int) System.currentTimeMillis(); + String month = getMonth(new SimpleDateFormat("MM") + .format(new Date())); + String day = new SimpleDateFormat("dd").format(new Date()); + bw = new BufferedWriter(new FileWriter( + "C:/Users/Administrator/Dropbox/2006Redone - Reportabuses/" + + file + " month;" + month + " day;" + day + + " ms-id;" + time + ".txt", true)); + bw.write(data); + bw.newLine(); + bw.write(text); + bw.newLine(); + bw.newLine(); + bw.flush(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } finally { + if (bw != null) { + try { + bw.close(); + } catch (IOException ioe2) { + System.out.println("Error writing system log."); + ioe2.printStackTrace(); + } + } + } + + } + + public static boolean hasSpoke(String s) { + for (int i = 0; i < 500; i++) { + if (savedNames[i] != null) { + if (savedNames[i].equalsIgnoreCase(s)) { + return true; + } + } + } + return false; + } + + /** + * Gets the Month + * + * @param s + * The s. + * @return return + */ + + public static String getMonth(String s) { + try { + int i = Integer.parseInt(s); + String[] months = { "", "January", "February", "March", "April", + "May", "June", "July", "August", "September", "October", + "November", "December" }; + return months[i]; + } catch (Exception e) { + e.printStackTrace(); + } + return "Unknown"; + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/SilentPacket.java b/2006Redone Server/src/redone/net/packets/impl/SilentPacket.java new file mode 100644 index 00000000..a39b0929 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/SilentPacket.java @@ -0,0 +1,15 @@ +package redone.net.packets.impl; + +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Slient Packet + **/ +public class SilentPacket implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + + } +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Trade.java b/2006Redone Server/src/redone/net/packets/impl/Trade.java new file mode 100644 index 00000000..87d7ce31 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Trade.java @@ -0,0 +1,38 @@ +package redone.net.packets.impl; + +import redone.Constants; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Trading + */ + +public class Trade implements PacketType { + + @Override + public void processPacket(Client c, int packetType, int packetSize) { + int tradeId = c.getInStream().readSignedWordBigEndian(); + c.getPlayerAssistant().resetFollow(); + if (c.disconnected) { + c.tradeStatus = 0; + } + if (c.duelingArena()) { + c.getActionSender().sendMessage("You can't trade inside the arena!"); + return; + } + + if (c.playerRights == 2 && !Constants.ADMIN_CAN_TRADE) { + c.getActionSender().sendMessage("Trading as an admin has been disabled."); + return; + } + + if(tradeId < 1) { + return; + } + if (tradeId != c.playerId) { + c.getTrading().requestTrade(tradeId); + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/Walking.java b/2006Redone Server/src/redone/net/packets/impl/Walking.java new file mode 100644 index 00000000..fbb78b93 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/Walking.java @@ -0,0 +1,184 @@ +package redone.net.packets.impl; + +import redone.game.content.skills.SkillHandler; +import redone.game.content.skills.cooking.Cooking; +import redone.game.content.skills.core.Fishing; +import redone.game.content.skills.smithing.Smelting; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; +import redone.net.packets.PacketType; + +/** + * Walking packet + **/ +public class Walking implements PacketType { + + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.getDueling().checkDuelWalk(); + if (player.canChangeAppearance) { //|| c.performingAction) { + return; + } + if (player.getCannon().settingUp) { + return; + } + if (player.isTeleporting == true) { + player.isTeleporting = false; + } + if (player.playerSkilling[10]) {// fishing + Fishing.resetFishing(player); + } + if (player.playerIsCooking) {// cooking + Cooking.resetCooking(player); + } + if (player.playerSkilling[13]) {// smelting + Smelting.resetSmelting(player); + } + if (player.playerStun) { + return; + } + if (player.stopPlayer == true) { + return; + } + if (player.isBotting == true) { + player.getActionSender().sendMessage("Please type ::amibotting if you would like to move again"); + return; + } + if (player.isFiremaking == true) { + player.isFiremaking = false; + } + if (player.stopPlayerPacket == true) { + return; + } + if (player.inTrade) { + player.inTrade = false; + } + if (player.tutorialProgress > 35 && !player.isSmithing) { + player.getPlayerAssistant().closeAllWindows(); + } else if (player.tutorialProgress < 36 && player.isSmithing) { + player.getPlayerAssistant().closeAllWindows(); + player.isSmithing = false; + } + SkillHandler.resetSkills(player); + if (player.closeTutorialInterface == false && player.tutorialProgress == 36) { + player.getDialogueHandler().sendDialogues(3116, player.npcType); + } + if (player.gliderOpen == true) { + player.gliderOpen = false; + } + if (player.isBanking == true) { + player.isBanking = false; + } + if (player.canWalkTutorial == false && player.tutorialProgress < 36) { + return; + } + if (player.followId > 0 || player.followId2 > 0) { + player.getPlayerAssistant().resetFollow(); + } + if (player.getPlayerAction().checkWalking() == false) { + return; + } + if (packetType == 248 || packetType == 164) { + player.faceUpdate(0); + player.npcIndex = 0; + player.playerIndex = 0; + if (player.clickObjectType > 0) { + player.clickObjectType = 0; + } else if (player.clickNpcType > 0) { + player.clickNpcType = 0; + } + } + + if (player.duelRule[1] && player.duelStatus == 5) { + if (PlayerHandler.players[player.duelingWith] != null) { + if (!player.goodDistance(player.getX(), player.getY(), + PlayerHandler.players[player.duelingWith].getX(), + PlayerHandler.players[player.duelingWith].getY(), 1) + || player.attackTimer == 0) { + player.getActionSender().sendMessage( + "Walking has been disabled in this duel!"); + } + } + player.playerIndex = 0; + return; + } + + + if (player.freezeTimer > 0) { + if (PlayerHandler.players[player.playerIndex] != null) { + if (player.goodDistance(player.getX(), player.getY(), + PlayerHandler.players[player.playerIndex].getX(), + PlayerHandler.players[player.playerIndex].getY(), 1) + && packetType != 98) { + player.playerIndex = 0; + return; + } + } + if (packetType != 98) { + player.getActionSender().sendMessage( + "A magical force stops you from moving."); + player.playerIndex = 0; + } + return; + } + + if (System.currentTimeMillis() - player.lastSpear < 4000) { + player.getActionSender().sendMessage("You have been stunned."); + player.playerIndex = 0; + return; + } + + if (packetType == 98) { + player.mageAllowed = true; + } + + if (player.WildernessWarning == false && player.wildLevel > 0) { + player.resetWalkingQueue(); + player.WildernessWarning = true; + player.getPlayerAssistant().sendFrame126("WARNING!", 6940); + player.getPlayerAssistant().showInterface(1908); + } + + if(player.openDuel) { + Client o = (Client) PlayerHandler.players[player.duelingWith]; + if(o != null) + o.getDueling().declineDuel(); + player.getDueling().declineDuel(); + } + if((player.duelStatus >= 1 && player.duelStatus <= 4) || player.duelStatus == 6) { + if(player.duelStatus == 6) { + player.getDueling().claimStakedItems(); + } + return; + } + + if (player.respawnTimer > 3) { + return; + } + if (packetType == 248) { + packetSize -= 14; + } + player.newWalkCmdSteps = (packetSize - 5) / 2; + if (++player.newWalkCmdSteps > player.walkingQueueSize) { + player.newWalkCmdSteps = 0; + return; + } + + player.getNewWalkCmdX()[0] = player.getNewWalkCmdY()[0] = 0; + + int firstStepX = player.getInStream().readSignedWordBigEndianA() + - player.getMapRegionX() * 8; + for (int i = 1; i < player.newWalkCmdSteps; i++) { + player.getNewWalkCmdX()[i] = player.getInStream().readSignedByte(); + player.getNewWalkCmdY()[i] = player.getInStream().readSignedByte(); + } + + int firstStepY = player.getInStream().readSignedWordBigEndian() - player.getMapRegionY() * 8; + player.setNewWalkCmdIsRunning(player.getInStream().readSignedByteC() == 1 && player.playerEnergy > 0); + for (int i1 = 0; i1 < player.newWalkCmdSteps; i1++) { + player.getNewWalkCmdX()[i1] += firstStepX; + player.getNewWalkCmdY()[i1] += firstStepY; + } + } + +} diff --git a/2006Redone Server/src/redone/net/packets/impl/WearItem.java b/2006Redone Server/src/redone/net/packets/impl/WearItem.java new file mode 100644 index 00000000..cc94da84 --- /dev/null +++ b/2006Redone Server/src/redone/net/packets/impl/WearItem.java @@ -0,0 +1,64 @@ +package redone.net.packets.impl; + +import redone.game.items.impl.RareProtection; +import redone.game.players.Client; +import redone.net.packets.PacketType; + +/** + * Wear Item + **/ +public class WearItem implements PacketType { + + /* (non-Javadoc) + * @see server.net.packets.PacketType#processPacket(server.game.players.Client, int, int) + */ + @Override + public void processPacket(Client player, int packetType, int packetSize) { + player.wearId = player.getInStream().readUnsignedWord(); + player.wearSlot = player.getInStream().readUnsignedWordA(); + player.interfaceId = player.getInStream().readUnsignedWordA(); + if (!RareProtection.equipItem(player)) { + return; + } + if (player.duelStatus > 0 && player.duelStatus < 5) { + return; + } + if (!player.getItemAssistant().playerHasItem(player.wearId, 1, player.wearSlot)) { + return; + } + if (player.playerIndex > 0 || player.npcIndex > 0) { + player.getCombatAssistant().resetPlayerAttack(); + } + if (player.wearId >= 5509 && player.wearId <= 5515) { + int pouch = -1; + int a = player.wearId; + if (a == 5509) { + pouch = 0; + } + if (a == 5510) { + pouch = 1; + } + if (a == 5512) { + pouch = 2; + } + if (a == 5514) { + pouch = 3; + } + player.getPlayerAssistant().emptyPouch(pouch); + return; + } + + if (player.wearId == 88) { + player.weight -= 4.5; + player.getActionSender().writeWeight((int) player.weight); + } + + if (player.wearSlot == player.playerHat) { + player.getActionSender().setConfig(491, 0); + } + + player.getPlayerAssistant().handleTiara(); + player.getItemAssistant().wearItem(player.wearId, player.wearSlot); + } + +} diff --git a/2006Redone Server/src/redone/net/rsa/RSAKeyGen.java b/2006Redone Server/src/redone/net/rsa/RSAKeyGen.java new file mode 100644 index 00000000..c7b4f669 --- /dev/null +++ b/2006Redone Server/src/redone/net/rsa/RSAKeyGen.java @@ -0,0 +1,57 @@ +package redone.net.rsa; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.RSAPrivateKeySpec; +import java.security.spec.RSAPublicKeySpec; + +/** + * A class to generate a simple 1024 bit RSA pair + * @author Nikki + */ +public class RSAKeyGen { + + public static void main(String[] args) { + try { + KeyFactory factory = KeyFactory.getInstance("RSA"); + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(1024); + KeyPair keypair = keyGen.genKeyPair(); + PrivateKey privateKey = keypair.getPrivate(); + PublicKey publicKey = keypair.getPublic(); + + RSAPrivateKeySpec privSpec = factory.getKeySpec(privateKey, RSAPrivateKeySpec.class); + + writeKey("rsapriv", privSpec.getModulus(), privSpec.getPrivateExponent()); + + + RSAPublicKeySpec pubSpec = factory.getKeySpec(publicKey, RSAPublicKeySpec.class); + + writeKey("rsapub", pubSpec.getModulus(), pubSpec.getPublicExponent()); + } catch(Exception e) { + e.printStackTrace(); + } + } + + public static void writeKey(String file, BigInteger modulus, BigInteger exponent) { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write("private static final BigInteger RSA_MODULUS = new BigInteger(\""+modulus.toString()+"\");"); + writer.newLine(); + writer.newLine(); + writer.write("private static final BigInteger RSA_EXPONENT = new BigInteger(\""+exponent.toString()+"\");"); + writer.newLine(); + writer.flush(); + writer.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/2006Redone Server/src/redone/net/rsa/rsapriv b/2006Redone Server/src/redone/net/rsa/rsapriv new file mode 100644 index 00000000..f96d221a --- /dev/null +++ b/2006Redone Server/src/redone/net/rsa/rsapriv @@ -0,0 +1,3 @@ +private static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + +private static final BigInteger RSA_EXPONENT = new BigInteger("33280025241734061313051117678670856264399753710527826596057587687835856000539511539311834363046145710983857746766009612538140077973762171163294453513440619295457626227183742315140865830778841533445402605660729039310637444146319289077374748018792349647460850308384280105990607337322160553135806205784213241305"); diff --git a/2006Redone Server/src/redone/net/rsa/rsapub b/2006Redone Server/src/redone/net/rsa/rsapub new file mode 100644 index 00000000..a90a5e5c --- /dev/null +++ b/2006Redone Server/src/redone/net/rsa/rsapub @@ -0,0 +1,3 @@ +private static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443"); + +private static final BigInteger RSA_EXPONENT = new BigInteger("65537"); diff --git a/2006Redone Server/src/redone/util/GameLogger.java b/2006Redone Server/src/redone/util/GameLogger.java new file mode 100644 index 00000000..d57d977a --- /dev/null +++ b/2006Redone Server/src/redone/util/GameLogger.java @@ -0,0 +1,113 @@ +package redone.util; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Calendar; +import java.util.GregorianCalendar; + +/* + * Author: Nightleaf + */ + +public class GameLogger { + + public static String getTime() { + Calendar cal = new GregorianCalendar(); + String day, month, hour, minute; + int YEAR = cal.get(Calendar.YEAR); + int MONTH = cal.get(Calendar.MONTH) + 1; + int DAY = cal.get(Calendar.DAY_OF_MONTH); + int HOUR = cal.get(Calendar.HOUR_OF_DAY); + int MIN = cal.get(Calendar.MINUTE); + day = DAY < 10 ? "0" + DAY : "" + DAY; + month = MONTH < 10 ? "0" + MONTH : "" + MONTH; + hour = HOUR < 10 ? "0" + HOUR : "" + HOUR; + minute = MIN < 10 ? "0" + MIN : "" + MIN; + return "[" + YEAR + "/" + month + "/" + day + "] " + hour + ":" + minute + " "; + } + + /** + * Formats a currency string just like RS. + * + * @param cash + * @return + */ + public static String formatCurrency(int cash) { + String s = String.valueOf(cash); + for (int k = s.length() - 3; k > 0; k -= 3) { + s = s.substring(0, k).replace(",", ".") + "," + s.substring(k); + } + if (s.length() > 8) { + + s = s.substring(0, s.length() - 8).replace(",", ".") + " million (" + s + ")"; + } else if (s.length() > 4) { + s = s.substring(0, s.length() - 4) + "K (" + s + ")"; + } + return " " + s; + } + + /** + * Writes to a log file. + * + * @param log + * the log file. + * @param data + * the data we are writing to the log. + */ + public static void writeLog(String player, String logType, String data) { + File log = null; + if (logType.equalsIgnoreCase("alchemy")) { + log = new File("./Data/logs/alchlogs/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("shopselling")) { + log = new File("./Data/logs/shopselling/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("shopbuying")) { + log = new File("./Data/logs/shopbuying/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("dropitem")) { + log = new File("./Data/logs/dropitem/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("clickitem")) { + log = new File("./Data/logs/clickitem/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("pickupitem")) { + log = new File("./Data/logs/pickupitem/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("commands")) { + log = new File("./Data/logs/commands/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("pmsent")) { + log = new File("./Data/logs/privatemessages/pmsent/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("pmrecieved")) { + log = new File("./Data/logs/privatemessages/pmrecieved/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("tradesgave")) { + log = new File("./Data/logs/trades/gave/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("tradesrecieved")) { + log = new File("./Data/logs/trades/recieved/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("pkingkilled")) { + log = new File("./Data/logs/pking/killed/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("pkingkiller")) { + log = new File("./Data/logs/pking/killer/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("duelingkilled")) { + log = new File("./Data/logs/dueling/killed/" + player + ".txt"); + } else if (logType.equalsIgnoreCase("duelingkiller")) { + log = new File("./Data/logs/dueling/killer/" + player + ".txt"); + } else { + log = new File("./Data/logs/" + player + ".txt"); + } + + if (!log.exists()) { + try { + log.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + FileWriter logFile = new FileWriter(log, true); + BufferedWriter bf = new BufferedWriter(logFile); + bf.write(getTime() + "" + data + ""); + bf.newLine(); + bf.flush(); + bf.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/2006Redone Server/src/redone/util/HostBlacklist.java b/2006Redone Server/src/redone/util/HostBlacklist.java new file mode 100644 index 00000000..97dac89b --- /dev/null +++ b/2006Redone Server/src/redone/util/HostBlacklist.java @@ -0,0 +1,36 @@ +package redone.util; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; + +public class HostBlacklist { + + private static final String BLACKLIST_DIR = "./data/blacklist.txt"; + + private static List blockedHostnames = new ArrayList(); + + public static List getBlockedHostnames() { + return blockedHostnames; + } + + public static boolean isBlocked(String host) { + return blockedHostnames.contains(host.toLowerCase()); + } + + public static void loadBlacklist() { + String word = null; + try { + BufferedReader in = new BufferedReader( + new FileReader(BLACKLIST_DIR)); + while ((word = in.readLine()) != null) { + blockedHostnames.add(word.toLowerCase()); + } + in.close(); + in = null; + } catch (final Exception e) { + System.out.println("Could not load blacklisted hosts."); + } + } +} diff --git a/2006Redone Server/src/redone/util/ISAACRandomGen.java b/2006Redone Server/src/redone/util/ISAACRandomGen.java new file mode 100644 index 00000000..26023345 --- /dev/null +++ b/2006Redone Server/src/redone/util/ISAACRandomGen.java @@ -0,0 +1,175 @@ +package redone.util; + +public class ISAACRandomGen { + + public int count; + public int[] results; + public int[] memory; + public int accumulator; + public int lastResult; + public int counter; + + public ISAACRandomGen(int[] seed) { + memory = new int[256]; + results = new int[256]; + System.arraycopy(seed, 0, results, 0, seed.length); + initializeKeySet(); + } + + public int getNextKey() { + // Server.add(Thread.currentThread().getName()); + // System.out.println(Thread.currentThread().getName()); + if (count-- == 0) { + generateNextKeySet(); + count = 255; + } + return results[count]; + } + + public void generateNextKeySet() { + lastResult += ++counter; + for (int i = 0; i < 256; i++) { + int j = memory[i]; + if ((i & 3) == 0) { + accumulator ^= accumulator << 13; + } else if ((i & 3) == 1) { + accumulator ^= accumulator >>> 6; + } else if ((i & 3) == 2) { + accumulator ^= accumulator << 2; + } else if ((i & 3) == 3) { + accumulator ^= accumulator >>> 16; + } + accumulator += memory[i + 128 & 0xff]; + int k; + memory[i] = k = memory[(j & 0x3fc) >> 2] + accumulator + lastResult; + results[i] = lastResult = memory[(k >> 8 & 0x3fc) >> 2] + j; + } + + } + + public void initializeKeySet() { + int i1; + int j1; + int k1; + int l1; + int i2; + int j2; + int k2; + int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9; + for (int i = 0; i < 4; i++) { + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + } + + for (int j = 0; j < 256; j += 8) { + l += results[j]; + i1 += results[j + 1]; + j1 += results[j + 2]; + k1 += results[j + 3]; + l1 += results[j + 4]; + i2 += results[j + 5]; + j2 += results[j + 6]; + k2 += results[j + 7]; + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + memory[j] = l; + memory[j + 1] = i1; + memory[j + 2] = j1; + memory[j + 3] = k1; + memory[j + 4] = l1; + memory[j + 5] = i2; + memory[j + 6] = j2; + memory[j + 7] = k2; + } + + for (int k = 0; k < 256; k += 8) { + l += memory[k]; + i1 += memory[k + 1]; + j1 += memory[k + 2]; + k1 += memory[k + 3]; + l1 += memory[k + 4]; + i2 += memory[k + 5]; + j2 += memory[k + 6]; + k2 += memory[k + 7]; + l ^= i1 << 11; + k1 += l; + i1 += j1; + i1 ^= j1 >>> 2; + l1 += i1; + j1 += k1; + j1 ^= k1 << 8; + i2 += j1; + k1 += l1; + k1 ^= l1 >>> 16; + j2 += k1; + l1 += i2; + l1 ^= i2 << 10; + k2 += l1; + i2 += j2; + i2 ^= j2 >>> 4; + l += i2; + j2 += k2; + j2 ^= k2 << 8; + i1 += j2; + k2 += l; + k2 ^= l >>> 9; + j1 += k2; + l += i1; + memory[k] = l; + memory[k + 1] = i1; + memory[k + 2] = j1; + memory[k + 3] = k1; + memory[k + 4] = l1; + memory[k + 5] = i2; + memory[k + 6] = j2; + memory[k + 7] = k2; + } + + generateNextKeySet(); + count = 256; + } +} diff --git a/2006Redone Server/src/redone/util/Misc.java b/2006Redone Server/src/redone/util/Misc.java new file mode 100644 index 00000000..c01897b8 --- /dev/null +++ b/2006Redone Server/src/redone/util/Misc.java @@ -0,0 +1,303 @@ +package redone.util; + +import java.text.NumberFormat; + +public class Misc { + + public static String formatPlayerName(String str) { + str = ucFirst(str); + str.replace("_", " "); + return str; + } + + public static int random(final float range) { + return (int) (java.lang.Math.random() * (range + 1)); + } + + public static int randomMinusOne(int range) { + int number = (int) (Math.random() * range); + return number < 0 ? 0 : number; + } + + public static int random(int range1, int range2) { // 0 till range (range + // INCLUDED) + int keepGoing = 1; + int compare1 = 0; + while (keepGoing == 1) { + compare1 = random(range2); + if (compare1 >= range1) { + keepGoing = 0; + } else { + keepGoing = 1; + } + } + return compare1; + } + + public static boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) { + return objectX - playerX <= distance && objectX - playerX >= -distance && objectY - playerY <= distance && objectY - playerY >= -distance; + } + + public static String longToReportPlayerName(long l) { + int i = 0; + final char ac[] = new char[12]; + while (l != 0L) { + final long l1 = l; + l /= 37L; + ac[11 - i++] = Misc.playerNameXlateTable[(int) (l1 - l * 37L)]; + } + return new String(ac, 12 - i, i); + } + + public static int random3(int range) { + return (int) (java.lang.Math.random() * range); + } + + public static int randomNumber(int range) { + return (int) (Math.random() * range); + } + + public static String longToPlayerName(long l) { + int i = 0; + char ac[] = new char[12]; + + while (l != 0L) { + long l1 = l; + + l /= 37L; + ac[11 - i++] = xlateTable[(int) (l1 - l * 37L)]; + } + return new String(ac, 12 - i, i); + } + + public static final char playerNameXlateTable[] = { '_', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', + '3', '4', '5', '6', '7', '8', '9', '[', ']', '/', '-', ' ' }; + + public static String longToPlayerName2(long l) { + int i = 0; + char ac[] = new char[99]; + while (l != 0L) { + long l1 = l; + l /= 37L; + ac[11 - i++] = playerNameXlateTable[(int) (l1 - l * 37L)]; + } + return new String(ac, 12 - i, i); + } + + public static String format(int num) { + return NumberFormat.getInstance().format(num); + } + + public static String ucFirst(String str) { + str = str.toLowerCase(); + if (str.length() > 1) { + str = str.substring(0, 1).toUpperCase() + str.substring(1); + } else { + return str.toUpperCase(); + } + return str; + } + + public static void print_debug(String str) { + System.out.print(str); + } + + public static void println_debug(String str) { + System.out.println(str); + } + + public static void print(String str) { + System.out.print(str); + } + + public static void println(String str) { + System.out.println(str); + } + + public static String Hex(byte data[]) { + return Hex(data, 0, data.length); + } + + public static String Hex(byte data[], int offset, int len) { + String temp = ""; + for (int cntr = 0; cntr < len; cntr++) { + int num = data[offset + cntr] & 0xFF; + String myStr; + if (num < 16) { + myStr = "0"; + } else { + myStr = ""; + } + temp += myStr + Integer.toHexString(num) + " "; + } + return temp.toUpperCase().trim(); + } + + public static int hexToInt(byte data[], int offset, int len) { + int temp = 0; + int i = 1000; + for (int cntr = 0; cntr < len; cntr++) { + int num = (data[offset + cntr] & 0xFF) * i; + temp += num; + if (i > 1) { + i = i / 1000; + } + } + return temp; + } + + public static int random2(int range) { + return (int) (java.lang.Math.random() * range + 1); + } + + public static int random(int range) { + return (int) (java.lang.Math.random() * (range + 1)); + } + + public static long playerNameToInt64(String s) { + long l = 0L; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + l *= 37L; + if (c >= 'A' && c <= 'Z') { + l += 1 + c - 65; + } else if (c >= 'a' && c <= 'z') { + l += 1 + c - 97; + } else if (c >= '0' && c <= '9') { + l += 27 + c - 48; + } + } + while (l % 37L == 0L && l != 0L) { + l /= 37L; + } + return l; + } + + private static char decodeBuf[] = new char[4096]; + + public static String textUnpack(byte packedData[], int size) { + int idx = 0, highNibble = -1; + for (int i = 0; i < size * 2; i++) { + int val = packedData[i / 2] >> 4 - 4 * (i % 2) & 0xf; + if (highNibble == -1) { + if (val < 13) { + decodeBuf[idx++] = xlateTable[val]; + } else { + highNibble = val; + } + } else { + decodeBuf[idx++] = xlateTable[(highNibble << 4) + val - 195]; + highNibble = -1; + } + } + + return new String(decodeBuf, 0, idx); + } + + public static String optimizeText(String text) { + char buf[] = text.toCharArray(); + boolean endMarker = true; + for (int i = 0; i < buf.length; i++) { + char c = buf[i]; + if (endMarker && c >= 'a' && c <= 'z') { + buf[i] -= 0x20; + endMarker = false; + } + if (c == '.' || c == '!' || c == '?') { + endMarker = true; + } + } + return new String(buf, 0, buf.length); + } + + public static void textPack(byte packedData[], java.lang.String text) { + if (text.length() > 80) { + text = text.substring(0, 80); + } + text = text.toLowerCase(); + + int carryOverNibble = -1; + int ofs = 0; + for (int idx = 0; idx < text.length(); idx++) { + char c = text.charAt(idx); + int tableIdx = 0; + for (int i = 0; i < xlateTable.length; i++) { + if (c == xlateTable[i]) { + tableIdx = i; + break; + } + } + if (tableIdx > 12) { + tableIdx += 195; + } + if (carryOverNibble == -1) { + if (tableIdx < 13) { + carryOverNibble = tableIdx; + } else { + packedData[ofs++] = (byte) tableIdx; + } + } else if (tableIdx < 13) { + packedData[ofs++] = (byte) ((carryOverNibble << 4) + tableIdx); + carryOverNibble = -1; + } else { + packedData[ofs++] = (byte) ((carryOverNibble << 4) + (tableIdx >> 4)); + carryOverNibble = tableIdx & 0xf; + } + } + + if (carryOverNibble != -1) { + packedData[ofs++] = (byte) (carryOverNibble << 4); + } + } + + public static char xlateTable[] = { ' ', 'e', 't', 'a', 'o', 'i', 'h', 'n', + 's', 'r', 'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p', 'b', + 'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', ' ', '!', '?', '.', ',', ':', ';', '(', ')', '-', + '&', '*', '\\', '\'', '@', '#', '+', '=', '\243', '$', '%', '"', + '[', ']' }; + + public static int direction(int srcX, int srcY, int x, int y) { + double dx = (double) x - srcX, dy = (double) y - srcY; + double angle = Math.atan(dy / dx); + angle = Math.toDegrees(angle); + if (Double.isNaN(angle)) { + return -1; + } + if (Math.signum(dx) < 0) { + angle += 180.0; + } + return (int) (((90 - angle) / 22.5 + 16) % 16); + /* + * int changeX = x - srcX; int changeY = y - srcY; for (int j = 0; j < + * directionDeltaX.length; j++) { if (changeX == directionDeltaX[j] && + * changeY == directionDeltaY[j]) return j; } return -1; + */ + } + + public static byte directionDeltaX[] = new byte[] { 0, 1, 1, 1, 0, -1, -1, + -1 }; + public static byte directionDeltaY[] = new byte[] { 1, 1, 0, -1, -1, -1, 0, + 1 }; + public static byte xlateDirectionToClient[] = new byte[] { 1, 2, 4, 7, 6, + 5, 3, 0 }; + + public static String capitalize(String s) { + for (int i = 0; i < s.length(); i++) { + if (i == 0) { + s = String.format("%s%s", Character.toUpperCase(s.charAt(0)), + s.substring(1)); + } + if (!Character.isLetterOrDigit(s.charAt(i))) { + if (i + 1 < s.length()) { + s = String.format("%s%s%s", s.subSequence(0, i + 1), + Character.toUpperCase(s.charAt(i + 1)), + s.substring(i + 2)); + } + } + } + return s; + } +} diff --git a/2006Redone Server/src/redone/util/Stream.java b/2006Redone Server/src/redone/util/Stream.java new file mode 100644 index 00000000..00c33293 --- /dev/null +++ b/2006Redone Server/src/redone/util/Stream.java @@ -0,0 +1,420 @@ +package redone.util; + +import redone.Constants; + +public class Stream { + + public Stream() { + } + + public Stream(byte abyte0[]) { + buffer = abyte0; + currentOffset = 0; + } + + public long readQWord2() { + final long l = readDWord() & 0xffffffffL; + final long l1 = readDWord() & 0xffffffffL; + return (l << 32) + l1; + } + + public byte readSignedByteA() { + return (byte) (buffer[currentOffset++] - 128); + } + + public byte readSignedByteC() { + return (byte) -buffer[currentOffset++]; + } + + public byte readSignedByteS() { + return (byte) (128 - buffer[currentOffset++]); + } + + public int readUnsignedByteA() { + return buffer[currentOffset++] - 128 & 0xff; + } + + public int readUnsignedByteC() { + return -buffer[currentOffset++] & 0xff; + } + + public int readUnsignedByteS() { + return 128 - buffer[currentOffset++] & 0xff; + } + + public void writeByteA(int i) { + ensureCapacity(1); + buffer[currentOffset++] = (byte) (i + 128); + } + + public void writeByteS(int i) { + ensureCapacity(1); + buffer[currentOffset++] = (byte) (128 - i); + } + + public void writeByteC(int i) { + ensureCapacity(1); + buffer[currentOffset++] = (byte) -i; + } + + public int readSignedWordBigEndian() { + currentOffset += 2; + int i = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int readSignedWordA() { + currentOffset += 2; + int i = ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] - 128 & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int readSignedWordBigEndianA() { + currentOffset += 2; + int i = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int readUnsignedWordBigEndian() { + currentOffset += 2; + return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff); + } + + public int readUnsignedWordA() { + currentOffset += 2; + return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] - 128 & 0xff); + } + + public int readUnsignedWordBigEndianA() { + currentOffset += 2; + return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff); + } + + public void writeWordBigEndianA(int i) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) (i + 128); + buffer[currentOffset++] = (byte) (i >> 8); + } + + public void writeWordA(int i) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) (i + 128); + } + + public void writeWordBigEndian_dup(int i) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + } + + public int readDWord_v1() { + currentOffset += 4; + return ((buffer[currentOffset - 2] & 0xff) << 24) + + ((buffer[currentOffset - 1] & 0xff) << 16) + + ((buffer[currentOffset - 4] & 0xff) << 8) + + (buffer[currentOffset - 3] & 0xff); + } + + public int readDWord_v2() { + currentOffset += 4; + return ((buffer[currentOffset - 3] & 0xff) << 24) + + ((buffer[currentOffset - 4] & 0xff) << 16) + + ((buffer[currentOffset - 1] & 0xff) << 8) + + (buffer[currentOffset - 2] & 0xff); + } + + public void writeDWord_v1(int i) { + ensureCapacity(4); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 24); + buffer[currentOffset++] = (byte) (i >> 16); + } + + public void writeDWord_v2(int i) { + ensureCapacity(4); + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 24); + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + } + + public void readBytes_reverse(byte abyte0[], int i, int j) { + for (int k = j + i - 1; k >= j; k--) { + abyte0[k] = buffer[currentOffset++]; + } + + } + + public void writeBytes_reverse(byte abyte0[], int i, int j) { + ensureCapacity(i); + for (int k = j + i - 1; k >= j; k--) { + buffer[currentOffset++] = abyte0[k]; + } + + } + + public void readBytes_reverseA(byte abyte0[], int i, int j) { + ensureCapacity(i); + for (int k = j + i - 1; k >= j; k--) { + abyte0[k] = (byte) (buffer[currentOffset++] - 128); + } + + } + + public void writeBytes_reverseA(byte abyte0[], int i, int j) { + ensureCapacity(i); + for (int k = j + i - 1; k >= j; k--) { + buffer[currentOffset++] = (byte) (abyte0[k] + 128); + } + + } + + public void createFrame(int id) { + ensureCapacity(1); + buffer[currentOffset++] = (byte) (id + packetEncryption.getNextKey()); + } + + private static final int frameStackSize = 10; + private int frameStackPtr = -1; + private final int frameStack[] = new int[frameStackSize]; + + public void createFrameVarSize(int id) { + ensureCapacity(3); + buffer[currentOffset++] = (byte) (id + packetEncryption.getNextKey()); + buffer[currentOffset++] = 0; + if (frameStackPtr >= frameStackSize - 1) { + throw new RuntimeException("Stack overflow"); + } else { + frameStack[++frameStackPtr] = currentOffset; + } + } + + public void createFrameVarSizeWord(int id) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) (id + packetEncryption.getNextKey()); + writeWord(0); + if (frameStackPtr >= frameStackSize - 1) { + throw new RuntimeException("Stack overflow"); + } else { + frameStack[++frameStackPtr] = currentOffset; + } + } + + public void endFrameVarSize() { + if (frameStackPtr < 0) { + throw new RuntimeException("Stack empty"); + } else { + writeFrameSize(currentOffset - frameStack[frameStackPtr--]); + } + } + + public void endFrameVarSizeWord() { + if (frameStackPtr < 0) { + throw new RuntimeException("Stack empty"); + } else { + writeFrameSizeWord(currentOffset - frameStack[frameStackPtr--]); + } + } + + public void writeByte(int i) { + ensureCapacity(1); + buffer[currentOffset++] = (byte) i; + } + + public void writeWord(int i) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void writeWordBigEndian(int i) { + ensureCapacity(2); + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + } + + public void write3Byte(int i) { + ensureCapacity(3); + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void writeDWord(int i) { + ensureCapacity(4); + buffer[currentOffset++] = (byte) (i >> 24); + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) i; + } + + public void writeDWordBigEndian(int i) { + ensureCapacity(4); + buffer[currentOffset++] = (byte) i; + buffer[currentOffset++] = (byte) (i >> 8); + buffer[currentOffset++] = (byte) (i >> 16); + buffer[currentOffset++] = (byte) (i >> 24); + } + + public void writeQWord(long l) { + ensureCapacity(8); + buffer[currentOffset++] = (byte) (int) (l >> 56); + buffer[currentOffset++] = (byte) (int) (l >> 48); + buffer[currentOffset++] = (byte) (int) (l >> 40); + buffer[currentOffset++] = (byte) (int) (l >> 32); + buffer[currentOffset++] = (byte) (int) (l >> 24); + buffer[currentOffset++] = (byte) (int) (l >> 16); + buffer[currentOffset++] = (byte) (int) (l >> 8); + buffer[currentOffset++] = (byte) (int) l; + } + + public void writeString(java.lang.String s) { + ensureCapacity(s.length()); + System.arraycopy(s.getBytes(), 0, buffer, currentOffset, s.length()); + currentOffset += s.length(); + buffer[currentOffset++] = 10; + } + + public void writeBytes(byte abyte0[], int i, int j) { + ensureCapacity(i); + for (int k = j; k < j + i; k++) { + buffer[currentOffset++] = abyte0[k]; + } + } + + public void writeFrameSize(int i) { + buffer[currentOffset - i - 1] = (byte) i; + } + + public void writeFrameSizeWord(int i) { + buffer[currentOffset - i - 2] = (byte) (i >> 8); + buffer[currentOffset - i - 1] = (byte) i; + } + + public int readUnsignedByte() { + return buffer[currentOffset++] & 0xff; + } + + public byte readSignedByte() { + return buffer[currentOffset++]; + } + + public int readUnsignedWord() { + currentOffset += 2; + return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + } + + public int readSignedWord() { + currentOffset += 2; + int i = ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int readDWord() { + currentOffset += 4; + return ((buffer[currentOffset - 4] & 0xff) << 24) + + ((buffer[currentOffset - 3] & 0xff) << 16) + + ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 1] & 0xff); + } + + public long readQWord() { + long l = readDWord() & 0xffffffffL; + long l1 = readDWord() & 0xffffffffL; + return (l << 32) + l1; + } + + public java.lang.String readString() { + int i = currentOffset; + while (buffer[currentOffset++] != 10) { + ; + } + return new String(buffer, i, currentOffset - i - 1); + } + + public void readBytes(byte abyte0[], int i, int j) { + for (int k = j; k < j + i; k++) { + abyte0[k] = buffer[currentOffset++]; + } + + } + + public void initBitAccess() { + bitPosition = currentOffset * 8; + } + + public void writeBits(int numBits, int value) { + ensureCapacity((int) Math.ceil(numBits * 8) * 4); + int bytePos = bitPosition >> 3; + int bitOffset = 8 - (bitPosition & 7); + bitPosition += numBits; + + for (; numBits > bitOffset; bitOffset = 8) { + buffer[bytePos] &= ~bitMaskOut[bitOffset]; + buffer[bytePos++] |= value >> numBits - bitOffset + & bitMaskOut[bitOffset]; + + numBits -= bitOffset; + } + if (numBits == bitOffset) { + buffer[bytePos] &= ~bitMaskOut[bitOffset]; + buffer[bytePos] |= value & bitMaskOut[bitOffset]; + } else { + buffer[bytePos] &= ~(bitMaskOut[numBits] << bitOffset - numBits); + buffer[bytePos] |= (value & bitMaskOut[numBits]) << bitOffset + - numBits; + } + } + + public void finishBitAccess() { + currentOffset = (bitPosition + 7) / 8; + } + + public byte buffer[] = null; + public int currentOffset = 0; + public int bitPosition = 0; + + public static int bitMaskOut[] = new int[32]; + static { + for (int i = 0; i < 32; i++) { + bitMaskOut[i] = (1 << i) - 1; + } + } + + public void ensureCapacity(int len) { + if (currentOffset + len + 1 >= buffer.length) { + byte[] oldBuffer = buffer; + int newLength = buffer.length * 2; + buffer = new byte[newLength]; + System.arraycopy(oldBuffer, 0, buffer, 0, oldBuffer.length); + ensureCapacity(len); + } + } + + public void reset() { + if (!(currentOffset > Constants.BUFFER_SIZE)) { + byte[] oldBuffer = buffer; + buffer = new byte[Constants.BUFFER_SIZE]; + for (int i = 0; i < currentOffset; i++) { + buffer[i] = oldBuffer[i]; + } + } + } + + public ISAACRandomGen packetEncryption = null; + +} diff --git a/2006Redone Server/src/redone/world/Clan.java b/2006Redone Server/src/redone/world/Clan.java new file mode 100644 index 00000000..678c709b --- /dev/null +++ b/2006Redone Server/src/redone/world/Clan.java @@ -0,0 +1,20 @@ +package redone.world; + +import redone.game.players.Client; + +/** + * @author Sanity + */ + +public class Clan { + + public Clan(Client player, String name) { + this.owner = player.playerName; + this.name = name; + } + + public int[] members = new int[50]; + public String name; + public String owner; + public boolean lootshare; +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/world/ClanChatHandler.java b/2006Redone Server/src/redone/world/ClanChatHandler.java new file mode 100644 index 00000000..16fe8e08 --- /dev/null +++ b/2006Redone Server/src/redone/world/ClanChatHandler.java @@ -0,0 +1,206 @@ +package redone.world; + +import redone.Connection; +import redone.game.items.Item; +import redone.game.players.Client; +import redone.game.players.PlayerHandler; + +/** + * @author Sanity + */ + +public class ClanChatHandler { + + public ClanChatHandler() { + + } + + public Clan[] clans = new Clan[100]; + + public void handleClanChat(Client player, String name) { + for (int j = 0; j < clans.length; j++) { + if (clans[j] != null) { + if (clans[j].name.equalsIgnoreCase(name)) { + addToClan(player.playerId, j); + return; + } + } + } + makeClan(player, name); + } + + public void makeClan(Client player, String name) { + if (openClan() >= 0) { + if (validName(name)) { + player.clanId = openClan(); + clans[player.clanId] = new Clan(player, name); + addToClan(player.playerId, player.clanId); + } else { + player.getActionSender().sendMessage("A clan with this name already exists."); + } + } else { + player.getActionSender().sendMessage("Your clan chat request could not be completed."); + } + } + + public void updateClanChat(int clanId) { + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] <= 0) + continue; + if (PlayerHandler.players[clans[clanId].members[j]] != null) { + Client c = (Client) PlayerHandler.players[clans[clanId].members[j]]; + c.getPlayerAssistant().sendFrame126("Talking in: " + clans[clanId].name, + 18139); + c.getPlayerAssistant().sendFrame126("Owner: " + clans[clanId].owner, 18140); + int slotToFill = 18144; + for (int i = 0; i < clans[clanId].members.length; i++) { + if (clans[clanId].members[i] > 0) { + if (PlayerHandler.players[clans[clanId].members[i]] != null) { + c.getPlayerAssistant().sendFrame126(PlayerHandler.players[clans[clanId].members[i]].playerName, slotToFill); + slotToFill++; + } + } + } + for (int k = slotToFill; k < 18244; k++) + c.getPlayerAssistant().sendFrame126("", k); + } + } + } + + public int openClan() { + for (int j = 0; j < clans.length; j++) { + if (clans[j] == null || clans[j].owner == "") + return j; + } + return -1; + } + + public boolean validName(String name) { + for (int j = 0; j < clans.length; j++) { + if (clans[j] != null) { + if (clans[j].name.equalsIgnoreCase(name)) + return false; + } + } + return true; + } + + public void addToClan(int playerId, int clanId) { + if (clans[clanId] != null) { + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] <= 0) { + clans[clanId].members[j] = playerId; + PlayerHandler.players[playerId].clanId = clanId; + // c.getActionSender().sendMessage("You have joined the clan chat: " + + // clans[clanId].name); + messageToClan( + PlayerHandler.players[playerId].playerName + + " has joined the channel.", clanId); + updateClanChat(clanId); + return; + } + } + } + } + + public void leaveClan(int playerId, int clanId) { + if (clanId < 0) { + Client c = (Client) PlayerHandler.players[playerId]; + c.getActionSender().sendMessage("You are not in a clan."); + return; + } + if (clans[clanId] != null) { + if (PlayerHandler.players[playerId].playerName + .equalsIgnoreCase(clans[clanId].owner)) { + messageToClan("The clan has been deleted by the owner.", clanId); + destructClan(PlayerHandler.players[playerId].clanId); + return; + } + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] == playerId) { + clans[clanId].members[j] = -1; + } + } + if (PlayerHandler.players[playerId] != null) { + Client c = (Client) PlayerHandler.players[playerId]; + PlayerHandler.players[playerId].clanId = -1; + c.getActionSender().sendMessage("You have left the clan."); + c.getPlayerAssistant().clearClanChat(); + } + updateClanChat(clanId); + } else { + Client c = (Client) PlayerHandler.players[playerId]; + PlayerHandler.players[playerId].clanId = -1; + c.getActionSender().sendMessage("You are not in a clan."); + } + } + + public void destructClan(int clanId) { + if (clanId < 0) + return; + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clanId < 0) + continue; + if (clans[clanId].members[j] <= 0) + continue; + if (PlayerHandler.players[clans[clanId].members[j]] != null) { + Client c = (Client) PlayerHandler.players[clans[clanId].members[j]]; + c.clanId = -1; + c.getPlayerAssistant().clearClanChat(); + } + } + clans[clanId].members = new int[50]; + clans[clanId].owner = ""; + clans[clanId].name = ""; + } + + public void messageToClan(String message, int clanId) { + if (clanId < 0) + return; + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] < 0) + continue; + if (PlayerHandler.players[clans[clanId].members[j]] != null) { + Client c = (Client) PlayerHandler.players[clans[clanId].members[j]]; + c.getActionSender().sendMessage("@red@" + message); + } + } + } + + public void playerMessageToClan(Client c, int playerId, String message, int clanId) { + if (Connection.isMuted(c)) { + return; + } + if (clanId < 0) + return; + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] <= 0) + continue; + if (PlayerHandler.players[clans[clanId].members[j]] != null) { + c = (Client) PlayerHandler.players[clans[clanId].members[j]]; + c.getActionSender().sendClan(PlayerHandler.players[playerId].playerName, + message, clans[clanId].name, + PlayerHandler.players[playerId].playerRights); + } + } + } + + public void sendLootShareMessage(int clanId, String message) { + if (clanId >= 0) { + for (int j = 0; j < clans[clanId].members.length; j++) { + if (clans[clanId].members[j] <= 0) + continue; + if (PlayerHandler.players[clans[clanId].members[j]] != null) { + Client c = (Client) PlayerHandler.players[clans[clanId].members[j]]; + c.getActionSender().sendClan("Lootshare", message, clans[clanId].name, 2); + } + } + } + } + + public void handleLootShare(Client c, int item, int amount) { + sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + + "x " + Item.getItemName(item) + "."); + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/world/GameObject.java b/2006Redone Server/src/redone/world/GameObject.java new file mode 100644 index 00000000..84a33ae1 --- /dev/null +++ b/2006Redone Server/src/redone/world/GameObject.java @@ -0,0 +1,38 @@ +package redone.world; + +public final class GameObject { + + private final int id; + private final int type; + private final int x; + private final int y; + private final int face; + + public GameObject(int id, int type, int x, int y, int face) { + this.id = id; + this.type = type; + this.x = x; + this.y = y; + this.face = face; + } + + public int id() { + return id; + } + + public int type() { + return type; + } + + public int x() { + return x; + } + + public int y() { + return y; + } + + public int getFace() { + return face; + } +} diff --git a/2006Redone Server/src/redone/world/GlobalDropsHandler.java b/2006Redone Server/src/redone/world/GlobalDropsHandler.java new file mode 100644 index 00000000..21448565 --- /dev/null +++ b/2006Redone Server/src/redone/world/GlobalDropsHandler.java @@ -0,0 +1,284 @@ +package redone.world; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; + +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +/** + * Handles global drops which respawn after set amount of time when taken + * + * @author Stuart + */ +public class GlobalDropsHandler { + + /** + * time in seconds it takes for the item to respawn + */ + private static final int TIME_TO_RESPAWN = 30; + + /** + * holds all the objects + */ + private static List globalDrops = new ArrayList(); + + /** + * loads the items + */ + public static void initialize() { + String Data; + BufferedReader Checker; + try { + Checker = new BufferedReader(new FileReader( + "./Data/cfg/globaldrops.txt")); + while ((Data = Checker.readLine()) != null) { + if (Data.startsWith("#")) { + continue; + } + String[] args = Data.split(":"); + globalDrops.add(new GlobalDrop(Integer.parseInt(args[0]), + Integer.parseInt(args[1]), Integer.parseInt(args[2]), + Integer.parseInt(args[3]))); + } + Checker.close(); + } catch (Exception e) { + e.printStackTrace(); + } + Misc.println("Loaded " + globalDrops.size() + " global drops."); + + for (Player player : PlayerHandler.players) { + final Client client = (Client) player; + if (client != null) { + CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + for (GlobalDrop drop : globalDrops) { + if (drop.isTaken()) { + if (System.currentTimeMillis() - drop.getTakenAt() >= TIME_TO_RESPAWN * 1000) { + drop.setTaken(false); + if (client.distanceToPoint(drop.getX(), drop.getY()) <= 60) { + client.getActionSender().createGroundItem(drop.getId(), drop.getX(), drop.getY(), drop.getAmount(), 0); + } + } + } + } + } + @Override + public void stop() { + // TODO Auto-generated method stub + } + }, 1); + } + } + } + + /** + * See if a drop exists at the given place + * + * @param a + * item id + * @param b + * x cord + * @param c + * y cord + * @return return the statement + */ + private static GlobalDrop itemExists(int a, int b, int c) { + for (GlobalDrop drop : globalDrops) { + if (drop.getId() == a && drop.getX() == b && drop.getY() == c) { + return drop; + } + } + return null; + } + + /** + * Pick up an item at the given location + * + * @param client + * the client + * @param a + * item id + * @param b + * cord x + * @param c + * cord y + */ + public static void pickup(Client client, int a, int b, int c) { + GlobalDrop drop = itemExists(a, b, c); + if (drop == null) { + return; + } + if (drop.isTaken()) { + return; + } + drop.setTakenAt(System.currentTimeMillis()); + drop.setTaken(true); + if (client.getItemAssistant().freeSlots() > 0) { + client.getItemAssistant().addItem(drop.getId(), drop.getAmount()); + } + // TODO use the region manager for this... + for (Player player : PlayerHandler.players) { + Client cl = (Client) player; + if (cl != null) { + if (cl.distanceToPoint(drop.getX(), drop.getY()) <= 60) { + // cl.getItems().removeGroundItem(drop.getId(), drop.getX(), + // drop.getY(), drop.getAmount()); + cl.getActionSender().removeGroundItem(drop.getId(), drop.getX(), drop.getY(), drop.getAmount()); + } + } + } + } + + /** + * Loads all the items when a player changes region + * + * @param client + * the client + */ + public static void load(Client client) { + for (GlobalDrop drop : globalDrops) { + if (!drop.isTaken()) { + if (client.distanceToPoint(drop.getX(), drop.getY()) <= 60) { + client.getActionSender().createGroundItem(drop.getId(), drop.getX(), drop.getY(), drop.getAmount(), 0); + } + } + } + } + + /** + * Holds each drops data + * + * @author Stuart + */ + static class GlobalDrop { + + /** + * cord x + */ + int x; + /** + * cord y + */ + int y; + /** + * item id + */ + int id; + /** + * item amount + */ + int amount; + /** + * has the item been taken + */ + boolean taken = false; + /** + * Time it was taken at + */ + long takenAt; + + /** + * Sets the drop arguments + * + * @param a + * item id + * @param b + * item amount + * @param c + * cord x + * @param d + * cord y + */ + public GlobalDrop(int a, int b, int c, int d) { + id = a; + amount = b; + x = c; + y = d; + } + + /** + * get cord x + * + * @return return the statement + */ + public int getX() { + return x; + } + + /** + * get cord x + * + * @return return the statement + */ + public int getY() { + return y; + } + + /** + * get the item id + * + * @return return the statement + */ + public int getId() { + return id; + } + + /** + * get the item amount + * + * @return return the statement + */ + public int getAmount() { + return amount; + } + + /** + * has the drop already been taken? + * + * @return return the statement + */ + public boolean isTaken() { + return taken; + } + + /** + * set if or not the drop has been taken + * + * @param a + * true yes false no + */ + public void setTaken(boolean a) { + taken = a; + } + + /** + * set the time it was picked up + * + * @param a + * the a + */ + public void setTakenAt(long a) { + takenAt = a; + } + + /** + * get the time it was taken at + * + * @return return the statement + */ + public long getTakenAt() { + return takenAt; + } + + } + +} diff --git a/2006Redone Server/src/redone/world/ItemHandler.java b/2006Redone Server/src/redone/world/ItemHandler.java new file mode 100644 index 00000000..fd524c00 --- /dev/null +++ b/2006Redone Server/src/redone/world/ItemHandler.java @@ -0,0 +1,435 @@ +package redone.world; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import redone.Constants; +import redone.game.items.GroundItem; +import redone.game.items.ItemAssistant; +import redone.game.items.ItemList; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.GameLogger; +import redone.util.Misc; + +/** + * Handles ground items + **/ + +public class ItemHandler { + + public List items = new ArrayList(); + public static final int HIDE_TICKS = 100; + + public ItemHandler() { + for (int i = 0; i < Constants.ITEM_LIMIT; i++) { + ItemList[i] = null; + } + loadItemList("item.cfg"); + loadItemPrices("prices.txt"); + } + + /** + * Adds item to list + **/ + public void addItem(GroundItem item) { + items.add(item); + } + + /** + * Removes item from list + **/ + public void removeItem(GroundItem item) { + items.remove(item); + } + + /** + * Item amount + **/ + +public int itemAmount(String name, int itemId, int itemX, int itemY) { + for(GroundItem i : items) { + if (i.hideTicks >= 1 && i.getName().equalsIgnoreCase(name)) { + if(i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) { + return i.getItemAmount(); + } + } else if (i.hideTicks < 1) { + if(i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) { + return i.getItemAmount(); + } + } + } + return 0; + } + /** + * Item exists + **/ + public boolean itemExists(int itemId, int itemX, int itemY) { + for (GroundItem i : items) { + if (i.getItemId() == itemId && i.getItemX() == itemX + && i.getItemY() == itemY) { + return true; + } + } + return false; + } + + /** + * Reloads any items if you enter a new region + **/ + public void reloadItems(Client c) { + for (GroundItem i : items) { + if (c != null) { + if (c.getItemAssistant().tradeable(i.getItemId()) + || i.getName().equalsIgnoreCase(c.playerName)) { + if (c.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) { + if (i.hideTicks > 0 + && i.getName().equalsIgnoreCase(c.playerName)) { + c.getActionSender().removeGroundItem( + i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + c.getActionSender().createGroundItem( + i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + } + if (i.hideTicks == 0) { + c.getActionSender().removeGroundItem( + i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + c.getActionSender().createGroundItem( + i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + } + } + } + } + } + } + + public void process() { + ArrayList toRemove = new ArrayList(); + for (int j = 0; j < items.size(); j++) { + if (items.get(j) != null) { + GroundItem i = items.get(j); + if (i.hideTicks > 0) { + i.hideTicks--; + } + if (i.hideTicks == 1) { // item can now be seen by others + i.hideTicks = 0; + createGlobalItem(i); + i.removeTicks = HIDE_TICKS; + } + if (i.removeTicks > 0) { + i.removeTicks--; + } + if (i.removeTicks == 1) { + i.removeTicks = 0; + toRemove.add(i); + } + + } + + } + + for (int j = 0; j < toRemove.size(); j++) { + GroundItem i = toRemove.get(j); + removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + } + } + + /** + * Creates the ground item + **/ + public int[][] brokenBarrows = { { 4708, 4860 }, { 4710, 4866 }, + { 4712, 4872 }, { 4714, 4878 }, { 4716, 4884 }, { 4720, 4896 }, + { 4718, 4890 }, { 4720, 4896 }, { 4722, 4902 }, { 4732, 4932 }, + { 4734, 4938 }, { 4736, 4944 }, { 4738, 4950 }, { 4724, 4908 }, + { 4726, 4914 }, { 4728, 4920 }, { 4730, 4926 }, { 4745, 4956 }, + { 4747, 4926 }, { 4749, 4968 }, { 4751, 4994 }, { 4753, 4980 }, + { 4755, 4986 }, { 4757, 4992 }, { 4759, 4998 } }; + + public void createGroundItem(Client player, int itemId, int itemX, int itemY, int itemAmount, int playerId) { + if (itemId > 0) { + if (itemId >= 2412 && itemId <= 2414) { + player.getActionSender().sendMessage("The cape vanishes as it touches the ground."); + return; + } + if (itemId > 4705 && itemId < 4760) { + for (int[] brokenBarrow : brokenBarrows) { + if (brokenBarrow[0] == itemId) { + itemId = brokenBarrow[1]; + break; + } + } + } + if (player.isDead == false) { + return; + } + if (!redone.game.items.Item.itemStackable[itemId] && itemAmount > 0) { + for (int j = 0; j < itemAmount; j++) { + player.getActionSender().createGroundItem(itemId, itemX, itemY, 1); + GroundItem item = new GroundItem(itemId, itemX, itemY, player.getH(), 1, player.playerId, HIDE_TICKS, PlayerHandler.players[playerId].playerName); + addItem(item); + String itemName = ItemAssistant.getItemName(itemId).toLowerCase(); + if (player.isDead == false && itemId != 526) { + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "dropitem", player.playerName + " dropped " + itemAmount + " " + itemName + " absX: " + player.absX + " absY: " + player.absY + ""); + } + } + } + } else { + player.getActionSender().createGroundItem(itemId, itemX, itemY, itemAmount); + GroundItem item = new GroundItem(itemId, itemX, itemY, player.getH(), itemAmount, player.playerId, HIDE_TICKS, PlayerHandler.players[playerId].playerName); + addItem(item); + String itemName = ItemAssistant.getItemName(itemId).toLowerCase(); + if (player.isDead == false && itemId != 526) { + if (player.getPlayerAssistant().isPlayer()) { + GameLogger.writeLog(player.playerName, "dropitem", player.playerName + " dropped " + itemAmount + " " + itemName + " absX: " + player.absX + " absY: " + player.absY + ""); + } + } + } + } + } + + /** + * Shows items for everyone who is within 60 squares + **/ + public void createGlobalItem(GroundItem i) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.playerId != i.getItemController()) { + if (!person.getItemAssistant().tradeable(i.getItemId()) + && person.playerId != i.getItemController()) { + continue; + } + if (person.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) { + person.getActionSender().createGroundItem( + i.getItemId(), i.getItemX(), i.getItemY(), + i.getItemAmount()); + } + } + } + } + } + } + + /** + * Removing the ground item + **/ + + public void removeGroundItem(Client c, int itemId, int itemX, int itemY, boolean add) { + for (GroundItem i : items) { + if (i.getItemId() == itemId && i.getItemX() == itemX + && i.getItemY() == itemY) { + if (i.hideTicks > 0 + && i.getName().equalsIgnoreCase(c.playerName)) { + if (add) { + if (!c.getItemAssistant().specialCase(itemId)) { + if (c.getItemAssistant().addItem(i.getItemId(), + i.getItemAmount())) { + removeControllersItem(i, c, i.getItemId(), + i.getItemX(), i.getItemY(), + i.getItemAmount()); + break; + } + } else { + removeControllersItem(i, c, i.getItemId(), + i.getItemX(), i.getItemY(), + i.getItemAmount()); + break; + } + } else { + removeControllersItem(i, c, i.getItemId(), + i.getItemX(), i.getItemY(), i.getItemAmount()); + break; + } + } else if (i.hideTicks <= 0) { + if (add) { + if (c.getItemAssistant().addItem(i.getItemId(), + i.getItemAmount())) { + removeGlobalItem(i, i.getItemId(), i.getItemX(), + i.getItemY(), i.getItemAmount()); + break; + } + } else { + removeGlobalItem(i, i.getItemId(), i.getItemX(), + i.getItemY(), i.getItemAmount()); + break; + } + } + } + } + } + + /** + * Remove item for just the item controller (item not global yet) + **/ + + public void removeControllersItem(GroundItem i, Client c, int itemId, + int itemX, int itemY, int itemAmount) { + c.getActionSender().removeGroundItem(itemId, itemX, itemY, + itemAmount); + removeItem(i); + } + + /** + * Remove item for everyone within 60 squares + **/ + + public void removeGlobalItem(GroundItem i, int itemId, int itemX, + int itemY, int itemAmount) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.distanceToPoint(itemX, itemY) <= 60) { + person.getActionSender().removeGroundItem(itemId, + itemX, itemY, itemAmount); + } + } + } + } + removeItem(i); + } + + /** + * Item List + **/ + + public ItemList ItemList[] = new ItemList[Constants.ITEM_LIMIT]; + + public void newItemList(int ItemId, String ItemName, + String ItemDescription, double ShopValue, double LowAlch, + double HighAlch, int Bonuses[]) { + // first, search for a free slot + int slot = -1; + for (int i = 0; i < 11740; i++) { + if (ItemList[i] == null) { + slot = i; + break; + } + } + + if (slot == -1) { + return; // no free slot found + } + ItemList newItemList = new ItemList(ItemId); + newItemList.itemName = ItemName; + newItemList.itemDescription = ItemDescription; + newItemList.ShopValue = ShopValue; + newItemList.LowAlch = LowAlch; + newItemList.HighAlch = HighAlch; + newItemList.Bonuses = Bonuses; + ItemList[slot] = newItemList; + } + + public void loadItemPrices(String filename) { + try { + @SuppressWarnings("resource") + Scanner s = new Scanner(new File("./data/cfg/" + filename)); + while (s.hasNextLine()) { + String[] line = s.nextLine().split(" "); + ItemList temp = getItemList(Integer.parseInt(line[0])); + if (temp != null) { + temp.ShopValue = Integer.parseInt(line[1]); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public ItemList getItemList(int i) { + for (redone.game.items.ItemList element : ItemList) { + if (element != null) { + if (element.itemId == i) { + return element; + } + } + } + return null; + } + + public boolean loadItemList(String FileName) { + String line = ""; + String token = ""; + String token2 = ""; + String token2_2 = ""; + String[] token3 = new String[10]; + boolean EndOfFile = false; + BufferedReader characterfile = null; + try { + characterfile = new BufferedReader(new FileReader("./Data/cfg/" + + FileName)); + } catch (FileNotFoundException fileex) { + Misc.println(FileName + ": file not found."); + return false; + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception) { + Misc.println(FileName + ": error loading file."); + // return false; + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token2_2 = token2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token3 = token2_2.split("\t"); + if (token.equals("item")) { + int[] Bonuses = new int[12]; + for (int i = 0; i < 12; i++) { + if (token3[6 + i] != null) { + Bonuses[i] = Integer.parseInt(token3[6 + i]); + } else { + break; + } + } + newItemList(Integer.parseInt(token3[0]), + token3[1].replaceAll("_", " "), + token3[2].replaceAll("_", " "), + Double.parseDouble(token3[4]), + Double.parseDouble(token3[4]), + Double.parseDouble(token3[6]), Bonuses); + } + } else { + if (line.equals("[ENDOFITEMLIST]")) { + try { + characterfile.close(); + } catch (IOException ioexception) { + } + //return true; + } + } + try { + line = characterfile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + characterfile.close(); + } catch (IOException ioexception) { + } + return false; + } +} diff --git a/2006Redone Server/src/redone/world/ObjectHandler.java b/2006Redone Server/src/redone/world/ObjectHandler.java new file mode 100644 index 00000000..ef604144 --- /dev/null +++ b/2006Redone Server/src/redone/world/ObjectHandler.java @@ -0,0 +1,353 @@ +package redone.world; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import redone.Server; +import redone.game.content.skills.core.Mining; +import redone.game.content.skills.core.Woodcutting; +import redone.game.objects.Objects; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; + +/** + * @author Sanity + */ + +public class ObjectHandler { + + public List globalObjects = new ArrayList(); + + public static List mapObjects = new ArrayList(); + public static List removedObjects = new ArrayList(); + + public ObjectHandler() { + loadGlobalObjects("./Data/cfg/global-objects.cfg"); + // Ladders.loadGlobalLadders("./Data/Ladders/AdvancedLadders.cfg"); + } + + public Objects getObjectByPosition(int x, int y) { + for (Objects o : globalObjects) { + for(int j = 0; j < globalObjects.size(); j++) { + globalObjects.get(j); + globalObjects.get(j); + if(o.objectX == x && o.objectY == y) { + return globalObjects.get(j); + } + } + } + return null; + } + + public void createAnObject(int id, int x, int y, int face) { + Objects OBJECT = new Objects(id, x, y, 0, face, 10, 0); + if (id == -1) { + removeObject(OBJECT); + } else { + addObject(OBJECT); + } + //Server.canLoadObjects = true; + Server.objectHandler.placeObject(OBJECT); + } + + + public void createAnObject(Client c, int id, int x, int y) { + Objects OBJECT = new Objects(id, x, y, c.heightLevel, 0, 10, 0); + if (id == -1) { + removeObject(OBJECT); + } else { + addObject(OBJECT); + } + Server.objectHandler.placeObject(OBJECT); + } + + public void createAnObject(Client c, int id, int x, int y, int face) { + Objects OBJECT = new Objects(id, x, y, 0, face, 10, 0); + if (id == -1) { + removeObject(OBJECT); + } else { + addObject(OBJECT); + } + Server.objectHandler.placeObject(OBJECT); + } + + public void createAnObject(int id, int x, int y) { + Objects OBJECT = new Objects(id, x, y, 0, 0, 10, 0); + if (id == -1) { + removeObject(OBJECT); + } else { + addObject(OBJECT); + } + Server.objectHandler.placeObject(OBJECT); + } + + /** + * Adds object to list + **/ + public void addObject(Objects object) { + globalObjects.add(object); + } + + /** + * Removes object from list + **/ + public void removeObject(Objects object) { + globalObjects.remove(object); + } + + /** + * Does object exist + **/ + public Objects objectExists(int objectX, int objectY, int objectHeight) { + for (Objects o : globalObjects) { + if (o.getObjectX() == objectX && o.getObjectY() == objectY + && o.getObjectHeight() == objectHeight) { + return o; + } + } + return null; + } + + /** + * Update objects when entering a new region or logging in + **/ + public void updateObjects(Client c) { + for (Objects o : globalObjects) { + if (c != null) { + if (c.heightLevel == 0 && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { + if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(c, o.getObjectId())) { + c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), 0, o.getObjectFace(), o.getObjectType()); + } + } + if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(c, o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { + c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), c.heightLevel, o.getObjectFace(), o.getObjectType()); + } + } + } + } + + /** + * Creates the object for anyone who is within 60 squares of the object + **/ + public void placeObject(Objects o) { + for (Player p : PlayerHandler.players) { + if (p != null) { + Client person = (Client) p; + if (person != null) { + if (person.heightLevel == o.getObjectHeight() + && o.objectTicks == 0) { + if (person.distanceToPoint(o.getObjectX(), + o.getObjectY()) <= 60) { + removeAllObjects(o); + globalObjects.add(o); + person.getActionSender().object( + o.getObjectId(), o.getObjectX(), + o.getObjectY(), o.getObjectFace(), + o.getObjectType()); + //Region.addObject(o.getObjectId(), o.getObjectX(), o.getObjectY(), o.getObjectHeight(), o.getObjectType(), o.getObjectFace(), true); + } + } + } + } + } + } + + public void removeAllObjects(Objects o) { + for (Objects s : globalObjects) { + if (o.getObjectX() == o.objectX && o.getObjectY() == o.objectY + && s.getObjectHeight() == o.getObjectHeight()) { + globalObjects.remove(s); + break; + } + } + } + + public void process() { + for (int j = 0; j < globalObjects.size(); j++) { + if (globalObjects.get(j) != null) { + Objects o = globalObjects.get(j); + if (o.objectTicks > 0) { + o.objectTicks--; + } + if (o.objectTicks == 1) { + Objects deleteObject = objectExists(o.getObjectX(), + o.getObjectY(), o.getObjectHeight()); + removeObject(deleteObject); + o.objectTicks = 0; + placeObject(o); + removeObject(o); + if (isObelisk(o.objectId)) { + int index = getObeliskIndex(o.objectId); + if (activated[index]) { + activated[index] = false; + teleportObelisk(index); + } + } + } + } + + } + } + + public boolean loadGlobalObjects(String fileName) { + String line = ""; + String token = ""; + String token2 = ""; + String token2_2 = ""; + String[] token3 = new String[10]; + boolean EndOfFile = false; + BufferedReader objectFile = null; + try { + objectFile = new BufferedReader(new FileReader("./" + fileName)); + } catch (FileNotFoundException fileex) { + Misc.println(fileName + ": file not found."); + return false; + } + try { + line = objectFile.readLine(); + } catch (IOException ioexception) { + Misc.println(fileName + ": error loading file."); + try { + objectFile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + while (EndOfFile == false && line != null) { + line = line.trim(); + int spot = line.indexOf("="); + if (spot > -1) { + token = line.substring(0, spot); + token = token.trim(); + token2 = line.substring(spot + 1); + token2 = token2.trim(); + token2_2 = token2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token2_2 = token2_2.replaceAll("\t\t", "\t"); + token3 = token2_2.split("\t"); + if (token.equals("object")) { + Objects object = new Objects(Integer.parseInt(token3[0]), + Integer.parseInt(token3[1]), + Integer.parseInt(token3[2]), + Integer.parseInt(token3[3]), + Integer.parseInt(token3[4]), + Integer.parseInt(token3[5]), 0); + addObject(object); + } + } else { + if (line.equals("[ENDOFOBJECTLIST]")) { + try { + objectFile.close(); + } catch (IOException ioexception) { + } + //return true; + } + } + try { + line = objectFile.readLine(); + } catch (IOException ioexception1) { + EndOfFile = true; + } + } + try { + objectFile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + + public final int IN_USE_ID = 14825; + + public boolean isObelisk(int id) { + for (int obeliskId : obeliskIds) { + if (obeliskId == id) { + return true; + } + } + return false; + } + + public int[] obeliskIds = { 14829, 14830, 111235, 14828, 14826, 14831 }; + public int[][] obeliskCoords = { { 3154, 3618 }, { 3225, 3665 }, + { 3033, 3730 }, { 3104, 3792 }, { 2978, 3864 }, { 3305, 3914 } }; + public boolean[] activated = { false, false, false, false, false, false }; + + public void startObelisk(int obeliskId) { + int index = getObeliskIndex(obeliskId); + if (index >= 0) { + if (!activated[index]) { + activated[index] = true; + Objects obby1 = new Objects(14825, obeliskCoords[index][0], + obeliskCoords[index][1], 0, -1, 10, 0); + Objects obby2 = new Objects(14825, obeliskCoords[index][0] + 4, + obeliskCoords[index][1], 0, -1, 10, 0); + Objects obby3 = new Objects(14825, obeliskCoords[index][0], + obeliskCoords[index][1] + 4, 0, -1, 10, 0); + Objects obby4 = new Objects(14825, obeliskCoords[index][0] + 4, + obeliskCoords[index][1] + 4, 0, -1, 10, 0); + addObject(obby1); + addObject(obby2); + addObject(obby3); + addObject(obby4); + Server.objectHandler.placeObject(obby1); + Server.objectHandler.placeObject(obby2); + Server.objectHandler.placeObject(obby3); + Server.objectHandler.placeObject(obby4); + Objects obby5 = new Objects(obeliskIds[index], + obeliskCoords[index][0], obeliskCoords[index][1], 0, + -1, 10, 10); + Objects obby6 = new Objects(obeliskIds[index], + obeliskCoords[index][0] + 4, obeliskCoords[index][1], + 0, -1, 10, 10); + Objects obby7 = new Objects(obeliskIds[index], + obeliskCoords[index][0], obeliskCoords[index][1] + 4, + 0, -1, 10, 10); + Objects obby8 = new Objects(obeliskIds[index], + obeliskCoords[index][0] + 4, + obeliskCoords[index][1] + 4, 0, -1, 10, 10); + addObject(obby5); + addObject(obby6); + addObject(obby7); + addObject(obby8); + } + } + } + + public int getObeliskIndex(int id) { + for (int j = 0; j < obeliskIds.length; j++) { + if (obeliskIds[j] == id) { + return j; + } + } + return -1; + } + + public void teleportObelisk(int port) { + int random = Misc.random(5); + while (random == port) { + random = Misc.random(5); + } + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + if (Misc.goodDistance(c.getX(), c.getY(), + obeliskCoords[port][0] + 2, obeliskCoords[port][1] + 2, + 1)) { + c.getPlayerAssistant().startTeleport( + obeliskCoords[random][0] + 2, + obeliskCoords[random][1] + 2, 0, "null"); + } + } + } + } +} diff --git a/2006Redone Server/src/redone/world/ObjectManager.java b/2006Redone Server/src/redone/world/ObjectManager.java new file mode 100644 index 00000000..e12d97d9 --- /dev/null +++ b/2006Redone Server/src/redone/world/ObjectManager.java @@ -0,0 +1,285 @@ +package redone.world; + +import java.util.ArrayList; + +import redone.Server; +import redone.event.CycleEvent; +import redone.event.CycleEventContainer; +import redone.event.CycleEventHandler; +import redone.game.content.quests.QuestAssistant; +import redone.game.globalworldobjects.DoubleGates; +import redone.game.objects.Object; +import redone.game.objects.Objects; +import redone.game.objects.impl.FlourMill; +import redone.game.players.Client; +import redone.game.players.Player; +import redone.game.players.PlayerHandler; +import redone.util.Misc; +import redone.world.clip.Region; + +/** + * @author Sanity + */ + +public class ObjectManager { + + public ArrayList objects = new ArrayList(); + private final ArrayList toRemove = new ArrayList(); + + public static void objectTicks(final Client player, final int objectId, final int objectX, final int objectY, final int objectH, final int face, final int objectType, int ticks) { + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + player.getActionSender().object(objectId, objectX, objectY, objectH, face, objectType); + container.stop(); + } + + @Override + public void stop() { + + } + }, ticks); + } + + public static void singleGateTicks(final Client player, final int objectId, final int objectX, final int objectY, final int x1, final int y1, final int objectH, final int face, int ticks) { + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (DoubleGates.gateAmount == 0) { + container.stop(); + return; + } + Server.objectHandler.placeObject(new Objects(-1, x1, y1, objectH, face, 0, 0)); + Server.objectHandler.placeObject(new Objects(objectId, objectX, objectY, objectH, face, 0, 0)); + container.stop(); + } + + @Override + public void stop() { + if (DoubleGates.gateAmount == 1) { + DoubleGates.gateAmount = 0; + } + } + }, ticks); + } + + public static void doubleGateTicks(final Client player, final int objectId, final int objectX, final int objectY, final int x1, final int y1, final int x2, final int y2, final int objectH, final int face, int ticks) { + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (DoubleGates.gateAmount == 0) { + container.stop(); + return; + } + Server.objectHandler.placeObject(new Objects(-1, x1, y1, objectH, face, 0, 0)); + Server.objectHandler.placeObject(new Objects(-1, x2, y2, objectH, face, 0, 0)); + Server.objectHandler.placeObject(new Objects(objectId, objectX, objectY, objectH, face, 0, 0)); + container.stop(); + } + + @Override + public void stop() { + if (DoubleGates.gateAmount == 2) { + DoubleGates.gateAmount = 1; + } else if (DoubleGates.gateAmount == 1) { + DoubleGates.gateAmount = 0; + } + } + }, ticks); + } + + + public boolean objectExists(final int x, final int y) { + for (Object o : objects) { + if (o.objectX == x && o.objectY == y) { + return true; + } + } + return false; + } + + public void process() { + for (final Object o : objects) { + if (o.tick > 0) { + o.tick--; + } else { + updateObject(o); + toRemove.add(o); + } + } + for (final Object o : toRemove) { + /*if (o.objectId == 2732) { + for (final Player player : PlayerHandler.players) { + if (player != null) { + final Client c = (Client) player; + Server.itemHandler.createGroundItem(c, 592, o.objectX, o.objectY, 1, c.playerId); + if (c.playerIsCooking) { + Cooking.resetCooking(c); + } + } + } + }*/ + if (isObelisk(o.newId)) { + final int index = getObeliskIndex(o.newId); + if (activated[index]) { + activated[index] = false; + teleportObelisk(index); + } + } + objects.remove(o); + } + toRemove.clear(); + } + + public void removeObject(int x, int y) { + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + c.getActionSender().object(-1, x, y, 0, 10); + } + } + } + + public void updateObject(Object o) { + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + c.getActionSender().object(o.newId, o.objectX, o.objectY, + o.face, o.type); + } + } + } + + public void placeObject(Object o) { + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + if (c.distanceToPoint(o.objectX, o.objectY) <= 60) { + c.getActionSender().object(o.objectId, o.objectX, + o.objectY, o.face, o.type); + } + } + } + } + + public Object getObject(int x, int y, int height) { + for (Object o : objects) { + if (o.objectX == x && o.objectY == y && o.height == height) { + return o; + } + } + return null; + } + + public void loadObjects(Client c) { + if (c == null) { + return; + } + for (Object o : objects) { + if (loadForPlayer(o, c)) { + c.getActionSender().object(o.objectId, o.objectX, o.objectY, o.face, o.type); + } + } + loadCustomSpawns(c); + } + + public void loadCustomSpawns(Client client) { + client.getActionSender().checkObjectSpawn(2474, 3233, 9312, 0, 10); + if (client.rope == true) { + client.getActionSender().object(3828, 3227, 3108, 0, 0, 10); + Region.addObject(3828, 3227, 3108, 0, 10, 0, false); + } + if (client.rope2 == true) { + client.getActionSender().object(3828, 3509, 9497, 2, 0, 10); + Region.addObject(3828, 3509, 9497, 2, 10, 0, false); + } + if (client.questPoints >= QuestAssistant.MAXIMUM_QUESTPOINTS) { + client.getActionSender().checkObjectSpawn(2403, 3219, 9623, 3, 10);// RFD + } else { + client.getActionSender().checkObjectSpawn(-1, 3219, 9623, 3, 10);// RFD + } + // CHEST + if (client.flourAmount > 0 && client.heightLevel == 0) { + client.getActionSender().checkObjectSpawn(FlourMill.FULL_FLOUR_BIN, 3166, 3306, 0, 10); + } + } + + public final int IN_USE_ID = 14825; + + public boolean isObelisk(int id) { + for (int obeliskId : obeliskIds) { + if (obeliskId == id) { + return true; + } + } + return false; + } + + public int[] obeliskIds = { 14829, 14830, 14827, 14828, 14826, 14831 }; + public int[][] obeliskCoords = { { 3154, 3618 }, { 3225, 3665 }, + { 3033, 3730 }, { 3104, 3792 }, { 2978, 3864 }, { 3305, 3914 } }; + public boolean[] activated = { false, false, false, false, false, false }; + + public void startObelisk(int obeliskId) { + int index = getObeliskIndex(obeliskId); + if (index >= 0) { + if (!activated[index]) { + activated[index] = true; + addObject(new Object(14825, obeliskCoords[index][0], + obeliskCoords[index][1], 0, -1, 10, obeliskId, 16)); + addObject(new Object(14825, obeliskCoords[index][0] + 4, + obeliskCoords[index][1], 0, -1, 10, obeliskId, 16)); + addObject(new Object(14825, obeliskCoords[index][0], + obeliskCoords[index][1] + 4, 0, -1, 10, obeliskId, 16)); + addObject(new Object(14825, obeliskCoords[index][0] + 4, + obeliskCoords[index][1] + 4, 0, -1, 10, obeliskId, 16)); + } + } + } + + public int getObeliskIndex(int id) { + for (int j = 0; j < obeliskIds.length; j++) { + if (obeliskIds[j] == id) { + return j; + } + } + return -1; + } + + public void teleportObelisk(int port) { + int random = Misc.random(5); + while (random == port) { + random = Misc.random(5); + } + for (Player player : PlayerHandler.players) { + if (player != null) { + Client c = (Client) player; + int xOffset = c.absX - obeliskCoords[port][0]; + int yOffset = c.absY - obeliskCoords[port][1]; + if (c.goodDistance(c.getX(), c.getY(), + obeliskCoords[port][0] + 2, obeliskCoords[port][1] + 2, + 1)) { + c.getPlayerAssistant().startTeleport2( + obeliskCoords[random][0] + xOffset, + obeliskCoords[random][1] + yOffset, 0); + } + } + } + } + + public boolean loadForPlayer(Object o, Client c) { + if (o == null || c == null) { + return false; + } + + return c.distanceToPoint(o.objectX, o.objectY) <= 60 && c.heightLevel == o.height; + } + + public void addObject(Object o) { + if (getObject(o.objectX, o.objectY, o.height) == null) { + objects.add(o); + placeObject(o); + } + } + +} diff --git a/2006Redone Server/src/redone/world/Tile.java b/2006Redone Server/src/redone/world/Tile.java new file mode 100644 index 00000000..82f6a489 --- /dev/null +++ b/2006Redone Server/src/redone/world/Tile.java @@ -0,0 +1,34 @@ +package redone.world; + +public class Tile { + + private int[] pointer = new int[3]; + + public Tile(int x, int y, int z) { + this.pointer[0] = x; + this.pointer[1] = y; + this.pointer[2] = z; + } + + public Tile(int x, int y) { + this.pointer[0] = x; + this.pointer[1] = y; + } + + public int[] getTile() { + return pointer; + } + + public int getTileX() { + return pointer[0]; + } + + public int getTileY() { + return pointer[1]; + } + + public int getTileHeight() { + return pointer[2]; + } + +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/world/TileControl.java b/2006Redone Server/src/redone/world/TileControl.java new file mode 100644 index 00000000..8b4a093f --- /dev/null +++ b/2006Redone Server/src/redone/world/TileControl.java @@ -0,0 +1,161 @@ +package redone.world; + +import redone.game.npcs.Npc; +import redone.game.npcs.NpcSize; +import redone.game.players.Client; + +public class TileControl { + + public static Tile generate(int x, int y, int z) { + return new Tile(x, y, z); + } + + public static Tile[] getTiles(Client client) { + + int size = 1, tileCount = 0; + + Tile[] tiles = new Tile[size * size]; + + if (tiles.length == 1) + tiles[0] = generate(client.absX, client.absY, client.heightLevel); + else { + for (int x = 0; x < size; x++) + for (int y = 0; y < size; y++) + tiles[tileCount++] = generate(client.absX + x, client.absY + y, client.heightLevel); + } + return tiles; + } + + public static Tile[] getTiles(Npc npc) { + + int size = 1, tileCount = 0; + + size = NpcSize.getNPCSize(npc.npcType); + Tile[] tiles = new Tile[size * size]; + + if (tiles.length == 1) + tiles[0] = generate(npc.absX, npc.absY, npc.heightLevel); + else { + for (int x = 0; x < size; x++) + for (int y = 0; y < size; y++) + tiles[tileCount++] = generate(npc.absX + x, npc.absY + y, npc.heightLevel); + } + return tiles; + } + + public static int calculateDistance(Client client, Client following) { + + Tile[] tiles = getTiles(client); + + int[] location = currentLocation(client); + int[] pointer = new int[tiles.length]; + + int lowestCount = 20, count = 0; + + for (Tile newTiles : tiles) { + if (newTiles.getTile() == location) + pointer[count++] = 0; + else + pointer[count++] = calculateDistance(newTiles, following); + } + for (int i = 0; i < pointer.length; i++) + if (pointer[i] < lowestCount) + lowestCount = pointer[i]; + + return lowestCount; + } + + public static int calculateDistance(Npc npc, Client following) { + + Tile[] tiles = getTiles(npc); + + int[] location = currentLocation(npc); + int[] pointer = new int[tiles.length]; + + int lowestCount = 20, count = 0; + + for (Tile newTiles : tiles) { + if (newTiles.getTile() == location) + pointer[count++] = 0; + else + pointer[count++] = calculateDistance(newTiles, following); + } + for (int i = 0; i < pointer.length; i++) + if (pointer[i] < lowestCount) + lowestCount = pointer[i]; + + return lowestCount; + } + + public static int calculateDistance(Client client, Npc npc) { + + Tile[] tiles = getTiles(client); + + int[] location = currentLocation(client); + int[] pointer = new int[tiles.length]; + + int lowestCount = 20, count = 0; + + for (Tile newTiles : tiles) { + if (newTiles.getTile() == location) + pointer[count++] = 0; + else + pointer[count++] = calculateDistance(newTiles, npc); + } + for (int i = 0; i < pointer.length; i++) + if (pointer[i] < lowestCount) + lowestCount = pointer[i]; + + return lowestCount; + } + + public static int calculateDistance(Tile location, Client other) { + int X = Math.abs(location.getTile()[0] - other.absX); + int Y = Math.abs(location.getTile()[1] - other.absY); + return X > Y ? X : Y; + } + + public static int calculateDistance(Tile location, Npc other) { + int X = Math.abs(location.getTile()[0] - other.absX); + int Y = Math.abs(location.getTile()[1] - other.absY); + return X > Y ? X : Y; + } + + public static int calculateDistance(int[] location, int[] other) { + int X = Math.abs(location[0] - other[0]); + int Y = Math.abs(location[1] - other[1]); + return X > Y ? X : Y; + } + + public static int[] currentLocation(Client client) { + int[] currentLocation = new int[3]; + if (client != null) { + currentLocation[0] = client.absX; + currentLocation[1] = client.absY; + currentLocation[2] = client.heightLevel; + } + return currentLocation; + } + + public static int[] currentLocation(Npc npc) { + int[] currentLocation = new int[3]; + if (npc != null) { + currentLocation[0] = npc.absX; + currentLocation[1] = npc.absY; + currentLocation[2] = npc.heightLevel; + } + return currentLocation; + } + + public static int[] currentLocation(Tile tileLocation) { + + int[] currentLocation = new int[3]; + + if (tileLocation != null) { + currentLocation[0] = tileLocation.getTile()[0]; + currentLocation[1] = tileLocation.getTile()[1]; + currentLocation[2] = tileLocation.getTile()[2]; + } + return currentLocation; + } +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/world/clip/ByteStream.java b/2006Redone Server/src/redone/world/clip/ByteStream.java new file mode 100644 index 00000000..fa19c34b --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/ByteStream.java @@ -0,0 +1,95 @@ +package redone.world.clip; + +public class ByteStream { + + private final byte[] buffer; + private int offset; + + public ByteStream(byte[] buffer) { + this.buffer = buffer; + offset = 0; + } + + public void skip(int length) { + offset += length; + } + + public void setOffset(int position) { + offset = position; + } + + public void setOffset(long position) { + offset = (int) position; + } + + public int length() { + return buffer.length; + } + + public byte getByte() { + return buffer[offset++]; + } + + public int getUByte() { + return buffer[offset++] & 0xff; + } + + public int getShort() { + int val = (getByte() << 8) + getByte(); + if (val > 32767) { + val -= 0x10000; + } + return val; + } + + public int getUShort() { + return (getUByte() << 8) + getUByte(); + } + + public int getInt() { + return (getUByte() << 24) + (getUByte() << 16) + (getUByte() << 8) + + getUByte(); + } + + public long getLong() { + return (getUByte() << 56) + (getUByte() << 48) + (getUByte() << 40) + + (getUByte() << 32) + (getUByte() << 24) + (getUByte() << 16) + + (getUByte() << 8) + getUByte(); + } + + public int getUSmart() { + int i = buffer[offset] & 0xff; + if (i < 128) { + return getUByte(); + } else { + return getUShort() - 32768; + } + } + + public String getNString() { + int i = offset; + while (buffer[offset++] != 0) { + ; + } + return new String(buffer, i, offset - i - 1); + } + + public byte[] getBytes() { + int i = offset; + while (buffer[offset++] != 10) { + ; + } + byte abyte0[] = new byte[offset - i - 1]; + System.arraycopy(buffer, i, abyte0, i - i, offset - 1 - i); + return abyte0; + } + + public byte[] read(int length) { + byte[] b = new byte[length]; + for (int i = 0; i < length; i++) { + b[i] = buffer[offset++]; + } + return b; + } + +} diff --git a/2006Redone Server/src/redone/world/clip/ByteStreamExt.java b/2006Redone Server/src/redone/world/clip/ByteStreamExt.java new file mode 100644 index 00000000..448a46ca --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/ByteStreamExt.java @@ -0,0 +1,102 @@ +package redone.world.clip; + +public final class ByteStreamExt { + + public void skip(int length) { + currentOffset += length; + } + + public ByteStreamExt(byte abyte0[]) { + buffer = abyte0; + currentOffset = 0; + } + + public int readUnsignedByte() { + return buffer[currentOffset++] & 0xff; + } + + public byte readSignedByte() { + return buffer[currentOffset++]; + } + + public int readUnsignedWord() { + currentOffset += 2; + return ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 1] & 0xff); + } + + public int readSignedWord() { + currentOffset += 2; + int i = ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 1] & 0xff); + if (i > 32767) { + i -= 0x10000; + } + return i; + } + + public int read3Bytes() { + currentOffset += 3; + return ((buffer[currentOffset - 3] & 0xff) << 16) + + ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 1] & 0xff); + } + + public int readR3Bytes() { + currentOffset += 3; + return ((buffer[currentOffset - 1] & 0xff) << 16) + + ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 3] & 0xff); + } + + public int readDWord() { + currentOffset += 4; + return ((buffer[currentOffset - 4] & 0xff) << 24) + + ((buffer[currentOffset - 3] & 0xff) << 16) + + ((buffer[currentOffset - 2] & 0xff) << 8) + + (buffer[currentOffset - 1] & 0xff); + } + + public long readQWord() { + long l = readDWord() & 0xffffffffL; + long l1 = readDWord() & 0xffffffffL; + return (l << 32) + l1; + } + + public String readString() { + int i = currentOffset; + while (buffer[currentOffset++] != 10) { + ; + } + return new String(buffer, i, currentOffset - i - 1); + } + + public String readNewString() { + int i = currentOffset; + while (buffer[currentOffset++] != 0) { + ; + } + return new String(buffer, i, currentOffset - i - 1); + } + + public byte[] readBytes() { + int i = currentOffset; + while (buffer[currentOffset++] != 10) { + ; + } + byte abyte0[] = new byte[currentOffset - i - 1]; + System.arraycopy(buffer, i, abyte0, i - i, currentOffset - 1 - i); + return abyte0; + } + + public void readBytes(int i, int j, byte abyte0[]) { + for (int l = j; l < j + i; l++) { + abyte0[l] = buffer[currentOffset++]; + } + } + + public byte buffer[]; + public int currentOffset; + + // removed useless static initializer +} diff --git a/2006Redone Server/src/redone/world/clip/MemoryArchive.java b/2006Redone Server/src/redone/world/clip/MemoryArchive.java new file mode 100644 index 00000000..dbe88a0e --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/MemoryArchive.java @@ -0,0 +1,35 @@ +package redone.world.clip; + +public class MemoryArchive { + + private final ByteStream cache; + private final ByteStream index; + private static final int INDEX_DATA_CHUNK_SIZE = 12; + + public MemoryArchive(ByteStream cache, ByteStream index) { + this.cache = cache; + this.index = index; + } + + public byte[] get(int dataIndex) { + try { + if (index.length() < dataIndex * INDEX_DATA_CHUNK_SIZE) { + return null; + } + index.setOffset(dataIndex * INDEX_DATA_CHUNK_SIZE); + long fileOffset = index.getLong(); + int fileSize = index.getInt(); + cache.setOffset(fileOffset); + byte[] buffer = cache.read(fileSize); + return buffer; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public int contentSize() { + return index.length() / 12; + } + +} diff --git a/2006Redone Server/src/redone/world/clip/ObjectDef.java b/2006Redone Server/src/redone/world/clip/ObjectDef.java new file mode 100644 index 00000000..3dc12f1d --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/ObjectDef.java @@ -0,0 +1,312 @@ +package redone.world.clip; + +public final class ObjectDef { + + public static ObjectDef getObjectDef(int i) { + for (int j = 0; j < 20; j++) { + if (cache[j].type == i) { + return cache[j]; + } + } + + cacheIndex = (cacheIndex + 1) % 20; + ObjectDef class46 = cache[cacheIndex]; + class46.type = i; + class46.setDefaults(); + byte[] buffer = archive.get(i); + if (buffer != null && buffer.length > 0) { + class46.readValues(new ByteStreamExt(buffer)); + } + return class46; + } + + private void setDefaults() { + anIntArray773 = null; + anIntArray776 = null; + name = null; + description = null; + modifiedModelColors = null; + originalModelColors = null; + anInt744 = 1; + anInt761 = 1; + aBoolean767 = true; + aBoolean757 = true; + hasActions = false; + aBoolean762 = false; + aBoolean764 = false; + anInt781 = -1; + anInt775 = 16; + actions = null; + anInt746 = -1; + anInt758 = -1; + aBoolean779 = true; + anInt768 = 0; + aBoolean736 = false; + anInt774 = -1; + anInt749 = -1; + childrenIDs = null; + } + + public static void loadConfig() { + archive = new MemoryArchive(new ByteStream(getBuffer("loc.dat")), + new ByteStream(getBuffer("loc.idx"))); + cache = new ObjectDef[20]; + for (int k = 0; k < 20; k++) { + cache[k] = new ObjectDef(); + } + System.out.println("[ObjectDef] DONE LOADING OBJECT CONFIGURATION"); + } + + public static byte[] getBuffer(String s) { + try { + java.io.File f = new java.io.File("./Data/world/object/" + s); + if (!f.exists()) { + return null; + } + byte[] buffer = new byte[(int) f.length()]; + java.io.DataInputStream dis = new java.io.DataInputStream( + new java.io.FileInputStream(f)); + dis.readFully(buffer); + dis.close(); + return buffer; + } catch (Exception e) { + } + return null; + } + + private void readValues(ByteStreamExt stream) { + int flag = -1; + do { + int type = stream.readUnsignedByte(); + if (type == 0) { + break; + } + if (type == 1) { + int len = stream.readUnsignedByte(); + if (len > 0) { + if (anIntArray773 == null || lowMem) { + anIntArray776 = new int[len]; + anIntArray773 = new int[len]; + for (int k1 = 0; k1 < len; k1++) { + anIntArray773[k1] = stream.readUnsignedWord(); + anIntArray776[k1] = stream.readUnsignedByte(); + } + } else { + stream.currentOffset += len * 3; + } + } + } else if (type == 2) { + name = stream.readNewString(); + } else if (type == 5) { + int len = stream.readUnsignedByte(); + if (len > 0) { + if (anIntArray773 == null || lowMem) { + anIntArray776 = null; + anIntArray773 = new int[len]; + for (int l1 = 0; l1 < len; l1++) { + anIntArray773[l1] = stream.readUnsignedWord(); + } + } else { + stream.currentOffset += len * 2; + } + } + } else if (type == 14) { + anInt744 = stream.readUnsignedByte(); + } else if (type == 15) { + anInt761 = stream.readUnsignedByte(); + } else if (type == 17) { + aBoolean767 = false; + } else if (type == 18) { + aBoolean757 = false; + } else if (type == 19) { + hasActions = stream.readUnsignedByte() == 1; + } else if (type == 21) { + aBoolean762 = true; + } else if (type == 22) { + } else if (type == 23) { + aBoolean764 = true; + } else if (type == 24) { + anInt781 = stream.readUnsignedWord(); + if (anInt781 == 65535) { + anInt781 = -1; + } + } else if (type == 27) { + continue; + } else if (type == 28) { + anInt775 = stream.readUnsignedByte(); + } else if (type == 29) { + stream.readSignedByte(); + } else if (type == 39) { + stream.readSignedByte(); + } else if (type >= 30 && type < 39) { + if (actions == null) { + actions = new String[5]; + } + actions[type - 30] = stream.readNewString(); + hasActions = true; + if (actions[type - 30].equalsIgnoreCase("hidden")) { + actions[type - 30] = null; + } + } else if (type == 40) { + int i1 = stream.readUnsignedByte(); + modifiedModelColors = new int[i1]; + originalModelColors = new int[i1]; + for (int i2 = 0; i2 < i1; i2++) { + modifiedModelColors[i2] = stream.readUnsignedWord(); + originalModelColors[i2] = stream.readUnsignedWord(); + } + + } else if (type == 41) { + int l = stream.readUnsignedByte(); + stream.skip(l * 4); + } else if (type == 42) { + int l = stream.readUnsignedByte(); + stream.skip(l); + } else if (type == 60) { + anInt746 = stream.readUnsignedWord(); + } else if (type == 62) { + } else if (type == 64) { + aBoolean779 = false; + } else if (type == 65) { + stream.readUnsignedWord(); + } else if (type == 66) { + stream.readUnsignedWord(); + } else if (type == 67) { + stream.readUnsignedWord(); + } else if (type == 68) { + anInt758 = stream.readUnsignedWord(); + } else if (type == 69) { + anInt768 = stream.readUnsignedByte(); + } else if (type == 70) { + stream.readSignedWord(); + } else if (type == 71) { + stream.readSignedWord(); + } else if (type == 72) { + stream.readSignedWord(); + } else if (type == 73) { + aBoolean736 = true; + } else if (type == 74) { + } else if (type == 75) { + stream.readUnsignedByte(); + } else if (type == 77 || type == 92) { + anInt774 = stream.readUnsignedWord(); + if (anInt774 == 65535) { + anInt774 = -1; + } + anInt749 = stream.readUnsignedWord(); + if (anInt749 == 65535) { + anInt749 = -1; + } + int endChild = -1; + if (type == 92) { + endChild = stream.readUnsignedWord(); + if (endChild == 65535) { + endChild = -1; + } + } + int j1 = stream.readUnsignedByte(); + childrenIDs = new int[j1 + 2]; + for (int j2 = 0; j2 <= j1; j2++) { + childrenIDs[j2] = stream.readUnsignedWord(); + if (childrenIDs[j2] == 65535) { + childrenIDs[j2] = -1; + } + } + childrenIDs[j1 + 1] = endChild; + } else if (type == 78) { + stream.skip(3); + } else if (type == 79) { + stream.skip(5); + int l = stream.readUnsignedByte(); + stream.skip(l * 2); + } else if (type == 81) { + stream.skip(1); + } else if (type == 82 || type == 88 || type == 89 || type == 90 + || type == 91 || type == 94 || type == 95 || type == 96 + || type == 97) { + continue; + } else if (type == 93) { + stream.skip(2); + } else if (type == 249) { + int l = stream.readUnsignedByte(); + for (int ii = 0; ii < l; ii++) { + boolean b = stream.readUnsignedByte() == 1; + stream.skip(3); + if (b) { + stream.readNewString(); + } else { + stream.skip(4); + } + } + } else { + System.out.println("Unknown config: " + type); + } + } while (true); + if (flag == -1) { + hasActions = anIntArray773 != null + && (anIntArray776 == null || anIntArray776[0] == 10); + if (actions != null) { + hasActions = true; + } + } + } + + private ObjectDef() { + type = -1; + } + + public boolean hasActions() { + return hasActions; + } + + public boolean hasName() { + return name != null && name.length() > 1; + } + + public boolean solid() { + return aBoolean779; + } + + public int xLength() { + return anInt744; + } + + public int yLength() { + return anInt761; + } + + public boolean aBoolean767() { + return aBoolean767; + } + + public boolean aBoolean736; + public String name; + public int anInt744; + public int anInt746; + private int[] originalModelColors; + public int anInt749; + public static boolean lowMem; + public int type; + public boolean aBoolean757; + public int anInt758; + public int childrenIDs[]; + public int anInt761; + public boolean aBoolean762; + public boolean aBoolean764; + public boolean aBoolean767; + public int anInt768; + private static int cacheIndex; + private int[] anIntArray773; + public int anInt774; + public int anInt775; + private int[] anIntArray776; + public byte description[]; + public boolean hasActions; + public boolean aBoolean779; + public int anInt781; + private static ObjectDef[] cache; + private int[] modifiedModelColors; + public String actions[]; + private static MemoryArchive archive; + +} diff --git a/2006Redone Server/src/redone/world/clip/PathFinder.java b/2006Redone Server/src/redone/world/clip/PathFinder.java new file mode 100644 index 00000000..aceddf5c --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/PathFinder.java @@ -0,0 +1,216 @@ +package redone.world.clip; + +import java.util.LinkedList; + +import redone.game.players.Client; + +public class PathFinder { + + private static final PathFinder pathFinder = new PathFinder(); + + public static PathFinder getPathFinder() { + return pathFinder; + } + + public PathFinder() { + } + + public void findRoute(Client c, int destX, int destY, boolean moveNear, + int xLength, int yLength) { + if (destX == c.getLocalX() && destY == c.getLocalY() && !moveNear) { + c.getActionSender().sendMessage("ERROR!"); + return; + } + destX = destX - 8 * c.getMapRegionX(); + destY = destY - 8 * c.getMapRegionY(); + int[][] via = new int[104][104]; + int[][] cost = new int[104][104]; + LinkedList tileQueueX = new LinkedList(); + LinkedList tileQueueY = new LinkedList(); + for (int xx = 0; xx < 104; xx++) { + for (int yy = 0; yy < 104; yy++) { + cost[xx][yy] = 99999999; + } + } + int curX = c.getLocalX(); + int curY = c.getLocalY(); + via[curX][curY] = 99; + cost[curX][curY] = 0; + int tail = 0; + tileQueueX.add(curX); + tileQueueY.add(curY); + boolean foundPath = false; + int pathLength = 4000; + while (tail != tileQueueX.size() && tileQueueX.size() < pathLength) { + curX = tileQueueX.get(tail); + curY = tileQueueY.get(tail); + int curAbsX = c.getMapRegionX() * 8 + curX; + int curAbsY = c.getMapRegionY() * 8 + curY; + if (curX == destX && curY == destY) { + foundPath = true; + break; + } + tail = (tail + 1) % pathLength; + int thisCost = cost[curX][curY] + 1; + if (curY > 0 + && via[curX][curY - 1] == 0 + && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) { + tileQueueX.add(curX); + tileQueueY.add(curY - 1); + via[curX][curY - 1] = 1; + cost[curX][curY - 1] = thisCost; + } + if (curX > 0 + && via[curX - 1][curY] == 0 + && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0) { + tileQueueX.add(curX - 1); + tileQueueY.add(curY); + via[curX - 1][curY] = 2; + cost[curX - 1][curY] = thisCost; + } + if (curY < 104 - 1 + && via[curX][curY + 1] == 0 + && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) { + tileQueueX.add(curX); + tileQueueY.add(curY + 1); + via[curX][curY + 1] = 4; + cost[curX][curY + 1] = thisCost; + } + if (curX < 104 - 1 + && via[curX + 1][curY] == 0 + && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0) { + tileQueueX.add(curX + 1); + tileQueueY.add(curY); + via[curX + 1][curY] = 8; + cost[curX + 1][curY] = thisCost; + } + if (curX > 0 + && curY > 0 + && via[curX - 1][curY - 1] == 0 + && (Region.getClipping(curAbsX - 1, curAbsY - 1, + c.heightLevel) & 0x128010e) == 0 + && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0 + && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) { + tileQueueX.add(curX - 1); + tileQueueY.add(curY - 1); + via[curX - 1][curY - 1] = 3; + cost[curX - 1][curY - 1] = thisCost; + } + if (curX > 0 + && curY < 104 - 1 + && via[curX - 1][curY + 1] == 0 + && (Region.getClipping(curAbsX - 1, curAbsY + 1, + c.heightLevel) & 0x1280138) == 0 + && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0 + && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) { + tileQueueX.add(curX - 1); + tileQueueY.add(curY + 1); + via[curX - 1][curY + 1] = 6; + cost[curX - 1][curY + 1] = thisCost; + } + if (curX < 104 - 1 + && curY > 0 + && via[curX + 1][curY - 1] == 0 + && (Region.getClipping(curAbsX + 1, curAbsY - 1, + c.heightLevel) & 0x1280183) == 0 + && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0 + && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) { + tileQueueX.add(curX + 1); + tileQueueY.add(curY - 1); + via[curX + 1][curY - 1] = 9; + cost[curX + 1][curY - 1] = thisCost; + } + if (curX < 104 - 1 + && curY < 104 - 1 + && via[curX + 1][curY + 1] == 0 + && (Region.getClipping(curAbsX + 1, curAbsY + 1, + c.heightLevel) & 0x12801e0) == 0 + && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0 + && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) { + tileQueueX.add(curX + 1); + tileQueueY.add(curY + 1); + via[curX + 1][curY + 1] = 12; + cost[curX + 1][curY + 1] = thisCost; + } + } + if (!foundPath) { + if (moveNear) { + int i_223_ = 1000; + int thisCost = 100; + int i_225_ = 10; + for (int x = destX - i_225_; x <= destX + i_225_; x++) { + for (int y = destY - i_225_; y <= destY + i_225_; y++) { + if (x >= 0 && y >= 0 && x < 104 && y < 104 + && cost[x][y] < 100) { + int i_228_ = 0; + if (x < destX) { + i_228_ = destX - x; + } else if (x > destX + xLength - 1) { + i_228_ = x - (destX + xLength - 1); + } + int i_229_ = 0; + if (y < destY) { + i_229_ = destY - y; + } else if (y > destY + yLength - 1) { + i_229_ = y - (destY + yLength - 1); + } + int i_230_ = i_228_ * i_228_ + i_229_ * i_229_; + if (i_230_ < i_223_ || i_230_ == i_223_ + && cost[x][y] < thisCost) { + i_223_ = i_230_; + thisCost = cost[x][y]; + curX = x; + curY = y; + } + } + } + } + if (i_223_ == 1000) { + return; + } + } else { + return; + } + } + tail = 0; + tileQueueX.set(tail, curX); + tileQueueY.set(tail++, curY); + int l5; + for (int j5 = l5 = via[curX][curY]; curX != c.getLocalX() + || curY != c.getLocalY(); j5 = via[curX][curY]) { + if (j5 != l5) { + l5 = j5; + tileQueueX.set(tail, curX); + tileQueueY.set(tail++, curY); + } + if ((j5 & 2) != 0) { + curX++; + } else if ((j5 & 8) != 0) { + curX--; + } + if ((j5 & 1) != 0) { + curY++; + } else if ((j5 & 4) != 0) { + curY--; + } + } + c.resetWalkingQueue(); + int size = tail--; + int pathX = c.getMapRegionX() * 8 + tileQueueX.get(tail); + int pathY = c.getMapRegionY() * 8 + tileQueueY.get(tail); + c.addToWalkingQueue(localize(pathX, c.getMapRegionX()), + localize(pathY, c.getMapRegionY())); + for (int i = 1; i < size; i++) { + tail--; + pathX = c.getMapRegionX() * 8 + tileQueueX.get(tail); + pathY = c.getMapRegionY() * 8 + tileQueueY.get(tail); + c.addToWalkingQueue(localize(pathX, c.getMapRegionX()), + localize(pathY, c.getMapRegionY())); + } + } + + public int localize(int x, int mapRegion) { + return x - 8 * mapRegion; + } + +} diff --git a/2006Redone Server/src/redone/world/clip/Region.java b/2006Redone Server/src/redone/world/clip/Region.java new file mode 100644 index 00000000..ed8460c8 --- /dev/null +++ b/2006Redone Server/src/redone/world/clip/Region.java @@ -0,0 +1,540 @@ +package redone.world.clip; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.zip.GZIPInputStream; + +import redone.game.objects.Objects; + +public class Region { + + private ArrayList realObjects = new ArrayList(); + + public static Region getRegion(int x, int y) { + int regionX = x >> 3; + int regionY = y >> 3; + int regionId = (regionX / 8 << 8) + regionY / 8; + for (Region region : regions) { + if (region.id() == regionId) { + return region; + } + } + return null; + } + + public static boolean blockedShot(int x, int y, int z) { + return (getClipping(x, y, z) & 0x20000) == 0; + } + + public static boolean objectExists(int id, int x, int y, int z) { + Region r = getRegion(x, y); + if (r == null) + return false; + for (Objects o : r.realObjects) { + if (o.objectId == id) { + if (o.objectX == x && o.objectY == y && o.objectHeight == z) { + return true; + } + } + } + return false; + } + + private void addClip(int x, int y, int height, int shift) { + int regionAbsX = (id >> 8) * 64; + int regionAbsY = (id & 0xff) * 64; + if (clips[height] == null) { + clips[height] = new int[64][64]; + } + clips[height][x - regionAbsX][y - regionAbsY] |= shift; + } + + public static boolean canMove(int startX, int startY, int endX, int endY, int height, int xLength, int yLength) { + int diffX = endX - startX; + int diffY = endY - startY; + int max = Math.max(Math.abs(diffX), Math.abs(diffY)); + for (int ii = 0; ii < max; ii++) { + int currentX = endX - diffX; + int currentY = endY - diffY; + for (int i = 0; i < xLength; i++) { + for (int i2 = 0; i2 < yLength; i2++) + if (diffX < 0 && diffY < 0) { + if ((getClipping((currentX + i) - 1, + (currentY + i2) - 1, height) & 0x128010e) != 0 + || (getClipping((currentX + i) - 1, currentY + + i2, height) & 0x1280108) != 0 + || (getClipping(currentX + i, + (currentY + i2) - 1, height) & 0x1280102) != 0) + return false; + } else if (diffX > 0 && diffY > 0) { + if ((getClipping(currentX + i + 1, currentY + i2 + 1, + height) & 0x12801e0) != 0 + || (getClipping(currentX + i + 1, + currentY + i2, height) & 0x1280180) != 0 + || (getClipping(currentX + i, + currentY + i2 + 1, height) & 0x1280120) != 0) + return false; + } else if (diffX < 0 && diffY > 0) { + if ((getClipping((currentX + i) - 1, currentY + i2 + 1, + height) & 0x1280138) != 0 + || (getClipping((currentX + i) - 1, currentY + + i2, height) & 0x1280108) != 0 + || (getClipping(currentX + i, + currentY + i2 + 1, height) & 0x1280120) != 0) + return false; + } else if (diffX > 0 && diffY < 0) { + if ((getClipping(currentX + i + 1, (currentY + i2) - 1, + height) & 0x1280183) != 0 + || (getClipping(currentX + i + 1, + currentY + i2, height) & 0x1280180) != 0 + || (getClipping(currentX + i, + (currentY + i2) - 1, height) & 0x1280102) != 0) + return false; + } else if (diffX > 0 && diffY == 0) { + if ((getClipping(currentX + i + 1, currentY + i2, + height) & 0x1280180) != 0) + return false; + } else if (diffX < 0 && diffY == 0) { + if ((getClipping((currentX + i) - 1, currentY + i2, + height) & 0x1280108) != 0) + return false; + } else if (diffX == 0 && diffY > 0) { + if ((getClipping(currentX + i, currentY + i2 + 1, + height) & 0x1280120) != 0) + return false; + } else if (diffX == 0 + && diffY < 0 + && (getClipping(currentX + i, (currentY + i2) - 1, + height) & 0x1280102) != 0) + return false; + + } + + if (diffX < 0) + diffX++; + else if (diffX > 0) + diffX--; + if (diffY < 0) + diffY++; + else if (diffY > 0) + diffY--; + } + + return true; + } + + private int getClip(int x, int y, int height) { + int regionAbsX = (id >> 8) * 64; + int regionAbsY = (id & 0xff) * 64; + if (clips[height] == null) { + return 0; + } + return clips[height][x - regionAbsX][y - regionAbsY]; + } + + private static void addClipping(int x, int y, int height, int shift) { + int regionX = x >> 3; + int regionY = y >> 3; + int regionId = (regionX / 8 << 8) + regionY / 8; + for (Region r : regions) { + if (r.id() == regionId) { + r.addClip(x, y, height, shift); + break; + } + } + } + + private static Region[] regions; + private final int id; + private final int[][][] clips = new int[4][][]; + private boolean members = false; + + public Region(int id, boolean members) { + this.id = id; + this.members = members; + } + + public int id() { + return id; + } + + public boolean members() { + return members; + } + + public static boolean isMembers(int x, int y, int height) { + if (x >= 3272 && x <= 3320 && y >= 2752 && y <= 2809) { + return false; + } + if (x >= 2640 && x <= 2677 && y >= 2638 && y <= 2679) { + return false; + } + int regionX = x >> 3; + int regionY = y >> 3; + int regionId = (regionX / 8 << 8) + regionY / 8; + for (Region r : regions) { + if (r.id() == regionId) { + return r.members(); + } + } + return false; + } + + private static void addClippingForVariableObject(int x, int y, int height, + int type, int direction, boolean flag) { + if (type == 0) { + if (direction == 0) { + addClipping(x, y, height, 128); + addClipping(x - 1, y, height, 8); + } else if (direction == 1) { + addClipping(x, y, height, 2); + addClipping(x, y + 1, height, 32); + } else if (direction == 2) { + addClipping(x, y, height, 8); + addClipping(x + 1, y, height, 128); + } else if (direction == 3) { + addClipping(x, y, height, 32); + addClipping(x, y - 1, height, 2); + } + } else if (type == 1 || type == 3) { + if (direction == 0) { + addClipping(x, y, height, 1); + addClipping(x - 1, y, height, 16); + } else if (direction == 1) { + addClipping(x, y, height, 4); + addClipping(x + 1, y + 1, height, 64); + } else if (direction == 2) { + addClipping(x, y, height, 16); + addClipping(x + 1, y - 1, height, 1); + } else if (direction == 3) { + addClipping(x, y, height, 64); + addClipping(x - 1, y - 1, height, 4); + } + } else if (type == 2) { + if (direction == 0) { + addClipping(x, y, height, 130); + addClipping(x - 1, y, height, 8); + addClipping(x, y + 1, height, 32); + } else if (direction == 1) { + addClipping(x, y, height, 10); + addClipping(x, y + 1, height, 32); + addClipping(x + 1, y, height, 128); + } else if (direction == 2) { + addClipping(x, y, height, 40); + addClipping(x + 1, y, height, 128); + addClipping(x, y - 1, height, 2); + } else if (direction == 3) { + addClipping(x, y, height, 160); + addClipping(x, y - 1, height, 2); + addClipping(x - 1, y, height, 8); + } + } + if (flag) { + if (type == 0) { + if (direction == 0) { + addClipping(x, y, height, 65536); + addClipping(x - 1, y, height, 4096); + } else if (direction == 1) { + addClipping(x, y, height, 1024); + addClipping(x, y + 1, height, 16384); + } else if (direction == 2) { + addClipping(x, y, height, 4096); + addClipping(x + 1, y, height, 65536); + } else if (direction == 3) { + addClipping(x, y, height, 16384); + addClipping(x, y - 1, height, 1024); + } + } + if (type == 1 || type == 3) { + if (direction == 0) { + addClipping(x, y, height, 512); + addClipping(x - 1, y + 1, height, 8192); + } else if (direction == 1) { + addClipping(x, y, height, 2048); + addClipping(x + 1, y + 1, height, 32768); + } else if (direction == 2) { + addClipping(x, y, height, 8192); + addClipping(x + 1, y + 1, height, 512); + } else if (direction == 3) { + addClipping(x, y, height, 32768); + addClipping(x - 1, y - 1, height, 2048); + } + } else if (type == 2) { + if (direction == 0) { + addClipping(x, y, height, 66560); + addClipping(x - 1, y, height, 4096); + addClipping(x, y + 1, height, 16384); + } else if (direction == 1) { + addClipping(x, y, height, 5120); + addClipping(x, y + 1, height, 16384); + addClipping(x + 1, y, height, 65536); + } else if (direction == 2) { + addClipping(x, y, height, 20480); + addClipping(x + 1, y, height, 65536); + addClipping(x, y - 1, height, 1024); + } else if (direction == 3) { + addClipping(x, y, height, 81920); + addClipping(x, y - 1, height, 1024); + addClipping(x - 1, y, height, 4096); + } + } + } + } + + private static void addClippingForSolidObject(int x, int y, int height, + int xLength, int yLength, boolean flag) { + int clipping = 256; + if (flag) { + clipping += 0x20000; + } + for (int i = x; i < x + xLength; i++) { + for (int i2 = y; i2 < y + yLength; i2++) { + addClipping(i, i2, height, clipping); + } + } + } + + public static void addObject(int objectId, int x, int y, int height, int type, int direction, boolean startUp) { + if (ObjectDef.getObjectDef(objectId) == null) { + } + int xLength; + int yLength; + if (direction != 1 && direction != 3) { + xLength = ObjectDef.getObjectDef(objectId).xLength(); + yLength = ObjectDef.getObjectDef(objectId).yLength(); + } else { + xLength = ObjectDef.getObjectDef(objectId).yLength(); + yLength = ObjectDef.getObjectDef(objectId).xLength(); + } + if (type == 22) { + if (ObjectDef.getObjectDef(objectId).hasActions() + && ObjectDef.getObjectDef(objectId).aBoolean767()) { + addClipping(x, y, height, 0x200000); + } + } else if (type >= 9) { + if (ObjectDef.getObjectDef(objectId).aBoolean767()) { + addClippingForSolidObject(x, y, height, xLength, yLength, + ObjectDef.getObjectDef(objectId).solid()); + } + } else if (type >= 0 && type <= 3) { + if (ObjectDef.getObjectDef(objectId).aBoolean767()) { + addClippingForVariableObject(x, y, height, type, direction, + ObjectDef.getObjectDef(objectId).solid()); + } + } + Region r = getRegion(x, y); + if (r != null) { + if (startUp) + r.realObjects.add(new Objects(objectId, x, y, height, direction, type, 0)); + else if (!objectExists(objectId, x, y, height)) + r.realObjects.add(new Objects(objectId, x, y, height, direction, type, 0)); + } + } + + public static int getClipping(int x, int y, int height) { + if (height > 3) { + height = 0; + } + int regionX = x >> 3; + int regionY = y >> 3; + int regionId = (regionX / 8 << 8) + regionY / 8; + for (Region r : regions) { + if (r.id() == regionId) { + return r.getClip(x, y, height); + } + } + return 0; + } + + public static boolean getClipping(int x, int y, int height, int moveTypeX, + int moveTypeY) { + try { + if (height > 3) { + height = 0; + } + int checkX = x + moveTypeX; + int checkY = y + moveTypeY; + if (moveTypeX == -1 && moveTypeY == 0) { + return (getClipping(x, y, height) & 0x1280108) == 0; + } else if (moveTypeX == 1 && moveTypeY == 0) { + return (getClipping(x, y, height) & 0x1280180) == 0; + } else if (moveTypeX == 0 && moveTypeY == -1) { + return (getClipping(x, y, height) & 0x1280102) == 0; + } else if (moveTypeX == 0 && moveTypeY == 1) { + return (getClipping(x, y, height) & 0x1280120) == 0; + } else if (moveTypeX == -1 && moveTypeY == -1) { + return (getClipping(x, y, height) & 0x128010e) == 0 + && (getClipping(checkX - 1, checkY, height) & 0x1280108) == 0 + && (getClipping(checkX - 1, checkY, height) & 0x1280102) == 0; + } else if (moveTypeX == 1 && moveTypeY == -1) { + return (getClipping(x, y, height) & 0x1280183) == 0 + && (getClipping(checkX + 1, checkY, height) & 0x1280180) == 0 + && (getClipping(checkX, checkY - 1, height) & 0x1280102) == 0; + } else if (moveTypeX == -1 && moveTypeY == 1) { + return (getClipping(x, y, height) & 0x1280138) == 0 + && (getClipping(checkX - 1, checkY, height) & 0x1280108) == 0 + && (getClipping(checkX, checkY + 1, height) & 0x1280120) == 0; + } else if (moveTypeX == 1 && moveTypeY == 1) { + return (getClipping(x, y, height) & 0x12801e0) == 0 + && (getClipping(checkX + 1, checkY, height) & 0x1280180) == 0 + && (getClipping(checkX, checkY + 1, height) & 0x1280120) == 0; + } else { + System.out.println("[FATAL ERROR]: At getClipping: " + x + ", " + + y + ", " + height + ", " + moveTypeX + ", " + + moveTypeY); + return false; + } + } catch (Exception e) { + return true; + } + } + + public static void load() { + try { + File f = new File("./Data/world/map_index"); + byte[] buffer = new byte[(int) f.length()]; + DataInputStream dis = new DataInputStream(new FileInputStream(f)); + dis.readFully(buffer); + dis.close(); + ByteStream in = new ByteStream(buffer); + int size = in.length() / 7; + regions = new Region[size]; + int[] regionIds = new int[size]; + int[] mapGroundFileIds = new int[size]; + int[] mapObjectsFileIds = new int[size]; + boolean[] isMembers = new boolean[size]; + for (int i = 0; i < size; i++) { + regionIds[i] = in.getUShort(); + mapGroundFileIds[i] = in.getUShort(); + mapObjectsFileIds[i] = in.getUShort(); + isMembers[i] = in.getUByte() == 0; + } + for (int i = 0; i < size; i++) { + regions[i] = new Region(regionIds[i], isMembers[i]); + } + for (int i = 0; i < size; i++) { + byte[] file1 = getBuffer(new File("./Data/world/map/" + + mapObjectsFileIds[i] + ".gz")); + byte[] file2 = getBuffer(new File("./Data/world/map/" + + mapGroundFileIds[i] + ".gz")); + if (file1 == null || file2 == null) { + continue; + } + try { + loadMaps(regionIds[i], new ByteStream(file1), + new ByteStream(file2)); + } catch (Exception e) { + System.out.println("Error loading map region: " + + regionIds[i]); + } + } + System.out.println("[Region] DONE LOADING REGION CONFIGURATIONS"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void loadMaps(int regionId, ByteStream str1, ByteStream str2) { + int absX = (regionId >> 8) * 64; + int absY = (regionId & 0xff) * 64; + int[][][] someArray = new int[4][64][64]; + for (int i = 0; i < 4; i++) { + for (int i2 = 0; i2 < 64; i2++) { + for (int i3 = 0; i3 < 64; i3++) { + while (true) { + int v = str2.getUByte(); + if (v == 0) { + break; + } else if (v == 1) { + str2.skip(1); + break; + } else if (v <= 49) { + str2.skip(1); + } else if (v <= 81) { + someArray[i][i2][i3] = v - 49; + } + } + } + } + } + for (int i = 0; i < 4; i++) { + for (int i2 = 0; i2 < 64; i2++) { + for (int i3 = 0; i3 < 64; i3++) { + if ((someArray[i][i2][i3] & 1) == 1) { + int height = i; + if ((someArray[1][i2][i3] & 2) == 2) { + height--; + } + if (height >= 0 && height <= 3) { + addClipping(absX + i2, absY + i3, height, 0x200000); + } + } + } + } + } + int objectId = -1; + int incr; + while ((incr = str1.getUSmart()) != 0) { + objectId += incr; + int location = 0; + int incr2; + while ((incr2 = str1.getUSmart()) != 0) { + location += incr2 - 1; + int localX = location >> 6 & 0x3f; + int localY = location & 0x3f; + int height = location >> 12; + int objectData = str1.getUByte(); + int type = objectData >> 2; + int direction = objectData & 0x3; + if (localX < 0 || localX >= 64 || localY < 0 || localY >= 64) { + continue; + } + if ((someArray[1][localX][localY] & 2) == 2) { + height--; + } + if (height >= 0 && height <= 3) { + addObject(objectId, absX + localX, absY + localY, height, + type, direction, false); + } + } + } + } + + public static byte[] getBuffer(File f) throws Exception { + if (!f.exists()) { + return null; + } + byte[] buffer = new byte[(int) f.length()]; + DataInputStream dis = new DataInputStream(new FileInputStream(f)); + dis.readFully(buffer); + dis.close(); + byte[] gzipInputBuffer = new byte[999999]; + int bufferlength = 0; + GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream( + buffer)); + do { + if (bufferlength == gzipInputBuffer.length) { + System.out + .println("Error inflating data.\nGZIP buffer overflow."); + break; + } + int readByte = gzip.read(gzipInputBuffer, bufferlength, + gzipInputBuffer.length - bufferlength); + if (readByte == -1) { + break; + } + bufferlength += readByte; + } while (true); + byte[] inflated = new byte[bufferlength]; + System.arraycopy(gzipInputBuffer, 0, inflated, 0, bufferlength); + buffer = inflated; + if (buffer.length < 10) { + return null; + } + return buffer; + } + +} diff --git a/2006Redone file_server/.classpath b/2006Redone file_server/.classpath new file mode 100644 index 00000000..a5008158 --- /dev/null +++ b/2006Redone file_server/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/2006Redone file_server/.project b/2006Redone file_server/.project new file mode 100644 index 00000000..5bed112b --- /dev/null +++ b/2006Redone file_server/.project @@ -0,0 +1,17 @@ + + + file_server + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/2006Redone file_server/assets/netty-3.6.6.Final.jar b/2006Redone file_server/assets/netty-3.6.6.Final.jar new file mode 100644 index 00000000..35cb0730 Binary files /dev/null and b/2006Redone file_server/assets/netty-3.6.6.Final.jar differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/Constants.class b/2006Redone file_server/bin/org/apollo/jagcached/Constants.class new file mode 100644 index 00000000..ded351ca Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/Constants.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/FileServer.class b/2006Redone file_server/bin/org/apollo/jagcached/FileServer.class new file mode 100644 index 00000000..a6ea7d64 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/FileServer.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/ChannelRequest.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/ChannelRequest.class new file mode 100644 index 00000000..14349d6c Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/ChannelRequest.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/HttpRequestWorker.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/HttpRequestWorker.class new file mode 100644 index 00000000..47dbe5dd Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/HttpRequestWorker.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/JagGrabRequestWorker.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/JagGrabRequestWorker.class new file mode 100644 index 00000000..8d2985f2 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/JagGrabRequestWorker.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/OnDemandRequestWorker.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/OnDemandRequestWorker.class new file mode 100644 index 00000000..f7acf378 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/OnDemandRequestWorker.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestDispatcher.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestDispatcher.class new file mode 100644 index 00000000..9ec03d40 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestDispatcher.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorker.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorker.class new file mode 100644 index 00000000..267aadda Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorker.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorkerPool.class b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorkerPool.class new file mode 100644 index 00000000..c002c1ae Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/dispatch/RequestWorkerPool.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/fs/FileDescriptor.class b/2006Redone file_server/bin/org/apollo/jagcached/fs/FileDescriptor.class new file mode 100644 index 00000000..2894efd0 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/fs/FileDescriptor.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/fs/FileSystemConstants.class b/2006Redone file_server/bin/org/apollo/jagcached/fs/FileSystemConstants.class new file mode 100644 index 00000000..487cecce Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/fs/FileSystemConstants.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/fs/Index.class b/2006Redone file_server/bin/org/apollo/jagcached/fs/Index.class new file mode 100644 index 00000000..39196286 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/fs/Index.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/fs/IndexedFileSystem.class b/2006Redone file_server/bin/org/apollo/jagcached/fs/IndexedFileSystem.class new file mode 100644 index 00000000..f4224399 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/fs/IndexedFileSystem.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/FileServerHandler.class b/2006Redone file_server/bin/org/apollo/jagcached/net/FileServerHandler.class new file mode 100644 index 00000000..5a2ce12a Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/FileServerHandler.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/HttpPipelineFactory.class b/2006Redone file_server/bin/org/apollo/jagcached/net/HttpPipelineFactory.class new file mode 100644 index 00000000..4d8beee7 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/HttpPipelineFactory.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/JagGrabPipelineFactory.class b/2006Redone file_server/bin/org/apollo/jagcached/net/JagGrabPipelineFactory.class new file mode 100644 index 00000000..9feca114 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/JagGrabPipelineFactory.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/NetworkConstants.class b/2006Redone file_server/bin/org/apollo/jagcached/net/NetworkConstants.class new file mode 100644 index 00000000..2a0a5c66 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/NetworkConstants.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/OnDemandPipelineFactory.class b/2006Redone file_server/bin/org/apollo/jagcached/net/OnDemandPipelineFactory.class new file mode 100644 index 00000000..83ca9261 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/OnDemandPipelineFactory.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequest.class b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequest.class new file mode 100644 index 00000000..b8c5be46 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequest.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.class new file mode 100644 index 00000000..c17d102b Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponse.class b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponse.class new file mode 100644 index 00000000..ab48fa7c Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponse.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.class new file mode 100644 index 00000000..384cca58 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest$Priority.class b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest$Priority.class new file mode 100644 index 00000000..f60f53d1 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest$Priority.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest.class b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest.class new file mode 100644 index 00000000..4d70a3bc Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequest.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.class new file mode 100644 index 00000000..fbcfc772 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponse.class b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponse.class new file mode 100644 index 00000000..4affeedf Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponse.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.class new file mode 100644 index 00000000..302e44a7 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequest.class b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequest.class new file mode 100644 index 00000000..e9bdba1e Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequest.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequestDecoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequestDecoder.class new file mode 100644 index 00000000..3b8b6e92 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceRequestDecoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponse.class b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponse.class new file mode 100644 index 00000000..241b170b Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponse.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponseEncoder.class b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponseEncoder.class new file mode 100644 index 00000000..0feed175 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/net/service/ServiceResponseEncoder.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/resource/CombinedResourceProvider.class b/2006Redone file_server/bin/org/apollo/jagcached/resource/CombinedResourceProvider.class new file mode 100644 index 00000000..91785aa6 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/resource/CombinedResourceProvider.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/resource/HypertextResourceProvider.class b/2006Redone file_server/bin/org/apollo/jagcached/resource/HypertextResourceProvider.class new file mode 100644 index 00000000..4c1c9282 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/resource/HypertextResourceProvider.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/resource/ResourceProvider.class b/2006Redone file_server/bin/org/apollo/jagcached/resource/ResourceProvider.class new file mode 100644 index 00000000..e410144d Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/resource/ResourceProvider.class differ diff --git a/2006Redone file_server/bin/org/apollo/jagcached/resource/VirtualResourceProvider.class b/2006Redone file_server/bin/org/apollo/jagcached/resource/VirtualResourceProvider.class new file mode 100644 index 00000000..8f6a56a7 Binary files /dev/null and b/2006Redone file_server/bin/org/apollo/jagcached/resource/VirtualResourceProvider.class differ diff --git a/2006Redone file_server/cache/main_file_cache.dat b/2006Redone file_server/cache/main_file_cache.dat new file mode 100644 index 00000000..f78a5053 Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.dat differ diff --git a/2006Redone file_server/cache/main_file_cache.idx0 b/2006Redone file_server/cache/main_file_cache.idx0 new file mode 100644 index 00000000..7785d1ea Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.idx0 differ diff --git a/2006Redone file_server/cache/main_file_cache.idx1 b/2006Redone file_server/cache/main_file_cache.idx1 new file mode 100644 index 00000000..0980a30d Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.idx1 differ diff --git a/2006Redone file_server/cache/main_file_cache.idx2 b/2006Redone file_server/cache/main_file_cache.idx2 new file mode 100644 index 00000000..18882060 Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.idx2 differ diff --git a/2006Redone file_server/cache/main_file_cache.idx3 b/2006Redone file_server/cache/main_file_cache.idx3 new file mode 100644 index 00000000..81ae80a1 Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.idx3 differ diff --git a/2006Redone file_server/cache/main_file_cache.idx4 b/2006Redone file_server/cache/main_file_cache.idx4 new file mode 100644 index 00000000..96a7a726 Binary files /dev/null and b/2006Redone file_server/cache/main_file_cache.idx4 differ diff --git a/2006Redone file_server/src/org/apollo/jagcached/Constants.java b/2006Redone file_server/src/org/apollo/jagcached/Constants.java new file mode 100644 index 00000000..cf8e8ee2 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/Constants.java @@ -0,0 +1,26 @@ +package org.apollo.jagcached; + +/** + * 2006Redone Development + * + * @author Ryley Kimmel + * Jul 9, 2013 + * Constants.java + * + * @see java.lang.Object + */ +public final class Constants { + + /** + * The directory of the file system. + */ + public static final String FILE_SYSTEM_DIR = "./cache/"; + + /** + * Default private constructor to prevent instantiation. + */ + private Constants() { + super(); + } + +} \ No newline at end of file diff --git a/2006Redone file_server/src/org/apollo/jagcached/FileServer.java b/2006Redone file_server/src/org/apollo/jagcached/FileServer.java new file mode 100644 index 00000000..fd19a26d --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/FileServer.java @@ -0,0 +1,104 @@ +package org.apollo.jagcached; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.logging.Level; +import java.util.logging.Logger; + + +import org.apollo.jagcached.dispatch.RequestWorkerPool; +import org.apollo.jagcached.net.FileServerHandler; +import org.apollo.jagcached.net.HttpPipelineFactory; +import org.apollo.jagcached.net.JagGrabPipelineFactory; +import org.apollo.jagcached.net.NetworkConstants; +import org.apollo.jagcached.net.OnDemandPipelineFactory; +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; +import org.jboss.netty.util.HashedWheelTimer; +import org.jboss.netty.util.Timer; + +/** + * The core class of the file server. + * @author Graham + */ +public final class FileServer { + + /** + * The logger for this class. + */ + private static final Logger logger = Logger.getLogger(FileServer.class.getName()); + + /** + * The entry point of the application. + * @param args The command-line arguments. + */ + public static void main(String[] args) { + try { + new FileServer().start(); + } catch (Throwable t) { + logger.log(Level.SEVERE, "Error starting server.", t); + } + } + + /** + * The executor service. + */ + private final ExecutorService service = Executors.newCachedThreadPool(); + + /** + * The request worker pool. + */ + private final RequestWorkerPool pool = new RequestWorkerPool(); + + /** + * The file server event handler. + */ + private final FileServerHandler handler = new FileServerHandler(); + + /** + * The timer used for idle checking. + */ + private final Timer timer = new HashedWheelTimer(); + + /** + * Starts the file server. + * @throws Exception if an error occurs. + */ + public void start() throws Exception { + logger.info("Starting workers..."); + pool.start(); + + logger.info("Starting services..."); + try { + start("HTTP", new HttpPipelineFactory(handler, timer), NetworkConstants.HTTP_PORT); + } catch (Throwable t) { + logger.log(Level.SEVERE, "Failed to start HTTP service.", t); + logger.warning("HTTP will be unavailable. JAGGRAB will be used as a fallback by clients but this isn't reccomended!"); + } + start("JAGGRAB", new JagGrabPipelineFactory(handler, timer), NetworkConstants.JAGGRAB_PORT); + start("ondemand", new OnDemandPipelineFactory(handler, timer), NetworkConstants.SERVICE_PORT); + + logger.info("Ready for connections."); + } + + /** + * Starts the specified service. + * @param name The name of the service. + * @param pipelineFactory The pipeline factory. + * @param port The port. + */ + private void start(String name, ChannelPipelineFactory pipelineFactory, int port) { + SocketAddress address = new InetSocketAddress(port); + + logger.info("Binding " + name + " service to " + address + "..."); + + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.setFactory(new NioServerSocketChannelFactory(service, service)); + bootstrap.setPipelineFactory(pipelineFactory); + bootstrap.bind(address); + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/ChannelRequest.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/ChannelRequest.java new file mode 100644 index 00000000..024d2ce4 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/ChannelRequest.java @@ -0,0 +1,58 @@ +package org.apollo.jagcached.dispatch; + +import org.jboss.netty.channel.Channel; + +/** + * A specialised request which contains a channel as well as the request object + * itself. + * @author Graham + * @param The type of request. + */ +public final class ChannelRequest implements Comparable> { + + /** + * The channel. + */ + private final Channel channel; + + /** + * The request. + */ + private final T request; + + /** + * Creates a new channel request. + * @param channel The channel. + * @param request The request. + */ + public ChannelRequest(Channel channel, T request) { + this.channel = channel; + this.request = request; + } + + /** + * Gets the channel. + * @return The channel. + */ + public Channel getChannel() { + return channel; + } + + /** + * Gets the request. + * @return The request. + */ + public T getRequest() { + return request; + } + + @SuppressWarnings("unchecked") + @Override + public int compareTo(ChannelRequest o) { + if (request instanceof Comparable && o.request instanceof Comparable) { + return ((Comparable) request).compareTo(o.request); + } + return 0; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/HttpRequestWorker.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/HttpRequestWorker.java new file mode 100644 index 00000000..e3770f8d --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/HttpRequestWorker.java @@ -0,0 +1,139 @@ +package org.apollo.jagcached.dispatch; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.Date; + +import org.apollo.jagcached.fs.IndexedFileSystem; +import org.apollo.jagcached.resource.CombinedResourceProvider; +import org.apollo.jagcached.resource.HypertextResourceProvider; +import org.apollo.jagcached.resource.ResourceProvider; +import org.apollo.jagcached.resource.VirtualResourceProvider; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelFutureListener; +import org.jboss.netty.handler.codec.http.DefaultHttpResponse; +import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.handler.codec.http.HttpResponse; +import org.jboss.netty.handler.codec.http.HttpResponseStatus; + +/** + * A worker which services HTTP requests. + * @author Graham + */ +public final class HttpRequestWorker extends RequestWorker { + + /** + * The value of the server header. + */ + private static final String SERVER_IDENTIFIER = "JAGeX/3.1"; + + /** + * The directory with web files. + */ + private static final File WWW_DIRECTORY = new File("./data/www/"); + + /** + * The default character set. + */ + private static final Charset CHARACTER_SET = Charset.forName("ISO-8859-1"); + + /** + * Creates the HTTP request worker. + * @param fs The file system. + */ + public HttpRequestWorker(IndexedFileSystem fs) { + super(new CombinedResourceProvider(new VirtualResourceProvider(fs), new HypertextResourceProvider(WWW_DIRECTORY))); + } + + @Override + protected ChannelRequest nextRequest() throws InterruptedException { + return RequestDispatcher.nextHttpRequest(); + } + + @Override + protected void service(ResourceProvider provider, Channel channel, HttpRequest request) throws IOException { + String path = request.getUri(); + ByteBuffer buf = provider.get(path); + + ChannelBuffer wrappedBuf; + HttpResponseStatus status = HttpResponseStatus.OK; + + String mimeType = getMimeType(request.getUri()); + + if (buf == null) { + status = HttpResponseStatus.NOT_FOUND; + wrappedBuf = createErrorPage(status, "The page you requested could not be found."); + mimeType = "text/html"; + } else { + wrappedBuf = ChannelBuffers.wrappedBuffer(buf); + } + + HttpResponse resp = new DefaultHttpResponse(request.getProtocolVersion(), status); + + resp.setHeader("Date", new Date()); + resp.setHeader("Server", SERVER_IDENTIFIER); + resp.setHeader("Content-type", mimeType + ", charset=" + CHARACTER_SET.name()); + resp.setHeader("Cache-control", "no-cache"); + resp.setHeader("Pragma", "no-cache"); + resp.setHeader("Expires", new Date(0)); + resp.setHeader("Connection", "close"); + resp.setHeader("Content-length", wrappedBuf.readableBytes()); + resp.setChunked(false); + resp.setContent(wrappedBuf); + + channel.write(resp).addListener(ChannelFutureListener.CLOSE); + } + + /** + * Gets the MIME type of a file by its name. + * @param name The file name. + * @return The MIME type. + */ + private String getMimeType(String name) { + if (name.endsWith(".htm") || name.endsWith(".html")) { + return "text/html"; + } else if (name.endsWith(".css")) { + return "text/css"; + } else if (name.endsWith(".js")) { + return "text/javascript"; + } else if (name.endsWith(".jpg") || name.endsWith(".jpeg")) { + return "image/jpeg"; + } else if (name.endsWith(".gif")) { + return "image/gif"; + } else if (name.endsWith(".png")) { + return "image/png"; + } else if (name.endsWith(".txt")) { + return "text/plain"; + } + return "application/octect-stream"; + } + + /** + * Creates an error page. + * @param status The HTTP status. + * @param description The error description. + * @return The error page as a buffer. + */ + private ChannelBuffer createErrorPage(HttpResponseStatus status, String description) { + String title = status.getCode() + " " + status.getReasonPhrase(); + + StringBuilder bldr = new StringBuilder(); + + bldr.append(""); + bldr.append(title); + bldr.append("

"); + bldr.append(title); + bldr.append("

"); + bldr.append(description); + bldr.append("


"); + bldr.append(SERVER_IDENTIFIER); + bldr.append(" Server
"); + + return ChannelBuffers.copiedBuffer(bldr.toString(), Charset.defaultCharset()); + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/JagGrabRequestWorker.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/JagGrabRequestWorker.java new file mode 100644 index 00000000..b2222a79 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/JagGrabRequestWorker.java @@ -0,0 +1,46 @@ +package org.apollo.jagcached.dispatch; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import org.apollo.jagcached.fs.IndexedFileSystem; +import org.apollo.jagcached.net.jaggrab.JagGrabRequest; +import org.apollo.jagcached.net.jaggrab.JagGrabResponse; +import org.apollo.jagcached.resource.ResourceProvider; +import org.apollo.jagcached.resource.VirtualResourceProvider; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelFutureListener; + +/** + * A worker which services JAGGRAB requests. + * @author Graham + */ +public final class JagGrabRequestWorker extends RequestWorker { + + /** + * Creates the JAGGRAB request worker. + * @param fs The file system. + */ + public JagGrabRequestWorker(IndexedFileSystem fs) { + super(new VirtualResourceProvider(fs)); + } + + @Override + protected ChannelRequest nextRequest() throws InterruptedException { + return RequestDispatcher.nextJagGrabRequest(); + } + + @Override + protected void service(ResourceProvider provider, Channel channel, JagGrabRequest request) throws IOException { + ByteBuffer buf = provider.get(request.getFilePath()); + if (buf == null) { + channel.close(); + } else { + ChannelBuffer wrapped = ChannelBuffers.wrappedBuffer(buf); + channel.write(new JagGrabResponse(wrapped)).addListener(ChannelFutureListener.CLOSE); + } + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/OnDemandRequestWorker.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/OnDemandRequestWorker.java new file mode 100644 index 00000000..98d4a421 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/OnDemandRequestWorker.java @@ -0,0 +1,61 @@ +package org.apollo.jagcached.dispatch; + +import java.io.IOException; +import java.nio.ByteBuffer; + + +import org.apollo.jagcached.fs.FileDescriptor; +import org.apollo.jagcached.fs.IndexedFileSystem; +import org.apollo.jagcached.net.ondemand.OnDemandRequest; +import org.apollo.jagcached.net.ondemand.OnDemandResponse; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; + +/** + * A worker which services 'on-demand' requests. + * @author Graham + */ +public final class OnDemandRequestWorker extends RequestWorker { + + /** + * The maximum length of a chunk, in bytes. + */ + private static final int CHUNK_LENGTH = 500; + + /** + * Creates the 'on-demand' request worker. + * @param fs The file system. + */ + public OnDemandRequestWorker(IndexedFileSystem fs) { + super(fs); + } + + @Override + protected ChannelRequest nextRequest() throws InterruptedException { + return RequestDispatcher.nextOnDemandRequest(); + } + + @Override + protected void service(IndexedFileSystem fs, Channel channel, OnDemandRequest request) throws IOException { + FileDescriptor desc = request.getFileDescriptor(); + + ByteBuffer buf = fs.getFile(desc); + int length = buf.remaining(); + + for (int chunk = 0; buf.remaining() > 0; chunk++) { + int chunkSize = buf.remaining(); + if (chunkSize > CHUNK_LENGTH) { + chunkSize = CHUNK_LENGTH; + } + + byte[] tmp = new byte[chunkSize]; + buf.get(tmp, 0, tmp.length); + ChannelBuffer chunkData = ChannelBuffers.wrappedBuffer(tmp, 0, chunkSize); + + OnDemandResponse response = new OnDemandResponse(desc, length, chunk, chunkData); + channel.write(response); + } + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestDispatcher.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestDispatcher.java new file mode 100644 index 00000000..da6af96d --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestDispatcher.java @@ -0,0 +1,112 @@ +package org.apollo.jagcached.dispatch; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; + + +import org.apollo.jagcached.net.jaggrab.JagGrabRequest; +import org.apollo.jagcached.net.ondemand.OnDemandRequest; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.handler.codec.http.HttpRequest; + +/** + * A class which dispatches requests to worker threads. + * @author Graham + */ +public final class RequestDispatcher { + + /** + * The maximum size of a queue before requests are rejected. + */ + private static final int MAXIMUM_QUEUE_SIZE = 1024; + + /** + * A queue for pending 'on-demand' requests. + */ + private static final BlockingQueue> onDemandQueue = new PriorityBlockingQueue>(); + + /** + * A queue for pending JAGGRAB requests. + */ + private static final BlockingQueue> jagGrabQueue = new LinkedBlockingQueue>(); + + /** + * A queue for pending HTTP requests. + */ + private static final BlockingQueue> httpQueue = new LinkedBlockingQueue>(); + + /** + * Gets the next 'on-demand' request from the queue, blocking if none are + * available. + * @return The 'on-demand' request. + * @throws InterruptedException if the thread is interrupted. + */ + static ChannelRequest nextOnDemandRequest() throws InterruptedException { + return onDemandQueue.take(); + } + + /** + * Gets the next JAGGRAB request from the queue, blocking if none are + * available. + * @return The JAGGRAB request. + * @throws InterruptedException if the thread is interrupted. + */ + static ChannelRequest nextJagGrabRequest() throws InterruptedException { + return jagGrabQueue.take(); + } + + /** + * Gets the next HTTP request from the queue, blocking if none are + * available. + * @return The HTTP request. + * @throws InterruptedException if the thread is interrupted. + */ + static ChannelRequest nextHttpRequest() throws InterruptedException { + return httpQueue.take(); + } + + /** + * Dispatches an 'on-demand' request. + * @param channel The channel. + * @param request The request. + */ + public static void dispatch(Channel channel, OnDemandRequest request) { + if (onDemandQueue.size() >= MAXIMUM_QUEUE_SIZE) { + channel.close(); + } + onDemandQueue.add(new ChannelRequest(channel, request)); + } + + /** + * Dispatches a JAGGRAB request. + * @param channel The channel. + * @param request The request. + */ + public static void dispatch(Channel channel, JagGrabRequest request) { + if (jagGrabQueue.size() >= MAXIMUM_QUEUE_SIZE) { + channel.close(); + } + jagGrabQueue.add(new ChannelRequest(channel, request)); + } + + /** + * Dispatches a HTTP request. + * @param channel The channel. + * @param request The request. + */ + public static void dispatch(Channel channel, HttpRequest request) { + if (httpQueue.size() >= MAXIMUM_QUEUE_SIZE) { + channel.close(); + } + httpQueue.add(new ChannelRequest(channel, request)); + } + + /** + * Default private constructor to prevent instantiation. + */ + private RequestDispatcher() { + + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorker.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorker.java new file mode 100644 index 00000000..3c14aa94 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorker.java @@ -0,0 +1,90 @@ +package org.apollo.jagcached.dispatch; + +import java.io.IOException; + +import org.jboss.netty.channel.Channel; + +/** + * The base class for request workers. + * @author Graham + * @param The type of request. + * @param

The type of provider. + */ +public abstract class RequestWorker implements Runnable { + + /** + * The resource provider. + */ + private final P provider; + + /** + * An object used for locking checks to see if the worker is running. + */ + private final Object lock = new Object(); + + /** + * A flag indicating if the worker should be running. + */ + private boolean running = true; + + /** + * Creates the request worker with the specified file system. + * @param provider The resource provider. + */ + public RequestWorker(P provider) { + this.provider = provider; + } + + /** + * Stops this worker. The worker's thread may need to be interrupted. + */ + public final void stop() { + synchronized (lock) { + running = false; + } + } + + @Override + public final void run() { + while (true) { + synchronized (lock) { + if (!running) { + break; + } + } + + ChannelRequest request; + try { + request = nextRequest(); + } catch (InterruptedException e) { + continue; + } + + Channel channel = request.getChannel(); + + try { + service(provider, channel, request.getRequest()); + } catch (IOException e) { + e.printStackTrace(); + channel.close(); + } + } + } + + /** + * Gets the next request. + * @return The next request. + * @throws InterruptedException if the thread is interrupted. + */ + protected abstract ChannelRequest nextRequest() throws InterruptedException; + + /** + * Services a request. + * @param provider The resource provider. + * @param channel The channel. + * @param request The request to service. + * @throws IOException if an I/O error occurs. + */ + protected abstract void service(P provider, Channel channel, T request) throws IOException; + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorkerPool.java b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorkerPool.java new file mode 100644 index 00000000..da3856df --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/dispatch/RequestWorkerPool.java @@ -0,0 +1,75 @@ +package org.apollo.jagcached.dispatch; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.apollo.jagcached.Constants; +import org.apollo.jagcached.fs.IndexedFileSystem; + +/** + * A class which manages the pool of request workers. + * @author Graham + * @author Ryley Kimmel + */ +public final class RequestWorkerPool { + + /** + * The number of threads per request type. + */ + private static final int THREADS_PER_REQUEST_TYPE = Runtime.getRuntime().availableProcessors(); + + /** + * The number of request types. + */ + private static final int REQUEST_TYPES = 3; + + /** + * The executor service. + */ + private final ExecutorService service; + + /** + * A list of request workers. + */ + private final List> workers = new ArrayList>(); + + /** + * The request worker pool. + */ + public RequestWorkerPool() { + int totalThreads = REQUEST_TYPES * THREADS_PER_REQUEST_TYPE; + service = Executors.newFixedThreadPool(totalThreads); + } + + /** + * Starts the threads in the pool. + * @throws Exception if the file system cannot be created. + */ + public void start() throws Exception { + File base = new File(Constants.FILE_SYSTEM_DIR); + for (int i = 0; i < THREADS_PER_REQUEST_TYPE; i++) { + workers.add(new JagGrabRequestWorker(new IndexedFileSystem(base, true))); + workers.add(new OnDemandRequestWorker(new IndexedFileSystem(base, true))); + workers.add(new HttpRequestWorker(new IndexedFileSystem(base, true))); + } + + for (RequestWorker worker : workers) { + service.submit(worker); + } + } + + /** + * Stops the threads in the pool. + */ + public void stop() { + for (RequestWorker worker : workers) { + worker.stop(); + } + + service.shutdownNow(); + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/fs/FileDescriptor.java b/2006Redone file_server/src/org/apollo/jagcached/fs/FileDescriptor.java new file mode 100644 index 00000000..64587343 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/fs/FileDescriptor.java @@ -0,0 +1,45 @@ +package org.apollo.jagcached.fs; + +/** + * A class which points to a file in the cache. + * @author Graham + */ +public final class FileDescriptor { + + /** + * The file type. + */ + private final int type; + + /** + * The file id. + */ + private final int file; + + /** + * Creates the file descriptor. + * @param type The file type. + * @param file The file id. + */ + public FileDescriptor(int type, int file) { + this.type = type; + this.file = file; + } + + /** + * Gets the file type. + * @return The file type. + */ + public int getType() { + return type; + } + + /** + * Gets the file id. + * @return The file id. + */ + public int getFile() { + return file; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/fs/FileSystemConstants.java b/2006Redone file_server/src/org/apollo/jagcached/fs/FileSystemConstants.java new file mode 100644 index 00000000..d9c9f1aa --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/fs/FileSystemConstants.java @@ -0,0 +1,46 @@ +package org.apollo.jagcached.fs; + +/** + * Holds file system related constants. + * @author Graham + */ +public final class FileSystemConstants { + + /** + * The number of caches. + */ + public static final int CACHE_COUNT = 5; + + /** + * The number of archives in cache 0. + */ + public static final int ARCHIVE_COUNT = 9; + + /** + * The size of an index. + */ + public static final int INDEX_SIZE = 6; + + /** + * The size of a header. + */ + public static final int HEADER_SIZE = 8; + + /** + * The size of a chunk. + */ + public static final int CHUNK_SIZE = 512; + + /** + * The size of a block. + */ + public static final int BLOCK_SIZE = HEADER_SIZE + CHUNK_SIZE; + + /** + * Default private constructor to prevent instantiation. + */ + private FileSystemConstants() { + + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/fs/Index.java b/2006Redone file_server/src/org/apollo/jagcached/fs/Index.java new file mode 100644 index 00000000..647f8fe1 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/fs/Index.java @@ -0,0 +1,62 @@ +package org.apollo.jagcached.fs; + +/** + * An {@link Index} points to a file in the {@code main_file_cache.dat} file. + * @author Graham + */ +public final class Index { + + /** + * Decodes a buffer into an index. + * @param buffer The buffer. + * @return The decoded {@link Index}. + * @throws IllegalArgumentException if the buffer length is invalid. + */ + public static Index decode(byte[] buffer) { + if (buffer.length != FileSystemConstants.INDEX_SIZE) { + throw new IllegalArgumentException("Incorrect buffer length."); + } + + int size = ((buffer[0] & 0xFF) << 16) | ((buffer[1] & 0xFF) << 8) | (buffer[2] & 0xFF); + int block = ((buffer[3] & 0xFF) << 16) | ((buffer[4] & 0xFF) << 8) | (buffer[5] & 0xFF); + + return new Index(size, block); + } + + /** + * The size of the file. + */ + private final int size; + + /** + * The first block of the file. + */ + private final int block; + + /** + * Creates the index. + * @param size The size of the file. + * @param block The first block of the file. + */ + public Index(int size, int block) { + this.size = size; + this.block = block; + } + + /** + * Gets the size of the file. + * @return The size of the file. + */ + public int getSize() { + return size; + } + + /** + * Gets the first block of the file. + * @return The first block of the file. + */ + public int getBlock() { + return block; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/fs/IndexedFileSystem.java b/2006Redone file_server/src/org/apollo/jagcached/fs/IndexedFileSystem.java new file mode 100644 index 00000000..995d48bf --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/fs/IndexedFileSystem.java @@ -0,0 +1,289 @@ +package org.apollo.jagcached.fs; + +import java.io.Closeable; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.util.zip.CRC32; + +/** + * A file system based on top of the operating system's file system. It + * consists of a data file and index files. Index files point to blocks in the + * data file, which contains the actual data. + * @author Graham + * @author Ryley Kimmel + */ +public final class IndexedFileSystem implements Closeable { + + /** + * Read only flag. + */ + private final boolean readOnly; + + /** + * The index files. + */ + private RandomAccessFile[] indices = new RandomAccessFile[256]; + + /** + * The data file. + */ + private RandomAccessFile data; + + /** + * The cached CRC table. + */ + private ByteBuffer crcTable; + + /** + * Creates the file system with the specified base directory. + * @param base The base directory. + * @param readOnly A flag indicating if the file system will be read only. + * @throws Exception if the file system is invalid. + */ + public IndexedFileSystem(File base, boolean readOnly) throws Exception { + this.readOnly = readOnly; + detectLayout(base); + } + + /** + * Checks if this {@link IndexedFileSystem} is read only. + * @return {@code true} if so, {@code false} if not. + */ + public boolean isReadOnly() { + return readOnly; + } + + /** + * Automatically detect the layout of the specified directory. + * @param base The base directory. + * @throws Exception if the file system is invalid. + */ + private void detectLayout(File base) throws Exception { + int indexCount = 0; + for (int index = 0; index < indices.length; index++) { + File f = new File(base.getAbsolutePath() + "/main_file_cache.idx" + index); + if (f.exists() && !f.isDirectory()) { + indexCount++; + indices[index] = new RandomAccessFile(f, readOnly ? "r" : "rw"); + } + } + if (indexCount <= 0) { + throw new Exception("No index file(s) present"); + } + + File dataFile = new File(base.getAbsolutePath() + "/main_file_cache.dat"); + if (dataFile.exists() && !dataFile.isDirectory()) { + data = new RandomAccessFile(dataFile, readOnly ? "r" : "rw"); + } else { + throw new Exception("No data file present"); + } + } + + /** + * Gets the index of a file. + * @param fd The {@link FileDescriptor} which points to the file. + * @return The {@link Index}. + * @throws IOException if an I/O error occurs. + */ + private Index getIndex(FileDescriptor fd) throws IOException { + int index = fd.getType(); + if (index < 0 || index >= indices.length) { + throw new IndexOutOfBoundsException(); + } + + byte[] buffer = new byte[FileSystemConstants.INDEX_SIZE]; + RandomAccessFile indexFile = indices[index]; + synchronized (indexFile) { + long ptr = (long) fd.getFile() * (long) FileSystemConstants.INDEX_SIZE; + if (ptr >= 0 && indexFile.length() >= (ptr + FileSystemConstants.INDEX_SIZE)) { + indexFile.seek(ptr); + indexFile.readFully(buffer); + } else { + throw new FileNotFoundException(); + } + } + + return Index.decode(buffer); + } + + /** + * Gets the number of files with the specified type. + * @param type The type. + * @return The number of files. + * @throws IOException if an I/O error occurs. + */ + private int getFileCount(int type) throws IOException { + if (type < 0 || type >= indices.length) { + throw new IndexOutOfBoundsException(); + } + + RandomAccessFile indexFile = indices[type]; + synchronized (indexFile) { + return (int) (indexFile.length() / FileSystemConstants.INDEX_SIZE); + } + } + + /** + * Gets the CRC table. + * @return The CRC table. + * @throws IOException if an I/O erorr occurs. + */ + public ByteBuffer getCrcTable() throws IOException { + if (readOnly) { + synchronized (this) { + if (crcTable != null) { + return crcTable.slice(); + } + } + + // the number of archives + int archives = getFileCount(0); + + // the hash + int hash = 1234; + + // the CRCs + int[] crcs = new int[archives]; + + // calculate the CRCs + CRC32 crc32 = new CRC32(); + for (int i = 1; i < crcs.length; i++) { + crc32.reset(); + + ByteBuffer bb = getFile(0, i); + byte[] bytes = new byte[bb.remaining()]; + bb.get(bytes, 0, bytes.length); + crc32.update(bytes, 0, bytes.length); + + crcs[i] = (int) crc32.getValue(); + } + + // hash the CRCs and place them in the buffer + ByteBuffer buf = ByteBuffer.allocate(crcs.length * 4 + 4); + for (int i = 0; i < crcs.length; i++) { + hash = (hash << 1) + crcs[i]; + buf.putInt(crcs[i]); + } + + // place the hash into the buffer + buf.putInt(hash); + buf.flip(); + + synchronized (this) { + crcTable = buf; + return crcTable.slice(); + } + } else { + throw new IOException("cannot get CRC table from a writable file system"); + } + } + + /** + * Gets a file. + * @param type The file type. + * @param file The file id. + * @return A {@link ByteBuffer} which contains the contents of the file. + * @throws IOException if an I/O error occurs. + */ + public ByteBuffer getFile(int type, int file) throws IOException { + return getFile(new FileDescriptor(type, file)); + } + + /** + * Gets a file. + * @param fd The {@link FileDescriptor} which points to the file. + * @return A {@link ByteBuffer} which contains the contents of the file. + * @throws IOException if an I/O error occurs. + */ + public ByteBuffer getFile(FileDescriptor fd) throws IOException { + Index index = getIndex(fd); + ByteBuffer buffer = ByteBuffer.allocate(index.getSize()); + + // calculate some initial values + long ptr = (long) index.getBlock() * (long) FileSystemConstants.BLOCK_SIZE; + int read = 0; + int size = index.getSize(); + int blocks = size / FileSystemConstants.CHUNK_SIZE; + if (size % FileSystemConstants.CHUNK_SIZE != 0) { + blocks++; + } + + for (int i = 0; i < blocks; i++) { + + // read header + byte[] header = new byte[FileSystemConstants.HEADER_SIZE]; + synchronized (data) { + data.seek(ptr); + data.readFully(header); + } + + // increment pointers + ptr += FileSystemConstants.HEADER_SIZE; + + // parse header + int nextFile = ((header[0] & 0xFF) << 8) | (header[1] & 0xFF); + int curChunk = ((header[2] & 0xFF) << 8) | (header[3] & 0xFF); + int nextBlock = ((header[4] & 0xFF) << 16) | ((header[5] & 0xFF) << 8) | (header[6] & 0xFF); + int nextType = header[7] & 0xFF; + + // check expected chunk id is correct + if (i != curChunk) { + throw new IOException("Chunk id mismatch."); + } + + // calculate how much we can read + int chunkSize = size - read; + if (chunkSize > FileSystemConstants.CHUNK_SIZE) { + chunkSize = FileSystemConstants.CHUNK_SIZE; + } + + // read the next chunk and put it in the buffer + byte[] chunk = new byte[chunkSize]; + synchronized (data) { + data.seek(ptr); + data.readFully(chunk); + } + buffer.put(chunk); + + // increment pointers + read += chunkSize; + ptr = (long) nextBlock * (long) FileSystemConstants.BLOCK_SIZE; + + // if we still have more data to read, check the validity of the + // header + if (size > read) { + if (nextType != (fd.getType() + 1)) { + throw new IOException("File type mismatch."); + } + + if (nextFile != fd.getFile()) { + throw new IOException("File id mismatch."); + } + } + } + + buffer.flip(); + return buffer; + } + + @Override + public void close() throws IOException { + if (data != null) { + synchronized (data) { + data.close(); + } + } + + for (RandomAccessFile index : indices) { + if (index != null) { + synchronized (index) { + index.close(); + } + } + } + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/FileServerHandler.java b/2006Redone file_server/src/org/apollo/jagcached/net/FileServerHandler.java new file mode 100644 index 00000000..4383724d --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/FileServerHandler.java @@ -0,0 +1,63 @@ +package org.apollo.jagcached.net; + +import java.util.logging.Level; +import java.util.logging.Logger; + + +import org.apollo.jagcached.FileServer; +import org.apollo.jagcached.dispatch.RequestDispatcher; +import org.apollo.jagcached.net.jaggrab.JagGrabRequest; +import org.apollo.jagcached.net.ondemand.OnDemandRequest; +import org.apollo.jagcached.net.service.ServiceRequest; +import org.apollo.jagcached.net.service.ServiceResponse; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ExceptionEvent; +import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.handler.timeout.IdleStateAwareChannelUpstreamHandler; +import org.jboss.netty.handler.timeout.IdleStateEvent; + +/** + * An {@link IdleStateAwareChannelUpstreamHandler} for the {@link FileServer}. + * @author Graham + */ +public final class FileServerHandler extends IdleStateAwareChannelUpstreamHandler { + + /** + * The logger for this class. + */ + private static final Logger logger = Logger.getLogger(FileServerHandler.class.getName()); + + @Override + public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) throws Exception { + e.getChannel().close(); + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + Object msg = e.getMessage(); + if (msg instanceof ServiceRequest) { + ServiceRequest request = (ServiceRequest) msg; + if (request.getId() != ServiceRequest.SERVICE_ONDEMAND) { + e.getChannel().close(); + } else { + e.getChannel().write(new ServiceResponse()); + } + } else if (msg instanceof OnDemandRequest) { + RequestDispatcher.dispatch(e.getChannel(), (OnDemandRequest) msg); + } else if (msg instanceof JagGrabRequest) { + RequestDispatcher.dispatch(e.getChannel(), (JagGrabRequest) msg); + } else if (msg instanceof HttpRequest) { + RequestDispatcher.dispatch(e.getChannel(), (HttpRequest) msg); + } else { + throw new Exception("unknown message type"); + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { + logger.log(Level.SEVERE, "Exception occured, closing channel...", e.getCause()); + e.getChannel().close(); + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/HttpPipelineFactory.java b/2006Redone file_server/src/org/apollo/jagcached/net/HttpPipelineFactory.java new file mode 100644 index 00000000..66df879d --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/HttpPipelineFactory.java @@ -0,0 +1,61 @@ +package org.apollo.jagcached.net; + +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.Channels; +import org.jboss.netty.handler.codec.http.HttpChunkAggregator; +import org.jboss.netty.handler.codec.http.HttpRequestDecoder; +import org.jboss.netty.handler.codec.http.HttpResponseEncoder; +import org.jboss.netty.handler.timeout.IdleStateHandler; +import org.jboss.netty.util.Timer; + +/** + * A {@link ChannelPipelineFactory} for the HTTP protocol. + * @author Graham + */ +public final class HttpPipelineFactory implements ChannelPipelineFactory { + + /** + * The maximum length of a request, in bytes. + */ + private static final int MAX_REQUEST_LENGTH = 8192; + + /** + * The file server event handler. + */ + private final FileServerHandler handler; + + /** + * The timer used for idle checking. + */ + private final Timer timer; + + /** + * Creates the HTTP pipeline factory. + * @param handler The file server event handler. + * @param timer The timer used for idle checking. + */ + public HttpPipelineFactory(FileServerHandler handler, Timer timer) { + this.handler = handler; + this.timer = timer; + } + + @Override + public ChannelPipeline getPipeline() throws Exception { + ChannelPipeline pipeline = Channels.pipeline(); + + // decoders + pipeline.addLast("decoder", new HttpRequestDecoder()); + pipeline.addLast("chunker", new HttpChunkAggregator(MAX_REQUEST_LENGTH)); + + // encoders + pipeline.addLast("encoder", new HttpResponseEncoder()); + + // handler + pipeline.addLast("timeout", new IdleStateHandler(timer, NetworkConstants.IDLE_TIME, 0, 0)); + pipeline.addLast("handler", handler); + + return pipeline; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/JagGrabPipelineFactory.java b/2006Redone file_server/src/org/apollo/jagcached/net/JagGrabPipelineFactory.java new file mode 100644 index 00000000..5c0f7250 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/JagGrabPipelineFactory.java @@ -0,0 +1,86 @@ +package org.apollo.jagcached.net; + +import java.nio.charset.Charset; + + +import org.apollo.jagcached.net.jaggrab.JagGrabRequestDecoder; +import org.apollo.jagcached.net.jaggrab.JagGrabResponseEncoder; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.Channels; +import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder; +import org.jboss.netty.handler.codec.string.StringDecoder; +import org.jboss.netty.handler.timeout.IdleStateHandler; +import org.jboss.netty.util.Timer; + +/** + * A {@link ChannelPipelineFactory} for the JAGGRAB protocol. + * @author Graham + */ +public final class JagGrabPipelineFactory implements ChannelPipelineFactory { + + /** + * The maximum length of a request, in bytes. + */ + private static final int MAX_REQUEST_LENGTH = 8192; + + /** + * The character set used in the request. + */ + private static final Charset JAGGRAB_CHARSET = Charset.forName("US-ASCII"); + + /** + * A buffer with two line feed (LF) characters in it. + */ + private static final ChannelBuffer DOUBLE_LINE_FEED_DELIMITER = ChannelBuffers.buffer(2); + + /** + * Populates the double line feed buffer. + */ + static { + DOUBLE_LINE_FEED_DELIMITER.writeByte(10); + DOUBLE_LINE_FEED_DELIMITER.writeByte(10); + } + + /** + * The file server event handler. + */ + private final FileServerHandler handler; + + /** + * The timer used for idle checking. + */ + private final Timer timer; + + /** + * Creates a {@code JAGGRAB} pipeline factory. + * @param handler The file server event handler. + * @param timer The timer used for idle checking. + */ + public JagGrabPipelineFactory(FileServerHandler handler, Timer timer) { + this.handler = handler; + this.timer = timer; + } + + @Override + public ChannelPipeline getPipeline() throws Exception { + ChannelPipeline pipeline = Channels.pipeline(); + + // decoders + pipeline.addLast("framer", new DelimiterBasedFrameDecoder(MAX_REQUEST_LENGTH, DOUBLE_LINE_FEED_DELIMITER)); + pipeline.addLast("string-decoder", new StringDecoder(JAGGRAB_CHARSET)); + pipeline.addLast("jaggrab-decoder", new JagGrabRequestDecoder()); + + // encoders + pipeline.addLast("jaggrab-encoder", new JagGrabResponseEncoder()); + + // handler + pipeline.addLast("timeout", new IdleStateHandler(timer, NetworkConstants.IDLE_TIME, 0, 0)); + pipeline.addLast("handler", handler); + + return pipeline; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/NetworkConstants.java b/2006Redone file_server/src/org/apollo/jagcached/net/NetworkConstants.java new file mode 100644 index 00000000..fdd09374 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/NetworkConstants.java @@ -0,0 +1,37 @@ +package org.apollo.jagcached.net; + +/** + * A class which holds network-related constants. + * @author Graham + */ +public final class NetworkConstants { + + /** + * The HTTP port. + */ + public static final int HTTP_PORT = 80; + + /** + * The JAGGRAB port. + */ + public static final int JAGGRAB_PORT = 43595; + + /** + * The service port (which is also used for the 'on-demand' protocol). + */ + public static final int SERVICE_PORT = 43596; + + /** + * The number of seconds a channel can be idle before being closed + * automatically. + */ + public static final int IDLE_TIME = 15; + + /** + * Default private constructor to prevent instantiaton. + */ + private NetworkConstants() { + + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/OnDemandPipelineFactory.java b/2006Redone file_server/src/org/apollo/jagcached/net/OnDemandPipelineFactory.java new file mode 100644 index 00000000..7dcad1e2 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/OnDemandPipelineFactory.java @@ -0,0 +1,59 @@ +package org.apollo.jagcached.net; + + +import org.apollo.jagcached.net.ondemand.OnDemandRequestDecoder; +import org.apollo.jagcached.net.ondemand.OnDemandResponseEncoder; +import org.apollo.jagcached.net.service.ServiceRequestDecoder; +import org.apollo.jagcached.net.service.ServiceResponseEncoder; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.Channels; +import org.jboss.netty.handler.timeout.IdleStateHandler; +import org.jboss.netty.util.Timer; + +/** + * A {@link ChannelPipelineFactory} for the 'on-demand' protocol. + * @author Graham + */ +public final class OnDemandPipelineFactory implements ChannelPipelineFactory { + + /** + * The file server event handler. + */ + private final FileServerHandler handler; + + /** + * The timer used for idle checking. + */ + private final Timer timer; + + /** + * Creates an 'on-demand' pipeline factory. + * @param handler The file server event handler. + * @param timer The timer used for idle checking. + */ + public OnDemandPipelineFactory(FileServerHandler handler, Timer timer) { + this.handler = handler; + this.timer = timer; + } + + @Override + public ChannelPipeline getPipeline() throws Exception { + ChannelPipeline pipeline = Channels.pipeline(); + + // decoders + pipeline.addLast("serviceDecoder", new ServiceRequestDecoder()); + pipeline.addLast("decoder", new OnDemandRequestDecoder()); + + // encoders + pipeline.addLast("serviceEncoder", new ServiceResponseEncoder()); + pipeline.addLast("encoder", new OnDemandResponseEncoder()); + + // handler + pipeline.addLast("timeout", new IdleStateHandler(timer, NetworkConstants.IDLE_TIME, 0, 0)); + pipeline.addLast("handler", handler); + + return pipeline; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequest.java b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequest.java new file mode 100644 index 00000000..fd8328b8 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequest.java @@ -0,0 +1,30 @@ +package org.apollo.jagcached.net.jaggrab; + +/** + * Represents the request for a single file using the JAGGRAB protocol. + * @author Graham + */ +public final class JagGrabRequest { + + /** + * The path to the file. + */ + private final String filePath; + + /** + * Creates the request. + * @param filePath The file path. + */ + public JagGrabRequest(String filePath) { + this.filePath = filePath; + } + + /** + * Gets the file path. + * @return The file path. + */ + public String getFilePath() { + return filePath; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.java new file mode 100644 index 00000000..924d5bac --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabRequestDecoder.java @@ -0,0 +1,27 @@ +package org.apollo.jagcached.net.jaggrab; + +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneDecoder; + +/** + * A {@link OneToOneDecoder} for the JAGGRAB protocol. + * @author Graham + */ +public final class JagGrabRequestDecoder extends OneToOneDecoder { + + @Override + protected Object decode(ChannelHandlerContext ctx, Channel c, Object msg) throws Exception { + if (msg instanceof String) { + String str = ((String) msg); + if (str.startsWith("JAGGRAB /")) { + String filePath = str.substring(8).trim(); + return new JagGrabRequest(filePath); + } else { + throw new Exception("corrupted request line"); + } + } + return msg; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponse.java b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponse.java new file mode 100644 index 00000000..67890ec4 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponse.java @@ -0,0 +1,32 @@ +package org.apollo.jagcached.net.jaggrab; + +import org.jboss.netty.buffer.ChannelBuffer; + +/** + * Represents a single JAGGRAB reponse. + * @author Graham + */ +public final class JagGrabResponse { + + /** + * The file data. + */ + private final ChannelBuffer fileData; + + /** + * Creates the response. + * @param fileData The file data. + */ + public JagGrabResponse(ChannelBuffer fileData) { + this.fileData = fileData; + } + + /** + * Gets the file data. + * @return The file data. + */ + public ChannelBuffer getFileData() { + return fileData; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.java new file mode 100644 index 00000000..c24e1066 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/jaggrab/JagGrabResponseEncoder.java @@ -0,0 +1,22 @@ +package org.apollo.jagcached.net.jaggrab; + +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; + +/** + * A {@link OneToOneEncoder} for the JAGGRAB protocol. + * @author Graham + */ +public final class JagGrabResponseEncoder extends OneToOneEncoder { + + @Override + protected Object encode(ChannelHandlerContext ctx, Channel c, Object msg) throws Exception { + if (msg instanceof JagGrabResponse) { + JagGrabResponse resp = (JagGrabResponse) msg; + return resp.getFileData(); + } + return msg; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequest.java b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequest.java new file mode 100644 index 00000000..0eac7c3f --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequest.java @@ -0,0 +1,109 @@ +package org.apollo.jagcached.net.ondemand; + +import org.apollo.jagcached.fs.FileDescriptor; + +/** + * Represents a single 'on-demand' request. + * @author Graham + * @author Ryley Kimmel + */ +public final class OnDemandRequest implements Comparable { + + /** + * An enumeration containing the different request priorities. + * @author Graham + */ + public enum Priority { + + /** + * High priority - used in-game when data is required immediately but + * has not yet been received. + */ + HIGH, + + /** + * Medium priority - used while loading the 'bare minimum' required to + * run the game. + */ + MEDIUM, + + /** + * Low priority - used when a file is not required urgently. The client + * login screen says "loading extra files.." when low priority loading + * is being performed. + */ + LOW; + + /** + * Converts the integer value to a priority. + * @param v The integer value. + * @return The priority. + * @throws IllegalArgumentException if the value is outside of the + * range 1-3 inclusive. + */ + public static Priority valueOf(int v) { + switch (v) { + case 0: + return HIGH; + case 1: + return MEDIUM; + case 2: + return LOW; + default: + throw new IllegalArgumentException("priority out of range"); + } + } + + } + + /** + * The file descriptor. + */ + private final FileDescriptor fileDescriptor; + + /** + * The request priority. + */ + private final Priority priority; + + /** + * Creates the 'on-demand' request. + * @param fileDescriptor The file descriptor. + * @param priority The priority. + */ + public OnDemandRequest(FileDescriptor fileDescriptor, Priority priority) { + this.fileDescriptor = fileDescriptor; + this.priority = priority; + } + + /** + * Gets the file descriptor. + * @return The file descriptor. + */ + public FileDescriptor getFileDescriptor() { + return fileDescriptor; + } + + /** + * Gets the priority. + * @return The priority. + */ + public Priority getPriority() { + return priority; + } + + @Override + public int compareTo(OnDemandRequest o) { + int thisPriority = priority.ordinal(); + int otherPriority = o.priority.ordinal(); + + if (thisPriority < otherPriority) { + return 1; + } else if (thisPriority == otherPriority) { + return 0; + } else { + return -1; + } + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.java new file mode 100644 index 00000000..130de142 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandRequestDecoder.java @@ -0,0 +1,32 @@ +package org.apollo.jagcached.net.ondemand; + + +import org.apollo.jagcached.fs.FileDescriptor; +import org.apollo.jagcached.net.ondemand.OnDemandRequest.Priority; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.frame.FrameDecoder; + +/** + * A {@link FrameDecoder} for the 'on-demand' protocol. + * @author Graham + */ +public final class OnDemandRequestDecoder extends FrameDecoder { + + @Override + protected Object decode(ChannelHandlerContext ctx, Channel c, ChannelBuffer buf) throws Exception { + if (buf.readableBytes() >= 4) { + int type = buf.readUnsignedByte() + 1; + int file = buf.readUnsignedShort(); + int priority = buf.readUnsignedByte(); + + FileDescriptor desc = new FileDescriptor(type, file); + Priority p = Priority.valueOf(priority); + + return new OnDemandRequest(desc, p); + } + return null; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponse.java b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponse.java new file mode 100644 index 00000000..2d479e69 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponse.java @@ -0,0 +1,79 @@ +package org.apollo.jagcached.net.ondemand; + + +import org.apollo.jagcached.fs.FileDescriptor; +import org.jboss.netty.buffer.ChannelBuffer; + +/** + * Represents a single 'on-demand' response. + * @author Graham + */ +public final class OnDemandResponse { + + /** + * The file descriptor. + */ + private final FileDescriptor fileDescriptor; + + /** + * The file size. + */ + private final int fileSize; + + /** + * The chunk id. + */ + private final int chunkId; + + /** + * The chunk data. + */ + private final ChannelBuffer chunkData; + + /** + * Creates the 'on-demand' response. + * @param fileDescriptor The file descriptor. + * @param fileSize The file size. + * @param chunkId The chunk id. + * @param chunkData The chunk data. + */ + public OnDemandResponse(FileDescriptor fileDescriptor, int fileSize, int chunkId, ChannelBuffer chunkData) { + this.fileDescriptor = fileDescriptor; + this.fileSize = fileSize; + this.chunkId = chunkId; + this.chunkData = chunkData; + } + + /** + * Gets the file descriptor. + * @return The file descriptor. + */ + public FileDescriptor getFileDescriptor() { + return fileDescriptor; + } + + /** + * Gets the file size. + * @return The file size. + */ + public int getFileSize() { + return fileSize; + } + + /** + * Gets the chunk id. + * @return The chunk id. + */ + public int getChunkId() { + return chunkId; + } + + /** + * Gets the chunk data. + * @return The chunk data. + */ + public ChannelBuffer getChunkData() { + return chunkData; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.java new file mode 100644 index 00000000..965a24ba --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/ondemand/OnDemandResponseEncoder.java @@ -0,0 +1,39 @@ +package org.apollo.jagcached.net.ondemand; + + +import org.apollo.jagcached.fs.FileDescriptor; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; + +/** + * A {@link OneToOneEncoder} for the 'on-demand' protocol. + * @author Graham + */ +public final class OnDemandResponseEncoder extends OneToOneEncoder { + + @Override + protected Object encode(ChannelHandlerContext ctx, Channel c, Object msg) throws Exception { + if (msg instanceof OnDemandResponse) { + OnDemandResponse resp = (OnDemandResponse) msg; + + FileDescriptor fileDescriptor = resp.getFileDescriptor(); + int fileSize = resp.getFileSize(); + int chunkId = resp.getChunkId(); + ChannelBuffer chunkData = resp.getChunkData(); + + ChannelBuffer buf = ChannelBuffers.buffer(6 + chunkData.readableBytes()); + buf.writeByte(fileDescriptor.getType() - 1); + buf.writeShort(fileDescriptor.getFile()); + buf.writeShort(fileSize); + buf.writeByte(chunkId); + buf.writeBytes(chunkData); + + return buf; + } + return msg; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequest.java b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequest.java new file mode 100644 index 00000000..36833128 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequest.java @@ -0,0 +1,40 @@ +package org.apollo.jagcached.net.service; + +/** + * Represents a service request message. + * @author Graham + */ +public final class ServiceRequest { + + /** + * The game service id. + */ + public static final int SERVICE_GAME = 14; + + /** + * The 'on-demand' service id. + */ + public static final int SERVICE_ONDEMAND = 15; + + /** + * The service id. + */ + private final int id; + + /** + * Creates a service request. + * @param id The service id. + */ + public ServiceRequest(int id) { + this.id = id; + } + + /** + * Gets the service id. + * @return The service id. + */ + public int getId() { + return id; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequestDecoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequestDecoder.java new file mode 100644 index 00000000..4128c83f --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceRequestDecoder.java @@ -0,0 +1,39 @@ +package org.apollo.jagcached.net.service; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.handler.codec.frame.FrameDecoder; + +/** + * A {@link FrameDecoder} which decodes {@link ServiceRequest} messages. + * @author Graham + */ +public final class ServiceRequestDecoder extends FrameDecoder { + + /** + * Creates the decoder, enabling the 'unfold' mechanism. + */ + public ServiceRequestDecoder() { + super(true); + } + + @Override + protected Object decode(ChannelHandlerContext ctx, Channel c, ChannelBuffer buf) throws Exception { + if (buf.readable()) { + ServiceRequest request = new ServiceRequest(buf.readUnsignedByte()); + + ChannelPipeline pipeline = ctx.getPipeline(); + pipeline.remove(this); + + if (buf.readable()) { + return new Object[] { request, buf.readBytes(buf.readableBytes()) }; + } else { + return request; + } + } + return null; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponse.java b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponse.java new file mode 100644 index 00000000..9648d01e --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponse.java @@ -0,0 +1,9 @@ +package org.apollo.jagcached.net.service; + +/** + * Represents a response to a service request. + * @author Graham + */ +public final class ServiceResponse { + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponseEncoder.java b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponseEncoder.java new file mode 100644 index 00000000..af580379 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/net/service/ServiceResponseEncoder.java @@ -0,0 +1,25 @@ +package org.apollo.jagcached.net.service; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; + +/** + * A {@link OneToOneEncoder} which encodes {@link ServiceResponse} messages. + * @author Graham + */ +public final class ServiceResponseEncoder extends OneToOneEncoder { + + @Override + protected Object encode(ChannelHandlerContext ctx, Channel c, Object msg) throws Exception { + if (msg instanceof ServiceResponse) { + ChannelBuffer buf = ChannelBuffers.buffer(8); + buf.writeLong(0); + return buf; + } + return msg; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/resource/CombinedResourceProvider.java b/2006Redone file_server/src/org/apollo/jagcached/resource/CombinedResourceProvider.java new file mode 100644 index 00000000..d52c55e2 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/resource/CombinedResourceProvider.java @@ -0,0 +1,40 @@ +package org.apollo.jagcached.resource; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * A resource provider composed of multiple resource providers. + * @author Graham Edgecombe + */ +public final class CombinedResourceProvider extends ResourceProvider { + + /** + * An array of resource providers. + */ + private final ResourceProvider[] providers; + + /** + * Creates the combined resource providers. + * @param providers The providers this provider delegates to. + */ + public CombinedResourceProvider(ResourceProvider... providers) { + this.providers = providers; + } + + @Override + public boolean accept(String path) throws IOException { + return true; + } + + @Override + public ByteBuffer get(String path) throws IOException { + for (ResourceProvider provider : providers) { + if (provider.accept(path)) { + return provider.get(path); + } + } + return null; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/resource/HypertextResourceProvider.java b/2006Redone file_server/src/org/apollo/jagcached/resource/HypertextResourceProvider.java new file mode 100644 index 00000000..bbddd593 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/resource/HypertextResourceProvider.java @@ -0,0 +1,64 @@ +package org.apollo.jagcached.resource; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.net.URI; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel.MapMode; + +/** + * A {@link ResourceProvider} which provides additional hypertext resources. + * @author Graham Edgecombe + */ +public final class HypertextResourceProvider extends ResourceProvider { + + /** + * The base directory from which documents are served. + */ + private final File base; + + /** + * Creates a new hypertext resource provider with the specified base + * directory. + * @param base The base directory. + */ + public HypertextResourceProvider(File base) { + this.base = base; + } + + @Override + public boolean accept(String path) throws IOException { + File f = new File(base, path); + URI target = f.toURI().normalize(); + if (target.toASCIIString().startsWith(base.toURI().normalize().toASCIIString())) { + if (f.isDirectory()) { + f = new File(f, "index.html"); + } + return f.exists(); + } + return false; + } + + @Override + public ByteBuffer get(String path) throws IOException { + File f = new File(base, path); + if (f.isDirectory()) { + f = new File(f, "index.html"); + } + if (!f.exists()) { + return null; + } + + RandomAccessFile raf = new RandomAccessFile(f, "r"); + ByteBuffer buf; + try { + buf = raf.getChannel().map(MapMode.READ_ONLY, 0, raf.length()); + } finally { + raf.close(); + } + + return buf; + } + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/resource/ResourceProvider.java b/2006Redone file_server/src/org/apollo/jagcached/resource/ResourceProvider.java new file mode 100644 index 00000000..2a38d407 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/resource/ResourceProvider.java @@ -0,0 +1,30 @@ +package org.apollo.jagcached.resource; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * A class which provides resources. + * @author Graham Edgecombe + */ +public abstract class ResourceProvider { + + /** + * Checks that this provider can fulfil a request to the specified + * resource. + * @param path The path to the resource, e.g. {@code /crc}. + * @return {@code true} if the provider can fulfil a request to the + * resource, {@code false} otherwise. + * @throws IOException if an I/O error occurs. + */ + public abstract boolean accept(String path) throws IOException; + + /** + * Gets a resource by its path. + * @param path The path. + * @return The resource, or {@code null} if it doesn't exist. + * @throws IOException if an I/O error occurs. + */ + public abstract ByteBuffer get(String path) throws IOException; + +} diff --git a/2006Redone file_server/src/org/apollo/jagcached/resource/VirtualResourceProvider.java b/2006Redone file_server/src/org/apollo/jagcached/resource/VirtualResourceProvider.java new file mode 100644 index 00000000..f474adf1 --- /dev/null +++ b/2006Redone file_server/src/org/apollo/jagcached/resource/VirtualResourceProvider.java @@ -0,0 +1,70 @@ +package org.apollo.jagcached.resource; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import org.apollo.jagcached.fs.IndexedFileSystem; + +/** + * A {@link ResourceProvider} which maps virtual resources (such as + * {@code /media}) to files in an {@link IndexedFileSystem}. + * @author Graham Edgecombe + */ +public final class VirtualResourceProvider extends ResourceProvider { + + /** + * An array of valid prefixes. + */ + private static final String[] VALID_PREFIXES = { + "crc", "title", "config", "interface", "media", "versionlist", + "textures", "wordenc", "sounds" + }; + + /** + * The file system. + */ + private final IndexedFileSystem fs; + + /** + * Creates a new virtual resource provider with the specified file system. + * @param fs The file system. + */ + public VirtualResourceProvider(IndexedFileSystem fs) { + this.fs = fs; + } + + @Override + public boolean accept(String path) throws IOException { + for (String prefix : VALID_PREFIXES) { + if (path.startsWith("/" + prefix)) { + return true; + } + } + return false; + } + + @Override + public ByteBuffer get(String path) throws IOException { + if (path.startsWith("/crc")) { + return fs.getCrcTable(); + } else if (path.startsWith("/title")) { + return fs.getFile(0, 1); + } else if (path.startsWith("/config")) { + return fs.getFile(0, 2); + } else if (path.startsWith("/interface")) { + return fs.getFile(0, 3); + } else if (path.startsWith("/media")) { + return fs.getFile(0, 4); + } else if (path.startsWith("/versionlist")) { + return fs.getFile(0, 5); + } else if (path.startsWith("/textures")) { + return fs.getFile(0, 6); + } else if (path.startsWith("/wordenc")) { + return fs.getFile(0, 7); + } else if (path.startsWith("/sounds")) { + return fs.getFile(0, 8); + } + return null; + } + +} diff --git a/2006Redone file_server/start.cmd b/2006Redone file_server/start.cmd new file mode 100644 index 00000000..3f3d19cd --- /dev/null +++ b/2006Redone file_server/start.cmd @@ -0,0 +1,5 @@ +@echo off + +java -cp bin;assets/*; org.apollo.jagcached.FileServer + +pause \ No newline at end of file diff --git a/NOTE.txt b/NOTE.txt new file mode 100644 index 00000000..433fe5ae --- /dev/null +++ b/NOTE.txt @@ -0,0 +1,5 @@ +You must have the file server running if you would like this to work. + +Credits: Mr Extremez (also known as I'm A Boss/Andrew) for server/client work +Dondxon for website work +Anyone else who helped along the way :) \ No newline at end of file